diff --git a/_content/_hak/prc8_en6_top/baseitems.2da b/_content/_hak/prc8_en6_top/baseitems.2da index bc24a8b..b8bc5dc 100644 --- a/_content/_hak/prc8_en6_top/baseitems.2da +++ b/_content/_hak/prc8_en6_top/baseitems.2da @@ -250,8 +250,8 @@ 246 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 247 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 248 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** -249 16989398 craft_scepter 1 3 0x1C030 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** 2 3 **** 1.2 10 255 1 6 1 2 8 1 1 1 16989399 16 8 0 4 3 **** **** **** **** **** **** 4 0 61890 50 1 60 2 **** 1 **** 100 100 0 10 1 43 619 47 657 15 709 495 919 **** **** -250 16989400 magic_scepter 1 3 0x1C030 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** 2 3 **** 1.2 10 255 1 6 1 2 8 1 1 1 16989401 16 8 0 4 3 **** **** **** **** **** **** 4 0 61890 50 1 60 2 **** 1 **** 100 100 0 10 1 43 619 47 657 15 709 495 919 **** **** +249 16989399 crafted_scepter 1 3 0x1C030 1 2 WMgRd 0 1 1 1 it_bag iwmgrd 0 **** 2 3 **** 1.2 10 255 1 6 1 2 8 10 1 1 16989400 16 8 0 4 3 **** **** **** **** **** **** 4 0 16989401 50 1 30 2 **** 1 **** 100 100 0 10 1 43 619 47 657 15 709 495 919 **** **** +250 16989402 crafted_vial 1 2 0x00000 0 0 it_thnmisc 0 1 1 1 it_potion_000 iit_thnmisc_019 0 1 0 **** **** **** 0 255 **** **** **** **** 16 0 1 1 16989403 24 8 0 15 3 **** **** **** **** **** **** 0 0 5470 0 0 3 **** **** 1 **** **** **** **** 0 1 **** **** **** **** **** **** **** **** **** **** 251 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 252 16989220 mundane_herb 1 1 0x00000 0 0 it_herb 0 **** **** **** it_bag iit_herb_000 0 1 0 **** **** **** 0 255 **** **** **** **** 16 1 1 0.36 16989221 2 1 0 9 2 **** **** **** **** **** **** 0 0 5470 0 0 0 **** **** 2 **** **** **** **** 1 1 **** **** **** **** **** **** **** **** **** **** 253 16989222 infused_herb 1 1 0x00000 0 0 it_herb 0 **** **** **** it_bag iit_herb_254 0 1 0 **** **** **** 0 255 **** **** **** **** 16 1 10 0.36 16989223 2 1 0 9 2 **** **** **** **** **** **** 0 0 5470 0 0 0 **** **** 2 **** **** **** **** 1 1 **** **** **** **** **** **** **** **** **** **** diff --git a/_content/_hak/prc8_en6_top/nw_s1_aurablnda.ncs b/_content/_hak/prc8_en6_top/nw_s1_aurablnda.ncs index 432db91..79561ee 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_aurablnda.ncs and b/_content/_hak/prc8_en6_top/nw_s1_aurablnda.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_auracoldc.ncs b/_content/_hak/prc8_en6_top/nw_s1_auracoldc.ncs index ec76ed2..66a4955 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_auracoldc.ncs and b/_content/_hak/prc8_en6_top/nw_s1_auracoldc.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_auraelecc.ncs b/_content/_hak/prc8_en6_top/nw_s1_auraelecc.ncs index 9946158..27ed63d 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_auraelecc.ncs and b/_content/_hak/prc8_en6_top/nw_s1_auraelecc.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_aurafirec.ncs b/_content/_hak/prc8_en6_top/nw_s1_aurafirec.ncs index 04e5de6..4675048 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_aurafirec.ncs and b/_content/_hak/prc8_en6_top/nw_s1_aurafirec.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_auramenca.ncs b/_content/_hak/prc8_en6_top/nw_s1_auramenca.ncs index bb6a07e..57ecf24 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_auramenca.ncs and b/_content/_hak/prc8_en6_top/nw_s1_auramenca.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_aurastuna.ncs b/_content/_hak/prc8_en6_top/nw_s1_aurastuna.ncs index 2ed4901..59f4f7e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_aurastuna.ncs and b/_content/_hak/prc8_en6_top/nw_s1_aurastuna.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_aurauneaa.ncs b/_content/_hak/prc8_en6_top/nw_s1_aurauneaa.ncs index 15c0a96..d385093 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_aurauneaa.ncs and b/_content/_hak/prc8_en6_top/nw_s1_aurauneaa.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltacid.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltacid.ncs index a006de7..0088a67 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltacid.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltacid.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltcharm.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltcharm.ncs index ee3fc53..418fee5 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltcharm.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltcharm.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltchrdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltchrdr.ncs index 097200d..4e1506f 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltchrdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltchrdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltcold.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltcold.ncs index 6cc3bd2..9ea3aab 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltcold.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltcold.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltcondr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltcondr.ncs index 213436a..b93bc02 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltcondr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltcondr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltconf.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltconf.ncs index 86e52ca..d0f135b 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltconf.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltconf.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltdaze.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltdaze.ncs index 568fd65..c5e7ac7 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltdaze.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltdaze.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltdeath.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltdeath.ncs index 0f9ee5c..3d04253 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltdeath.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltdeath.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltdexdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltdexdr.ncs index 26c1006..c3a8197 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltdexdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltdexdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltdomn.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltdomn.ncs index 3f629e6..dc29a45 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltdomn.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltdomn.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltfire.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltfire.ncs index 8ad6012..4f5ceda 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltfire.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltfire.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltintdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltintdr.ncs index 89a4fa2..b4dec97 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltintdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltintdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltknckd.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltknckd.ncs index c54ca6c..9e80433 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltknckd.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltknckd.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltlightn.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltlightn.ncs index f698181..86a52fe 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltlightn.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltlightn.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltlvldr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltlvldr.ncs index 35d17c6..8f8c333 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltlvldr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltlvldr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltparal.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltparal.ncs index 87b8348..934ed17 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltparal.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltparal.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltshards.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltshards.ncs index e0e9c93..c4c852d 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltshards.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltshards.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltslow.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltslow.ncs index 3013dbd..b2d506c 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltslow.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltslow.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltstrdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltstrdr.ncs index 6c5f13c..705711b 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltstrdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltstrdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltstun.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltstun.ncs index d17a3b7..6f42765 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltstun.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltstun.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltweb.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltweb.ncs index a180256..9e25d54 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltweb.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltweb.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_bltwisdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_bltwisdr.ncs index 0c27cfd..67ae448 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_bltwisdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_bltwisdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_coneacid.ncs b/_content/_hak/prc8_en6_top/nw_s1_coneacid.ncs index a0ce5a9..092f07e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_coneacid.ncs and b/_content/_hak/prc8_en6_top/nw_s1_coneacid.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_conecold.ncs b/_content/_hak/prc8_en6_top/nw_s1_conecold.ncs index c29ad24..370d4e8 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_conecold.ncs and b/_content/_hak/prc8_en6_top/nw_s1_conecold.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_coneelec.ncs b/_content/_hak/prc8_en6_top/nw_s1_coneelec.ncs index a1801fa..ed8d425 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_coneelec.ncs and b/_content/_hak/prc8_en6_top/nw_s1_coneelec.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_conesonic.ncs b/_content/_hak/prc8_en6_top/nw_s1_conesonic.ncs index c0b7c52..31b6ef1 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_conesonic.ncs and b/_content/_hak/prc8_en6_top/nw_s1_conesonic.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_dragfear.ncs b/_content/_hak/prc8_en6_top/nw_s1_dragfear.ncs index 498e5cd..bb3dfba 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_dragfear.ncs and b/_content/_hak/prc8_en6_top/nw_s1_dragfear.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_dragfeara.ncs b/_content/_hak/prc8_en6_top/nw_s1_dragfeara.ncs index 449bea2..a9a0644 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_dragfeara.ncs and b/_content/_hak/prc8_en6_top/nw_s1_dragfeara.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazechaos.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazechaos.ncs index 03d29cd..d6d6966 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazechaos.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazechaos.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazecharm.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazecharm.ncs index 61453cb..70c795e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazecharm.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazecharm.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazeconfu.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazeconfu.ncs index 4717ca7..d7f75ad 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazeconfu.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazeconfu.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazedaze.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazedaze.ncs index d0c0660..6c6effd 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazedaze.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazedaze.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazedeath.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazedeath.ncs index 2a4b322..485d930 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazedeath.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazedeath.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazedomn.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazedomn.ncs index fb80db2..d692e52 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazedomn.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazedomn.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazedoom.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazedoom.ncs index fb16b41..73cf849 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazedoom.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazedoom.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazeevil.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazeevil.ncs index cf28567..3650eb4 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazeevil.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazeevil.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazefear.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazefear.ncs index 8a42162..d810a69 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazefear.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazefear.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazegood.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazegood.ncs index 8cf2fa8..817d069 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazegood.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazegood.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazelaw.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazelaw.ncs index a941027..a86a817 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazelaw.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazelaw.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_gazestun.ncs b/_content/_hak/prc8_en6_top/nw_s1_gazestun.ncs index 29d53f0..cb988f8 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_gazestun.ncs and b/_content/_hak/prc8_en6_top/nw_s1_gazestun.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_hndbreath.ncs b/_content/_hak/prc8_en6_top/nw_s1_hndbreath.ncs index eb8c5ad..3094156 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_hndbreath.ncs and b/_content/_hak/prc8_en6_top/nw_s1_hndbreath.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howlconf.ncs b/_content/_hak/prc8_en6_top/nw_s1_howlconf.ncs index f05f586..070703a 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howlconf.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howlconf.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howldaze.ncs b/_content/_hak/prc8_en6_top/nw_s1_howldaze.ncs index ef0f30e..74e7376 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howldaze.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howldaze.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howldeath.ncs b/_content/_hak/prc8_en6_top/nw_s1_howldeath.ncs index c654340..e08447e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howldeath.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howldeath.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howlfear.ncs b/_content/_hak/prc8_en6_top/nw_s1_howlfear.ncs index 97f12af..3272c7e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howlfear.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howlfear.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howlparal.ncs b/_content/_hak/prc8_en6_top/nw_s1_howlparal.ncs index 530f020..d8d618a 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howlparal.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howlparal.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howlsonic.ncs b/_content/_hak/prc8_en6_top/nw_s1_howlsonic.ncs index 876e11f..6b138ef 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howlsonic.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howlsonic.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_howlstun.ncs b/_content/_hak/prc8_en6_top/nw_s1_howlstun.ncs index ac9952b..85cae1a 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_howlstun.ncs and b/_content/_hak/prc8_en6_top/nw_s1_howlstun.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_krenscare.ncs b/_content/_hak/prc8_en6_top/nw_s1_krenscare.ncs index 16c33fd..d7a1ad0 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_krenscare.ncs and b/_content/_hak/prc8_en6_top/nw_s1_krenscare.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_mephsalt.ncs b/_content/_hak/prc8_en6_top/nw_s1_mephsalt.ncs index 724cd1f..804098e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_mephsalt.ncs and b/_content/_hak/prc8_en6_top/nw_s1_mephsalt.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_mephsteam.ncs b/_content/_hak/prc8_en6_top/nw_s1_mephsteam.ncs index f163c72..2999596 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_mephsteam.ncs and b/_content/_hak/prc8_en6_top/nw_s1_mephsteam.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulschrdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulschrdr.ncs index 7448a22..836ae20 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulschrdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulschrdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulscold.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulscold.ncs index 6fdad18..8b2478b 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulscold.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulscold.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulscondr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulscondr.ncs index faef4a5..6310250 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulscondr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulscondr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsdeath.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsdeath.ncs index c7f20c9..d50219b 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsdeath.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsdeath.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsdexdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsdexdr.ncs index 764a28e..85c2d6f 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsdexdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsdexdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulselec.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulselec.ncs index 8be0b10..8bd6d2e 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulselec.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulselec.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsfire.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsfire.ncs index 8563577..3a46954 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsfire.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsfire.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsholy.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsholy.ncs index 8eb4b95..3523891 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsholy.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsholy.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsintdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsintdr.ncs index b04960d..e90d2e6 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsintdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsintdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulslvldr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulslvldr.ncs index 690cfce..13476b3 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulslvldr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulslvldr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsneg.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsneg.ncs index 8123c99..4e2d8ae 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsneg.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsneg.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulsstrdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulsstrdr.ncs index 8953f54..9a53793 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulsstrdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulsstrdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulswind.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulswind.ncs index 88e74ba..3b7bcfe 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulswind.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulswind.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_pulswisdr.ncs b/_content/_hak/prc8_en6_top/nw_s1_pulswisdr.ncs index 7f7cd8a..f16b830 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_pulswisdr.ncs and b/_content/_hak/prc8_en6_top/nw_s1_pulswisdr.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_smokeclaw.ncs b/_content/_hak/prc8_en6_top/nw_s1_smokeclaw.ncs index 93a5c8e..00aaeeb 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_smokeclaw.ncs and b/_content/_hak/prc8_en6_top/nw_s1_smokeclaw.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_stink_a.ncs b/_content/_hak/prc8_en6_top/nw_s1_stink_a.ncs index af2a1d2..a1bda19 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_stink_a.ncs and b/_content/_hak/prc8_en6_top/nw_s1_stink_a.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s1_tyrantfga.ncs b/_content/_hak/prc8_en6_top/nw_s1_tyrantfga.ncs index f9187b7..f95085f 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s1_tyrantfga.ncs and b/_content/_hak/prc8_en6_top/nw_s1_tyrantfga.ncs differ diff --git a/_content/_hak/prc8_en6_top/nw_s2_divprot.ncs b/_content/_hak/prc8_en6_top/nw_s2_divprot.ncs index 5005808..814b161 100644 Binary files a/_content/_hak/prc8_en6_top/nw_s2_divprot.ncs and b/_content/_hak/prc8_en6_top/nw_s2_divprot.ncs differ diff --git a/_content/_tools/nwn_erf.exe b/_content/_tools/nwn_erf.exe index 1dba285..d071908 100644 Binary files a/_content/_tools/nwn_erf.exe and b/_content/_tools/nwn_erf.exe differ diff --git a/_module/dlg/nw_g_animal.dlg.json b/_module/dlg/nw_g_animal.dlg.json new file mode 100644 index 0000000..a65a225 --- /dev/null +++ b/_module/dlg/nw_g_animal.dlg.json @@ -0,0 +1,49670 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 439 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 438 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " You feel warm thoughts from your animal companion, as it wonders what you would like.", + "id": 53321 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58454 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58455 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58456 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58457 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58458 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58459 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58460 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58461 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58462 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58463 + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The animal seems confused about your actions, but slinks away to appease you.", + "id": 58464 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st-11" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58464 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58465 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58466 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58467 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_12" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The animal is quite famished and devours the food you offer. The companion seems content.", + "id": 58468 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58469 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " looks up at you, obviously willing to do as you ask.", + "id": 58470 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " waits for you to tell it what to summon." + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Ready to cast it waits for your command.", + "id": 88866 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 72, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "At the ready your companion listens.", + "id": 87720 + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 150 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Looking at you it waits.", + "id": 87722 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 180 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 179 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 178 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 177 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 170 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 159 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 158 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 157 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 153 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " looks at you awaiting your instructions on tactics." + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 156 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 155 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 154 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Looking around, it listens for you to tell them how to deal with objects." + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 169 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 168 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 167 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 166 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 165 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 164 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 163 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 162 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 161 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 160 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Your companion looks up to the sky while you tell it how to use magic." + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 176 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 175 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 174 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 173 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 172 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 171 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Looking at you, waits for instructon on how it should heal.", + "id": 55427 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 437 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 436 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 435 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_peaceful" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 186 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 185 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 184 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 183 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_assoc_mode" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nMode" + }, + "Value": { + "type": "cexostring", + "value": "16384" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 182 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 181 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Your companion listens intently for your combat tactics." + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 434 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 433 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 432 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 431 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 430 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 429 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 428 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 427 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 426 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you think is the best tactic?" + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 425 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 424 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 423 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 422 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 415 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 403 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 402 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 401 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 397 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you have in mind?" + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 38 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 396 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 395 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_open_inven" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 391 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 380 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 298 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 266 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 251 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 195 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_hen_leave" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_convo" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 191 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss?" + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 194 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 193 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Are you sure you want to do that?" + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_polymorph" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 250 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "305" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 244 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "304" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 239 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "898" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 233 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "900" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 229 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "901" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 225 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "903" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 221 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "902" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 217 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1060" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 213 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1061" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 209 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 208 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "x2_d2_haslayon" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 198 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "x2_d1_dmight" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 197 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "x2_d1_dshield" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 196 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's see what I can do...", + "id": 95904 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 207 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 206 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 205 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 204 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 201 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 200 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 212 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 211 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 210 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 216 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 215 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 214 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 220 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 219 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 218 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 224 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 223 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 222 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 228 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 227 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 226 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 232 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 231 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 230 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 238 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 237 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 236 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 235 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 234 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 243 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 242 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 241 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 240 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 249 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 248 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 247 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 246 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 245 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 265 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 264 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 263 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 262 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 261 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 260 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 259 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 258 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 257 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 256 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 255 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 254 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 253 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 252 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you have me summon?" + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 297 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 287 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 277 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 267 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss about my defensive spells?", + "id": 88866 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 276 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 275 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 274 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 273 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 272 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 271 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 270 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 269 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 268 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 286 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 285 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 284 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 283 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 282 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 281 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 280 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 279 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 278 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 296 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 295 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 294 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 293 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 292 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 291 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 290 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 289 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 288 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 379 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 378 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 369 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 368 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 367 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 366 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 365 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 364 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 363 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 362 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 361 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 360 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 359 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 358 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 355 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 354 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 353 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 352 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 351 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 350 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 349 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 348 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 347 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 346 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 345 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 344 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 343 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 342 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 341 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 340 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 339 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 338 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 337 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 336 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 335 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 334 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 333 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 332 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 331 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 330 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 329 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 328 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 327 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 326 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 325 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 324 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 323 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 322 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 321 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 320 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 319 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 318 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 317 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 316 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 315 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 314 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 313 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 312 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 311 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 310 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 309 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 308 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 307 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 306 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 305 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 304 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 303 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 302 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 301 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 300 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 299 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 381 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What you want me to cast?", + "id": 87720 + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 357 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 356 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 377 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 376 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 375 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 374 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 373 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 372 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 371 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 370 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 381 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 390 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 389 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 388 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 387 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 386 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 385 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 384 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 383 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 382 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 381 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 394 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 393 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 392 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sure, what would you like me to do?" + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 400 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 399 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 398 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Should I do something else?" + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 414 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 413 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_a_magic_m" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nMode" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 412 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 411 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 410 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 409 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 408 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 407 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 406 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 405 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 404 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " How would you like me to use magic in combat?" + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 421 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 420 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 419 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 418 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 417 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 416 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " When do you think I should heal our allies?", + "id": 55427 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "The creature looks at you strangely and resumes what it was doing before.", + "id": 53320 + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 2384 + }, + "PreventZoomIn": { + "type": "byte", + "value": 1 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_03" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 53319 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_03" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 53318 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58436 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58437 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_03" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58438 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_11" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58439 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Me needs you to do something for me.", + "id": 58440 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to do something different for me.", + "id": 58441 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Nevermind." + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets do something else." + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "Henchmen" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 63, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 64, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 65, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 66, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 67, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 68, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 69, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 70, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 71, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 72, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 73, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 74, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 75, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 76, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 77, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 78, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 79, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 80, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 81, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 82, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 83, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 84, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 85, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 86, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 87, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 88, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 89, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 90, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 91, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 92, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 93, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 94, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 95, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 96, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 97, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 98, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 99, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 100, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 101, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 102, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 103, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 104, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 105, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 106, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 107, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 108, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 109, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 110, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 111, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 112, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 113, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 114, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 115, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 116, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 117, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 118, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 119, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 120, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 121, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 122, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 123, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 124, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 125, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 126, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 127, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 128, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 129, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 130, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 131, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 132, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 133, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 134, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 135, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 136, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 137, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 138, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 139, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 140, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 141, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 142, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 143, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 144, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 145, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 146, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "Target" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 147, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 148, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 149, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 150, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 151, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss your tactics." + } + } + }, + { + "__struct_id": 152, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 153, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 154, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 155, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 156, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 157, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics." + } + } + }, + { + "__struct_id": 158, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics." + } + } + }, + { + "__struct_id": 159, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 160, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 161, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 162, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 163, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 164, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 165, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast offensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 166, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast defensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 167, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NoMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change how you use magic spells in combat." + } + } + }, + { + "__struct_id": 168, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 169, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 170, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you decide to heal me.", + "id": 54985 + } + } + }, + { + "__struct_id": 171, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 172, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 173, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 174, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 175, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54990 + } + } + }, + { + "__struct_id": 176, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54989 + } + } + }, + { + "__struct_id": 177, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you retrieve items and gold." + } + } + }, + { + "__struct_id": 178, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96508 + } + } + }, + { + "__struct_id": 179, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96508 + } + } + }, + { + "__struct_id": 180, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 181, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat." + } + } + }, + { + "__struct_id": 182, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons." + } + } + }, + { + "__struct_id": 183, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics." + } + } + }, + { + "__struct_id": 184, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!" + } + } + }, + { + "__struct_id": 185, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!" + } + } + }, + { + "__struct_id": 186, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat." + } + } + }, + { + "__struct_id": 187, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RangedTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use agressive ranged tactics, stay out of melee.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 188, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That will be all for now." + } + } + }, + { + "__struct_id": 189, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss how we can work together." + } + } + }, + { + "__struct_id": 190, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 191, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_get_convo" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about something completely different." + } + } + }, + { + "__struct_id": 192, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "We should part ways." + } + } + }, + { + "__struct_id": 193, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I like having you around." + } + } + }, + { + "__struct_id": 194, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_fire_henchmen" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes I'm sure, Perhapse we'll meet again." + } + } + }, + { + "__struct_id": 195, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you use a special ability?", + "id": 96382 + } + } + }, + { + "__struct_id": 196, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dshield" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Shield.", + "id": 96383 + } + } + }, + { + "__struct_id": 197, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dmight" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Might.", + "id": 96384 + } + } + }, + { + "__struct_id": 198, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lay on Hands.", + "id": 96385 + } + } + }, + { + "__struct_id": 199, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 200, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 201, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 202, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 203, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 204, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 205, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 206, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 207, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 208, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_use_feat" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your bard song.", + "id": 88342 + } + } + }, + { + "__struct_id": 209, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your construction shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 210, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "740" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Iron Golem" + } + } + }, + { + "__struct_id": 211, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "739" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Demon Flesh Golem" + } + } + }, + { + "__struct_id": 212, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "738" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stone Golem" + } + } + }, + { + "__struct_id": 213, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your outsider shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 214, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "735" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Slaad" + } + } + }, + { + "__struct_id": 215, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "734" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Rakshasa" + } + } + }, + { + "__struct_id": 216, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "733" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Azer" + } + } + }, + { + "__struct_id": 217, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your humanoid shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 218, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "684" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Kobold Assasin" + } + } + }, + { + "__struct_id": 219, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "683" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lizard folk" + } + } + }, + { + "__struct_id": 220, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "682" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drow" + } + } + }, + { + "__struct_id": 221, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape V.", + "id": 88342 + } + } + }, + { + "__struct_id": 222, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "691" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mindflayer" + } + } + }, + { + "__struct_id": 223, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "679" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Medusa" + } + } + }, + { + "__struct_id": 224, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "694" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dire Tiger" + } + } + }, + { + "__struct_id": 225, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape III.", + "id": 88342 + } + } + }, + { + "__struct_id": 226, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "674" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Manticore" + } + } + }, + { + "__struct_id": 227, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "673" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drider" + } + } + }, + { + "__struct_id": 228, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "670" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Basilisk" + } + } + }, + { + "__struct_id": 229, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape II.", + "id": 88342 + } + } + }, + { + "__struct_id": 230, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "680" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minotaur" + } + } + }, + { + "__struct_id": 231, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "678" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Gargoyle" + } + } + }, + { + "__struct_id": 232, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "672" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Harpy" + } + } + }, + { + "__struct_id": 233, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape I.", + "id": 88342 + } + } + }, + { + "__struct_id": 234, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "662" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Green Wyrmling" + } + } + }, + { + "__struct_id": 235, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "661" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "White Wyrmling" + } + } + }, + { + "__struct_id": 236, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "660" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Black Wyrmling" + } + } + }, + { + "__struct_id": 237, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "659" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Blue Wyrmling" + } + } + }, + { + "__struct_id": 238, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "658" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Red Wyrmling" + } + } + }, + { + "__struct_id": 239, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your elemental shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 240, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "398" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Water" + } + } + }, + { + "__struct_id": 241, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "397" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fire" + } + } + }, + { + "__struct_id": 242, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "399" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Earth" + } + } + }, + { + "__struct_id": 243, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "400" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Air" + } + } + }, + { + "__struct_id": 244, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your wild shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 245, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "405" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Badger" + } + } + }, + { + "__struct_id": 246, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "404" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Boar" + } + } + }, + { + "__struct_id": 247, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "403" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wolf" + } + } + }, + { + "__struct_id": 248, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "402" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Panther" + } + } + }, + { + "__struct_id": 249, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "401" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bear" + } + } + }, + { + "__struct_id": 250, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nEffectType" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_remove_effect" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Transform back into your natural form.", + "id": 96384 + } + } + }, + { + "__struct_id": 251, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 252, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 253, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 254, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 255, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 256, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 257, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 258, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 259, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 260, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 261, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 262, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 263, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 264, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 265, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 266, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 267, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 268, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 269, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 270, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 271, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 272, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 273, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 274, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 275, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 276, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 277, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 278, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 279, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 280, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 281, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 282, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 283, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 284, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 285, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 286, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 287, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 288, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 289, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 290, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 291, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 292, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 293, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 294, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 295, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 296, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 297, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 298, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 299, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 300, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 301, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 302, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 303, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 304, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 305, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 306, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 307, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 308, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 309, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 310, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 311, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 312, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 313, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 314, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 315, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 316, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 317, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 318, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 319, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 320, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 321, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 322, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 323, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 324, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 325, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 326, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 327, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 328, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 329, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 330, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 331, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 332, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 333, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 334, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 335, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 336, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 337, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 338, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 339, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 340, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 341, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 342, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 343, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 344, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 345, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 346, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 347, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 348, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 349, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 350, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 351, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 352, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 353, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 354, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 355, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 356, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 357, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 358, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 359, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 360, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 361, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 362, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 363, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 364, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 365, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 366, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 367, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 368, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 369, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 370, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 371, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 372, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 373, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 374, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 375, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 376, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 377, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 378, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 379, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 380, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 381, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 382, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 383, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 384, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 385, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 386, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 387, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 388, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 389, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 390, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 391, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can we talk about your items?" + } + } + }, + { + "__struct_id": 392, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveMagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all the magical items in your inventory.", + "id": 96514 + } + } + }, + { + "__struct_id": 393, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveUnIdentifiedItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all your unidentified items.", + "id": 96514 + } + } + }, + { + "__struct_id": 394, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_hen_inven" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to adjust your equipment.", + "id": 96514 + } + } + }, + { + "__struct_id": 395, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify our equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 396, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + }, + { + "__struct_id": 397, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 398, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 399, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 400, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 401, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 402, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 403, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 404, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 405, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 406, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 407, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Counter the enemy spells!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 408, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 409, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Only cast offensive spells for now.", + "id": 96498 + } + } + }, + { + "__struct_id": 410, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Only cast defensive spells for now.", + "id": 96498 + } + } + }, + { + "__struct_id": 411, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NoMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't use any magic until I say otherwise.", + "id": 96497 + } + } + }, + { + "__struct_id": 412, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "UseMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use any magic spells you have.", + "id": 96498 + } + } + }, + { + "__struct_id": 413, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 414, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 415, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you should heal.", + "id": 54985 + } + } + }, + { + "__struct_id": 416, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 417, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 418, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 419, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 420, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54989 + } + } + }, + { + "__struct_id": 421, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54989 + } + } + }, + { + "__struct_id": 422, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you pickup items and gold." + } + } + }, + { + "__struct_id": 423, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96510 + } + } + }, + { + "__struct_id": 424, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96511 + } + } + }, + { + "__struct_id": 425, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 426, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 427, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons.", + "id": 62531 + } + } + }, + { + "__struct_id": 428, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 429, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 430, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 431, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 432, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 433, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics to protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 434, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your best judgement in combat.", + "id": 62531 + } + } + }, + { + "__struct_id": 435, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 436, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 437, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use basic combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 438, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify my equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 439, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_ac_st_01" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 62 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/_module/dlg/nw_g_fam.dlg.json b/_module/dlg/nw_g_fam.dlg.json new file mode 100644 index 0000000..5be0aae --- /dev/null +++ b/_module/dlg/nw_g_fam.dlg.json @@ -0,0 +1,23412 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 193 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 191 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you require of me ?", + "id": 58490 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58491 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58492 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58493 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58494 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58495 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58496 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58497 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58498 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58499 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58500 + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58501 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st-11" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58502 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st-11" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58503 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58506 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58507 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58508 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_10" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58509 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "nw_ch_fm_st_12" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58504 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58505 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you like me to do, my ?", + "id": 58510 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you have me summon?" + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss about my defensive spells?", + "id": 88866 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "x2_d1_targetall" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What you want me to cast?", + "id": 87720 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 150 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 180 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 179 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 178 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 177 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 170 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 159 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 158 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 157 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 153 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What tactic would you like me to change, ?" + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 156 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 155 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 154 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " My benignant , how can I change my actions?\"" + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 169 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 168 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 167 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 166 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 165 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 164 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 163 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 162 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 161 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 160 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Almighty , how shall I use magic in combat?" + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 176 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 175 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 174 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 173 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 172 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 171 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Let me know when to heal, all knowning .", + "id": 55427 + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_peaceful" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 186 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 185 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 184 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 183 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 182 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 181 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "nw_d2_intn" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "nw_d2_intl" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Oh powerful ! How would you like to change my tactics?" + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 194 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63861 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 195 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63862 + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63863 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58520 + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 1302 + }, + "PreventZoomIn": { + "type": "byte", + "value": 1 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58472 + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58473 + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58474 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "nw_s0_heal" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58475 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_04" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_09" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58477 + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_11" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58476 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58478 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change how you are doing things.", + "id": 58479 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58480 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 58481 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 63, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 64, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 65, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 66, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 67, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 68, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 69, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 70, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 71, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 72, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 73, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 74, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 75, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 76, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 77, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 78, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 79, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 80, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 81, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 82, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 83, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 84, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 85, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 86, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 87, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 88, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 89, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 90, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 91, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 92, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 93, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 94, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 95, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 96, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 97, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 98, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 99, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 100, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 101, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 102, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 103, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 104, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 105, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 106, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 107, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 108, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 109, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 110, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 111, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 112, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 113, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 114, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 115, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 116, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 117, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 118, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 119, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 120, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 121, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 122, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 123, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 124, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 125, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 126, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 127, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 128, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 129, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 130, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 131, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 132, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 133, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 134, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 135, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 136, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 137, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 138, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 139, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 140, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 141, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 142, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 143, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 144, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 145, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 146, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 147, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 148, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 149, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 150, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 151, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss your tactics." + } + } + }, + { + "__struct_id": 152, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 153, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 154, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 155, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96501 + } + } + }, + { + "__struct_id": 156, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Object" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 157, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics." + } + } + }, + { + "__struct_id": 158, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics." + } + } + }, + { + "__struct_id": 159, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 160, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 161, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 162, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 163, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 164, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 165, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast offensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 166, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast defensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 167, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NoMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change how you use magic spells in combat.", + "id": 96498 + } + } + }, + { + "__struct_id": 168, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 169, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 170, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you decide to heal me.", + "id": 54985 + } + } + }, + { + "__struct_id": 171, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 172, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 173, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 174, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54991 + } + } + }, + { + "__struct_id": 175, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54991 + } + } + }, + { + "__struct_id": 176, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54991 + } + } + }, + { + "__struct_id": 177, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you retrieve items and gold." + } + } + }, + { + "__struct_id": 178, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96508 + } + } + }, + { + "__struct_id": 179, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96508 + } + } + }, + { + "__struct_id": 180, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 181, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat." + } + } + }, + { + "__struct_id": 182, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons.", + "id": 62531 + } + } + }, + { + "__struct_id": 183, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 184, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 185, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 186, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 187, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RangedTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use agressive ranged tactics, stay out of melee.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 188, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 189, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 190, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use basic combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 191, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x1_hen_identify" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify my equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 192, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to scout the area." + } + } + }, + { + "__struct_id": 193, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "id": 63860 + } + } + }, + { + "__struct_id": 194, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": {} + } + }, + { + "__struct_id": 195, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": {} + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "nw_ch_fm_st_01" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/_module/dlg/oc_ai_henchmen.dlg.json b/_module/dlg/oc_ai_henchmen.dlg.json new file mode 100644 index 0000000..72c80ab --- /dev/null +++ b/_module/dlg/oc_ai_henchmen.dlg.json @@ -0,0 +1,27428 @@ +{ + "__data_type": "DLG ", + "DelayEntry": { + "type": "dword", + "value": 0 + }, + "DelayReply": { + "type": "dword", + "value": 0 + }, + "EndConverAbort": { + "type": "resref", + "value": "" + }, + "EndConversation": { + "type": "resref", + "value": "" + }, + "EntryList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 38 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTRUE" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 248 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_scout" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTRUE" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 247 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_identify" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 246 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_open_inven" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 242 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 191 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 109 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 77 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_class" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nClass1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nClass2" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 2, + "Key": { + "type": "cexostring", + "value": "nClass3" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 3, + "Key": { + "type": "cexostring", + "value": "nClass4" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 4, + "Key": { + "type": "cexostring", + "value": "nClass5" + }, + "Value": { + "type": "cexostring", + "value": "10" + } + }, + { + "__struct_id": 5, + "Key": { + "type": "cexostring", + "value": "nClass6" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + }, + { + "__struct_id": 6, + "Key": { + "type": "cexostring", + "value": "nClass7" + }, + "Value": { + "type": "cexostring", + "value": "48" + } + }, + { + "__struct_id": 7, + "Key": { + "type": "cexostring", + "value": "nClass8" + }, + "Value": { + "type": "cexostring", + "value": "46" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 62 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_hen_leave" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_convo" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss?" + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Are you sure you want to do that?" + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_polymorph" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 61 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "305" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 55 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "304" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 50 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "898" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 44 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "900" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 40 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "901" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 36 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "903" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 32 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "902" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 28 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1060" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "1061" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "sTarget" + }, + "Value": { + "type": "cexostring", + "value": "OBJECT_SELF" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "x2_d2_haslayon" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "x2_d1_dmight" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "x2_d1_dshield" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's see what I can do...", + "id": 95904 + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 31 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 30 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 29 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 35 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 34 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 33 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 39 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 38 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 37 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 43 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 42 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 41 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 49 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_feat" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 48 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 47 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 46 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 45 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 54 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 53 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 52 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 51 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 60 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 59 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 58 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 57 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 56 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Which form should I take?" + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 76 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_assoc" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 75 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x2_hen_tomishad3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 74 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 73 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 72 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 71 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 70 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 69 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 68 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 67 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 66 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 65 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 64 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 63 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What would you have me summon?" + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 108 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 98 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 88 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 78 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What would you like to discuss about my defensive spells?", + "id": 88866 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 87 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 86 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 85 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 84 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 83 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 82 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 81 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 80 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 79 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 97 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 96 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 95 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 94 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 93 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 92 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 91 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 90 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 89 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 107 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 106 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 105 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 104 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 103 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 102 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 101 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 100 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 99 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_listhenchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And what is my target?", + "id": 87722 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 190 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 189 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 180 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 179 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 178 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 177 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 176 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 175 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 174 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 173 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 172 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 171 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 12, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 170 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 13, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 169 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 14, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 166 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 15, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 165 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 16, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 164 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 17, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 163 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 18, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 162 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 19, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 161 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 20, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 160 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 21, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 159 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 22, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 158 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 23, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 157 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 24, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 156 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 25, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 155 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 26, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 154 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 27, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 153 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 28, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 152 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 29, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 151 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 30, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 150 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 31, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 149 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 32, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 148 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 33, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 147 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 34, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 146 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 35, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 145 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 36, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 144 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 37, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 143 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 38, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 142 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 39, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 141 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 40, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 140 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 41, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 139 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 42, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 138 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 43, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 137 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 44, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 136 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 45, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 135 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 46, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 134 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 47, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 133 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 48, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 132 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 49, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 131 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 50, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 130 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 51, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 129 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 52, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 128 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 53, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 127 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 54, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 126 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 55, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 125 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 56, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 124 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 57, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 123 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 58, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 122 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 59, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 121 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 60, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 120 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 61, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 119 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 62, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 118 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 63, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 117 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 64, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 116 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 65, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 115 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 66, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 114 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 67, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 113 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 68, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 112 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 69, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 111 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 70, + "Active": { + "type": "resref", + "value": "0c_if_has_spell" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell1" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 110 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 71, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "What you want me to cast?", + "id": 87720 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 168 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 167 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "You sure?", + "id": 87721 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GetHenchTokens" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 188 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 187 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 186 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 185 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_if_hen_target" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 184 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_hen_target" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 183 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_hen_target" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 182 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_hen_target" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 181 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Okay. Who shoulds I cast it on?", + "id": 87722 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 201 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 200 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "x0_d2_hasfamil" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 199 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "x0_d2_hascompan" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 198 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "x2_d1_hashench1" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 197 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "x2_d1_hashench2" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 196 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "x2_d1_hashench3" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 195 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "x2_d1_hashench4" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 194 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 193 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 192 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "x2_d1_gentags" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "And who should be the target of my healing?", + "id": 87722 + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 231 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 230 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 229 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_if_pickuploot" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 228 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 221 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 210 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 209 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 208 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 204 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you have in mind?" + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 207 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_skillrank" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSkill" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nRank" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 206 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 205 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " Should I do something else?" + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 220 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 219 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_a_magic_m" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nMode" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 218 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 217 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 216 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 215 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 214 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "0c_if_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_cntrspell" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 213 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 212 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 211 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " How would you like me to use magic in combat?" + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 227 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 226 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 225 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 224 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 223 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 222 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " When do you think I should heal our allies?", + "id": 55427 + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 241 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_defensive" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 240 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ambusher" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 239 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_ranged" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 238 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "0c_no_com_script" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAIScript" + }, + "Value": { + "type": "cexostring", + "value": "ai_a_peaceful" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 237 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 5, + "Active": { + "type": "resref", + "value": "0c_if_taunt" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 236 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 6, + "Active": { + "type": "resref", + "value": "0c_if_cntrspell" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 235 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 7, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 234 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 8, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 233 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 9, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 232 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 10, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 202 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 11, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": " What do you think is the best tactic?" + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 245 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 244 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 243 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 3, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 203 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + }, + { + "__struct_id": 4, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sure, what would you like me to do?" + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 0 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "" + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 29 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "RepliesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 250 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 249 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Speaker": { + "type": "cexostring", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wel-met. I think we should work together, what do you say?" + } + } + } + ] + }, + "NumWords": { + "type": "dword", + "value": 1152 + }, + "PreventZoomIn": { + "type": "byte", + "value": 1 + }, + "ReplyList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "That will be all for now." + } + } + }, + { + "__struct_id": 1, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_get_convo" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about something completely different." + } + } + }, + { + "__struct_id": 2, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 1 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "We should part ways." + } + } + }, + { + "__struct_id": 3, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I like having you around." + } + } + }, + { + "__struct_id": 4, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_fire_henchmen" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes I'm sure, Perhapse we'll meet again." + } + } + }, + { + "__struct_id": 5, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Speaking" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change how much you speak.", + "id": 96511 + } + } + }, + { + "__struct_id": 6, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 2 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you use a special ability?", + "id": 96382 + } + } + }, + { + "__struct_id": 7, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dshield" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Shield.", + "id": 96383 + } + } + }, + { + "__struct_id": 8, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_d2_dmight" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Might.", + "id": 96384 + } + } + }, + { + "__struct_id": 9, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 3 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lay on Hands.", + "id": 96385 + } + } + }, + { + "__struct_id": 10, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 11, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 12, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 13, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 14, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 15, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 16, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 17, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 18, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 19, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nFeat" + }, + "Value": { + "type": "cexostring", + "value": "257" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_use_feat" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your bard song.", + "id": 88342 + } + } + }, + { + "__struct_id": 20, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 4 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your construction shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 21, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "740" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Iron Golem" + } + } + }, + { + "__struct_id": 22, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "739" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Demon Flesh Golem" + } + } + }, + { + "__struct_id": 23, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "738" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stone Golem" + } + } + }, + { + "__struct_id": 24, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 5 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your outsider shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 25, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "735" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Slaad" + } + } + }, + { + "__struct_id": 26, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "734" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Rakshasa" + } + } + }, + { + "__struct_id": 27, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "733" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Azer" + } + } + }, + { + "__struct_id": 28, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 6 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your humanoid shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 29, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "684" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Kobold Assasin" + } + } + }, + { + "__struct_id": 30, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "683" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lizard folk" + } + } + }, + { + "__struct_id": 31, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "682" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drow" + } + } + }, + { + "__struct_id": 32, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 7 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape V.", + "id": 88342 + } + } + }, + { + "__struct_id": 33, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "691" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mindflayer" + } + } + }, + { + "__struct_id": 34, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "679" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Medusa" + } + } + }, + { + "__struct_id": 35, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "694" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dire Tiger" + } + } + }, + { + "__struct_id": 36, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 8 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape III.", + "id": 88342 + } + } + }, + { + "__struct_id": 37, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "674" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Manticore" + } + } + }, + { + "__struct_id": 38, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "673" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Drider" + } + } + }, + { + "__struct_id": 39, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "670" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Basilisk" + } + } + }, + { + "__struct_id": 40, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 9 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape II.", + "id": 88342 + } + } + }, + { + "__struct_id": 41, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "680" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minotaur" + } + } + }, + { + "__struct_id": 42, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "678" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Gargoyle" + } + } + }, + { + "__struct_id": 43, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "672" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Harpy" + } + } + }, + { + "__struct_id": 44, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 10 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your greater wild shape I.", + "id": 88342 + } + } + }, + { + "__struct_id": 45, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "662" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Green Wyrmling" + } + } + }, + { + "__struct_id": 46, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "661" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "White Wyrmling" + } + } + }, + { + "__struct_id": 47, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "660" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Black Wyrmling" + } + } + }, + { + "__struct_id": 48, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "659" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Blue Wyrmling" + } + } + }, + { + "__struct_id": 49, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "658" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Red Wyrmling" + } + } + }, + { + "__struct_id": 50, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 11 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your elemental shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 51, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "398" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Water" + } + } + }, + { + "__struct_id": 52, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "397" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fire" + } + } + }, + { + "__struct_id": 53, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "399" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Earth" + } + } + }, + { + "__struct_id": 54, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "400" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Air" + } + } + }, + { + "__struct_id": 55, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 12 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your wild shape.", + "id": 88342 + } + } + }, + { + "__struct_id": 56, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "405" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Badger" + } + } + }, + { + "__struct_id": 57, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "404" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Boar" + } + } + }, + { + "__struct_id": 58, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "403" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wolf" + } + } + }, + { + "__struct_id": 59, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "402" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Panther" + } + } + }, + { + "__struct_id": 60, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "401" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_cast_polymorp" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bear" + } + } + }, + { + "__struct_id": 61, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nEffectType" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_remove_effect" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Transform back into your natural form.", + "id": 96384 + } + } + }, + { + "__struct_id": 62, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 13 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to summon something if you can." + } + } + }, + { + "__struct_id": 63, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "178" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IX.", + "id": 88353 + } + } + }, + { + "__struct_id": 64, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "182" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VIII.", + "id": 88354 + } + } + }, + { + "__struct_id": 65, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "181" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VII.", + "id": 88355 + } + } + }, + { + "__struct_id": 66, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "180" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature VI.", + "id": 88356 + } + } + }, + { + "__struct_id": 67, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "179" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature V.", + "id": 88358 + } + } + }, + { + "__struct_id": 68, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "177" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature IV.", + "id": 88358 + } + } + }, + { + "__struct_id": 69, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "176" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature III.", + "id": 88359 + } + } + }, + { + "__struct_id": 70, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "175" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature II.", + "id": 88360 + } + } + }, + { + "__struct_id": 71, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "174" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Creature I.", + "id": 88361 + } + } + }, + { + "__struct_id": 72, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "30" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Create Undead.", + "id": 88425 + } + } + }, + { + "__struct_id": 73, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Animate Dead.", + "id": 88446 + } + } + }, + { + "__struct_id": 74, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x2_hen_tomishad4" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Summon Shadow." + } + } + }, + { + "__struct_id": 75, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Familiar" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Familiar." + } + } + }, + { + "__struct_id": 76, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAssociate" + }, + "Value": { + "type": "cexostring", + "value": "Companion" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_summon_assoc" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Your Companion." + } + } + }, + { + "__struct_id": 77, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let us talk about your defensive spells.", + "id": 89061 + } + } + }, + { + "__struct_id": 78, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 15 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your defensive spells.", + "id": 89063 + } + } + }, + { + "__struct_id": 79, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 80, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 81, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 82, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 83, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 84, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 85, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 86, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 87, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 88, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 16 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your long duration defensive spells.", + "id": 89064 + } + } + }, + { + "__struct_id": 89, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 90, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 91, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 92, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 93, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 94, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 95, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 96, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 97, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 98, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 17 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast all your short duration defensive spells.", + "id": 89065 + } + } + }, + { + "__struct_id": 99, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast on all the party members.", + "id": 88431 + } + } + }, + { + "__struct_id": 100, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 101, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 102, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 103, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 104, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 105, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 106, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 107, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 108, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "RestBuffing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 14 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast long duration spells after resting." + } + } + }, + { + "__struct_id": 109, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 18 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a spell.", + "id": 88348 + } + } + }, + { + "__struct_id": 110, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "441" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Wounding Whispers.", + "id": 88350 + } + } + }, + { + "__struct_id": 111, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "365" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ultravision.", + "id": 88351 + } + } + }, + { + "__struct_id": 112, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "186" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "True Seeing.", + "id": 88352 + } + } + }, + { + "__struct_id": 113, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "172" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stoneskin.", + "id": 88362 + } + } + }, + { + "__struct_id": 114, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "168" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Resistance.", + "id": 88363 + } + } + }, + { + "__struct_id": 115, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "169" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Spell Mantle.", + "id": 88364 + } + } + }, + { + "__struct_id": 116, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "450" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield of Faith.", + "id": 88365 + } + } + }, + { + "__struct_id": 117, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "417" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shield.", + "id": 88366 + } + } + }, + { + "__struct_id": 118, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "159" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Shadow Shield.", + "id": 88367 + } + } + }, + { + "__struct_id": 119, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "157" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "See Invisibility.", + "id": 88368 + } + } + }, + { + "__struct_id": 120, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "154" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Sanctuary.", + "id": 88369 + } + } + }, + { + "__struct_id": 121, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "152" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Restoration.", + "id": 88370 + } + } + }, + { + "__struct_id": 122, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "151" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resistance.", + "id": 88371 + } + } + }, + { + "__struct_id": 123, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "150" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Resist Elements.", + "id": 88372 + } + } + }, + { + "__struct_id": 124, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "149" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Paralysis.", + "id": 88373 + } + } + }, + { + "__struct_id": 125, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "148" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Fear.", + "id": 88374 + } + } + }, + { + "__struct_id": 126, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "147" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Disease.", + "id": 88375 + } + } + }, + { + "__struct_id": 127, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "146" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Curse.", + "id": 88376 + } + } + }, + { + "__struct_id": 128, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "145" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Remove Blindness/Deafness.", + "id": 88377 + } + } + }, + { + "__struct_id": 129, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "374" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Regenerate.", + "id": 88378 + } + } + }, + { + "__struct_id": 130, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "141" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Spells.", + "id": 88379 + } + } + }, + { + "__struct_id": 131, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "321" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Evil." + } + } + }, + { + "__struct_id": 132, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "137" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Protection From Elements.", + "id": 88380 + } + } + }, + { + "__struct_id": 133, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "134" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Premonition.", + "id": 88381 + } + } + }, + { + "__struct_id": 134, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "133" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Prayer.", + "id": 88382 + } + } + }, + { + "__struct_id": 135, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "355" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Owl's Wisdom.", + "id": 88383 + } + } + }, + { + "__struct_id": 136, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "126" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Neutralize poison.", + "id": 88384 + } + } + }, + { + "__struct_id": 137, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "525" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Monstrous Regeneration.", + "id": 88385 + } + } + }, + { + "__struct_id": 138, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "119" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Minor Globe of Invulnerability.", + "id": 88386 + } + } + }, + { + "__struct_id": 139, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "117" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mind Blank.", + "id": 88387 + } + } + }, + { + "__struct_id": 140, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "113" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mass Haste.", + "id": 88388 + } + } + }, + { + "__struct_id": 141, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "108" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Magical Vestment.", + "id": 88389 + } + } + }, + { + "__struct_id": 142, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "102" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Mage Armor.", + "id": 88390 + } + } + }, + { + "__struct_id": 143, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "100" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Light.", + "id": 88391 + } + } + }, + { + "__struct_id": 144, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "99" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Spell Mantle.", + "id": 88392 + } + } + }, + { + "__struct_id": 145, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "97" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Restoration.", + "id": 88393 + } + } + }, + { + "__struct_id": 146, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "95" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Mind Blank", + "id": 88394 + } + } + }, + { + "__struct_id": 147, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "94" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lesser Dispel.", + "id": 88395 + } + } + }, + { + "__struct_id": 148, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "93" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Knock.", + "id": 88396 + } + } + }, + { + "__struct_id": 149, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "92" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility Sphere.", + "id": 88397 + } + } + }, + { + "__struct_id": 150, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "90" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Invisibility", + "id": 88398 + } + } + }, + { + "__struct_id": 151, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "88" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Improved Invisibility.", + "id": 88399 + } + } + }, + { + "__struct_id": 152, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "78" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Haste.", + "id": 88400 + } + } + }, + { + "__struct_id": 153, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "74" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Stoneskin.", + "id": 88401 + } + } + }, + { + "__struct_id": 154, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "73" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Spell Mantle.", + "id": 88402 + } + } + }, + { + "__struct_id": 155, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "443" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Sanctuary.", + "id": 88403 + } + } + }, + { + "__struct_id": 156, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "70" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Restoration.", + "id": 88404 + } + } + }, + { + "__struct_id": 157, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "109" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Magic Weapon.", + "id": 88405 + } + } + }, + { + "__struct_id": 158, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "67" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Greater Dispelling.", + "id": 88406 + } + } + }, + { + "__struct_id": 159, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "65" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Globe of Invulnerability.", + "id": 88407 + } + } + }, + { + "__struct_id": 160, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "120" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ghostly Visage.", + "id": 88408 + } + } + }, + { + "__struct_id": 161, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "62" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Freedom of Movement.", + "id": 88409 + } + } + }, + { + "__struct_id": 162, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "356" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Fox's Cunning", + "id": 88410 + } + } + }, + { + "__struct_id": 163, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "377" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Find Traps.", + "id": 88411 + } + } + }, + { + "__struct_id": 164, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "121" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Ethereal Visage.", + "id": 88412 + } + } + }, + { + "__struct_id": 165, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "418" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Entropic Shield.", + "id": 88413 + } + } + }, + { + "__struct_id": 166, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "369" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Energy Buffer.", + "id": 88414 + } + } + }, + { + "__struct_id": 167, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "No, I've changed my mind.", + "id": 88415 + } + } + }, + { + "__struct_id": 168, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yes, go ahead.", + "id": 88416 + } + } + }, + { + "__struct_id": 169, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "50" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endure Elements.", + "id": 88417 + } + } + }, + { + "__struct_id": 170, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "49" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Endurance.", + "id": 88418 + } + } + }, + { + "__struct_id": 171, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "47" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Elemental Shield.", + "id": 88419 + } + } + }, + { + "__struct_id": 172, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "354" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Eagle's Splendour.", + "id": 88420 + } + } + }, + { + "__struct_id": 173, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "42" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Divine Power.", + "id": 88421 + } + } + }, + { + "__struct_id": 174, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "41" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Dispel Magic.", + "id": 88422 + } + } + }, + { + "__struct_id": 175, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "38" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Ward.", + "id": 88423 + } + } + }, + { + "__struct_id": 176, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "519" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 19 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Death Armor.", + "id": 88424 + } + } + }, + { + "__struct_id": 177, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "419" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Continual Flame.", + "id": 88426 + } + } + }, + { + "__struct_id": 178, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "21" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Clarity.", + "id": 88427 + } + } + }, + { + "__struct_id": 179, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "13" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cat's Grace.", + "id": 88428 + } + } + }, + { + "__struct_id": 180, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "9" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bull's Strength.", + "id": 88429 + } + } + }, + { + "__struct_id": 181, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 182, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 183, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 184, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 185, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 186, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 187, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 188, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 189, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Bless.", + "id": 88445 + } + } + }, + { + "__struct_id": 190, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nSpell" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 20 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_h_cast_spell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Aid.", + "id": 88447 + } + } + }, + { + "__struct_id": 191, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 21 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to cast a healing spell." + } + } + }, + { + "__struct_id": 192, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I've changed my mind.", + "id": 88430 + } + } + }, + { + "__struct_id": 193, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "0" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Heal up the whole party.", + "id": 88431 + } + } + }, + { + "__struct_id": 194, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "6" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88437 + } + } + }, + { + "__struct_id": 195, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "5" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88438 + } + } + }, + { + "__struct_id": 196, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88439 + } + } + }, + { + "__struct_id": 197, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "3" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on .", + "id": 88440 + } + } + }, + { + "__struct_id": 198, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "8" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my animal companion.", + "id": 88441 + } + } + }, + { + "__struct_id": 199, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "7" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on my familiar.", + "id": 88442 + } + } + }, + { + "__struct_id": 200, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "1" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on me.", + "id": 88443 + } + } + }, + { + "__struct_id": 201, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "nTarget" + }, + "Value": { + "type": "cexostring", + "value": "2" + } + }, + { + "__struct_id": 1, + "Key": { + "type": "cexostring", + "value": "nBuffType" + }, + "Value": { + "type": "cexostring", + "value": "4" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_henchmenspell" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Cast it on yourself.", + "id": 88444 + } + } + }, + { + "__struct_id": 202, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to discuss how we can work together." + } + } + }, + { + "__struct_id": 203, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about something else." + } + } + }, + { + "__struct_id": 204, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets discuss how you deal with objects." + } + } + }, + { + "__struct_id": 205, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Bash" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your bashing tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 206, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Locks" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your lock picking tactics.", + "id": 96507 + } + } + }, + { + "__struct_id": 207, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Traps" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Objects" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 23 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your trap tactics.", + "id": 96502 + } + } + }, + { + "__struct_id": 208, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Search" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your search tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 209, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Stealth" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I need you to change your stealth tactics.", + "id": 96505 + } + } + }, + { + "__struct_id": 210, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Let's change how you use magic in combat." + } + } + }, + { + "__struct_id": 211, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you use magic items or not.", + "id": 96498 + } + } + }, + { + "__struct_id": 212, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Dispel" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your dispel tactics.", + "id": 96500 + } + } + }, + { + "__struct_id": 213, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Stop countering the enemies spells.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 214, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Counter the enemy spells!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 215, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BuffFirst" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change who you cast defensive spells on first.", + "id": 96500 + } + } + }, + { + "__struct_id": 216, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "OffensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast offensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 217, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveCasting" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you cast defensive spells.", + "id": 96498 + } + } + }, + { + "__struct_id": 218, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "NMagic" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change how you use magic spells in combat.", + "id": 96498 + } + } + }, + { + "__struct_id": 219, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic more in combat." + } + } + }, + { + "__struct_id": 220, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "MagicMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Spells" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 24 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your magic less in combat." + } + } + }, + { + "__struct_id": 221, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change when you should heal.", + "id": 54985 + } + } + }, + { + "__struct_id": 222, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal out of combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 223, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealOutMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health an one needs for you to heal out of combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 224, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInPlus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Increase the health an one needs for you to heal during combat.", + "id": 54990 + } + } + }, + { + "__struct_id": 225, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealInMinus" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Reduce the health any one needs for you to heal during combat.", + "id": 54989 + } + } + }, + { + "__struct_id": 226, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealSelf" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal yourself.", + "id": 54989 + } + } + }, + { + "__struct_id": 227, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "HealAllies" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Healing" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 25 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you heal any allies.", + "id": 54989 + } + } + }, + { + "__struct_id": 228, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Pickup" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets change if you pickup items and gold." + } + } + }, + { + "__struct_id": 229, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowFarther" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow farther away from me.", + "id": 96510 + } + } + }, + { + "__struct_id": 230, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "FollowCloser" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "Plans" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 22 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Follow closer to me.", + "id": 96511 + } + } + }, + { + "__struct_id": 231, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Lets talk about your tactics in combat." + } + } + }, + { + "__struct_id": 232, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AttackTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change if you fight every opponent during combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 233, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AtkAssociates" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your tactics against familiars, companions, and summons.", + "id": 62531 + } + } + }, + { + "__struct_id": 234, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Ranged" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Change your ranged combat tactics.", + "id": 62531 + } + } + }, + { + "__struct_id": 235, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "CounterSpell" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to counter spell the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 236, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Taunt" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want you to taunt the enemy!", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 237, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "PeaceTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Don't engage in combat.", + "2": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"", + "3": "\"Je ne veux pas du tout que vous vous engagiez dans un combat à distance rapproché,eloignez vous de l'enemi s'il devient trop proche!\"" + } + } + }, + { + "__struct_id": 238, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "RangedTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use agressive ranged tactics, stay out of melee.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 239, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "AmbushTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use ambush tactics, hide and then strike.", + "2": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"", + "3": "\"Je veux que vous fassiez confiance à votre instinct du moment où il faut changer entre armes de mélée ou à projectiles.\"" + } + } + }, + { + "__struct_id": 240, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "DefensiveTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use defensive tactics to protect yourself.", + "id": 62532 + } + } + }, + { + "__struct_id": 241, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "BasicTactics" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 1 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "CombatTactics" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 26 + }, + "IsChild": { + "type": "byte", + "value": 1 + }, + "LinkComment": { + "type": "cexostring", + "value": "" + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Use your best judgement in combat.", + "id": 62531 + } + } + }, + { + "__struct_id": 242, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "" + }, + "ConditionParams": { + "type": "list", + "value": [] + }, + "Index": { + "type": "dword", + "value": 27 + }, + "IsChild": { + "type": "byte", + "value": 0 + } + } + ] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can we talk about your items?" + } + } + }, + { + "__struct_id": 243, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveMagicItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all the magical items in your inventory.", + "id": 96514 + } + } + }, + { + "__struct_id": 244, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "GiveUnIdentifiedItems" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Give me all your unidentified items.", + "id": 96514 + } + } + }, + { + "__struct_id": 245, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "x0_d1_hen_inven" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I want to adjust your equipment.", + "id": 96514 + } + } + }, + { + "__struct_id": 246, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Identify" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Can you identify our equipment?", + "id": 88341 + } + } + }, + { + "__struct_id": 247, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Would you stop patroling ahead." + } + } + }, + { + "__struct_id": 248, + "ActionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sAction" + }, + "Value": { + "type": "cexostring", + "value": "Scout" + } + } + ] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_assoc_actions" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "I would like you to patrol ahead." + } + } + }, + { + "__struct_id": 249, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 0 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Not right now." + } + } + }, + { + "__struct_id": 250, + "ActionParams": { + "type": "list", + "value": [] + }, + "Animation": { + "type": "dword", + "value": 45 + }, + "AnimLoop": { + "type": "byte", + "value": 1 + }, + "Comment": { + "type": "cexostring", + "value": "" + }, + "Delay": { + "type": "dword", + "value": 4294967295 + }, + "EntriesList": { + "type": "list", + "value": [] + }, + "Quest": { + "type": "cexostring", + "value": "" + }, + "Script": { + "type": "resref", + "value": "0c_get_henchman" + }, + "Sound": { + "type": "resref", + "value": "" + }, + "Text": { + "type": "cexolocstring", + "value": { + "0": "Yea, thats a good idea." + } + } + } + ] + }, + "StartingList": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Active": { + "type": "resref", + "value": "0c_if_not_master" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sInput" + }, + "Value": { + "type": "cexostring", + "value": "Can_Hire_Henchman" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 29 + } + }, + { + "__struct_id": 1, + "Active": { + "type": "resref", + "value": "0c_if_not_master" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sInput" + }, + "Value": { + "type": "cexostring", + "value": "Cannot_Hire_Henchman" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 28 + } + }, + { + "__struct_id": 2, + "Active": { + "type": "resref", + "value": "0c_if_ass_convo" + }, + "ConditionParams": { + "type": "list", + "value": [ + { + "__struct_id": 0, + "Key": { + "type": "cexostring", + "value": "sOption" + }, + "Value": { + "type": "cexostring", + "value": "BaseMode" + } + } + ] + }, + "Index": { + "type": "dword", + "value": 0 + } + } + ] + } +} diff --git a/_module/git/abandonedtowe001.git.json b/_module/git/abandonedtowe001.git.json index fb285c1..c727550 100644 --- a/_module/git/abandonedtowe001.git.json +++ b/_module/git/abandonedtowe001.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -502,11 +502,11 @@ }, "Y": { "type": "float", - "value": 27.80940437316895 + "value": 27.809404373168945 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -729,11 +729,11 @@ }, "Y": { "type": "float", - "value": 21.14218330383301 + "value": 21.142183303833008 }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -952,15 +952,15 @@ }, "X": { "type": "float", - "value": 19.44490432739258 + "value": 19.444904327392578 }, "Y": { "type": "float", - "value": 19.49388694763184 + "value": 19.493886947631836 }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -1179,15 +1179,15 @@ }, "X": { "type": "float", - "value": 17.44869804382324 + "value": 17.448698043823242 }, "Y": { "type": "float", - "value": 22.3131217956543 + "value": 22.313121795654297 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -1406,7 +1406,7 @@ }, "X": { "type": "float", - "value": 29.39201927185059 + "value": 29.392019271850586 }, "Y": { "type": "float", @@ -1414,7 +1414,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -1637,11 +1637,11 @@ }, "Y": { "type": "float", - "value": 29.54160118103027 + "value": 29.541601181030273 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -2091,7 +2091,7 @@ }, "Y": { "type": "float", - "value": 37.60351943969727 + "value": 37.603519439697266 }, "Z": { "type": "float", @@ -2549,7 +2549,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -2611,7 +2611,7 @@ }, "XOrientation": { "type": "float", - "value": -4.442530098458519e-006 + "value": -0.000004442530098458519 }, "XPosition": { "type": "float", @@ -2627,7 +2627,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/abandonedtowe002.git.json b/_module/git/abandonedtowe002.git.json index d38a575..244bc5d 100644 --- a/_module/git/abandonedtowe002.git.json +++ b/_module/git/abandonedtowe002.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590356826782 + "value": -3.1415903568267822 }, "CloseLockDC": { "type": "byte", @@ -725,7 +725,7 @@ }, "Z": { "type": "float", - "value": -4.172325134277344e-007 + "value": -0.0000004172325134277344 } }, { @@ -948,11 +948,11 @@ }, "Y": { "type": "float", - "value": 19.69414901733398 + "value": 19.694149017333984 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1171,7 +1171,7 @@ }, "X": { "type": "float", - "value": 39.13629531860352 + "value": 39.136295318603516 }, "Y": { "type": "float", @@ -1398,15 +1398,15 @@ }, "X": { "type": "float", - "value": 42.69571685791016 + "value": 42.695716857910156 }, "Y": { "type": "float", - "value": 28.21746635437012 + "value": 28.217466354370117 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1629,11 +1629,11 @@ }, "Y": { "type": "float", - "value": 20.30409622192383 + "value": 20.304096221923828 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1860,7 +1860,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1922,7 +1922,7 @@ }, "XOrientation": { "type": "float", - "value": -2.296763113918132e-006 + "value": -0.000002296763113918132 }, "XPosition": { "type": "float", @@ -1934,11 +1934,11 @@ }, "YPosition": { "type": "float", - "value": 26.71260833740234 + "value": 26.712608337402344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1983,11 +1983,11 @@ }, "XOrientation": { "type": "float", - "value": -0.6715614795684815 + "value": -0.6715614795684814 }, "XPosition": { "type": "float", - "value": 44.42455673217773 + "value": 44.424556732177734 }, "YOrientation": { "type": "float", @@ -1995,7 +1995,7 @@ }, "YPosition": { "type": "float", - "value": 23.37753105163574 + "value": 23.377531051635742 }, "ZPosition": { "type": "float", diff --git a/_module/git/abandonedtowe003.git.json b/_module/git/abandonedtowe003.git.json index a062240..deaa23e 100644 --- a/_module/git/abandonedtowe003.git.json +++ b/_module/git/abandonedtowe003.git.json @@ -261,7 +261,7 @@ }, "Y": { "type": "float", - "value": 3.110000133514404 + "value": 3.1100001335144043 }, "Z": { "type": "float", @@ -503,7 +503,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -941,7 +941,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -1379,7 +1379,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -1817,7 +1817,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -2255,7 +2255,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -2474,7 +2474,7 @@ }, "Bearing": { "type": "float", - "value": 1.57079553604126 + "value": 1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -2693,7 +2693,7 @@ }, "Bearing": { "type": "float", - "value": 1.57079553604126 + "value": 1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -2912,7 +2912,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -3144,7 +3144,7 @@ }, "Bearing": { "type": "float", - "value": 3.141590595245361 + "value": 3.1415905952453613 }, "BodyBag": { "type": "byte", @@ -3348,11 +3348,11 @@ }, "Y": { "type": "float", - "value": 34.66595077514648 + "value": 34.665950775146484 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3371,7 +3371,7 @@ }, "Bearing": { "type": "float", - "value": 3.141590595245361 + "value": 3.1415905952453613 }, "BodyBag": { "type": "byte", @@ -3571,7 +3571,7 @@ }, "X": { "type": "float", - "value": 29.09824752807617 + "value": 29.098247528076172 }, "Y": { "type": "float", @@ -3579,7 +3579,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3806,7 +3806,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4029,7 +4029,7 @@ }, "Y": { "type": "float", - "value": 37.06155395507813 + "value": 37.061553955078125 }, "Z": { "type": "float", @@ -4052,7 +4052,7 @@ }, "Bearing": { "type": "float", - "value": 0.3926988244056702 + "value": 0.39269882440567017 }, "BodyBag": { "type": "byte", @@ -4256,7 +4256,7 @@ }, "Y": { "type": "float", - "value": 37.76224517822266 + "value": 37.762245178222656 }, "Z": { "type": "float", @@ -4706,7 +4706,7 @@ }, "X": { "type": "float", - "value": 31.4979362487793 + "value": 31.497936248779297 }, "Y": { "type": "float", @@ -4933,7 +4933,7 @@ }, "X": { "type": "float", - "value": 15.11522483825684 + "value": 15.115224838256836 }, "Y": { "type": "float", @@ -4941,7 +4941,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -5168,7 +5168,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -5187,7 +5187,7 @@ }, "Bearing": { "type": "float", - "value": 1.644427180290222 + "value": 1.6444271802902222 }, "BodyBag": { "type": "byte", @@ -5387,7 +5387,7 @@ }, "X": { "type": "float", - "value": 19.11767959594727 + "value": 19.117679595947266 }, "Y": { "type": "float", @@ -5395,7 +5395,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5414,7 +5414,7 @@ }, "Bearing": { "type": "float", - "value": 1.497164368629456 + "value": 1.4971643686294556 }, "BodyBag": { "type": "byte", @@ -5614,7 +5614,7 @@ }, "X": { "type": "float", - "value": 10.96479225158691 + "value": 10.964792251586914 }, "Y": { "type": "float", @@ -5622,7 +5622,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5861,15 +5861,15 @@ }, "X": { "type": "float", - "value": 21.14750671386719 + "value": 21.147506713867188 }, "Y": { "type": "float", - "value": 77.99997711181641 + "value": 77.9999771118164 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -6088,7 +6088,7 @@ }, "X": { "type": "float", - "value": 27.3078784942627 + "value": 27.307878494262695 }, "Y": { "type": "float", @@ -6315,7 +6315,7 @@ }, "X": { "type": "float", - "value": 25.70379829406738 + "value": 25.703798294067383 }, "Y": { "type": "float", @@ -6323,7 +6323,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6342,7 +6342,7 @@ }, "Bearing": { "type": "float", - "value": 1.57079553604126 + "value": 1.5707955360412598 }, "BodyBag": { "type": "byte", @@ -7020,11 +7020,11 @@ }, "Y": { "type": "float", - "value": 77.35874176025391 + "value": 77.3587417602539 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7243,7 +7243,7 @@ }, "X": { "type": "float", - "value": 16.84509658813477 + "value": 16.845096588134766 }, "Y": { "type": "float", @@ -7251,7 +7251,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7470,15 +7470,15 @@ }, "X": { "type": "float", - "value": 35.02490615844727 + "value": 35.024906158447266 }, "Y": { "type": "float", - "value": 15.03289604187012 + "value": 15.032896041870117 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7697,7 +7697,7 @@ }, "X": { "type": "float", - "value": 25.73726272583008 + "value": 25.737262725830078 }, "Y": { "type": "float", @@ -7705,7 +7705,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7932,7 +7932,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -8006,11 +8006,11 @@ }, "YPosition": { "type": "float", - "value": 22.13113212585449 + "value": 22.131132125854492 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8059,19 +8059,19 @@ }, "XPosition": { "type": "float", - "value": 14.77963542938232 + "value": 14.779635429382324 }, "YOrientation": { "type": "float", - "value": -0.3136801421642304 + "value": -0.31368014216423035 }, "YPosition": { "type": "float", - "value": 45.37770843505859 + "value": 45.377708435058594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8120,7 +8120,7 @@ }, "XPosition": { "type": "float", - "value": 18.61751747131348 + "value": 18.617517471313477 }, "YOrientation": { "type": "float", @@ -8132,7 +8132,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8189,11 +8189,11 @@ }, "YPosition": { "type": "float", - "value": 40.82580184936523 + "value": 40.825801849365234 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8250,11 +8250,11 @@ }, "YPosition": { "type": "float", - "value": 44.11541366577148 + "value": 44.115413665771484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8307,7 +8307,7 @@ }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", @@ -8315,7 +8315,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/abandonedtowe4l2.git.json b/_module/git/abandonedtowe4l2.git.json index d5a505d..bc83c3f 100644 --- a/_module/git/abandonedtowe4l2.git.json +++ b/_module/git/abandonedtowe4l2.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 1.900000333786011 + "value": 1.9000003337860107 }, "Z": { "type": "float", @@ -788,11 +788,11 @@ }, "YPosition": { "type": "float", - "value": 16.86108016967773 + "value": 16.861080169677734 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -849,7 +849,7 @@ }, "YPosition": { "type": "float", - "value": 23.04142761230469 + "value": 23.041427612304688 }, "ZPosition": { "type": "float", diff --git a/_module/git/abandonedtowe4l3.git.json b/_module/git/abandonedtowe4l3.git.json index 068a575..3d790bf 100644 --- a/_module/git/abandonedtowe4l3.git.json +++ b/_module/git/abandonedtowe4l3.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 1.900000333786011 + "value": 1.9000003337860107 }, "Z": { "type": "float", @@ -780,7 +780,7 @@ }, "XPosition": { "type": "float", - "value": 20.64695358276367 + "value": 20.646953582763672 }, "YOrientation": { "type": "float", @@ -788,11 +788,11 @@ }, "YPosition": { "type": "float", - "value": 15.47132778167725 + "value": 15.471327781677246 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/abandonedtowe4l4.git.json b/_module/git/abandonedtowe4l4.git.json index 5b4074e..d0c8d35 100644 --- a/_module/git/abandonedtowe4l4.git.json +++ b/_module/git/abandonedtowe4l4.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 1.900000333786011 + "value": 1.9000003337860107 }, "Z": { "type": "float", @@ -515,7 +515,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -723,7 +723,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -946,7 +946,7 @@ }, "Y": { "type": "float", - "value": 13.66711902618408 + "value": 13.667119026184082 }, "Z": { "type": "float", @@ -1169,11 +1169,11 @@ }, "X": { "type": "float", - "value": 19.93547439575195 + "value": 19.935474395751953 }, "Y": { "type": "float", - "value": 13.75176239013672 + "value": 13.751762390136719 }, "Z": { "type": "float", @@ -1247,7 +1247,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -1255,7 +1255,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/abandonedtower.git.json b/_module/git/abandonedtower.git.json index 519d3fd..658b473 100644 --- a/_module/git/abandonedtower.git.json +++ b/_module/git/abandonedtower.git.json @@ -323,11 +323,11 @@ }, "PointY": { "type": "float", - "value": 2.597224950790405 + "value": 2.5972249507904053 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -342,7 +342,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -357,7 +357,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -372,7 +372,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -548,7 +548,7 @@ }, "XPosition": { "type": "float", - "value": 27.73715400695801 + "value": 27.737154006958008 }, "YOrientation": { "type": "float", @@ -556,7 +556,7 @@ }, "YPosition": { "type": "float", - "value": 27.70097732543945 + "value": 27.700977325439453 }, "ZPosition": { "type": "float", @@ -605,7 +605,7 @@ }, "XOrientation": { "type": "float", - "value": -1.231034366355743e-005 + "value": -0.000012310343663557433 }, "XPosition": { "type": "float", @@ -617,11 +617,11 @@ }, "YPosition": { "type": "float", - "value": 41.58648300170898 + "value": 41.586483001708984 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -678,7 +678,7 @@ }, "YPosition": { "type": "float", - "value": 13.68828868865967 + "value": 13.688288688659668 }, "ZPosition": { "type": "float", @@ -739,11 +739,11 @@ }, "YPosition": { "type": "float", - "value": 1.224296092987061 + "value": 1.2242960929870605 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/abandonedtower2.git.json b/_module/git/abandonedtower2.git.json index ec32e64..580caf4 100644 --- a/_module/git/abandonedtower2.git.json +++ b/_module/git/abandonedtower2.git.json @@ -323,11 +323,11 @@ }, "PointY": { "type": "float", - "value": 2.597224950790405 + "value": 2.5972249507904053 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -342,7 +342,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -357,7 +357,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -372,7 +372,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -548,7 +548,7 @@ }, "XPosition": { "type": "float", - "value": 20.66363334655762 + "value": 20.663633346557617 }, "YOrientation": { "type": "float", @@ -560,7 +560,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -609,7 +609,7 @@ }, "XPosition": { "type": "float", - "value": 11.18564605712891 + "value": 11.185646057128906 }, "YOrientation": { "type": "float", @@ -621,7 +621,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -682,7 +682,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -739,11 +739,11 @@ }, "YPosition": { "type": "float", - "value": 1.224296092987061 + "value": 1.2242960929870605 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -804,7 +804,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -861,11 +861,11 @@ }, "YPosition": { "type": "float", - "value": 41.74533843994141 + "value": 41.745338439941406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -922,11 +922,11 @@ }, "YPosition": { "type": "float", - "value": 59.02276229858398 + "value": 59.022762298583984 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/abandonedtower3.git.json b/_module/git/abandonedtower3.git.json index 7b872a2..e283fd2 100644 --- a/_module/git/abandonedtower3.git.json +++ b/_module/git/abandonedtower3.git.json @@ -256,11 +256,11 @@ }, "X": { "type": "float", - "value": 34.52999877929688 + "value": 34.529998779296875 }, "Y": { "type": "float", - "value": 34.52999877929688 + "value": 34.529998779296875 }, "Z": { "type": "float", @@ -321,11 +321,11 @@ }, "PointY": { "type": "float", - "value": 2.597224950790405 + "value": 2.5972249507904053 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -340,7 +340,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -355,7 +355,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -370,7 +370,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -558,7 +558,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -615,11 +615,11 @@ }, "YPosition": { "type": "float", - "value": 1.224296569824219 + "value": 1.2242965698242188 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/abandonedtower3l.git.json b/_module/git/abandonedtower3l.git.json index b55ba8e..129e615 100644 --- a/_module/git/abandonedtower3l.git.json +++ b/_module/git/abandonedtower3l.git.json @@ -940,11 +940,11 @@ }, "Y": { "type": "float", - "value": 27.94065475463867 + "value": 27.940654754638672 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1163,15 +1163,15 @@ }, "X": { "type": "float", - "value": 10.02179336547852 + "value": 10.021793365478516 }, "Y": { "type": "float", - "value": 26.96296310424805 + "value": 26.962963104248047 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -1394,7 +1394,7 @@ }, "Y": { "type": "float", - "value": 21.07417488098145 + "value": 21.074174880981445 }, "Z": { "type": "float", @@ -1617,15 +1617,15 @@ }, "X": { "type": "float", - "value": 28.70046424865723 + "value": 28.700464248657227 }, "Y": { "type": "float", - "value": 16.74032402038574 + "value": 16.740324020385742 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -1644,7 +1644,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -1848,11 +1848,11 @@ }, "Y": { "type": "float", - "value": 20.1430778503418 + "value": 20.143077850341797 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2075,7 +2075,7 @@ }, "Y": { "type": "float", - "value": 22.51030349731445 + "value": 22.510303497314453 }, "Z": { "type": "float", @@ -2533,7 +2533,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -2595,11 +2595,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 10.91736602783203 + "value": 10.917366027832031 }, "YOrientation": { "type": "float", @@ -2607,11 +2607,11 @@ }, "YPosition": { "type": "float", - "value": 24.71825218200684 + "value": 24.718252182006836 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2660,7 +2660,7 @@ }, "XPosition": { "type": "float", - "value": 31.16648483276367 + "value": 31.166484832763672 }, "YOrientation": { "type": "float", @@ -2672,7 +2672,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/abandonedtower4.git.json b/_module/git/abandonedtower4.git.json index c4cf01e..57e29e4 100644 --- a/_module/git/abandonedtower4.git.json +++ b/_module/git/abandonedtower4.git.json @@ -256,11 +256,11 @@ }, "X": { "type": "float", - "value": 44.90000152587891 + "value": 44.900001525878906 }, "Y": { "type": "float", - "value": 43.38000106811523 + "value": 43.380001068115234 }, "Z": { "type": "float", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.06326293945313 + "value": 10.063262939453125 }, "PointY": { "type": "float", @@ -340,14 +340,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.06326293945313 + "value": 10.063262939453125 }, "PointY": { "type": "float", @@ -355,14 +355,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointY": { "type": "float", @@ -370,7 +370,7 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } } ] @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1158180236816406 + "value": 0.11581802368164062 }, "ZOrientation": { "type": "float", @@ -554,11 +554,11 @@ }, "YPosition": { "type": "float", - "value": 1.067807197570801 + "value": 1.0678071975708008 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -603,7 +603,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454478666186333 + "value": 0.024544786661863327 }, "XPosition": { "type": "float", @@ -615,11 +615,11 @@ }, "YPosition": { "type": "float", - "value": 39.81762313842773 + "value": 39.817623138427734 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -668,7 +668,7 @@ }, "XPosition": { "type": "float", - "value": 30.19664573669434 + "value": 30.196645736694336 }, "YOrientation": { "type": "float", @@ -676,11 +676,11 @@ }, "YPosition": { "type": "float", - "value": 21.51488876342773 + "value": 21.514888763427734 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -729,7 +729,7 @@ }, "XPosition": { "type": "float", - "value": 52.36632919311523 + "value": 52.366329193115234 }, "YOrientation": { "type": "float", @@ -737,11 +737,11 @@ }, "YPosition": { "type": "float", - "value": 14.86351776123047 + "value": 14.863517761230469 }, "ZPosition": { "type": "float", - "value": 0.1181821823120117 + "value": 0.11818218231201172 } } ] diff --git a/_module/git/abandonedtower4l.git.json b/_module/git/abandonedtower4l.git.json index f6c1d36..fe56bef 100644 --- a/_module/git/abandonedtower4l.git.json +++ b/_module/git/abandonedtower4l.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590356826782 + "value": -3.1415903568267822 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 1.900000333786011 + "value": 1.9000003337860107 }, "Z": { "type": "float", @@ -557,11 +557,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454335615038872 + "value": 0.024543356150388718 }, "XPosition": { "type": "float", - "value": 16.45956230163574 + "value": 16.459562301635742 }, "YOrientation": { "type": "float", @@ -569,11 +569,11 @@ }, "YPosition": { "type": "float", - "value": 18.86506080627441 + "value": 18.865060806274414 }, "ZPosition": { "type": "float", - "value": -5.211829829931958e-006 + "value": -0.000005211829829931958 } } ] diff --git a/_module/git/abandonedtowerle.git.json b/_module/git/abandonedtowerle.git.json index 3f54daf..66dd0fd 100644 --- a/_module/git/abandonedtowerle.git.json +++ b/_module/git/abandonedtowerle.git.json @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -1374,7 +1374,7 @@ }, "X": { "type": "float", - "value": 41.18088531494141 + "value": 41.180885314941406 }, "Y": { "type": "float", @@ -1382,7 +1382,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1609,7 +1609,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1828,7 +1828,7 @@ }, "X": { "type": "float", - "value": 29.07772636413574 + "value": 29.077726364135742 }, "Y": { "type": "float", @@ -1836,7 +1836,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2063,7 +2063,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2082,7 +2082,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -2282,7 +2282,7 @@ }, "X": { "type": "float", - "value": 30.02952575683594 + "value": 30.029525756835938 }, "Y": { "type": "float", @@ -2290,7 +2290,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -2352,7 +2352,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -2364,7 +2364,7 @@ }, "YPosition": { "type": "float", - "value": 25.16337203979492 + "value": 25.163372039794922 }, "ZPosition": { "type": "float", @@ -2413,7 +2413,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -2425,7 +2425,7 @@ }, "YPosition": { "type": "float", - "value": 43.33742523193359 + "value": 43.337425231933594 }, "ZPosition": { "type": "float", @@ -2474,7 +2474,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -2486,11 +2486,11 @@ }, "YPosition": { "type": "float", - "value": 62.55618286132813 + "value": 62.556182861328125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2535,7 +2535,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -2551,7 +2551,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/adeepcavern.git.json b/_module/git/adeepcavern.git.json index 0f7d10b..5a8ee53 100644 --- a/_module/git/adeepcavern.git.json +++ b/_module/git/adeepcavern.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -945,11 +945,11 @@ }, "Y": { "type": "float", - "value": 92.02748870849609 + "value": 92.0274887084961 }, "Z": { "type": "float", - "value": 2.980232238769531e-008 + "value": 2.9802322387695312e-8 } }, { @@ -1403,7 +1403,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1630,7 +1630,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1853,7 +1853,7 @@ }, "Y": { "type": "float", - "value": 93.94583129882813 + "value": 93.94583129882812 }, "Z": { "type": "float", @@ -2080,7 +2080,7 @@ }, "Y": { "type": "float", - "value": 96.42690277099609 + "value": 96.4269027709961 }, "Z": { "type": "float", @@ -2303,11 +2303,11 @@ }, "X": { "type": "float", - "value": 47.15952301025391 + "value": 47.159523010253906 }, "Y": { "type": "float", - "value": 92.88613128662109 + "value": 92.8861312866211 }, "Z": { "type": "float", @@ -2370,7 +2370,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -2710,7 +2710,7 @@ }, "XPosition": { "type": "float", - "value": 77.10178375244141 + "value": 77.1017837524414 }, "YPosition": { "type": "float", @@ -2718,7 +2718,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000000953674316 + "value": 1.0000009536743164 } } ] @@ -2877,7 +2877,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3003,7 +3003,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3056,7 +3056,7 @@ }, "YOrientation": { "type": "float", - "value": -0.8932232260704041 + "value": -0.893223226070404 }, "YPosition": { "type": "float", @@ -3064,7 +3064,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3113,11 +3113,11 @@ }, "XPosition": { "type": "float", - "value": 20.72946739196777 + "value": 20.729467391967773 }, "YOrientation": { "type": "float", - "value": -0.8932232260704041 + "value": -0.893223226070404 }, "YPosition": { "type": "float", @@ -3125,7 +3125,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3182,11 +3182,11 @@ }, "YPosition": { "type": "float", - "value": 31.83060455322266 + "value": 31.830604553222656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3247,7 +3247,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3292,7 +3292,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -3308,7 +3308,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3361,7 +3361,7 @@ }, "YOrientation": { "type": "float", - "value": 0.1950917541980743 + "value": 0.19509175419807434 }, "YPosition": { "type": "float", @@ -3369,7 +3369,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3414,7 +3414,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -3426,11 +3426,11 @@ }, "YPosition": { "type": "float", - "value": 19.81047058105469 + "value": 19.810470581054688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3475,7 +3475,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -3491,7 +3491,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3536,7 +3536,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -3552,7 +3552,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/adoncaverns.git.json b/_module/git/adoncaverns.git.json index 2167206..e31afe6 100644 --- a/_module/git/adoncaverns.git.json +++ b/_module/git/adoncaverns.git.json @@ -504,7 +504,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -789,7 +789,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -912,7 +912,7 @@ }, "XPosition": { "type": "float", - "value": 16.97023391723633 + "value": 16.970233917236328 }, "YPosition": { "type": "float", @@ -974,7 +974,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -1424,7 +1424,7 @@ }, "XPosition": { "type": "float", - "value": 20.35191917419434 + "value": 20.351919174194336 }, "YOrientation": { "type": "float", @@ -1436,7 +1436,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1485,7 +1485,7 @@ }, "XPosition": { "type": "float", - "value": 20.16345024108887 + "value": 20.163450241088867 }, "YOrientation": { "type": "float", @@ -1493,7 +1493,7 @@ }, "YPosition": { "type": "float", - "value": 33.06786727905273 + "value": 33.067867279052734 }, "ZPosition": { "type": "float", @@ -1546,7 +1546,7 @@ }, "XPosition": { "type": "float", - "value": 41.00845336914063 + "value": 41.008453369140625 }, "YOrientation": { "type": "float", @@ -1554,11 +1554,11 @@ }, "YPosition": { "type": "float", - "value": 7.799094676971436 + "value": 7.7990946769714355 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1607,7 +1607,7 @@ }, "XPosition": { "type": "float", - "value": 49.83175659179688 + "value": 49.831756591796875 }, "YOrientation": { "type": "float", @@ -1615,11 +1615,11 @@ }, "YPosition": { "type": "float", - "value": 40.66709136962891 + "value": 40.667091369628906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1680,7 +1680,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1741,7 +1741,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1802,7 +1802,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1863,7 +1863,7 @@ }, "ZPosition": { "type": "float", - "value": 4.172325134277344e-007 + "value": 0.0000004172325134277344 } }, { @@ -1920,11 +1920,11 @@ }, "YPosition": { "type": "float", - "value": 92.02822113037109 + "value": 92.0282211303711 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1985,7 +1985,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/adonvillage.git.json b/_module/git/adonvillage.git.json index d48c228..b59634e 100644 --- a/_module/git/adonvillage.git.json +++ b/_module/git/adonvillage.git.json @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -696,7 +696,7 @@ }, "X": { "type": "float", - "value": 117.6999969482422 + "value": 117.69999694824219 }, "Y": { "type": "float", @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1134,7 +1134,7 @@ }, "X": { "type": "float", - "value": 132.6000061035156 + "value": 132.60000610351562 }, "Y": { "type": "float", @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": 1.474802970886231 + "value": 1.4748029708862305 }, "CloseLockDC": { "type": "byte", @@ -1357,11 +1357,11 @@ }, "Y": { "type": "float", - "value": 113.8000030517578 + "value": 113.80000305175781 }, "Z": { "type": "float", - "value": -0.1000000014901161 + "value": -0.10000000149011612 } } ] @@ -1593,11 +1593,11 @@ }, "X": { "type": "float", - "value": 115.4712677001953 + "value": 115.47126770019531 }, "Y": { "type": "float", - "value": 103.9322891235352 + "value": 103.93228912353516 }, "Z": { "type": "float", @@ -1824,11 +1824,11 @@ }, "Y": { "type": "float", - "value": 114.3744354248047 + "value": 114.37443542480469 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2047,15 +2047,15 @@ }, "X": { "type": "float", - "value": 138.3182220458984 + "value": 138.31822204589844 }, "Y": { "type": "float", - "value": 139.2258148193359 + "value": 139.22581481933594 }, "Z": { "type": "float", - "value": -4.172325134277344e-007 + "value": -0.0000004172325134277344 } }, { @@ -2282,7 +2282,7 @@ }, "Z": { "type": "float", - "value": 0.009999962523579598 + "value": 0.009999962523579597 } }, { @@ -2501,15 +2501,15 @@ }, "X": { "type": "float", - "value": 114.3062896728516 + "value": 114.30628967285156 }, "Y": { "type": "float", - "value": 78.74526214599609 + "value": 78.7452621459961 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -2728,11 +2728,11 @@ }, "X": { "type": "float", - "value": 120.9919509887695 + "value": 120.99195098876953 }, "Y": { "type": "float", - "value": 40.55642700195313 + "value": 40.556427001953125 }, "Z": { "type": "float", @@ -2955,15 +2955,15 @@ }, "X": { "type": "float", - "value": 142.6638336181641 + "value": 142.66383361816406 }, "Y": { "type": "float", - "value": 53.29434967041016 + "value": 53.294349670410156 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -3182,15 +3182,15 @@ }, "X": { "type": "float", - "value": 141.7778472900391 + "value": 141.77784729003906 }, "Y": { "type": "float", - "value": 31.97877883911133 + "value": 31.978778839111328 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -3409,11 +3409,11 @@ }, "X": { "type": "float", - "value": 130.5503997802734 + "value": 130.55039978027344 }, "Y": { "type": "float", - "value": 138.0224456787109 + "value": 138.02244567871094 }, "Z": { "type": "float", @@ -3640,7 +3640,7 @@ }, "Y": { "type": "float", - "value": 133.0020141601563 + "value": 133.00201416015625 }, "Z": { "type": "float", @@ -3867,11 +3867,11 @@ }, "Y": { "type": "float", - "value": 104.5354766845703 + "value": 104.53547668457031 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -4090,15 +4090,15 @@ }, "X": { "type": "float", - "value": 109.2219314575195 + "value": 109.22193145751953 }, "Y": { "type": "float", - "value": 129.3422698974609 + "value": 129.34226989746094 }, "Z": { "type": "float", - "value": -5.960464477539063e-008 + "value": -5.960464477539063e-8 } }, { @@ -4317,7 +4317,7 @@ }, "X": { "type": "float", - "value": 102.9092330932617 + "value": 102.90923309326172 }, "Y": { "type": "float", @@ -4548,11 +4548,11 @@ }, "Y": { "type": "float", - "value": 134.8183441162109 + "value": 134.81834411621094 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -4775,11 +4775,11 @@ }, "Y": { "type": "float", - "value": 126.5236206054688 + "value": 126.52362060546875 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -4998,15 +4998,15 @@ }, "X": { "type": "float", - "value": 73.93320465087891 + "value": 73.9332046508789 }, "Y": { "type": "float", - "value": 112.0158233642578 + "value": 112.01582336425781 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -5225,11 +5225,11 @@ }, "X": { "type": "float", - "value": 88.87222290039063 + "value": 88.87222290039062 }, "Y": { "type": "float", - "value": 88.40444946289063 + "value": 88.40444946289062 }, "Z": { "type": "float", @@ -5460,7 +5460,7 @@ }, "Z": { "type": "float", - "value": 1.490116119384766e-007 + "value": 0.00000014901161193847656 } }, { @@ -5687,7 +5687,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -5914,7 +5914,7 @@ }, "Z": { "type": "float", - "value": 0.01000029314309359 + "value": 0.010000293143093586 } }, { @@ -6133,7 +6133,7 @@ }, "X": { "type": "float", - "value": 59.56772613525391 + "value": 59.567726135253906 }, "Y": { "type": "float", @@ -6141,7 +6141,7 @@ }, "Z": { "type": "float", - "value": 0.01000000163912773 + "value": 0.010000001639127731 } }, { @@ -6595,7 +6595,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -6814,11 +6814,11 @@ }, "X": { "type": "float", - "value": 100.9977188110352 + "value": 100.99771881103516 }, "Y": { "type": "float", - "value": 40.47689056396484 + "value": 40.476890563964844 }, "Z": { "type": "float", @@ -7045,7 +7045,7 @@ }, "Y": { "type": "float", - "value": 17.64777565002441 + "value": 17.647775650024414 }, "Z": { "type": "float", @@ -7276,7 +7276,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7499,11 +7499,11 @@ }, "Y": { "type": "float", - "value": 17.65336227416992 + "value": 17.653362274169922 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7722,15 +7722,15 @@ }, "X": { "type": "float", - "value": 110.3678894042969 + "value": 110.36788940429688 }, "Y": { "type": "float", - "value": 20.12479782104492 + "value": 20.124797821044922 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7949,15 +7949,15 @@ }, "X": { "type": "float", - "value": 17.19963645935059 + "value": 17.199636459350586 }, "Y": { "type": "float", - "value": 106.8833770751953 + "value": 106.88337707519531 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8176,15 +8176,15 @@ }, "X": { "type": "float", - "value": 30.23040580749512 + "value": 30.230405807495117 }, "Y": { "type": "float", - "value": 101.4445419311523 + "value": 101.44454193115234 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8411,7 +8411,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8630,7 +8630,7 @@ }, "X": { "type": "float", - "value": 39.06829452514648 + "value": 39.068294525146484 }, "Y": { "type": "float", @@ -8638,7 +8638,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8861,11 +8861,11 @@ }, "Y": { "type": "float", - "value": 102.3870391845703 + "value": 102.38703918457031 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9092,7 +9092,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9315,11 +9315,11 @@ }, "Y": { "type": "float", - "value": 61.13579940795898 + "value": 61.135799407958984 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9546,7 +9546,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9769,11 +9769,11 @@ }, "Y": { "type": "float", - "value": 142.0026702880859 + "value": 142.00267028808594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10219,11 +10219,11 @@ }, "X": { "type": "float", - "value": 125.3058395385742 + "value": 125.30583953857422 }, "Y": { "type": "float", - "value": 131.8709106445313 + "value": 131.87091064453125 }, "Z": { "type": "float", @@ -10246,7 +10246,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -10454,7 +10454,7 @@ }, "Z": { "type": "float", - "value": 0.0100001310929656 + "value": 0.010000131092965603 } } ] @@ -10512,7 +10512,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -11123,7 +11123,7 @@ }, "ZPosition": { "type": "float", - "value": -0.1037254333496094 + "value": -0.10372543334960938 } }, { @@ -11240,7 +11240,7 @@ }, "YPosition": { "type": "float", - "value": 24.94294738769531 + "value": 24.942947387695312 }, "ZPosition": { "type": "float", @@ -11557,11 +11557,11 @@ }, "PointY": { "type": "float", - "value": 3.564330101013184 + "value": 3.5643301010131836 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -11576,7 +11576,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -11682,7 +11682,7 @@ }, "XPosition": { "type": "float", - "value": 130.0030822753906 + "value": 130.00308227539062 }, "YOrientation": { "type": "float", @@ -11690,7 +11690,7 @@ }, "YPosition": { "type": "float", - "value": 0.07885646820068359 + "value": 0.0788564682006836 }, "ZOrientation": { "type": "float", @@ -11726,11 +11726,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.252883911132813 + "value": -3.2528839111328125 }, "PointY": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointZ": { "type": "float", @@ -11741,7 +11741,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.186508178710938 + "value": -3.1865081787109375 }, "PointY": { "type": "float", @@ -11760,7 +11760,7 @@ }, "PointY": { "type": "float", - "value": -10.22339248657227 + "value": -10.223392486572266 }, "PointZ": { "type": "float", @@ -11884,7 +11884,7 @@ }, "XPosition": { "type": "float", - "value": 149.8327026367188 + "value": 149.83270263671875 }, "YOrientation": { "type": "float", @@ -11936,7 +11936,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -11958,11 +11958,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.09061813354492 + "value": 10.090618133544922 }, "PointY": { "type": "float", - "value": -3.717575073242188 + "value": -3.7175750732421875 }, "PointZ": { "type": "float", @@ -12094,7 +12094,7 @@ }, "YPosition": { "type": "float", - "value": 149.8475494384766 + "value": 149.84754943847656 }, "ZOrientation": { "type": "float", @@ -12145,7 +12145,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.995010375976563 + "value": 9.995010375976562 }, "PointY": { "type": "float", @@ -12160,11 +12160,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.995010375976563 + "value": 9.995010375976562 }, "PointY": { "type": "float", - "value": 2.120148658752441 + "value": 2.1201486587524414 }, "PointZ": { "type": "float", @@ -12175,11 +12175,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.52587890625e-005 + "value": 0.0000152587890625 }, "PointY": { "type": "float", - "value": 2.120148658752441 + "value": 2.1201486587524414 }, "PointZ": { "type": "float", @@ -12379,7 +12379,7 @@ }, "XPosition": { "type": "float", - "value": 134.9715423583984 + "value": 134.97154235839844 }, "YOrientation": { "type": "float", @@ -12387,11 +12387,11 @@ }, "YPosition": { "type": "float", - "value": 1.861021757125855 + "value": 1.8610217571258545 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12440,7 +12440,7 @@ }, "XPosition": { "type": "float", - "value": 128.6071929931641 + "value": 128.60719299316406 }, "YOrientation": { "type": "float", @@ -12448,7 +12448,7 @@ }, "YPosition": { "type": "float", - "value": 127.2051162719727 + "value": 127.20511627197266 }, "ZPosition": { "type": "float", @@ -12581,7 +12581,7 @@ }, "XPosition": { "type": "float", - "value": 128.7729644775391 + "value": 128.77296447753906 }, "YOrientation": { "type": "float", @@ -12589,11 +12589,11 @@ }, "YPosition": { "type": "float", - "value": 118.7512741088867 + "value": 118.75127410888672 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12674,7 +12674,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12735,7 +12735,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12788,7 +12788,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -12796,7 +12796,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12853,11 +12853,11 @@ }, "YPosition": { "type": "float", - "value": 38.63152694702148 + "value": 38.631526947021484 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -12910,7 +12910,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -12918,7 +12918,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12979,7 +12979,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13048,7 +13048,7 @@ }, "XPosition": { "type": "float", - "value": 13.43145656585693 + "value": 13.431456565856934 }, "YOrientation": { "type": "float", @@ -13060,7 +13060,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13121,7 +13121,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13182,7 +13182,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13235,15 +13235,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 100.5371932983398 + "value": 100.53719329833984 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13292,11 +13292,11 @@ }, "XPosition": { "type": "float", - "value": 56.55898284912109 + "value": 56.558982849121094 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -13304,7 +13304,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13357,15 +13357,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 90.09377288818359 + "value": 90.0937728881836 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13442,11 +13442,11 @@ }, "YPosition": { "type": "float", - "value": 128.5749359130859 + "value": 128.57493591308594 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13515,19 +13515,19 @@ }, "XPosition": { "type": "float", - "value": 31.9974250793457 + "value": 31.997425079345703 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 119.7892608642578 + "value": 119.78926086425781 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13608,7 +13608,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13657,11 +13657,11 @@ }, "XPosition": { "type": "float", - "value": 136.5284118652344 + "value": 136.52841186523438 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -13669,7 +13669,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13718,7 +13718,7 @@ }, "XPosition": { "type": "float", - "value": 109.1074295043945 + "value": 109.10742950439453 }, "YOrientation": { "type": "float", @@ -13730,7 +13730,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13811,7 +13811,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13868,11 +13868,11 @@ }, "YPosition": { "type": "float", - "value": 142.5678100585938 + "value": 142.56781005859375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13933,7 +13933,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13978,7 +13978,7 @@ }, "XOrientation": { "type": "float", - "value": 0.09802635014057159 + "value": 0.0980263501405716 }, "XPosition": { "type": "float", @@ -13994,7 +13994,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14043,11 +14043,11 @@ }, "XPosition": { "type": "float", - "value": 118.1050415039063 + "value": 118.10504150390625 }, "YOrientation": { "type": "float", - "value": -0.7572054266929627 + "value": -0.7572054266929626 }, "YPosition": { "type": "float", @@ -14055,7 +14055,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14104,7 +14104,7 @@ }, "XPosition": { "type": "float", - "value": 129.0457153320313 + "value": 129.04571533203125 }, "YOrientation": { "type": "float", @@ -14116,7 +14116,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14161,11 +14161,11 @@ }, "XOrientation": { "type": "float", - "value": 0.9807849526405335 + "value": 0.9807849526405334 }, "XPosition": { "type": "float", - "value": 145.0972290039063 + "value": 145.09722900390625 }, "YOrientation": { "type": "float", @@ -14177,7 +14177,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14230,7 +14230,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -14238,7 +14238,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14295,11 +14295,11 @@ }, "YPosition": { "type": "float", - "value": 147.9887542724609 + "value": 147.98875427246094 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14368,7 +14368,7 @@ }, "XPosition": { "type": "float", - "value": 19.7807502746582 + "value": 19.780750274658203 }, "YOrientation": { "type": "float", @@ -14376,11 +14376,11 @@ }, "YPosition": { "type": "float", - "value": 56.58629989624023 + "value": 56.586299896240234 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14449,11 +14449,11 @@ }, "XPosition": { "type": "float", - "value": 113.0879058837891 + "value": 113.08790588378906 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -14461,7 +14461,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14530,7 +14530,7 @@ }, "XPosition": { "type": "float", - "value": 132.2431793212891 + "value": 132.24317932128906 }, "YOrientation": { "type": "float", @@ -14538,11 +14538,11 @@ }, "YPosition": { "type": "float", - "value": 130.6862640380859 + "value": 130.68626403808594 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14603,7 +14603,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14660,11 +14660,11 @@ }, "YPosition": { "type": "float", - "value": 102.4584350585938 + "value": 102.45843505859375 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14709,7 +14709,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3368897140026093 + "value": -0.33688971400260925 }, "XPosition": { "type": "float", @@ -14721,11 +14721,11 @@ }, "YPosition": { "type": "float", - "value": 101.7538757324219 + "value": 101.75387573242188 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14778,7 +14778,7 @@ }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", @@ -14786,7 +14786,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14831,7 +14831,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2191026955842972 + "value": -0.21910269558429718 }, "XPosition": { "type": "float", @@ -14847,7 +14847,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14904,11 +14904,11 @@ }, "YPosition": { "type": "float", - "value": 110.1937713623047 + "value": 110.19377136230469 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/adonwoods.git.json b/_module/git/adonwoods.git.json index 5810522..86dea6b 100644 --- a/_module/git/adonwoods.git.json +++ b/_module/git/adonwoods.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 133.8099975585938 + "value": 133.80999755859375 }, "Z": { "type": "float", @@ -475,7 +475,7 @@ }, "X": { "type": "float", - "value": 135.2599945068359 + "value": 135.25999450683594 }, "Y": { "type": "float", @@ -502,7 +502,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -692,7 +692,7 @@ }, "X": { "type": "float", - "value": 26.29999923706055 + "value": 26.299999237060547 }, "Y": { "type": "float", @@ -940,7 +940,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1167,7 +1167,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1386,7 +1386,7 @@ }, "X": { "type": "float", - "value": 106.3291778564453 + "value": 106.32917785644531 }, "Y": { "type": "float", @@ -1394,7 +1394,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1613,15 +1613,15 @@ }, "X": { "type": "float", - "value": 116.7338790893555 + "value": 116.73387908935547 }, "Y": { "type": "float", - "value": 44.68935394287109 + "value": 44.689353942871094 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1840,15 +1840,15 @@ }, "X": { "type": "float", - "value": 120.6106414794922 + "value": 120.61064147949219 }, "Y": { "type": "float", - "value": 112.8059234619141 + "value": 112.80592346191406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2071,11 +2071,11 @@ }, "Y": { "type": "float", - "value": 139.8580932617188 + "value": 139.85809326171875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2298,11 +2298,11 @@ }, "Y": { "type": "float", - "value": 139.1644439697266 + "value": 139.16444396972656 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2521,7 +2521,7 @@ }, "X": { "type": "float", - "value": 94.77212524414063 + "value": 94.77212524414062 }, "Y": { "type": "float", @@ -2529,7 +2529,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2748,11 +2748,11 @@ }, "X": { "type": "float", - "value": 121.4007110595703 + "value": 121.40071105957031 }, "Y": { "type": "float", - "value": 30.78191184997559 + "value": 30.781911849975586 }, "Z": { "type": "float", @@ -2979,11 +2979,11 @@ }, "Y": { "type": "float", - "value": 10.48148536682129 + "value": 10.481485366821289 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3210,7 +3210,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3429,15 +3429,15 @@ }, "X": { "type": "float", - "value": 41.28366088867188 + "value": 41.283660888671875 }, "Y": { "type": "float", - "value": 101.8728637695313 + "value": 101.87286376953125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3656,15 +3656,15 @@ }, "X": { "type": "float", - "value": 10.82976531982422 + "value": 10.829765319824219 }, "Y": { "type": "float", - "value": 108.9827499389648 + "value": 108.98274993896484 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3883,7 +3883,7 @@ }, "X": { "type": "float", - "value": 31.11892890930176 + "value": 31.118928909301758 }, "Y": { "type": "float", @@ -3891,7 +3891,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4114,7 +4114,7 @@ }, "Y": { "type": "float", - "value": 121.6417999267578 + "value": 121.64179992675781 }, "Z": { "type": "float", @@ -4341,11 +4341,11 @@ }, "Y": { "type": "float", - "value": 114.358512878418 + "value": 114.35851287841797 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4568,11 +4568,11 @@ }, "Y": { "type": "float", - "value": 102.9133453369141 + "value": 102.91334533691406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4799,7 +4799,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5026,7 +5026,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5249,11 +5249,11 @@ }, "Y": { "type": "float", - "value": 137.2488403320313 + "value": 137.24884033203125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5480,7 +5480,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5703,11 +5703,11 @@ }, "Y": { "type": "float", - "value": 57.53794097900391 + "value": 57.537940979003906 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5926,7 +5926,7 @@ }, "X": { "type": "float", - "value": 10.82170486450195 + "value": 10.821704864501953 }, "Y": { "type": "float", @@ -5934,7 +5934,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6161,7 +6161,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6388,7 +6388,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6615,7 +6615,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6842,7 +6842,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7069,7 +7069,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7292,11 +7292,11 @@ }, "Y": { "type": "float", - "value": 90.79616546630859 + "value": 90.7961654663086 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7515,15 +7515,15 @@ }, "X": { "type": "float", - "value": 128.4966430664063 + "value": 128.49664306640625 }, "Y": { "type": "float", - "value": 71.37356567382813 + "value": 71.37356567382812 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7746,11 +7746,11 @@ }, "Y": { "type": "float", - "value": 112.1041564941406 + "value": 112.10415649414062 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7977,7 +7977,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8200,11 +8200,11 @@ }, "Y": { "type": "float", - "value": 128.5782623291016 + "value": 128.57826232910156 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8427,11 +8427,11 @@ }, "Y": { "type": "float", - "value": 140.3702545166016 + "value": 140.37025451660156 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8654,11 +8654,11 @@ }, "Y": { "type": "float", - "value": 71.35476684570313 + "value": 71.35476684570312 }, "Z": { "type": "float", - "value": 0.01000076904892921 + "value": 0.010000769048929214 } }, { @@ -8877,7 +8877,7 @@ }, "X": { "type": "float", - "value": 142.3390502929688 + "value": 142.33905029296875 }, "Y": { "type": "float", @@ -8885,7 +8885,7 @@ }, "Z": { "type": "float", - "value": 0.01000026427209377 + "value": 0.010000264272093773 } }, { @@ -9112,7 +9112,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9331,7 +9331,7 @@ }, "X": { "type": "float", - "value": 141.1264801025391 + "value": 141.12648010253906 }, "Y": { "type": "float", @@ -9339,7 +9339,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9566,7 +9566,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9789,11 +9789,11 @@ }, "Y": { "type": "float", - "value": 17.32762145996094 + "value": 17.327621459960938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10020,7 +10020,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10247,7 +10247,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10474,7 +10474,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10701,7 +10701,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10928,7 +10928,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11147,7 +11147,7 @@ }, "X": { "type": "float", - "value": 47.75333404541016 + "value": 47.753334045410156 }, "Y": { "type": "float", @@ -11155,7 +11155,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11382,7 +11382,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11609,7 +11609,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11836,7 +11836,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12055,15 +12055,15 @@ }, "X": { "type": "float", - "value": 111.4277191162109 + "value": 111.42771911621094 }, "Y": { "type": "float", - "value": 123.5574035644531 + "value": 123.55740356445312 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12286,11 +12286,11 @@ }, "Y": { "type": "float", - "value": 122.1700592041016 + "value": 122.17005920410156 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] @@ -12348,7 +12348,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -12709,7 +12709,7 @@ }, "XPosition": { "type": "float", - "value": 74.95676422119141 + "value": 74.9567642211914 }, "YPosition": { "type": "float", @@ -12717,7 +12717,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } } ] @@ -12758,11 +12758,11 @@ }, "PointY": { "type": "float", - "value": -10.01541900634766 + "value": -10.015419006347656 }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } }, { @@ -12773,7 +12773,7 @@ }, "PointY": { "type": "float", - "value": -10.01542663574219 + "value": -10.015426635742188 }, "PointZ": { "type": "float", @@ -12818,7 +12818,7 @@ }, "PointY": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointZ": { "type": "float", @@ -12927,7 +12927,7 @@ }, "XPosition": { "type": "float", - "value": 149.7459564208984 + "value": 149.74595642089844 }, "YOrientation": { "type": "float", @@ -12935,7 +12935,7 @@ }, "YPosition": { "type": "float", - "value": 109.9824295043945 + "value": 109.98242950439453 }, "ZOrientation": { "type": "float", @@ -13001,11 +13001,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.11113739013672 + "value": 10.111137390136719 }, "PointY": { "type": "float", - "value": 0.04012203216552734 + "value": 0.040122032165527344 }, "PointZ": { "type": "float", @@ -13016,11 +13016,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.11113739013672 + "value": 10.111137390136719 }, "PointY": { "type": "float", - "value": 2.487658023834229 + "value": 2.4876580238342285 }, "PointZ": { "type": "float", @@ -13031,11 +13031,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointY": { "type": "float", - "value": 2.527781486511231 + "value": 2.5277814865112305 }, "PointZ": { "type": "float", @@ -13152,7 +13152,7 @@ }, "YPosition": { "type": "float", - "value": 0.01740789413452148 + "value": 0.017407894134521484 }, "ZOrientation": { "type": "float", @@ -13192,7 +13192,7 @@ }, "PointY": { "type": "float", - "value": -7.891708374023438 + "value": -7.8917083740234375 }, "PointZ": { "type": "float", @@ -13207,7 +13207,7 @@ }, "PointY": { "type": "float", - "value": -7.891708374023438 + "value": -7.8917083740234375 }, "PointZ": { "type": "float", @@ -13226,22 +13226,22 @@ }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -3.512252807617188 + "value": -3.5122528076171875 }, "PointY": { "type": "float", - "value": 3.814697265625e-006 + "value": 0.000003814697265625 }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } } ] @@ -13347,7 +13347,7 @@ }, "XPosition": { "type": "float", - "value": 149.5297698974609 + "value": 149.52976989746094 }, "YOrientation": { "type": "float", @@ -13421,11 +13421,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointY": { "type": "float", - "value": -1.972946166992188 + "value": -1.9729461669921875 }, "PointZ": { "type": "float", @@ -13564,7 +13564,7 @@ }, "XPosition": { "type": "float", - "value": 100.0131301879883 + "value": 100.01313018798828 }, "YOrientation": { "type": "float", @@ -13572,7 +13572,7 @@ }, "YPosition": { "type": "float", - "value": 149.6129302978516 + "value": 149.61293029785156 }, "ZOrientation": { "type": "float", @@ -13608,11 +13608,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.099143981933594 + "value": -2.0991439819335938 }, "PointY": { "type": "float", - "value": 10.70835113525391 + "value": 10.708351135253906 }, "PointZ": { "type": "float", @@ -13623,7 +13623,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.889656066894531 + "value": -1.8896560668945312 }, "PointY": { "type": "float", @@ -13646,18 +13646,18 @@ }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.5252761840820313 + "value": 0.5252761840820312 }, "PointY": { "type": "float", - "value": 11.02328491210938 + "value": 11.023284912109375 }, "PointZ": { "type": "float", @@ -13767,7 +13767,7 @@ }, "XPosition": { "type": "float", - "value": 121.4122695922852 + "value": 121.41226959228516 }, "YOrientation": { "type": "float", @@ -13775,7 +13775,7 @@ }, "YPosition": { "type": "float", - "value": 98.07289886474609 + "value": 98.0728988647461 }, "ZOrientation": { "type": "float", @@ -13881,7 +13881,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -13889,7 +13889,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13934,11 +13934,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0245485994964838 + "value": -0.024548599496483803 }, "XPosition": { "type": "float", - "value": 10.26924228668213 + "value": 10.269242286682129 }, "YOrientation": { "type": "float", @@ -13950,7 +13950,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13995,11 +13995,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0245485994964838 + "value": -0.024548599496483803 }, "XPosition": { "type": "float", - "value": 29.81169128417969 + "value": 29.811691284179688 }, "YOrientation": { "type": "float", @@ -14011,7 +14011,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14056,7 +14056,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0245485994964838 + "value": -0.024548599496483803 }, "XPosition": { "type": "float", @@ -14072,7 +14072,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14129,11 +14129,11 @@ }, "YPosition": { "type": "float", - "value": 29.97893142700195 + "value": 29.978931427001953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14194,7 +14194,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14243,7 +14243,7 @@ }, "XPosition": { "type": "float", - "value": 20.56294631958008 + "value": 20.562946319580078 }, "YOrientation": { "type": "float", @@ -14251,11 +14251,11 @@ }, "YPosition": { "type": "float", - "value": 128.8629302978516 + "value": 128.86293029785156 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14300,7 +14300,7 @@ }, "XOrientation": { "type": "float", - "value": 0.4052406549453735 + "value": 0.40524065494537354 }, "XPosition": { "type": "float", @@ -14316,7 +14316,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14373,11 +14373,11 @@ }, "YPosition": { "type": "float", - "value": 119.8435821533203 + "value": 119.84358215332031 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14438,7 +14438,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14499,7 +14499,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14568,7 +14568,7 @@ }, "XPosition": { "type": "float", - "value": 139.9795837402344 + "value": 139.97958374023438 }, "YOrientation": { "type": "float", @@ -14576,11 +14576,11 @@ }, "YPosition": { "type": "float", - "value": 140.2618103027344 + "value": 140.26181030273438 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14649,7 +14649,7 @@ }, "XPosition": { "type": "float", - "value": 137.0134582519531 + "value": 137.01345825195312 }, "YOrientation": { "type": "float", @@ -14661,7 +14661,7 @@ }, "ZPosition": { "type": "float", - "value": 0.03093492984771729 + "value": 0.030934929847717285 } }, { @@ -14738,11 +14738,11 @@ }, "YPosition": { "type": "float", - "value": 30.11247634887695 + "value": 30.112476348876953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14819,11 +14819,11 @@ }, "YPosition": { "type": "float", - "value": 18.76907157897949 + "value": 18.769071578979492 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14888,7 +14888,7 @@ }, "XOrientation": { "type": "float", - "value": 0.8175849318504334 + "value": 0.8175849318504333 }, "XPosition": { "type": "float", @@ -14900,11 +14900,11 @@ }, "YPosition": { "type": "float", - "value": 51.42020416259766 + "value": 51.420204162597656 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14973,7 +14973,7 @@ }, "XPosition": { "type": "float", - "value": 112.0294876098633 + "value": 112.02948760986328 }, "YOrientation": { "type": "float", @@ -14985,7 +14985,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15034,7 +15034,7 @@ }, "XPosition": { "type": "float", - "value": 109.8688049316406 + "value": 109.86880493164062 }, "YOrientation": { "type": "float", @@ -15099,15 +15099,15 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 114.8644714355469 + "value": 114.86447143554688 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15156,19 +15156,19 @@ }, "XPosition": { "type": "float", - "value": 147.6138000488281 + "value": 147.61380004882812 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 104.974723815918 + "value": 104.97472381591797 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15217,19 +15217,19 @@ }, "XPosition": { "type": "float", - "value": 144.1989898681641 + "value": 144.19898986816406 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 104.1244735717773 + "value": 104.12447357177734 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15278,11 +15278,11 @@ }, "XPosition": { "type": "float", - "value": 134.2687377929688 + "value": 134.26873779296875 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -15290,7 +15290,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15351,7 +15351,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15400,7 +15400,7 @@ }, "XPosition": { "type": "float", - "value": 86.46852874755859 + "value": 86.4685287475586 }, "YOrientation": { "type": "float", @@ -15412,7 +15412,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15469,11 +15469,11 @@ }, "YPosition": { "type": "float", - "value": 1.281298637390137 + "value": 1.2812986373901367 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15542,7 +15542,7 @@ }, "XPosition": { "type": "float", - "value": 31.68097305297852 + "value": 31.680973052978516 }, "YOrientation": { "type": "float", @@ -15554,7 +15554,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15627,7 +15627,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -15635,7 +15635,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15680,11 +15680,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454621531069279 + "value": -0.024546215310692787 }, "XPosition": { "type": "float", - "value": 104.9117584228516 + "value": 104.91175842285156 }, "YOrientation": { "type": "float", @@ -15696,7 +15696,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15743,11 +15743,11 @@ }, "XPosition": { "type": "float", - "value": 147.7519683837891 + "value": 147.75196838378906 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -15755,7 +15755,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15804,7 +15804,7 @@ }, "XPosition": { "type": "float", - "value": 101.0647735595703 + "value": 101.06477355957031 }, "YOrientation": { "type": "float", @@ -15816,7 +15816,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15877,7 +15877,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15934,11 +15934,11 @@ }, "YPosition": { "type": "float", - "value": 138.4830932617188 + "value": 138.48309326171875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/adonwoodsgrove.git.json b/_module/git/adonwoodsgrove.git.json index 155b3d0..6bcf93e 100644 --- a/_module/git/adonwoodsgrove.git.json +++ b/_module/git/adonwoodsgrove.git.json @@ -278,11 +278,11 @@ }, "X": { "type": "float", - "value": 52.07503509521484 + "value": 52.075035095214844 }, "Y": { "type": "float", - "value": 24.65723037719727 + "value": 24.657230377197266 }, "Z": { "type": "float", @@ -513,7 +513,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -732,15 +732,15 @@ }, "X": { "type": "float", - "value": 37.67807769775391 + "value": 37.678077697753906 }, "Y": { "type": "float", - "value": 24.86921310424805 + "value": 24.869213104248047 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -959,15 +959,15 @@ }, "X": { "type": "float", - "value": 45.29983520507813 + "value": 45.299835205078125 }, "Y": { "type": "float", - "value": 31.57462882995606 + "value": 31.574628829956055 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1190,11 +1190,11 @@ }, "Y": { "type": "float", - "value": 32.42560195922852 + "value": 32.425601959228516 }, "Z": { "type": "float", - "value": 0.0100000249221921 + "value": 0.010000024922192097 } }, { @@ -1417,11 +1417,11 @@ }, "Y": { "type": "float", - "value": 18.24386596679688 + "value": 18.243865966796875 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1640,7 +1640,7 @@ }, "X": { "type": "float", - "value": 30.3665657043457 + "value": 30.366565704345703 }, "Y": { "type": "float", @@ -1648,7 +1648,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1867,7 +1867,7 @@ }, "X": { "type": "float", - "value": 30.35040092468262 + "value": 30.350400924682617 }, "Y": { "type": "float", @@ -1875,7 +1875,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2102,7 +2102,7 @@ }, "Z": { "type": "float", - "value": 0.01000006496906281 + "value": 0.010000064969062805 } } ] @@ -2147,7 +2147,7 @@ }, "PointY": { "type": "float", - "value": 0.1176795959472656 + "value": 0.11767959594726562 }, "PointZ": { "type": "float", @@ -2173,7 +2173,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 3.413018703460693 + "value": 3.4130187034606934 }, "PointY": { "type": "float", @@ -2188,11 +2188,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 3.452050685882568 + "value": 3.4520506858825684 }, "PointY": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointZ": { "type": "float", @@ -2211,7 +2211,7 @@ }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } } ] @@ -2316,7 +2316,7 @@ }, "XPosition": { "type": "float", - "value": 0.1703715324401856 + "value": 0.17037153244018555 }, "YOrientation": { "type": "float", @@ -2324,7 +2324,7 @@ }, "YPosition": { "type": "float", - "value": 43.96282577514648 + "value": 43.962825775146484 }, "ZOrientation": { "type": "float", @@ -2479,7 +2479,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2524,7 +2524,7 @@ }, "XOrientation": { "type": "float", - "value": -0.1950902193784714 + "value": -0.19509021937847137 }, "XPosition": { "type": "float", @@ -2540,7 +2540,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2593,7 +2593,7 @@ }, "YOrientation": { "type": "float", - "value": 0.1709624379873276 + "value": 0.17096243798732758 }, "YPosition": { "type": "float", @@ -2601,7 +2601,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2650,7 +2650,7 @@ }, "XPosition": { "type": "float", - "value": 20.51875686645508 + "value": 20.518756866455078 }, "YOrientation": { "type": "float", @@ -2662,7 +2662,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2723,7 +2723,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2776,7 +2776,7 @@ }, "YOrientation": { "type": "float", - "value": 6.715443419125222e-007 + "value": 0.0000006715443419125222 }, "YPosition": { "type": "float", @@ -2784,7 +2784,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2902,7 +2902,7 @@ }, "YOrientation": { "type": "float", - "value": 6.715443419125222e-007 + "value": 0.0000006715443419125222 }, "YPosition": { "type": "float", @@ -2910,7 +2910,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/adonwoodsturfhou.git.json b/_module/git/adonwoodsturfhou.git.json index 322b34b..b703991 100644 --- a/_module/git/adonwoodsturfhou.git.json +++ b/_module/git/adonwoodsturfhou.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141591548919678 + "value": -3.1415915489196777 }, "CloseLockDC": { "type": "byte", @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 12.21000099182129 + "value": 12.210000991821289 }, "Z": { "type": "float", @@ -384,7 +384,7 @@ }, "XPosition": { "type": "float", - "value": 23.83550834655762 + "value": 23.835508346557617 }, "YOrientation": { "type": "float", @@ -392,11 +392,11 @@ }, "YPosition": { "type": "float", - "value": 20.83179664611816 + "value": 20.831796646118164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -445,7 +445,7 @@ }, "XPosition": { "type": "float", - "value": 19.12222480773926 + "value": 19.122224807739258 }, "YOrientation": { "type": "float", @@ -453,11 +453,11 @@ }, "YPosition": { "type": "float", - "value": 24.44587898254395 + "value": 24.445878982543945 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/anthillfields.git.json b/_module/git/anthillfields.git.json index c61f3be..9ad97a4 100644 --- a/_module/git/anthillfields.git.json +++ b/_module/git/anthillfields.git.json @@ -107,7 +107,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -118,18 +118,18 @@ }, "PointY": { "type": "float", - "value": -2.448980569839478 + "value": -2.4489805698394775 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 9.931247711181641 + "value": 9.93124771118164 }, "PointY": { "type": "float", @@ -137,7 +137,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -148,11 +148,11 @@ }, "PointY": { "type": "float", - "value": 0.0004217624664306641 + "value": 0.00042176246643066406 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -328,7 +328,7 @@ }, "XPosition": { "type": "float", - "value": 67.41660308837891 + "value": 67.4166030883789 }, "YOrientation": { "type": "float", @@ -340,7 +340,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -389,7 +389,7 @@ }, "XPosition": { "type": "float", - "value": 17.8942756652832 + "value": 17.894275665283203 }, "YOrientation": { "type": "float", @@ -401,7 +401,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -462,7 +462,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -511,7 +511,7 @@ }, "XPosition": { "type": "float", - "value": 12.20181465148926 + "value": 12.201814651489258 }, "YOrientation": { "type": "float", @@ -523,7 +523,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -584,7 +584,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -645,7 +645,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -694,7 +694,7 @@ }, "XPosition": { "type": "float", - "value": 45.13567733764648 + "value": 45.135677337646484 }, "YOrientation": { "type": "float", @@ -702,7 +702,7 @@ }, "YPosition": { "type": "float", - "value": 1.427057027816773 + "value": 1.4270570278167725 }, "ZPosition": { "type": "float", diff --git a/_module/git/area.git.json b/_module/git/area.git.json index cc3abe0..8d51861 100644 --- a/_module/git/area.git.json +++ b/_module/git/area.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 1.980000019073486 + "value": 1.9800000190734863 }, "Z": { "type": "float", @@ -721,7 +721,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -940,7 +940,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -1159,7 +1159,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2035,7 +2035,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -2254,7 +2254,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -2473,7 +2473,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -3349,7 +3349,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -3787,7 +3787,7 @@ }, "Bearing": { "type": "float", - "value": 1.748453684058404e-007 + "value": 0.00000017484536840584042 }, "CloseLockDC": { "type": "byte", @@ -4225,7 +4225,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -4444,7 +4444,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -4676,7 +4676,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -4881,11 +4881,11 @@ }, "Y": { "type": "float", - "value": 128.3437194824219 + "value": 128.34371948242188 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -4904,7 +4904,7 @@ }, "Bearing": { "type": "float", - "value": -1.521707773208618 + "value": -1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -5105,7 +5105,7 @@ }, "X": { "type": "float", - "value": 73.96974945068359 + "value": 73.9697494506836 }, "Y": { "type": "float", @@ -5171,7 +5171,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -5643,7 +5643,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5704,7 +5704,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5753,19 +5753,19 @@ }, "XPosition": { "type": "float", - "value": 68.70755004882813 + "value": 68.70755004882812 }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 128.6068267822266 + "value": 128.60682678222656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5826,7 +5826,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5871,7 +5871,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", @@ -5887,7 +5887,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5932,7 +5932,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", @@ -5944,11 +5944,11 @@ }, "YPosition": { "type": "float", - "value": 55.31118011474609 + "value": 55.311180114746094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5997,11 +5997,11 @@ }, "XPosition": { "type": "float", - "value": 12.46651458740234 + "value": 12.466514587402344 }, "YOrientation": { "type": "float", - "value": 1.50600942561141e-006 + "value": 0.0000015060094256114098 }, "YPosition": { "type": "float", @@ -6009,7 +6009,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6062,15 +6062,15 @@ }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 129.8300628662109 + "value": 129.83006286621094 }, "ZPosition": { "type": "float", - "value": 0.8799970149993897 + "value": 0.8799970149993896 } }, { @@ -6119,7 +6119,7 @@ }, "XPosition": { "type": "float", - "value": 104.9707870483398 + "value": 104.97078704833984 }, "YOrientation": { "type": "float", @@ -6127,11 +6127,11 @@ }, "YPosition": { "type": "float", - "value": 114.7885284423828 + "value": 114.78852844238281 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6180,7 +6180,7 @@ }, "XPosition": { "type": "float", - "value": 135.2807006835938 + "value": 135.28070068359375 }, "YOrientation": { "type": "float", @@ -6188,11 +6188,11 @@ }, "YPosition": { "type": "float", - "value": 96.92471313476563 + "value": 96.92471313476562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6241,11 +6241,11 @@ }, "XPosition": { "type": "float", - "value": 116.6847686767578 + "value": 116.68476867675781 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -6253,7 +6253,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6302,7 +6302,7 @@ }, "XPosition": { "type": "float", - "value": 136.0128326416016 + "value": 136.01283264160156 }, "YOrientation": { "type": "float", @@ -6314,7 +6314,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6363,7 +6363,7 @@ }, "XPosition": { "type": "float", - "value": 115.2205200195313 + "value": 115.22052001953125 }, "YOrientation": { "type": "float", @@ -6375,7 +6375,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6436,7 +6436,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6497,7 +6497,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6554,11 +6554,11 @@ }, "YPosition": { "type": "float", - "value": 42.09539413452148 + "value": 42.095394134521484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6619,7 +6619,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6668,7 +6668,7 @@ }, "XPosition": { "type": "float", - "value": 46.06457901000977 + "value": 46.064579010009766 }, "YOrientation": { "type": "float", @@ -6680,7 +6680,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6737,11 +6737,11 @@ }, "YPosition": { "type": "float", - "value": 13.40681457519531 + "value": 13.406814575195312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6798,11 +6798,11 @@ }, "YPosition": { "type": "float", - "value": 14.00199127197266 + "value": 14.001991271972656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6859,11 +6859,11 @@ }, "YPosition": { "type": "float", - "value": 13.70439720153809 + "value": 13.704397201538086 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6912,7 +6912,7 @@ }, "XPosition": { "type": "float", - "value": 112.8669509887695 + "value": 112.86695098876953 }, "YOrientation": { "type": "float", @@ -6920,11 +6920,11 @@ }, "YPosition": { "type": "float", - "value": 23.5249195098877 + "value": 23.524919509887695 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6985,7 +6985,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7042,11 +7042,11 @@ }, "YPosition": { "type": "float", - "value": 104.0459747314453 + "value": 104.04597473144531 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7095,7 +7095,7 @@ }, "XPosition": { "type": "float", - "value": 82.56313323974609 + "value": 82.5631332397461 }, "YOrientation": { "type": "float", @@ -7107,7 +7107,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/area001.git.json b/_module/git/area001.git.json index 6756cb3..61ae9fd 100644 --- a/_module/git/area001.git.json +++ b/_module/git/area001.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 125.0100021362305 + "value": 125.01000213623047 }, "Z": { "type": "float", @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": 1.748453684058404e-007 + "value": 0.00000017484536840584042 }, "CloseLockDC": { "type": "byte", @@ -721,7 +721,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -1159,7 +1159,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -1816,7 +1816,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -2911,7 +2911,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -3349,7 +3349,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3787,7 +3787,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -4006,7 +4006,7 @@ }, "Bearing": { "type": "float", - "value": 1.57079553604126 + "value": 1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -4439,15 +4439,15 @@ }, "X": { "type": "float", - "value": 31.98785018920898 + "value": 31.987850189208984 }, "Y": { "type": "float", - "value": 143.1392517089844 + "value": 143.13925170898438 }, "Z": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -4667,15 +4667,15 @@ }, "X": { "type": "float", - "value": 128.9360961914063 + "value": 128.93609619140625 }, "Y": { "type": "float", - "value": 142.6999816894531 + "value": 142.69998168945312 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] @@ -4733,7 +4733,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -5163,7 +5163,7 @@ }, "YPosition": { "type": "float", - "value": 133.4377746582031 + "value": 133.43777465820312 }, "ZPosition": { "type": "float", @@ -5280,11 +5280,11 @@ }, "XPosition": { "type": "float", - "value": 124.7870635986328 + "value": 124.78706359863281 }, "YPosition": { "type": "float", - "value": 133.5375061035156 + "value": 133.53750610351562 }, "ZPosition": { "type": "float", @@ -5370,7 +5370,7 @@ }, "XPosition": { "type": "float", - "value": 28.68745613098145 + "value": 28.687456130981445 }, "YOrientation": { "type": "float", @@ -5382,7 +5382,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5439,11 +5439,11 @@ }, "YPosition": { "type": "float", - "value": 102.9608459472656 + "value": 102.96084594726562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5500,11 +5500,11 @@ }, "YPosition": { "type": "float", - "value": 77.13052368164063 + "value": 77.13052368164062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5565,7 +5565,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5614,7 +5614,7 @@ }, "XPosition": { "type": "float", - "value": 4.238728523254395 + "value": 4.2387285232543945 }, "YOrientation": { "type": "float", @@ -5626,7 +5626,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5687,7 +5687,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5736,7 +5736,7 @@ }, "XPosition": { "type": "float", - "value": 129.2816772460938 + "value": 129.28167724609375 }, "YOrientation": { "type": "float", @@ -5744,11 +5744,11 @@ }, "YPosition": { "type": "float", - "value": 136.3392944335938 + "value": 136.33929443359375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5797,7 +5797,7 @@ }, "XPosition": { "type": "float", - "value": 135.2071685791016 + "value": 135.20716857910156 }, "YOrientation": { "type": "float", @@ -5805,11 +5805,11 @@ }, "YPosition": { "type": "float", - "value": 104.1742248535156 + "value": 104.17422485351562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5858,7 +5858,7 @@ }, "XPosition": { "type": "float", - "value": 135.5853881835938 + "value": 135.58538818359375 }, "YOrientation": { "type": "float", @@ -5870,7 +5870,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5919,7 +5919,7 @@ }, "XPosition": { "type": "float", - "value": 125.8776702880859 + "value": 125.87767028808594 }, "YOrientation": { "type": "float", @@ -5931,7 +5931,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5992,7 +5992,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6041,7 +6041,7 @@ }, "XPosition": { "type": "float", - "value": 142.1413421630859 + "value": 142.14134216308594 }, "YOrientation": { "type": "float", @@ -6049,11 +6049,11 @@ }, "YPosition": { "type": "float", - "value": 15.56562519073486 + "value": 15.565625190734863 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6110,11 +6110,11 @@ }, "YPosition": { "type": "float", - "value": 108.3874664306641 + "value": 108.38746643066406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6163,7 +6163,7 @@ }, "XPosition": { "type": "float", - "value": 57.56595611572266 + "value": 57.565956115722656 }, "YOrientation": { "type": "float", @@ -6171,11 +6171,11 @@ }, "YPosition": { "type": "float", - "value": 106.3885955810547 + "value": 106.38859558105469 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6236,7 +6236,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6293,11 +6293,11 @@ }, "YPosition": { "type": "float", - "value": 61.38228607177734 + "value": 61.382286071777344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6407,7 +6407,7 @@ }, "XPosition": { "type": "float", - "value": 105.3733215332031 + "value": 105.37332153320312 }, "YOrientation": { "type": "float", @@ -6415,11 +6415,11 @@ }, "YPosition": { "type": "float", - "value": 54.11977386474609 + "value": 54.119773864746094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6476,11 +6476,11 @@ }, "YPosition": { "type": "float", - "value": 14.02494621276856 + "value": 14.024946212768555 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6529,7 +6529,7 @@ }, "XPosition": { "type": "float", - "value": 75.37808227539063 + "value": 75.37808227539062 }, "YOrientation": { "type": "float", @@ -6541,7 +6541,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6590,7 +6590,7 @@ }, "XPosition": { "type": "float", - "value": 123.1917419433594 + "value": 123.19174194335938 }, "YOrientation": { "type": "float", @@ -6598,11 +6598,11 @@ }, "YPosition": { "type": "float", - "value": 13.37453746795654 + "value": 13.374537467956543 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6647,11 +6647,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", - "value": 46.18740844726563 + "value": 46.187408447265625 }, "YOrientation": { "type": "float", @@ -6663,7 +6663,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6708,11 +6708,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", - "value": 107.1521911621094 + "value": 107.15219116210938 }, "YOrientation": { "type": "float", @@ -6720,11 +6720,11 @@ }, "YPosition": { "type": "float", - "value": 32.59427642822266 + "value": 32.594276428222656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6773,7 +6773,7 @@ }, "XPosition": { "type": "float", - "value": 48.46755218505859 + "value": 48.467552185058594 }, "YOrientation": { "type": "float", @@ -6781,11 +6781,11 @@ }, "YPosition": { "type": "float", - "value": 15.46372222900391 + "value": 15.463722229003906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6842,11 +6842,11 @@ }, "YPosition": { "type": "float", - "value": 12.83261108398438 + "value": 12.832611083984375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/area002.git.json b/_module/git/area002.git.json index ae1af7a..4782fe6 100644 --- a/_module/git/area002.git.json +++ b/_module/git/area002.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 28.72999954223633 + "value": 28.729999542236328 }, "Z": { "type": "float", @@ -502,7 +502,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -721,7 +721,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -940,7 +940,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -1597,7 +1597,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2035,7 +2035,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2473,7 +2473,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2692,7 +2692,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3787,7 +3787,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -4447,7 +4447,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4675,7 +4675,7 @@ }, "Z": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -4694,7 +4694,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -4903,7 +4903,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -4961,7 +4961,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -5274,7 +5274,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } }, { @@ -5387,15 +5387,15 @@ }, "XPosition": { "type": "float", - "value": 124.8043518066406 + "value": 124.80435180664062 }, "YPosition": { "type": "float", - "value": 24.47203063964844 + "value": 24.472030639648438 }, "ZPosition": { "type": "float", - "value": 1.885476589202881 + "value": 1.8854765892028809 } }, { @@ -5508,11 +5508,11 @@ }, "XPosition": { "type": "float", - "value": 14.51449775695801 + "value": 14.514497756958008 }, "YPosition": { "type": "float", - "value": 37.29659271240234 + "value": 37.296592712402344 }, "ZPosition": { "type": "float", @@ -5633,7 +5633,7 @@ }, "YPosition": { "type": "float", - "value": 22.66951179504395 + "value": 22.669511795043945 }, "ZPosition": { "type": "float", @@ -5719,7 +5719,7 @@ }, "XPosition": { "type": "float", - "value": 8.850871086120606 + "value": 8.850871086120605 }, "YOrientation": { "type": "float", @@ -5731,7 +5731,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5780,7 +5780,7 @@ }, "XPosition": { "type": "float", - "value": 21.56146049499512 + "value": 21.561460494995117 }, "YOrientation": { "type": "float", @@ -5792,7 +5792,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5849,11 +5849,11 @@ }, "YPosition": { "type": "float", - "value": 18.10243606567383 + "value": 18.102436065673828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5898,7 +5898,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454407140612602 + "value": -0.024544071406126022 }, "XPosition": { "type": "float", @@ -5910,11 +5910,11 @@ }, "YPosition": { "type": "float", - "value": 131.6578521728516 + "value": 131.65785217285156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5959,7 +5959,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454407140612602 + "value": -0.024544071406126022 }, "XPosition": { "type": "float", @@ -5975,7 +5975,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6024,7 +6024,7 @@ }, "XPosition": { "type": "float", - "value": 107.4010925292969 + "value": 107.40109252929688 }, "YOrientation": { "type": "float", @@ -6036,7 +6036,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6081,11 +6081,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454407140612602 + "value": -0.024544071406126022 }, "XPosition": { "type": "float", - "value": 133.7221069335938 + "value": 133.72210693359375 }, "YOrientation": { "type": "float", @@ -6097,7 +6097,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6142,7 +6142,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454407140612602 + "value": -0.024544071406126022 }, "XPosition": { "type": "float", @@ -6158,7 +6158,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6203,7 +6203,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4052408933639526 + "value": -0.40524089336395264 }, "XPosition": { "type": "float", @@ -6219,7 +6219,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6268,11 +6268,11 @@ }, "XPosition": { "type": "float", - "value": 91.79299926757813 + "value": 91.79299926757812 }, "YOrientation": { "type": "float", - "value": 0.02454256452620029 + "value": 0.024542564526200294 }, "YPosition": { "type": "float", @@ -6280,7 +6280,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6325,11 +6325,11 @@ }, "XOrientation": { "type": "float", - "value": -0.3368897140026093 + "value": -0.33688971400260925 }, "XPosition": { "type": "float", - "value": 47.16909027099609 + "value": 47.169090270996094 }, "YOrientation": { "type": "float", @@ -6341,7 +6341,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6402,7 +6402,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6451,7 +6451,7 @@ }, "XPosition": { "type": "float", - "value": 17.6970386505127 + "value": 17.697038650512695 }, "YOrientation": { "type": "float", @@ -6459,11 +6459,11 @@ }, "YPosition": { "type": "float", - "value": 103.3199996948242 + "value": 103.31999969482422 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6512,7 +6512,7 @@ }, "XPosition": { "type": "float", - "value": 53.02383422851563 + "value": 53.023834228515625 }, "YOrientation": { "type": "float", @@ -6520,11 +6520,11 @@ }, "YPosition": { "type": "float", - "value": 127.2678298950195 + "value": 127.26782989501953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6569,7 +6569,7 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", @@ -6581,11 +6581,11 @@ }, "YPosition": { "type": "float", - "value": 126.4316864013672 + "value": 126.43168640136719 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6638,15 +6638,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 125.1774826049805 + "value": 125.17748260498047 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6707,7 +6707,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6768,7 +6768,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6829,7 +6829,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6890,7 +6890,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6947,11 +6947,11 @@ }, "YPosition": { "type": "float", - "value": 143.4120178222656 + "value": 143.41201782226562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7012,7 +7012,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7073,7 +7073,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7122,7 +7122,7 @@ }, "XPosition": { "type": "float", - "value": 115.059944152832 + "value": 115.05994415283203 }, "YOrientation": { "type": "float", @@ -7130,11 +7130,11 @@ }, "YPosition": { "type": "float", - "value": 45.81786727905273 + "value": 45.817867279052734 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7195,7 +7195,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7256,7 +7256,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/area003.git.json b/_module/git/area003.git.json index 960a60e..448f3c1 100644 --- a/_module/git/area003.git.json +++ b/_module/git/area003.git.json @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -1818,7 +1818,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -2050,7 +2050,7 @@ }, "Bearing": { "type": "float", - "value": 3.117045879364014 + "value": 3.1170458793640137 }, "BodyBag": { "type": "byte", @@ -2251,7 +2251,7 @@ }, "X": { "type": "float", - "value": 91.95010375976563 + "value": 91.95010375976562 }, "Y": { "type": "float", @@ -2479,7 +2479,7 @@ }, "X": { "type": "float", - "value": 113.8689270019531 + "value": 113.86892700195312 }, "Y": { "type": "float", @@ -2545,7 +2545,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -2911,7 +2911,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2978,7 +2978,7 @@ }, "XPosition": { "type": "float", - "value": 25.32812118530273 + "value": 25.328121185302734 }, "YPosition": { "type": "float", @@ -2986,7 +2986,7 @@ }, "ZPosition": { "type": "float", - "value": 2.500005722045898 + "value": 2.5000057220458984 } }, { @@ -3099,7 +3099,7 @@ }, "XPosition": { "type": "float", - "value": 25.22125625610352 + "value": 25.221256256103516 }, "YPosition": { "type": "float", @@ -3228,7 +3228,7 @@ }, "ZPosition": { "type": "float", - "value": 2.499999046325684 + "value": 2.4999990463256836 } }, { @@ -3345,11 +3345,11 @@ }, "YPosition": { "type": "float", - "value": 88.32632446289063 + "value": 88.32632446289062 }, "ZPosition": { "type": "float", - "value": 1.500001907348633 + "value": 1.5000019073486328 } }, { @@ -3462,11 +3462,11 @@ }, "XPosition": { "type": "float", - "value": 100.8834075927734 + "value": 100.88340759277344 }, "YPosition": { "type": "float", - "value": 110.5603561401367 + "value": 110.56035614013672 }, "ZPosition": { "type": "float", @@ -3587,11 +3587,11 @@ }, "YPosition": { "type": "float", - "value": 100.805061340332 + "value": 100.80506134033203 }, "ZPosition": { "type": "float", - "value": 1.500000476837158 + "value": 1.5000004768371582 } }, { @@ -3704,7 +3704,7 @@ }, "XPosition": { "type": "float", - "value": 99.83059692382813 + "value": 99.83059692382812 }, "YPosition": { "type": "float", @@ -3822,11 +3822,11 @@ }, "YPosition": { "type": "float", - "value": 10.51928043365479 + "value": 10.519280433654785 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3875,7 +3875,7 @@ }, "XPosition": { "type": "float", - "value": 106.4750213623047 + "value": 106.47502136230469 }, "YOrientation": { "type": "float", @@ -3883,11 +3883,11 @@ }, "YPosition": { "type": "float", - "value": 22.53204727172852 + "value": 22.532047271728516 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3936,7 +3936,7 @@ }, "XPosition": { "type": "float", - "value": 101.9802093505859 + "value": 101.98020935058594 }, "YOrientation": { "type": "float", @@ -3944,11 +3944,11 @@ }, "YPosition": { "type": "float", - "value": 36.91544342041016 + "value": 36.915443420410156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4005,11 +4005,11 @@ }, "YPosition": { "type": "float", - "value": 72.64920043945313 + "value": 72.64920043945312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4058,7 +4058,7 @@ }, "XPosition": { "type": "float", - "value": 104.0028686523438 + "value": 104.00286865234375 }, "YOrientation": { "type": "float", @@ -4070,7 +4070,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4127,11 +4127,11 @@ }, "YPosition": { "type": "float", - "value": 112.1689529418945 + "value": 112.16895294189453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4188,11 +4188,11 @@ }, "YPosition": { "type": "float", - "value": 107.6741485595703 + "value": 107.67414855957031 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4253,7 +4253,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4302,7 +4302,7 @@ }, "XPosition": { "type": "float", - "value": 54.03171539306641 + "value": 54.031715393066406 }, "YOrientation": { "type": "float", @@ -4310,11 +4310,11 @@ }, "YPosition": { "type": "float", - "value": 25.77445793151856 + "value": 25.774457931518555 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4367,7 +4367,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -4375,7 +4375,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4424,7 +4424,7 @@ }, "XPosition": { "type": "float", - "value": 24.25454902648926 + "value": 24.254549026489258 }, "YOrientation": { "type": "float", @@ -4432,7 +4432,7 @@ }, "YPosition": { "type": "float", - "value": 15.24430751800537 + "value": 15.244307518005371 }, "ZPosition": { "type": "float", @@ -4485,7 +4485,7 @@ }, "XPosition": { "type": "float", - "value": 15.26492500305176 + "value": 15.264925003051758 }, "YOrientation": { "type": "float", @@ -4497,7 +4497,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4558,7 +4558,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4615,11 +4615,11 @@ }, "YPosition": { "type": "float", - "value": 105.2173767089844 + "value": 105.21737670898438 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4668,7 +4668,7 @@ }, "XPosition": { "type": "float", - "value": 13.90107822418213 + "value": 13.901078224182129 }, "YOrientation": { "type": "float", @@ -4676,11 +4676,11 @@ }, "YPosition": { "type": "float", - "value": 11.89679908752441 + "value": 11.896799087524414 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/argothlair.git.json b/_module/git/argothlair.git.json index 1b7737a..c0e15c3 100644 --- a/_module/git/argothlair.git.json +++ b/_module/git/argothlair.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -497,7 +497,7 @@ }, "X": { "type": "float", - "value": 15.05109024047852 + "value": 15.051090240478516 }, "Y": { "type": "float", @@ -729,11 +729,11 @@ }, "Y": { "type": "float", - "value": 34.03772354125977 + "value": 34.037723541259766 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] @@ -859,7 +859,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } } ] @@ -941,7 +941,7 @@ }, "XPosition": { "type": "float", - "value": 15.04633045196533 + "value": 15.046330451965332 }, "YOrientation": { "type": "float", @@ -949,11 +949,11 @@ }, "YPosition": { "type": "float", - "value": 24.3720588684082 + "value": 24.372058868408203 }, "ZPosition": { "type": "float", - "value": 2.291053533554077e-007 + "value": 0.00000022910535335540771 } } ] diff --git a/_module/git/av_genstore.git.json b/_module/git/av_genstore.git.json index 70a0cf4..37a12b7 100644 --- a/_module/git/av_genstore.git.json +++ b/_module/git/av_genstore.git.json @@ -774,7 +774,7 @@ }, "YOrientation": { "type": "float", - "value": -0.7572054266929627 + "value": -0.7572054266929626 }, "YPosition": { "type": "float", @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -1517,11 +1517,11 @@ }, "YPosition": { "type": "float", - "value": 14.77969169616699 + "value": 14.779691696166992 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4808,7 +4808,7 @@ }, "XPosition": { "type": "float", - "value": 20.1358757019043 + "value": 20.135875701904297 }, "YOrientation": { "type": "float", @@ -4816,11 +4816,11 @@ }, "YPosition": { "type": "float", - "value": 19.82798767089844 + "value": 19.827987670898438 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -5282,7 +5282,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -5501,15 +5501,15 @@ }, "X": { "type": "float", - "value": 19.47664642333984 + "value": 19.476646423339844 }, "Y": { "type": "float", - "value": 11.30421447753906 + "value": 11.304214477539062 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5528,7 +5528,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -5728,7 +5728,7 @@ }, "X": { "type": "float", - "value": 23.74740409851074 + "value": 23.747404098510742 }, "Y": { "type": "float", @@ -5736,7 +5736,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -5755,7 +5755,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -5955,15 +5955,15 @@ }, "X": { "type": "float", - "value": 21.87437248229981 + "value": 21.874372482299805 }, "Y": { "type": "float", - "value": 15.68837356567383 + "value": 15.688373565673828 }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -6190,7 +6190,7 @@ }, "Z": { "type": "float", - "value": -1.937150955200195e-007 + "value": -0.00000019371509552001953 } }, { @@ -6413,11 +6413,11 @@ }, "Y": { "type": "float", - "value": 27.99041938781738 + "value": 27.990419387817383 }, "Z": { "type": "float", - "value": 1.788139343261719e-007 + "value": 0.00000017881393432617188 } }, { @@ -6436,7 +6436,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -7061,15 +7061,15 @@ }, "X": { "type": "float", - "value": 1.824572324752808 + "value": 1.8245723247528076 }, "Y": { "type": "float", - "value": 20.97134208679199 + "value": 20.971342086791992 }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } } ] @@ -15303,7 +15303,7 @@ }, "XPosition": { "type": "float", - "value": 13.23797988891602 + "value": 13.237979888916016 }, "YOrientation": { "type": "float", @@ -15315,7 +15315,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18730,7 +18730,7 @@ }, "ZPosition": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -23355,7 +23355,7 @@ }, "YPosition": { "type": "float", - "value": 20.66461372375488 + "value": 20.664613723754883 }, "ZPosition": { "type": "float", diff --git a/_module/git/av_inn.git.json b/_module/git/av_inn.git.json index fc6389a..2efe0f2 100644 --- a/_module/git/av_inn.git.json +++ b/_module/git/av_inn.git.json @@ -770,7 +770,7 @@ }, "XPosition": { "type": "float", - "value": 23.42509460449219 + "value": 23.425094604492188 }, "YOrientation": { "type": "float", @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1517,11 +1517,11 @@ }, "YPosition": { "type": "float", - "value": 21.61929130554199 + "value": 21.619291305541992 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2256,11 +2256,11 @@ }, "YPosition": { "type": "float", - "value": 21.47579193115234 + "value": 21.475791931152344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2987,7 +2987,7 @@ }, "XPosition": { "type": "float", - "value": 29.01973724365234 + "value": 29.019737243652344 }, "YOrientation": { "type": "float", @@ -2999,7 +2999,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4465,7 +4465,7 @@ }, "XPosition": { "type": "float", - "value": 28.72567558288574 + "value": 28.725675582885742 }, "YOrientation": { "type": "float", @@ -4477,7 +4477,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5204,7 +5204,7 @@ }, "XPosition": { "type": "float", - "value": 31.72592735290527 + "value": 31.725927352905273 }, "YOrientation": { "type": "float", @@ -5947,7 +5947,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -5955,7 +5955,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6784,7 +6784,7 @@ }, "XPosition": { "type": "float", - "value": 31.35613632202148 + "value": 31.356136322021484 }, "YOrientation": { "type": "float", @@ -6796,7 +6796,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7624,7 +7624,7 @@ }, "XPosition": { "type": "float", - "value": 23.51297187805176 + "value": 23.512971878051758 }, "YOrientation": { "type": "float", @@ -7636,7 +7636,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -8497,7 +8497,7 @@ }, "XPosition": { "type": "float", - "value": 25.22322273254395 + "value": 25.223222732543945 }, "YOrientation": { "type": "float", @@ -8505,7 +8505,7 @@ }, "YPosition": { "type": "float", - "value": 11.70117568969727 + "value": 11.701175689697266 }, "ZPosition": { "type": "float", @@ -8533,7 +8533,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -8985,7 +8985,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9185,15 +9185,15 @@ }, "X": { "type": "float", - "value": 28.76835441589356 + "value": 28.768354415893555 }, "Y": { "type": "float", - "value": 3.898037672042847 + "value": 3.8980376720428467 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9212,7 +9212,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9412,7 +9412,7 @@ }, "X": { "type": "float", - "value": 28.72013854980469 + "value": 28.720138549804688 }, "Y": { "type": "float", @@ -9420,7 +9420,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9439,7 +9439,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -9647,7 +9647,7 @@ }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -9666,7 +9666,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9866,15 +9866,15 @@ }, "X": { "type": "float", - "value": 31.75425720214844 + "value": 31.754257202148438 }, "Y": { "type": "float", - "value": 3.945630550384522 + "value": 3.9456305503845215 }, "Z": { "type": "float", - "value": 0.002740859985351563 + "value": 0.0027408599853515625 } }, { @@ -9893,7 +9893,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10097,11 +10097,11 @@ }, "Y": { "type": "float", - "value": 3.006785154342651 + "value": 3.0067851543426514 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10120,7 +10120,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10320,15 +10320,15 @@ }, "X": { "type": "float", - "value": 23.19804763793945 + "value": 23.198047637939453 }, "Y": { "type": "float", - "value": 10.34163188934326 + "value": 10.341631889343262 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -10347,7 +10347,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10547,7 +10547,7 @@ }, "X": { "type": "float", - "value": 23.14983177185059 + "value": 23.149831771850586 }, "Y": { "type": "float", @@ -10555,7 +10555,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10574,7 +10574,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -10778,11 +10778,11 @@ }, "Y": { "type": "float", - "value": 9.925295829772949 + "value": 9.92529582977295 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10801,7 +10801,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11001,15 +11001,15 @@ }, "X": { "type": "float", - "value": 26.18395042419434 + "value": 26.183950424194336 }, "Y": { "type": "float", - "value": 10.38922500610352 + "value": 10.389225006103516 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -11028,7 +11028,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11236,7 +11236,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11255,7 +11255,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11455,15 +11455,15 @@ }, "X": { "type": "float", - "value": 23.08123588562012 + "value": 23.081235885620117 }, "Y": { "type": "float", - "value": 20.49035263061523 + "value": 20.490352630615234 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -11482,7 +11482,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11686,11 +11686,11 @@ }, "Y": { "type": "float", - "value": 19.5515022277832 + "value": 19.551502227783203 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -11709,7 +11709,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -11909,15 +11909,15 @@ }, "X": { "type": "float", - "value": 24.48677825927734 + "value": 24.486778259277344 }, "Y": { "type": "float", - "value": 20.07401657104492 + "value": 20.074016571044922 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -11936,7 +11936,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12140,11 +12140,11 @@ }, "Y": { "type": "float", - "value": 20.53794479370117 + "value": 20.537944793701172 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -12163,7 +12163,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12363,7 +12363,7 @@ }, "X": { "type": "float", - "value": 26.01892280578613 + "value": 26.018922805786133 }, "Y": { "type": "float", @@ -12371,7 +12371,7 @@ }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -12390,7 +12390,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12594,11 +12594,11 @@ }, "Y": { "type": "float", - "value": 27.66601753234863 + "value": 27.666017532348633 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12617,7 +12617,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12817,7 +12817,7 @@ }, "X": { "type": "float", - "value": 28.48056602478027 + "value": 28.480566024780273 }, "Y": { "type": "float", @@ -12825,7 +12825,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12844,7 +12844,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -13044,7 +13044,7 @@ }, "X": { "type": "float", - "value": 29.93432426452637 + "value": 29.934324264526367 }, "Y": { "type": "float", @@ -13052,7 +13052,7 @@ }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -13071,7 +13071,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13271,7 +13271,7 @@ }, "X": { "type": "float", - "value": 31.51468467712402 + "value": 31.514684677124023 }, "Y": { "type": "float", @@ -13279,7 +13279,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13298,7 +13298,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13498,15 +13498,15 @@ }, "X": { "type": "float", - "value": 31.46647453308106 + "value": 31.466474533081055 }, "Y": { "type": "float", - "value": 26.77476501464844 + "value": 26.774765014648438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13525,7 +13525,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13729,11 +13729,11 @@ }, "Y": { "type": "float", - "value": 30.57774353027344 + "value": 30.577743530273438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13752,7 +13752,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13956,11 +13956,11 @@ }, "Y": { "type": "float", - "value": 20.15714263916016 + "value": 20.157142639160156 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -13979,7 +13979,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14179,15 +14179,15 @@ }, "X": { "type": "float", - "value": 33.46474456787109 + "value": 33.464744567871094 }, "Y": { "type": "float", - "value": 19.21829223632813 + "value": 19.218292236328125 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -14206,7 +14206,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -14410,11 +14410,11 @@ }, "Y": { "type": "float", - "value": 19.74080657958984 + "value": 19.740806579589844 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -14433,7 +14433,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14633,15 +14633,15 @@ }, "X": { "type": "float", - "value": 36.49886322021484 + "value": 36.498863220214844 }, "Y": { "type": "float", - "value": 20.20473480224609 + "value": 20.204734802246094 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -14660,7 +14660,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14868,7 +14868,7 @@ }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -14887,7 +14887,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15091,11 +15091,11 @@ }, "Y": { "type": "float", - "value": 42.03622436523438 + "value": 42.036224365234375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15114,7 +15114,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15318,11 +15318,11 @@ }, "Y": { "type": "float", - "value": 38.74337005615234 + "value": 38.743370056152344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15549,7 +15549,7 @@ }, "Z": { "type": "float", - "value": 0.002181768417358398 + "value": 0.0021817684173583984 } }, { @@ -15776,7 +15776,7 @@ }, "Z": { "type": "float", - "value": 0.002181768417358398 + "value": 0.0021817684173583984 } } ] @@ -15834,7 +15834,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -15915,11 +15915,11 @@ }, "XPosition": { "type": "float", - "value": 30.22676277160645 + "value": 30.226762771606445 }, "YPosition": { "type": "float", - "value": 16.69502449035645 + "value": 16.695024490356445 }, "ZPosition": { "type": "float", @@ -16104,7 +16104,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -16332,7 +16332,7 @@ }, "XPosition": { "type": "float", - "value": 28.30871391296387 + "value": 28.308713912963867 }, "YPosition": { "type": "float", @@ -16340,7 +16340,7 @@ }, "ZPosition": { "type": "float", - "value": 1.510000109672546 + "value": 1.5100001096725464 } } ] @@ -16462,7 +16462,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16509,7 +16509,7 @@ }, "XPosition": { "type": "float", - "value": 24.15054130554199 + "value": 24.150541305541992 }, "YOrientation": { "type": "float", @@ -16517,11 +16517,11 @@ }, "YPosition": { "type": "float", - "value": 23.17847061157227 + "value": 23.178470611572266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16568,7 +16568,7 @@ }, "XPosition": { "type": "float", - "value": 29.92048645019531 + "value": 29.920486450195312 }, "YOrientation": { "type": "float", @@ -16576,11 +16576,11 @@ }, "YPosition": { "type": "float", - "value": 24.69518852233887 + "value": 24.695188522338867 }, "ZPosition": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -16635,11 +16635,11 @@ }, "YPosition": { "type": "float", - "value": 21.50788307189941 + "value": 21.507883071899414 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16698,7 +16698,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16745,7 +16745,7 @@ }, "XPosition": { "type": "float", - "value": 27.01918792724609 + "value": 27.019187927246094 }, "YOrientation": { "type": "float", @@ -16753,11 +16753,11 @@ }, "YPosition": { "type": "float", - "value": 10.93865776062012 + "value": 10.938657760620117 }, "ZPosition": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -16804,7 +16804,7 @@ }, "XPosition": { "type": "float", - "value": 29.87091445922852 + "value": 29.870914459228516 }, "YOrientation": { "type": "float", @@ -16816,7 +16816,7 @@ }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -16871,11 +16871,11 @@ }, "YPosition": { "type": "float", - "value": 38.95321655273438 + "value": 38.953216552734375 }, "ZPosition": { "type": "float", - "value": 3.576278686523438e-007 + "value": 0.00000035762786865234375 } }, { @@ -16934,7 +16934,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180099487304688 + "value": 0.0021800994873046875 } }, { @@ -17015,7 +17015,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17088,7 +17088,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -17096,7 +17096,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17165,11 +17165,11 @@ }, "XPosition": { "type": "float", - "value": 33.61337280273438 + "value": 33.613372802734375 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -17177,7 +17177,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17226,7 +17226,7 @@ }, "XPosition": { "type": "float", - "value": 25.40402030944824 + "value": 25.404020309448242 }, "YOrientation": { "type": "float", @@ -17319,7 +17319,7 @@ }, "ZPosition": { "type": "float", - "value": 0.005529403686523438 + "value": 0.0055294036865234375 } }, { @@ -17400,7 +17400,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01608657836914063 + "value": 0.016086578369140625 } } ] diff --git a/_module/git/blackforestwoods.git.json b/_module/git/blackforestwoods.git.json index 3438367..c638156 100644 --- a/_module/git/blackforestwoods.git.json +++ b/_module/git/blackforestwoods.git.json @@ -766,11 +766,11 @@ }, "XOrientation": { "type": "float", - "value": -0.1467395275831223 + "value": -0.14673952758312225 }, "XPosition": { "type": "float", - "value": 29.17348670959473 + "value": 29.173486709594727 }, "YOrientation": { "type": "float", @@ -778,11 +778,11 @@ }, "YPosition": { "type": "float", - "value": 24.15617370605469 + "value": 24.156173706054688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1639,11 +1639,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4714044034481049 + "value": 0.47140440344810486 }, "XPosition": { "type": "float", - "value": 19.12229156494141 + "value": 19.122291564941406 }, "YOrientation": { "type": "float", @@ -1651,7 +1651,7 @@ }, "YPosition": { "type": "float", - "value": 23.81657409667969 + "value": 23.816574096679688 }, "ZPosition": { "type": "float", @@ -1875,7 +1875,7 @@ }, "Y": { "type": "float", - "value": 2.230000257492065 + "value": 2.2300002574920654 }, "Z": { "type": "float", @@ -1911,7 +1911,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -2111,15 +2111,15 @@ }, "X": { "type": "float", - "value": 24.88095092773438 + "value": 24.880950927734375 }, "Y": { "type": "float", - "value": 15.03173160552979 + "value": 15.031731605529785 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2338,7 +2338,7 @@ }, "X": { "type": "float", - "value": 26.70781326293945 + "value": 26.707813262939453 }, "Y": { "type": "float", @@ -2346,7 +2346,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2565,7 +2565,7 @@ }, "X": { "type": "float", - "value": 25.52444458007813 + "value": 25.524444580078125 }, "Y": { "type": "float", @@ -2573,7 +2573,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2792,15 +2792,15 @@ }, "X": { "type": "float", - "value": 24.12339782714844 + "value": 24.123397827148438 }, "Y": { "type": "float", - "value": 13.30931186676025 + "value": 13.309311866760254 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3019,15 +3019,15 @@ }, "X": { "type": "float", - "value": 23.05526161193848 + "value": 23.055261611938477 }, "Y": { "type": "float", - "value": 13.35892009735107 + "value": 13.358920097351074 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3246,7 +3246,7 @@ }, "X": { "type": "float", - "value": 22.93884658813477 + "value": 22.938846588134766 }, "Y": { "type": "float", @@ -3254,7 +3254,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3473,15 +3473,15 @@ }, "X": { "type": "float", - "value": 24.09283256530762 + "value": 24.092832565307617 }, "Y": { "type": "float", - "value": 16.7424430847168 + "value": 16.742443084716797 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -3700,15 +3700,15 @@ }, "X": { "type": "float", - "value": 25.46133422851563 + "value": 25.461334228515625 }, "Y": { "type": "float", - "value": 16.76132965087891 + "value": 16.761329650878906 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3935,7 +3935,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4154,7 +4154,7 @@ }, "X": { "type": "float", - "value": 16.99697303771973 + "value": 16.996973037719727 }, "Y": { "type": "float", @@ -4389,7 +4389,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -4612,11 +4612,11 @@ }, "Y": { "type": "float", - "value": 16.99986839294434 + "value": 16.999868392944336 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -4835,7 +4835,7 @@ }, "X": { "type": "float", - "value": 18.25437736511231 + "value": 18.254377365112305 }, "Y": { "type": "float", @@ -4843,7 +4843,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -5062,7 +5062,7 @@ }, "X": { "type": "float", - "value": 15.89045429229736 + "value": 15.890454292297363 }, "Y": { "type": "float", @@ -5070,7 +5070,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -5289,15 +5289,15 @@ }, "X": { "type": "float", - "value": 14.28097724914551 + "value": 14.280977249145508 }, "Y": { "type": "float", - "value": 17.70401573181152 + "value": 17.704015731811523 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -5516,15 +5516,15 @@ }, "X": { "type": "float", - "value": 15.53838157653809 + "value": 15.538381576538086 }, "Y": { "type": "float", - "value": 19.71586227416992 + "value": 19.715862274169922 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } } ] @@ -7501,7 +7501,7 @@ }, "XPosition": { "type": "float", - "value": 28.43612670898438 + "value": 28.436126708984375 }, "YOrientation": { "type": "float", @@ -7509,11 +7509,11 @@ }, "YPosition": { "type": "float", - "value": 22.92724227905273 + "value": 22.927242279052734 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -7611,19 +7611,19 @@ }, "XPosition": { "type": "float", - "value": 16.25671768188477 + "value": 16.256717681884766 }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", - "value": 12.16095161437988 + "value": 12.160951614379883 }, "ZPosition": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -7700,11 +7700,11 @@ }, "YPosition": { "type": "float", - "value": 11.49855995178223 + "value": 11.498559951782227 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7788,7 +7788,7 @@ }, "XPosition": { "type": "float", - "value": 20.44844818115234 + "value": 20.448448181152344 }, "YOrientation": { "type": "float", @@ -7796,11 +7796,11 @@ }, "YPosition": { "type": "float", - "value": 3.961112499237061 + "value": 3.9611124992370605 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7849,7 +7849,7 @@ }, "XPosition": { "type": "float", - "value": 18.6716194152832 + "value": 18.671619415283203 }, "YOrientation": { "type": "float", @@ -7861,7 +7861,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7910,7 +7910,7 @@ }, "XPosition": { "type": "float", - "value": 36.78320693969727 + "value": 36.783206939697266 }, "YOrientation": { "type": "float", @@ -7918,11 +7918,11 @@ }, "YPosition": { "type": "float", - "value": 21.32892990112305 + "value": 21.328929901123047 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7999,11 +7999,11 @@ }, "YPosition": { "type": "float", - "value": 19.75272369384766 + "value": 19.752723693847656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8080,11 +8080,11 @@ }, "YPosition": { "type": "float", - "value": 18.88797569274902 + "value": 18.887975692749023 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8153,7 +8153,7 @@ }, "XPosition": { "type": "float", - "value": 30.30266189575195 + "value": 30.302661895751953 }, "YOrientation": { "type": "float", @@ -8161,11 +8161,11 @@ }, "YPosition": { "type": "float", - "value": 20.70397567749023 + "value": 20.703975677490234 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8242,11 +8242,11 @@ }, "YPosition": { "type": "float", - "value": 17.59085083007813 + "value": 17.590850830078125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8315,7 +8315,7 @@ }, "XPosition": { "type": "float", - "value": 30.50690841674805 + "value": 30.506908416748047 }, "YOrientation": { "type": "float", @@ -8323,11 +8323,11 @@ }, "YPosition": { "type": "float", - "value": 18.63082122802734 + "value": 18.630821228027344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/borderhills.git.json b/_module/git/borderhills.git.json index 2a4327f..85730b4 100644 --- a/_module/git/borderhills.git.json +++ b/_module/git/borderhills.git.json @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -500,7 +500,7 @@ }, "Bearing": { "type": "float", - "value": 3.08050012588501 + "value": 3.0805001258850098 }, "CloseLockDC": { "type": "byte", @@ -692,11 +692,11 @@ }, "X": { "type": "float", - "value": 14.69999980926514 + "value": 14.699999809265137 }, "Y": { "type": "float", - "value": 137.7599945068359 + "value": 137.75999450683594 }, "Z": { "type": "float", @@ -719,7 +719,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -911,11 +911,11 @@ }, "X": { "type": "float", - "value": 17.20000076293945 + "value": 17.200000762939453 }, "Y": { "type": "float", - "value": 125.6999969482422 + "value": 125.69999694824219 }, "Z": { "type": "float", @@ -1151,11 +1151,11 @@ }, "X": { "type": "float", - "value": 147.2290954589844 + "value": 147.22909545898438 }, "Y": { "type": "float", - "value": 116.9847030639648 + "value": 116.98470306396484 }, "Z": { "type": "float", @@ -1178,7 +1178,7 @@ }, "Bearing": { "type": "float", - "value": -3.067957162857056 + "value": -3.0679571628570557 }, "BodyBag": { "type": "byte", @@ -1382,7 +1382,7 @@ }, "Y": { "type": "float", - "value": 118.1256942749023 + "value": 118.12569427490234 }, "Z": { "type": "float", @@ -1832,11 +1832,11 @@ }, "X": { "type": "float", - "value": 139.5314331054688 + "value": 139.53143310546875 }, "Y": { "type": "float", - "value": 111.8557205200195 + "value": 111.85572052001953 }, "Z": { "type": "float", @@ -2059,11 +2059,11 @@ }, "X": { "type": "float", - "value": 139.3922729492188 + "value": 139.39227294921875 }, "Y": { "type": "float", - "value": 104.5223846435547 + "value": 104.52238464355469 }, "Z": { "type": "float", @@ -2286,7 +2286,7 @@ }, "X": { "type": "float", - "value": 142.0263061523438 + "value": 142.02630615234375 }, "Y": { "type": "float", @@ -2517,11 +2517,11 @@ }, "Y": { "type": "float", - "value": 101.7334060668945 + "value": 101.73340606689453 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2740,15 +2740,15 @@ }, "X": { "type": "float", - "value": 100.0377883911133 + "value": 100.03778839111328 }, "Y": { "type": "float", - "value": 125.7812576293945 + "value": 125.78125762939453 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2971,11 +2971,11 @@ }, "Y": { "type": "float", - "value": 137.4138031005859 + "value": 137.41380310058594 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3202,7 +3202,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3421,7 +3421,7 @@ }, "X": { "type": "float", - "value": 126.8322601318359 + "value": 126.83226013183594 }, "Y": { "type": "float", @@ -3429,7 +3429,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3652,11 +3652,11 @@ }, "Y": { "type": "float", - "value": 54.14666366577148 + "value": 54.146663665771484 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3875,7 +3875,7 @@ }, "X": { "type": "float", - "value": 15.11848831176758 + "value": 15.118488311767578 }, "Y": { "type": "float", @@ -3883,7 +3883,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4129,7 +4129,7 @@ }, "Bearing": { "type": "float", - "value": -1.42353367805481 + "value": -1.4235336780548096 }, "BodyBag": { "type": "byte", @@ -4329,11 +4329,11 @@ }, "X": { "type": "float", - "value": 21.19538879394531 + "value": 21.195388793945312 }, "Y": { "type": "float", - "value": 102.8004302978516 + "value": 102.80043029785156 }, "Z": { "type": "float", @@ -4783,11 +4783,11 @@ }, "X": { "type": "float", - "value": 18.95140647888184 + "value": 18.951406478881836 }, "Y": { "type": "float", - "value": 101.9296417236328 + "value": 101.92964172363281 }, "Z": { "type": "float", @@ -5010,11 +5010,11 @@ }, "X": { "type": "float", - "value": 22.51723480224609 + "value": 22.517234802246094 }, "Y": { "type": "float", - "value": 99.65444946289063 + "value": 99.65444946289062 }, "Z": { "type": "float", @@ -5237,11 +5237,11 @@ }, "X": { "type": "float", - "value": 24.96939277648926 + "value": 24.969392776489258 }, "Y": { "type": "float", - "value": 103.5443801879883 + "value": 103.54438018798828 }, "Z": { "type": "float", @@ -5464,7 +5464,7 @@ }, "X": { "type": "float", - "value": 16.00296020507813 + "value": 16.002960205078125 }, "Y": { "type": "float", @@ -5691,11 +5691,11 @@ }, "X": { "type": "float", - "value": 16.90377044677734 + "value": 16.903770446777344 }, "Y": { "type": "float", - "value": 103.2058563232422 + "value": 103.20585632324219 }, "Z": { "type": "float", @@ -5922,7 +5922,7 @@ }, "Y": { "type": "float", - "value": 144.4113464355469 + "value": 144.41134643554688 }, "Z": { "type": "float", @@ -6149,7 +6149,7 @@ }, "Y": { "type": "float", - "value": 129.2888793945313 + "value": 129.28887939453125 }, "Z": { "type": "float", @@ -6372,7 +6372,7 @@ }, "X": { "type": "float", - "value": 53.45101165771484 + "value": 53.451011657714844 }, "Y": { "type": "float", @@ -6599,11 +6599,11 @@ }, "X": { "type": "float", - "value": 74.69716644287109 + "value": 74.6971664428711 }, "Y": { "type": "float", - "value": 107.2449417114258 + "value": 107.24494171142578 }, "Z": { "type": "float", @@ -6665,7 +6665,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -7030,7 +7030,7 @@ }, "YPosition": { "type": "float", - "value": 66.74167633056641 + "value": 66.7416763305664 }, "ZPosition": { "type": "float", @@ -7101,7 +7101,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.954788208007813 + "value": 9.954788208007812 }, "PointY": { "type": "float", @@ -7116,7 +7116,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.954788208007813 + "value": 9.954788208007812 }, "PointY": { "type": "float", @@ -7229,7 +7229,7 @@ }, "XPosition": { "type": "float", - "value": 99.95193481445313 + "value": 99.95193481445312 }, "YOrientation": { "type": "float", @@ -7273,11 +7273,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.858505249023438 + "value": -3.8585052490234375 }, "PointY": { "type": "float", - "value": -1.52587890625e-005 + "value": -0.0000152587890625 }, "PointZ": { "type": "float", @@ -7288,7 +7288,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.858505249023438 + "value": -3.8585052490234375 }, "PointY": { "type": "float", @@ -7431,7 +7431,7 @@ }, "XPosition": { "type": "float", - "value": 149.7138061523438 + "value": 149.71380615234375 }, "YOrientation": { "type": "float", @@ -7439,7 +7439,7 @@ }, "YPosition": { "type": "float", - "value": 100.3214645385742 + "value": 100.32146453857422 }, "ZOrientation": { "type": "float", @@ -7513,7 +7513,7 @@ }, "PointZ": { "type": "float", - "value": 1.003679513931274 + "value": 1.0036795139312744 } }, { @@ -7649,7 +7649,7 @@ }, "XPosition": { "type": "float", - "value": 149.6594390869141 + "value": 149.65943908691406 }, "YOrientation": { "type": "float", @@ -7727,7 +7727,7 @@ }, "PointY": { "type": "float", - "value": -2.855996370315552 + "value": -2.8559963703155518 }, "PointZ": { "type": "float", @@ -7742,7 +7742,7 @@ }, "PointY": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointZ": { "type": "float", @@ -7851,7 +7851,7 @@ }, "XPosition": { "type": "float", - "value": 109.9044036865234 + "value": 109.90440368652344 }, "YOrientation": { "type": "float", @@ -7859,7 +7859,7 @@ }, "YPosition": { "type": "float", - "value": 2.963095426559448 + "value": 2.9630954265594482 }, "ZOrientation": { "type": "float", @@ -7895,11 +7895,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 }, "PointY": { "type": "float", - "value": -1.556540489196777 + "value": -1.5565404891967773 }, "PointZ": { "type": "float", @@ -7910,11 +7910,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.858108520507813 + "value": 9.858108520507812 }, "PointY": { "type": "float", - "value": -1.729491233825684 + "value": -1.7294912338256836 }, "PointZ": { "type": "float", @@ -7929,7 +7929,7 @@ }, "PointY": { "type": "float", - "value": -0.2594213485717773 + "value": -0.25942134857177734 }, "PointZ": { "type": "float", @@ -8062,7 +8062,7 @@ }, "YPosition": { "type": "float", - "value": 11.42736148834229 + "value": 11.427361488342285 }, "ZOrientation": { "type": "float", @@ -8106,7 +8106,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -8117,7 +8117,7 @@ }, "PointY": { "type": "float", - "value": -3.548333883285523 + "value": -3.5483338832855225 }, "PointZ": { "type": "float", @@ -8132,7 +8132,7 @@ }, "PointY": { "type": "float", - "value": -3.403502225875855 + "value": -3.4035022258758545 }, "PointZ": { "type": "float", @@ -8147,11 +8147,11 @@ }, "PointY": { "type": "float", - "value": -7.152557373046875e-007 + "value": -0.0000007152557373046875 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } } ] @@ -8257,7 +8257,7 @@ }, "XPosition": { "type": "float", - "value": 112.7585067749023 + "value": 112.75850677490234 }, "YOrientation": { "type": "float", @@ -8359,7 +8359,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8428,19 +8428,19 @@ }, "XPosition": { "type": "float", - "value": 18.17269134521484 + "value": 18.172691345214844 }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 9.889675140380859 + "value": 9.88967514038086 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8489,7 +8489,7 @@ }, "XPosition": { "type": "float", - "value": 30.09920120239258 + "value": 30.099201202392578 }, "YOrientation": { "type": "float", @@ -8497,11 +8497,11 @@ }, "YPosition": { "type": "float", - "value": 30.13195419311523 + "value": 30.131954193115234 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8554,15 +8554,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 10.05261993408203 + "value": 10.052619934082031 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8619,11 +8619,11 @@ }, "YPosition": { "type": "float", - "value": 31.01663398742676 + "value": 31.016633987426758 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8672,7 +8672,7 @@ }, "XPosition": { "type": "float", - "value": 90.03415679931641 + "value": 90.0341567993164 }, "YOrientation": { "type": "float", @@ -8684,7 +8684,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8761,11 +8761,11 @@ }, "YPosition": { "type": "float", - "value": 78.93081665039063 + "value": 78.93081665039062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8814,7 +8814,7 @@ }, "XPosition": { "type": "float", - "value": 30.15388488769531 + "value": 30.153884887695312 }, "YOrientation": { "type": "float", @@ -8826,7 +8826,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8871,11 +8871,11 @@ }, "XOrientation": { "type": "float", - "value": 0.8175849318504334 + "value": 0.8175849318504333 }, "XPosition": { "type": "float", - "value": 19.54001998901367 + "value": 19.540019989013672 }, "YOrientation": { "type": "float", @@ -8887,7 +8887,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8932,11 +8932,11 @@ }, "XOrientation": { "type": "float", - "value": 0.8175849318504334 + "value": 0.8175849318504333 }, "XPosition": { "type": "float", - "value": 40.81766510009766 + "value": 40.817665100097656 }, "YOrientation": { "type": "float", @@ -8948,7 +8948,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9001,15 +9001,15 @@ }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", - "value": 49.84905624389648 + "value": 49.849056243896484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9062,15 +9062,15 @@ }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", - "value": 70.32741546630859 + "value": 70.3274154663086 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9123,15 +9123,15 @@ }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 135.9954986572266 + "value": 135.99549865722656 }, "ZPosition": { "type": "float", - "value": 11.79999732971191 + "value": 11.799997329711914 } }, { @@ -9180,15 +9180,15 @@ }, "XPosition": { "type": "float", - "value": 13.47332954406738 + "value": 13.473329544067383 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 120.522346496582 + "value": 120.52234649658203 }, "ZPosition": { "type": "float", @@ -9241,7 +9241,7 @@ }, "XPosition": { "type": "float", - "value": 61.06362915039063 + "value": 61.063629150390625 }, "YOrientation": { "type": "float", @@ -9249,7 +9249,7 @@ }, "YPosition": { "type": "float", - "value": 139.5282135009766 + "value": 139.52821350097656 }, "ZPosition": { "type": "float", @@ -9298,11 +9298,11 @@ }, "XOrientation": { "type": "float", - "value": -0.1709683835506439 + "value": -0.17096838355064392 }, "XPosition": { "type": "float", - "value": 50.11128997802734 + "value": 50.111289978027344 }, "YOrientation": { "type": "float", @@ -9310,7 +9310,7 @@ }, "YPosition": { "type": "float", - "value": 111.6699829101563 + "value": 111.66998291015625 }, "ZPosition": { "type": "float", @@ -9363,7 +9363,7 @@ }, "XPosition": { "type": "float", - "value": 30.87946510314941 + "value": 30.879465103149414 }, "YOrientation": { "type": "float", @@ -9424,19 +9424,19 @@ }, "XPosition": { "type": "float", - "value": 21.61977386474609 + "value": 21.619773864746094 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 12.04683685302734 + "value": 12.046836853027344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9497,7 +9497,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9578,7 +9578,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9647,7 +9647,7 @@ }, "XPosition": { "type": "float", - "value": 71.83962249755859 + "value": 71.8396224975586 }, "YOrientation": { "type": "float", @@ -9659,7 +9659,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9736,11 +9736,11 @@ }, "YPosition": { "type": "float", - "value": 99.06064605712891 + "value": 99.0606460571289 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9809,7 +9809,7 @@ }, "XPosition": { "type": "float", - "value": 137.1460113525391 + "value": 137.14601135253906 }, "YOrientation": { "type": "float", @@ -9817,11 +9817,11 @@ }, "YPosition": { "type": "float", - "value": 25.60528373718262 + "value": 25.605283737182617 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9870,7 +9870,7 @@ }, "XPosition": { "type": "float", - "value": 122.5522918701172 + "value": 122.55229187011719 }, "YOrientation": { "type": "float", @@ -9878,7 +9878,7 @@ }, "YPosition": { "type": "float", - "value": 118.9171829223633 + "value": 118.91718292236328 }, "ZPosition": { "type": "float", @@ -10019,11 +10019,11 @@ }, "YPosition": { "type": "float", - "value": 117.4034576416016 + "value": 117.40345764160156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10072,7 +10072,7 @@ }, "XPosition": { "type": "float", - "value": 114.6020965576172 + "value": 114.60209655761719 }, "YOrientation": { "type": "float", @@ -10080,11 +10080,11 @@ }, "YPosition": { "type": "float", - "value": 66.41420745849609 + "value": 66.4142074584961 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10141,11 +10141,11 @@ }, "YPosition": { "type": "float", - "value": 90.07803344726563 + "value": 90.07803344726562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10214,11 +10214,11 @@ }, "XPosition": { "type": "float", - "value": 148.1588287353516 + "value": 148.15882873535156 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -10226,7 +10226,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10275,7 +10275,7 @@ }, "XPosition": { "type": "float", - "value": 114.8865356445313 + "value": 114.88653564453125 }, "YOrientation": { "type": "float", @@ -10283,11 +10283,11 @@ }, "YPosition": { "type": "float", - "value": 1.535097122192383 + "value": 1.5350971221923828 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10336,15 +10336,15 @@ }, "XPosition": { "type": "float", - "value": 148.1914215087891 + "value": 148.19142150878906 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 95.13600921630859 + "value": 95.1360092163086 }, "ZPosition": { "type": "float", @@ -10393,11 +10393,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04907225072383881 + "value": 0.049072250723838806 }, "XPosition": { "type": "float", - "value": 104.929328918457 + "value": 104.92932891845703 }, "YOrientation": { "type": "float", @@ -10405,11 +10405,11 @@ }, "YPosition": { "type": "float", - "value": 148.4393615722656 + "value": 148.43936157226562 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10458,7 +10458,7 @@ }, "XPosition": { "type": "float", - "value": 107.8517761230469 + "value": 107.85177612304688 }, "YOrientation": { "type": "float", @@ -10470,7 +10470,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10519,7 +10519,7 @@ }, "XPosition": { "type": "float", - "value": 106.6129531860352 + "value": 106.61295318603516 }, "YOrientation": { "type": "float", @@ -10527,11 +10527,11 @@ }, "YPosition": { "type": "float", - "value": 116.3004302978516 + "value": 116.30043029785156 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10580,7 +10580,7 @@ }, "XPosition": { "type": "float", - "value": 125.8101654052734 + "value": 125.81016540527344 }, "YOrientation": { "type": "float", @@ -10592,7 +10592,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10649,7 +10649,7 @@ }, "YPosition": { "type": "float", - "value": 95.81581878662109 + "value": 95.8158187866211 }, "ZPosition": { "type": "float", @@ -10799,11 +10799,11 @@ }, "XOrientation": { "type": "float", - "value": 0.5956986546516419 + "value": 0.5956986546516418 }, "XPosition": { "type": "float", - "value": 119.1769409179688 + "value": 119.17694091796875 }, "YOrientation": { "type": "float", @@ -10815,7 +10815,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10862,11 +10862,11 @@ }, "XPosition": { "type": "float", - "value": 147.7305603027344 + "value": 147.73056030273438 }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -10874,7 +10874,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10923,7 +10923,7 @@ }, "XPosition": { "type": "float", - "value": 111.6203079223633 + "value": 111.62030792236328 }, "YOrientation": { "type": "float", @@ -10931,7 +10931,7 @@ }, "YPosition": { "type": "float", - "value": 53.44736480712891 + "value": 53.447364807128906 }, "ZPosition": { "type": "float", @@ -10988,15 +10988,15 @@ }, "YOrientation": { "type": "float", - "value": 0.3598954081535339 + "value": 0.35989540815353394 }, "YPosition": { "type": "float", - "value": 138.5908050537109 + "value": 138.59080505371094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11045,7 +11045,7 @@ }, "XPosition": { "type": "float", - "value": 122.511100769043 + "value": 122.51110076904297 }, "YOrientation": { "type": "float", @@ -11053,11 +11053,11 @@ }, "YPosition": { "type": "float", - "value": 22.96897888183594 + "value": 22.968978881835938 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11106,7 +11106,7 @@ }, "XPosition": { "type": "float", - "value": 109.0573272705078 + "value": 109.05732727050781 }, "YOrientation": { "type": "float", @@ -11118,7 +11118,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11171,7 +11171,7 @@ }, "YOrientation": { "type": "float", - "value": -0.1467303484678268 + "value": -0.14673034846782684 }, "YPosition": { "type": "float", @@ -11179,7 +11179,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { diff --git a/_module/git/bottomlandslake.git.json b/_module/git/bottomlandslake.git.json index b457fa3..6eab0b2 100644 --- a/_module/git/bottomlandslake.git.json +++ b/_module/git/bottomlandslake.git.json @@ -282,7 +282,7 @@ }, "Y": { "type": "float", - "value": 60.88735198974609 + "value": 60.887351989746094 }, "Z": { "type": "float", @@ -805,7 +805,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } } ] @@ -863,7 +863,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -991,7 +991,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1119,7 +1119,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1186,11 +1186,11 @@ }, "XPosition": { "type": "float", - "value": 40.00991058349609 + "value": 40.009910583496094 }, "YPosition": { "type": "float", - "value": 38.92916870117188 + "value": 38.929168701171875 }, "ZPosition": { "type": "float", @@ -1247,7 +1247,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1322,7 +1322,7 @@ }, "ZPosition": { "type": "float", - "value": 0.5000076293945313 + "value": 0.5000076293945312 } }, { @@ -1375,7 +1375,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1503,7 +1503,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1619,11 +1619,11 @@ }, "PointY": { "type": "float", - "value": -3.334602355957031 + "value": -3.3346023559570312 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -1645,7 +1645,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.989475250244141 + "value": 9.98947525024414 }, "PointY": { "type": "float", @@ -1668,7 +1668,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -1683,7 +1683,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -1874,7 +1874,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4713980853557587 + "value": -0.47139808535575867 }, "XPosition": { "type": "float", @@ -1890,7 +1890,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1943,15 +1943,15 @@ }, "YOrientation": { "type": "float", - "value": 6.715443419125222e-007 + "value": 0.0000006715443419125222 }, "YPosition": { "type": "float", - "value": 24.24057197570801 + "value": 24.240571975708008 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2000,7 +2000,7 @@ }, "XPosition": { "type": "float", - "value": 28.43371391296387 + "value": 28.433713912963867 }, "YOrientation": { "type": "float", @@ -2012,7 +2012,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2061,7 +2061,7 @@ }, "XPosition": { "type": "float", - "value": 42.16524505615234 + "value": 42.165245056152344 }, "YOrientation": { "type": "float", @@ -2069,11 +2069,11 @@ }, "YPosition": { "type": "float", - "value": 51.70040130615234 + "value": 51.700401306152344 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2130,11 +2130,11 @@ }, "YPosition": { "type": "float", - "value": 15.87894916534424 + "value": 15.878949165344238 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2183,7 +2183,7 @@ }, "XPosition": { "type": "float", - "value": 54.86114883422852 + "value": 54.861148834228516 }, "YOrientation": { "type": "float", @@ -2191,11 +2191,11 @@ }, "YPosition": { "type": "float", - "value": 97.48831176757813 + "value": 97.48831176757812 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -2256,7 +2256,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -2382,7 +2382,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } } ] diff --git a/_module/git/bottomlandssw001.git.json b/_module/git/bottomlandssw001.git.json index 60d55fd..79febc6 100644 --- a/_module/git/bottomlandssw001.git.json +++ b/_module/git/bottomlandssw001.git.json @@ -802,7 +802,7 @@ }, "XPosition": { "type": "float", - "value": 18.84619331359863 + "value": 18.846193313598633 }, "YOrientation": { "type": "float", @@ -810,11 +810,11 @@ }, "YPosition": { "type": "float", - "value": 15.35867786407471 + "value": 15.358677864074707 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1671,7 +1671,7 @@ }, "XOrientation": { "type": "float", - "value": 0.3598996996879578 + "value": 0.35989969968795776 }, "XPosition": { "type": "float", @@ -1683,11 +1683,11 @@ }, "YPosition": { "type": "float", - "value": 23.38289070129395 + "value": 23.382890701293945 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1711,7 +1711,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1903,7 +1903,7 @@ }, "X": { "type": "float", - "value": 27.79000091552734 + "value": 27.790000915527344 }, "Y": { "type": "float", @@ -5335,7 +5335,7 @@ }, "XPosition": { "type": "float", - "value": 19.19705390930176 + "value": 19.197053909301758 }, "YOrientation": { "type": "float", @@ -5343,11 +5343,11 @@ }, "YPosition": { "type": "float", - "value": 15.26823425292969 + "value": 15.268234252929688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -5475,19 +5475,19 @@ }, "XPosition": { "type": "float", - "value": 15.86095237731934 + "value": 15.860952377319336 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 19.54211807250977 + "value": 19.542118072509766 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -5568,7 +5568,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5645,11 +5645,11 @@ }, "YPosition": { "type": "float", - "value": 15.47821807861328 + "value": 15.478218078613281 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5706,7 +5706,7 @@ }, "YPosition": { "type": "float", - "value": 22.46238708496094 + "value": 22.462387084960938 }, "ZPosition": { "type": "float", @@ -5779,7 +5779,7 @@ }, "XPosition": { "type": "float", - "value": 20.64836502075195 + "value": 20.648365020751953 }, "YOrientation": { "type": "float", @@ -5787,11 +5787,11 @@ }, "YPosition": { "type": "float", - "value": 18.11384582519531 + "value": 18.113845825195312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/bottomlandsswamp.git.json b/_module/git/bottomlandsswamp.git.json index 08bb263..ef091fa 100644 --- a/_module/git/bottomlandsswamp.git.json +++ b/_module/git/bottomlandsswamp.git.json @@ -258,11 +258,11 @@ }, "X": { "type": "float", - "value": 136.8399963378906 + "value": 136.83999633789062 }, "Y": { "type": "float", - "value": 52.93999862670898 + "value": 52.939998626708984 }, "Z": { "type": "float", @@ -506,7 +506,7 @@ }, "Z": { "type": "float", - "value": 0.01000004075467587 + "value": 0.010000040754675865 } }, { @@ -725,7 +725,7 @@ }, "X": { "type": "float", - "value": 131.0838317871094 + "value": 131.08383178710938 }, "Y": { "type": "float", @@ -733,7 +733,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -960,7 +960,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1187,7 +1187,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1414,7 +1414,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1641,7 +1641,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1868,7 +1868,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2091,11 +2091,11 @@ }, "Y": { "type": "float", - "value": 115.9940719604492 + "value": 115.99407196044922 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2318,11 +2318,11 @@ }, "Y": { "type": "float", - "value": 126.1701278686523 + "value": 126.17012786865234 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2549,7 +2549,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2772,11 +2772,11 @@ }, "Y": { "type": "float", - "value": 138.4725952148438 + "value": 138.47259521484375 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2995,7 +2995,7 @@ }, "X": { "type": "float", - "value": 112.9665451049805 + "value": 112.96654510498047 }, "Y": { "type": "float", @@ -3003,7 +3003,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3222,15 +3222,15 @@ }, "X": { "type": "float", - "value": 126.2126770019531 + "value": 126.21267700195312 }, "Y": { "type": "float", - "value": 116.7716217041016 + "value": 116.77162170410156 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3453,11 +3453,11 @@ }, "Y": { "type": "float", - "value": 114.2100372314453 + "value": 114.21003723144531 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3676,7 +3676,7 @@ }, "X": { "type": "float", - "value": 106.0796737670898 + "value": 106.07967376708984 }, "Y": { "type": "float", @@ -3684,7 +3684,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3903,7 +3903,7 @@ }, "X": { "type": "float", - "value": 102.8382720947266 + "value": 102.83827209472656 }, "Y": { "type": "float", @@ -4130,15 +4130,15 @@ }, "X": { "type": "float", - "value": 107.9628753662109 + "value": 107.96287536621094 }, "Y": { "type": "float", - "value": 97.81613922119141 + "value": 97.8161392211914 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4357,15 +4357,15 @@ }, "X": { "type": "float", - "value": 122.0906600952148 + "value": 122.09066009521484 }, "Y": { "type": "float", - "value": 97.01999664306641 + "value": 97.0199966430664 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4584,11 +4584,11 @@ }, "X": { "type": "float", - "value": 133.1747436523438 + "value": 133.17474365234375 }, "Y": { "type": "float", - "value": 103.3415451049805 + "value": 103.34154510498047 }, "Z": { "type": "float", @@ -4811,15 +4811,15 @@ }, "X": { "type": "float", - "value": 146.5471801757813 + "value": 146.54718017578125 }, "Y": { "type": "float", - "value": 106.5575561523438 + "value": 106.55755615234375 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5038,15 +5038,15 @@ }, "X": { "type": "float", - "value": 37.64056777954102 + "value": 37.640567779541016 }, "Y": { "type": "float", - "value": 138.1340026855469 + "value": 138.13400268554688 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5496,11 +5496,11 @@ }, "Y": { "type": "float", - "value": 125.2948684692383 + "value": 125.29486846923828 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5719,15 +5719,15 @@ }, "X": { "type": "float", - "value": 14.94086265563965 + "value": 14.940862655639648 }, "Y": { "type": "float", - "value": 146.1002807617188 + "value": 146.10028076171875 }, "Z": { "type": "float", - "value": 0.1115329265594482 + "value": 0.11153292655944824 } }, { @@ -5950,11 +5950,11 @@ }, "Y": { "type": "float", - "value": 136.4605102539063 + "value": 136.46051025390625 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6177,11 +6177,11 @@ }, "Y": { "type": "float", - "value": 125.2948837280273 + "value": 125.29488372802734 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6404,11 +6404,11 @@ }, "Y": { "type": "float", - "value": 113.7079315185547 + "value": 113.70793151855469 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6631,11 +6631,11 @@ }, "Y": { "type": "float", - "value": 105.4298858642578 + "value": 105.42988586425781 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6858,11 +6858,11 @@ }, "Y": { "type": "float", - "value": 96.03794097900391 + "value": 96.0379409790039 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7081,7 +7081,7 @@ }, "X": { "type": "float", - "value": 33.95597076416016 + "value": 33.955970764160156 }, "Y": { "type": "float", @@ -7089,7 +7089,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7316,7 +7316,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7539,11 +7539,11 @@ }, "Y": { "type": "float", - "value": 84.46743011474609 + "value": 84.4674301147461 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7770,7 +7770,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7997,7 +7997,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -8216,7 +8216,7 @@ }, "X": { "type": "float", - "value": 55.70498657226563 + "value": 55.704986572265625 }, "Y": { "type": "float", @@ -8224,7 +8224,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8443,7 +8443,7 @@ }, "X": { "type": "float", - "value": 57.15314102172852 + "value": 57.153141021728516 }, "Y": { "type": "float", @@ -8451,7 +8451,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8670,7 +8670,7 @@ }, "X": { "type": "float", - "value": 56.19739151000977 + "value": 56.197391510009766 }, "Y": { "type": "float", @@ -8678,7 +8678,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -8901,11 +8901,11 @@ }, "Y": { "type": "float", - "value": 35.84838485717773 + "value": 35.848384857177734 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9132,7 +9132,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9351,7 +9351,7 @@ }, "X": { "type": "float", - "value": 32.94857025146484 + "value": 32.948570251464844 }, "Y": { "type": "float", @@ -9359,7 +9359,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9586,7 +9586,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9805,15 +9805,15 @@ }, "X": { "type": "float", - "value": 25.18922805786133 + "value": 25.189228057861328 }, "Y": { "type": "float", - "value": 55.56683731079102 + "value": 55.566837310791016 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10036,11 +10036,11 @@ }, "Y": { "type": "float", - "value": 41.48614883422852 + "value": 41.486148834228516 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10259,7 +10259,7 @@ }, "X": { "type": "float", - "value": 13.40576267242432 + "value": 13.405762672424316 }, "Y": { "type": "float", @@ -10267,7 +10267,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10490,11 +10490,11 @@ }, "Y": { "type": "float", - "value": 64.29721832275391 + "value": 64.2972183227539 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10721,7 +10721,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10944,11 +10944,11 @@ }, "Y": { "type": "float", - "value": 120.1142501831055 + "value": 120.11425018310547 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11171,11 +11171,11 @@ }, "Y": { "type": "float", - "value": 106.4658889770508 + "value": 106.46588897705078 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11402,7 +11402,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11621,7 +11621,7 @@ }, "X": { "type": "float", - "value": 66.51760864257813 + "value": 66.51760864257812 }, "Y": { "type": "float", @@ -11629,7 +11629,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11856,7 +11856,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12079,11 +12079,11 @@ }, "Y": { "type": "float", - "value": 53.75460815429688 + "value": 53.754608154296875 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12302,7 +12302,7 @@ }, "X": { "type": "float", - "value": 113.3501434326172 + "value": 113.35014343261719 }, "Y": { "type": "float", @@ -12310,7 +12310,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12529,7 +12529,7 @@ }, "X": { "type": "float", - "value": 140.0866088867188 + "value": 140.08660888671875 }, "Y": { "type": "float", @@ -12537,7 +12537,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12764,7 +12764,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12983,7 +12983,7 @@ }, "X": { "type": "float", - "value": 126.1923446655273 + "value": 126.19234466552734 }, "Y": { "type": "float", @@ -12991,7 +12991,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13210,15 +13210,15 @@ }, "X": { "type": "float", - "value": 106.6734161376953 + "value": 106.67341613769531 }, "Y": { "type": "float", - "value": 147.4770660400391 + "value": 147.47706604003906 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] @@ -13276,7 +13276,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -13637,7 +13637,7 @@ }, "XPosition": { "type": "float", - "value": 77.63747406005859 + "value": 77.6374740600586 }, "YPosition": { "type": "float", @@ -13698,7 +13698,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -13765,7 +13765,7 @@ }, "XPosition": { "type": "float", - "value": 46.76119995117188 + "value": 46.761199951171875 }, "YPosition": { "type": "float", @@ -13826,7 +13826,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -13897,7 +13897,7 @@ }, "YPosition": { "type": "float", - "value": 100.4968948364258 + "value": 100.49689483642578 }, "ZPosition": { "type": "float", @@ -13954,7 +13954,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -14025,7 +14025,7 @@ }, "YPosition": { "type": "float", - "value": 100.4867477416992 + "value": 100.48674774169922 }, "ZPosition": { "type": "float", @@ -14082,7 +14082,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -14210,7 +14210,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -14277,7 +14277,7 @@ }, "XPosition": { "type": "float", - "value": 17.97601699829102 + "value": 17.976016998291016 }, "YPosition": { "type": "float", @@ -14330,7 +14330,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -14345,7 +14345,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -14481,7 +14481,7 @@ }, "XPosition": { "type": "float", - "value": 149.6692810058594 + "value": 149.66928100585938 }, "YOrientation": { "type": "float", @@ -14489,7 +14489,7 @@ }, "YPosition": { "type": "float", - "value": 39.88284301757813 + "value": 39.882843017578125 }, "ZOrientation": { "type": "float", @@ -14727,11 +14727,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 }, "PointY": { "type": "float", - "value": 2.616836786270142 + "value": 2.6168367862701416 }, "PointZ": { "type": "float", @@ -14772,7 +14772,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.06476211547852 + "value": 10.064762115478516 }, "PointY": { "type": "float", @@ -14787,11 +14787,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.06476020812988 + "value": 10.064760208129883 }, "PointY": { "type": "float", - "value": 2.616837024688721 + "value": 2.6168370246887207 }, "PointZ": { "type": "float", @@ -14952,14 +14952,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.6239089965820313 + "value": 0.6239089965820312 }, "PointY": { "type": "float", @@ -14974,7 +14974,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.105674743652344 + "value": 2.1056747436523438 }, "PointY": { "type": "float", @@ -14989,7 +14989,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.247810363769531 + "value": 1.2478103637695312 }, "PointY": { "type": "float", @@ -15111,7 +15111,7 @@ }, "YPosition": { "type": "float", - "value": 51.43611907958984 + "value": 51.436119079589844 }, "ZOrientation": { "type": "float", @@ -15213,7 +15213,7 @@ }, "XPosition": { "type": "float", - "value": 101.0415649414063 + "value": 101.04156494140625 }, "YOrientation": { "type": "float", @@ -15221,11 +15221,11 @@ }, "YPosition": { "type": "float", - "value": 110.448860168457 + "value": 110.44886016845703 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15286,7 +15286,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15335,7 +15335,7 @@ }, "XPosition": { "type": "float", - "value": 116.5723037719727 + "value": 116.57230377197266 }, "YOrientation": { "type": "float", @@ -15343,11 +15343,11 @@ }, "YPosition": { "type": "float", - "value": 145.5973510742188 + "value": 145.59735107421875 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15408,7 +15408,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15465,11 +15465,11 @@ }, "YPosition": { "type": "float", - "value": 111.6749877929688 + "value": 111.67498779296875 }, "ZPosition": { "type": "float", - "value": 0.0001198947429656982 + "value": 0.00011989474296569824 } }, { @@ -15514,7 +15514,7 @@ }, "XOrientation": { "type": "float", - "value": 0.3598999381065369 + "value": 0.35989993810653687 }, "XPosition": { "type": "float", @@ -15530,7 +15530,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15599,7 +15599,7 @@ }, "XPosition": { "type": "float", - "value": 18.28384399414063 + "value": 18.283843994140625 }, "YOrientation": { "type": "float", @@ -15607,11 +15607,11 @@ }, "YPosition": { "type": "float", - "value": 142.2984008789063 + "value": 142.29840087890625 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15668,11 +15668,11 @@ }, "YPosition": { "type": "float", - "value": 108.9019393920898 + "value": 108.90193939208984 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15717,7 +15717,7 @@ }, "XOrientation": { "type": "float", - "value": 0.2429863214492798 + "value": 0.24298632144927979 }, "XPosition": { "type": "float", @@ -15733,7 +15733,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15786,7 +15786,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -15794,7 +15794,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15851,11 +15851,11 @@ }, "YPosition": { "type": "float", - "value": 67.45493316650391 + "value": 67.4549331665039 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15936,7 +15936,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16005,7 +16005,7 @@ }, "XPosition": { "type": "float", - "value": 120.9412994384766 + "value": 120.94129943847656 }, "YOrientation": { "type": "float", @@ -16017,7 +16017,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16090,15 +16090,15 @@ }, "YOrientation": { "type": "float", - "value": -0.7572054266929627 + "value": -0.7572054266929626 }, "YPosition": { "type": "float", - "value": 19.21358108520508 + "value": 19.213581085205078 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16167,7 +16167,7 @@ }, "XPosition": { "type": "float", - "value": 58.72198867797852 + "value": 58.721988677978516 }, "YOrientation": { "type": "float", @@ -16179,7 +16179,7 @@ }, "ZPosition": { "type": "float", - "value": 0.001601904630661011 + "value": 0.0016019046306610107 } }, { @@ -16224,11 +16224,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", - "value": 141.3718566894531 + "value": 141.37185668945312 }, "YOrientation": { "type": "float", @@ -16240,7 +16240,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16365,7 +16365,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", @@ -16381,7 +16381,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16442,7 +16442,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16499,11 +16499,11 @@ }, "YPosition": { "type": "float", - "value": 12.77829551696777 + "value": 12.778295516967773 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16564,7 +16564,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16613,7 +16613,7 @@ }, "XPosition": { "type": "float", - "value": 28.50881195068359 + "value": 28.508811950683594 }, "YOrientation": { "type": "float", @@ -16621,11 +16621,11 @@ }, "YPosition": { "type": "float", - "value": 18.73783874511719 + "value": 18.737838745117188 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16674,11 +16674,11 @@ }, "XPosition": { "type": "float", - "value": 113.7571640014648 + "value": 113.75716400146484 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -16686,7 +16686,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16767,7 +16767,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16816,11 +16816,11 @@ }, "XPosition": { "type": "float", - "value": 147.9242858886719 + "value": 147.92428588867188 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -16828,7 +16828,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16877,11 +16877,11 @@ }, "XPosition": { "type": "float", - "value": 2.318681955337524 + "value": 2.3186819553375244 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -16889,7 +16889,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16938,7 +16938,7 @@ }, "XPosition": { "type": "float", - "value": 15.03218746185303 + "value": 15.032187461853027 }, "YOrientation": { "type": "float", @@ -16946,11 +16946,11 @@ }, "YPosition": { "type": "float", - "value": 1.377269744873047 + "value": 1.3772697448730469 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17003,15 +17003,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 25.31381797790527 + "value": 25.313817977905273 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17064,15 +17064,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 29.00744247436523 + "value": 29.007442474365234 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17121,19 +17121,19 @@ }, "XPosition": { "type": "float", - "value": 121.1996383666992 + "value": 121.19963836669922 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 48.09042358398438 + "value": 48.090423583984375 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17182,7 +17182,7 @@ }, "XPosition": { "type": "float", - "value": 70.85476684570313 + "value": 70.85476684570312 }, "YOrientation": { "type": "float", @@ -17239,7 +17239,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454144880175591 + "value": -0.024541448801755905 }, "XPosition": { "type": "float", @@ -17251,11 +17251,11 @@ }, "YPosition": { "type": "float", - "value": 56.59487915039063 + "value": 56.594879150390625 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/cave.git.json b/_module/git/cave.git.json index 58e88ea..5fbf6f4 100644 --- a/_module/git/cave.git.json +++ b/_module/git/cave.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590356826782 + "value": -3.1415903568267822 }, "CloseLockDC": { "type": "byte", @@ -497,7 +497,7 @@ }, "X": { "type": "float", - "value": 31.8946647644043 + "value": 31.894664764404297 }, "Y": { "type": "float", @@ -505,7 +505,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -733,7 +733,7 @@ }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } } ] @@ -792,7 +792,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -1222,7 +1222,7 @@ }, "XPosition": { "type": "float", - "value": 28.89971733093262 + "value": 28.899717330932617 }, "YOrientation": { "type": "float", @@ -1234,7 +1234,7 @@ }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -1279,7 +1279,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2429800927639008 + "value": -0.24298009276390076 }, "XPosition": { "type": "float", @@ -1291,11 +1291,11 @@ }, "YPosition": { "type": "float", - "value": 112.2124099731445 + "value": 112.21240997314453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1352,11 +1352,11 @@ }, "YPosition": { "type": "float", - "value": 142.3238220214844 + "value": 142.32382202148438 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1401,7 +1401,7 @@ }, "XOrientation": { "type": "float", - "value": -0.1709641665220261 + "value": -0.17096416652202606 }, "XPosition": { "type": "float", @@ -1413,11 +1413,11 @@ }, "YPosition": { "type": "float", - "value": 113.9664840698242 + "value": 113.96648406982422 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1470,7 +1470,7 @@ }, "YOrientation": { "type": "float", - "value": -0.1950892806053162 + "value": -0.19508928060531616 }, "YPosition": { "type": "float", @@ -1478,7 +1478,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1527,7 +1527,7 @@ }, "XPosition": { "type": "float", - "value": 103.5007934570313 + "value": 103.50079345703125 }, "YOrientation": { "type": "float", @@ -1535,11 +1535,11 @@ }, "YPosition": { "type": "float", - "value": 112.2124099731445 + "value": 112.21240997314453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1584,11 +1584,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4929002225399017 + "value": 0.49290022253990173 }, "XPosition": { "type": "float", - "value": 117.8656311035156 + "value": 117.86563110351562 }, "YOrientation": { "type": "float", @@ -1596,11 +1596,11 @@ }, "YPosition": { "type": "float", - "value": 142.3238220214844 + "value": 142.32382202148438 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1645,11 +1645,11 @@ }, "XOrientation": { "type": "float", - "value": 2.296763113918132e-006 + "value": 0.000002296763113918132 }, "XPosition": { "type": "float", - "value": 124.5412979125977 + "value": 124.54129791259766 }, "YOrientation": { "type": "float", @@ -1657,11 +1657,11 @@ }, "YPosition": { "type": "float", - "value": 109.3126907348633 + "value": 109.31269073486328 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1710,7 +1710,7 @@ }, "XPosition": { "type": "float", - "value": 118.3153457641602 + "value": 118.31534576416016 }, "YOrientation": { "type": "float", @@ -1722,7 +1722,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1767,11 +1767,11 @@ }, "XOrientation": { "type": "float", - "value": 2.296763113918132e-006 + "value": 0.000002296763113918132 }, "XPosition": { "type": "float", - "value": 128.0411682128906 + "value": 128.04116821289062 }, "YOrientation": { "type": "float", @@ -1779,11 +1779,11 @@ }, "YPosition": { "type": "float", - "value": 23.56428909301758 + "value": 23.564289093017578 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1832,11 +1832,11 @@ }, "XPosition": { "type": "float", - "value": 76.39402008056641 + "value": 76.3940200805664 }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", @@ -1844,7 +1844,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1897,7 +1897,7 @@ }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", @@ -1905,7 +1905,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1958,7 +1958,7 @@ }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", @@ -1966,7 +1966,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2015,7 +2015,7 @@ }, "XPosition": { "type": "float", - "value": 13.53719520568848 + "value": 13.537195205688477 }, "YOrientation": { "type": "float", @@ -2027,7 +2027,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2084,11 +2084,11 @@ }, "YPosition": { "type": "float", - "value": 12.20803833007813 + "value": 12.208038330078125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2137,7 +2137,7 @@ }, "XPosition": { "type": "float", - "value": 61.58414459228516 + "value": 61.584144592285156 }, "YOrientation": { "type": "float", @@ -2145,11 +2145,11 @@ }, "YPosition": { "type": "float", - "value": 42.68262100219727 + "value": 42.682621002197266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2198,7 +2198,7 @@ }, "XPosition": { "type": "float", - "value": 112.2662734985352 + "value": 112.26627349853516 }, "YOrientation": { "type": "float", @@ -2206,11 +2206,11 @@ }, "YPosition": { "type": "float", - "value": 17.74887275695801 + "value": 17.748872756958008 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2259,7 +2259,7 @@ }, "XPosition": { "type": "float", - "value": 126.8571243286133 + "value": 126.85712432861328 }, "YOrientation": { "type": "float", @@ -2271,7 +2271,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2320,7 +2320,7 @@ }, "XPosition": { "type": "float", - "value": 125.5642700195313 + "value": 125.56427001953125 }, "YOrientation": { "type": "float", @@ -2332,7 +2332,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2393,7 +2393,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2442,7 +2442,7 @@ }, "XPosition": { "type": "float", - "value": 24.81575012207031 + "value": 24.815750122070312 }, "YOrientation": { "type": "float", @@ -2454,7 +2454,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2507,15 +2507,15 @@ }, "YOrientation": { "type": "float", - "value": -0.1950892806053162 + "value": -0.19508928060531616 }, "YPosition": { "type": "float", - "value": 28.44612884521484 + "value": 28.446128845214844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/churchofallgo001.git.json b/_module/git/churchofallgo001.git.json index 6f8db3f..a40672b 100644 --- a/_module/git/churchofallgo001.git.json +++ b/_module/git/churchofallgo001.git.json @@ -1445,11 +1445,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0245488379150629 + "value": -0.024548837915062904 }, "XPosition": { "type": "float", - "value": 22.67793273925781 + "value": 22.677932739257812 }, "YOrientation": { "type": "float", @@ -1457,11 +1457,11 @@ }, "YPosition": { "type": "float", - "value": 12.56909370422363 + "value": 12.569093704223633 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2322,7 +2322,7 @@ }, "XPosition": { "type": "float", - "value": 20.41302299499512 + "value": 20.413022994995117 }, "YOrientation": { "type": "float", @@ -2330,7 +2330,7 @@ }, "YPosition": { "type": "float", - "value": 15.29814052581787 + "value": 15.298140525817871 }, "ZPosition": { "type": "float", @@ -3149,11 +3149,11 @@ }, "XOrientation": { "type": "float", - "value": 0.2902917861938477 + "value": 0.29029178619384766 }, "XPosition": { "type": "float", - "value": 29.26325607299805 + "value": 29.263256072998047 }, "YOrientation": { "type": "float", @@ -3161,11 +3161,11 @@ }, "YPosition": { "type": "float", - "value": 15.72502136230469 + "value": 15.725021362304688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -3189,7 +3189,7 @@ }, "Bearing": { "type": "float", - "value": -3.141584396362305 + "value": -3.1415843963623047 }, "CloseLockDC": { "type": "byte", @@ -3385,7 +3385,7 @@ }, "Y": { "type": "float", - "value": 2.350000143051148 + "value": 2.3500001430511475 }, "Z": { "type": "float", @@ -5386,11 +5386,11 @@ }, "YPosition": { "type": "float", - "value": 15.53115749359131 + "value": 15.531157493591309 }, "ZPosition": { "type": "float", - "value": -0.00499984622001648 + "value": -0.0049998462200164795 } } ] @@ -5488,11 +5488,11 @@ }, "XPosition": { "type": "float", - "value": 18.32451248168945 + "value": 18.324512481689453 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -5500,7 +5500,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5569,19 +5569,19 @@ }, "XPosition": { "type": "float", - "value": 30.64890670776367 + "value": 30.648906707763672 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 8.465225219726563 + "value": 8.465225219726562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5646,11 +5646,11 @@ }, "XOrientation": { "type": "float", - "value": 0.09802491962909699 + "value": 0.09802491962909698 }, "XPosition": { "type": "float", - "value": 30.5268669128418 + "value": 30.526866912841797 }, "YOrientation": { "type": "float", @@ -5662,7 +5662,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5742,11 +5742,11 @@ }, "XOrientation": { "type": "float", - "value": 0.09802491962909699 + "value": 0.09802491962909698 }, "XPosition": { "type": "float", - "value": 18.5335578918457 + "value": 18.533557891845703 }, "YOrientation": { "type": "float", @@ -5754,11 +5754,11 @@ }, "YPosition": { "type": "float", - "value": 23.55121803283691 + "value": 23.551218032836914 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5807,7 +5807,7 @@ }, "XPosition": { "type": "float", - "value": 21.02805709838867 + "value": 21.028057098388672 }, "YOrientation": { "type": "float", @@ -5815,11 +5815,11 @@ }, "YPosition": { "type": "float", - "value": 4.090535163879395 + "value": 4.0905351638793945 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5872,7 +5872,7 @@ }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", @@ -5880,7 +5880,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5961,7 +5961,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6030,7 +6030,7 @@ }, "XPosition": { "type": "float", - "value": 31.50112724304199 + "value": 31.501127243041992 }, "YOrientation": { "type": "float", @@ -6042,7 +6042,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6123,7 +6123,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6192,7 +6192,7 @@ }, "XPosition": { "type": "float", - "value": 30.10740661621094 + "value": 30.107406616210938 }, "YOrientation": { "type": "float", @@ -6200,11 +6200,11 @@ }, "YPosition": { "type": "float", - "value": 5.357256412506104 + "value": 5.3572564125061035 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6277,7 +6277,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -6285,7 +6285,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/churchoflight.git.json b/_module/git/churchoflight.git.json index 58ea30f..9a3b3cf 100644 --- a/_module/git/churchoflight.git.json +++ b/_module/git/churchoflight.git.json @@ -1377,11 +1377,11 @@ }, "YPosition": { "type": "float", - "value": 11.97430896759033 + "value": 11.974308967590332 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2715,11 +2715,11 @@ }, "YPosition": { "type": "float", - "value": 35.53640747070313 + "value": 35.536407470703125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4265,7 +4265,7 @@ }, "XPosition": { "type": "float", - "value": 17.3524055480957 + "value": 17.352405548095703 }, "YOrientation": { "type": "float", @@ -4277,7 +4277,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5113,7 +5113,7 @@ }, "XOrientation": { "type": "float", - "value": -0.492898017168045 + "value": -0.49289801716804504 }, "XPosition": { "type": "float", @@ -5129,7 +5129,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -5153,7 +5153,7 @@ }, "Bearing": { "type": "float", - "value": -3.141581296920776 + "value": -3.1415812969207764 }, "CloseLockDC": { "type": "byte", @@ -5583,15 +5583,15 @@ }, "X": { "type": "float", - "value": 25.01964950561523 + "value": 25.019649505615234 }, "Y": { "type": "float", - "value": 36.33868026733398 + "value": 36.338680267333984 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5810,15 +5810,15 @@ }, "X": { "type": "float", - "value": 24.98727989196777 + "value": 24.987279891967773 }, "Y": { "type": "float", - "value": 36.35501098632813 + "value": 36.355010986328125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -6928,11 +6928,11 @@ }, "YPosition": { "type": "float", - "value": 6.79204273223877 + "value": 6.7920427322387695 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/crypt1.git.json b/_module/git/crypt1.git.json index 0575e6d..4886aa5 100644 --- a/_module/git/crypt1.git.json +++ b/_module/git/crypt1.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -266,7 +266,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -485,7 +485,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } } ] @@ -726,7 +726,7 @@ }, "Z": { "type": "float", - "value": 0.002411536872386932 + "value": 0.0024115368723869324 } } ] @@ -812,7 +812,7 @@ }, "XPosition": { "type": "float", - "value": 41.80764770507813 + "value": 41.807647705078125 }, "YOrientation": { "type": "float", @@ -824,7 +824,7 @@ }, "ZPosition": { "type": "float", - "value": -7.171183824539185e-006 + "value": -0.0000071711838245391846 } }, { @@ -885,7 +885,7 @@ }, "ZPosition": { "type": "float", - "value": -7.934868335723877e-006 + "value": -0.000007934868335723877 } }, { @@ -946,7 +946,7 @@ }, "ZPosition": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -1007,7 +1007,7 @@ }, "ZPosition": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -1060,7 +1060,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -1068,7 +1068,7 @@ }, "ZPosition": { "type": "float", - "value": 3.120002746582031 + "value": 3.1200027465820312 } } ] diff --git a/_module/git/crypt2.git.json b/_module/git/crypt2.git.json index 99fc5de..0720c4c 100644 --- a/_module/git/crypt2.git.json +++ b/_module/git/crypt2.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -266,7 +266,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -485,7 +485,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -704,7 +704,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -923,7 +923,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1142,7 +1142,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1361,7 +1361,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1380,7 +1380,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -1580,7 +1580,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1799,7 +1799,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1818,7 +1818,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2018,7 +2018,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2037,7 +2037,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2237,7 +2237,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2256,7 +2256,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2456,7 +2456,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2475,7 +2475,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2675,7 +2675,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2694,7 +2694,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2894,7 +2894,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2913,7 +2913,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3113,7 +3113,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -3332,7 +3332,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } } ] @@ -3568,11 +3568,11 @@ }, "Y": { "type": "float", - "value": 34.36051177978516 + "value": 34.360511779785156 }, "Z": { "type": "float", - "value": -7.934868335723877e-006 + "value": -0.000007934868335723877 } }, { @@ -3795,11 +3795,11 @@ }, "Y": { "type": "float", - "value": 55.81707382202148 + "value": 55.817073822021484 }, "Z": { "type": "float", - "value": 0.1999994665384293 + "value": 0.19999946653842926 } }, { @@ -4026,7 +4026,7 @@ }, "Z": { "type": "float", - "value": 0.1828560829162598 + "value": 0.18285608291625977 } }, { @@ -4476,11 +4476,11 @@ }, "Y": { "type": "float", - "value": 74.13308715820313 + "value": 74.13308715820312 }, "Z": { "type": "float", - "value": -7.934868335723877e-006 + "value": -0.000007934868335723877 } }, { @@ -4699,7 +4699,7 @@ }, "X": { "type": "float", - "value": 90.05142211914063 + "value": 90.05142211914062 }, "Y": { "type": "float", @@ -4707,7 +4707,7 @@ }, "Z": { "type": "float", - "value": 0.1999994665384293 + "value": 0.19999946653842926 } }, { @@ -4930,11 +4930,11 @@ }, "Y": { "type": "float", - "value": 34.86746215820313 + "value": 34.867462158203125 }, "Z": { "type": "float", - "value": 0.02248161286115646 + "value": 0.022481612861156464 } }, { @@ -5153,11 +5153,11 @@ }, "X": { "type": "float", - "value": 60.09224700927734 + "value": 60.092247009277344 }, "Y": { "type": "float", - "value": 55.32538223266602 + "value": 55.325382232666016 }, "Z": { "type": "float", @@ -5384,7 +5384,7 @@ }, "Y": { "type": "float", - "value": 34.24197387695313 + "value": 34.241973876953125 }, "Z": { "type": "float", @@ -5607,7 +5607,7 @@ }, "X": { "type": "float", - "value": 39.91811370849609 + "value": 39.918113708496094 }, "Y": { "type": "float", @@ -5615,7 +5615,7 @@ }, "Z": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -5842,7 +5842,7 @@ }, "Z": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -6069,7 +6069,7 @@ }, "Z": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -6296,7 +6296,7 @@ }, "Z": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -6315,7 +6315,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -6751,7 +6751,7 @@ }, "Z": { "type": "float", - "value": 0.1999999433755875 + "value": 0.19999994337558746 } } ] @@ -6894,11 +6894,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 24.18903541564941 + "value": 24.189035415649414 }, "YOrientation": { "type": "float", @@ -6955,7 +6955,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -7016,7 +7016,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -7028,11 +7028,11 @@ }, "YPosition": { "type": "float", - "value": 51.81097793579102 + "value": 51.810977935791016 }, "ZPosition": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -7077,7 +7077,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -7089,7 +7089,7 @@ }, "YPosition": { "type": "float", - "value": 32.39324569702148 + "value": 32.393245697021484 }, "ZPosition": { "type": "float", @@ -7138,11 +7138,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 9.999691963195801 + "value": 9.9996919631958 }, "YOrientation": { "type": "float", @@ -7154,7 +7154,7 @@ }, "ZPosition": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -7199,7 +7199,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -7215,7 +7215,7 @@ }, "ZPosition": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -7260,7 +7260,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -7276,7 +7276,7 @@ }, "ZPosition": { "type": "float", - "value": -7.934868335723877e-006 + "value": -0.000007934868335723877 } }, { @@ -7321,7 +7321,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -7337,7 +7337,7 @@ }, "ZPosition": { "type": "float", - "value": -7.934868335723877e-006 + "value": -0.000007934868335723877 } } ] diff --git a/_module/git/crypt3.git.json b/_module/git/crypt3.git.json index 24281f4..ea626fb 100644 --- a/_module/git/crypt3.git.json +++ b/_module/git/crypt3.git.json @@ -266,7 +266,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590356826782 + "value": -3.1415903568267822 }, "CloseLockDC": { "type": "byte", @@ -485,7 +485,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -704,7 +704,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } } ] @@ -736,7 +736,7 @@ }, "Bearing": { "type": "float", - "value": 1.521707892417908 + "value": 1.5217078924179077 }, "BodyBag": { "type": "byte", @@ -936,7 +936,7 @@ }, "X": { "type": "float", - "value": 2.597692966461182 + "value": 2.5976929664611816 }, "Y": { "type": "float", @@ -944,7 +944,7 @@ }, "Z": { "type": "float", - "value": 0.1999993175268173 + "value": 0.19999931752681732 } }, { @@ -1172,7 +1172,7 @@ }, "Z": { "type": "float", - "value": 0.1999987810850143 + "value": 0.19999878108501434 } } ] @@ -1254,11 +1254,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4496112763881683 + "value": 0.44961127638816833 }, "XPosition": { "type": "float", - "value": 16.69108390808106 + "value": 16.691083908081055 }, "YOrientation": { "type": "float", @@ -1266,11 +1266,11 @@ }, "YPosition": { "type": "float", - "value": 15.8311653137207 + "value": 15.831165313720703 }, "ZPosition": { "type": "float", - "value": 1.399999618530273 + "value": 1.3999996185302734 } }, { @@ -1319,7 +1319,7 @@ }, "XPosition": { "type": "float", - "value": 24.93770790100098 + "value": 24.937707901000977 }, "YOrientation": { "type": "float", @@ -1327,7 +1327,7 @@ }, "YPosition": { "type": "float", - "value": 44.64419555664063 + "value": 44.644195556640625 }, "ZPosition": { "type": "float", @@ -1388,11 +1388,11 @@ }, "YPosition": { "type": "float", - "value": 59.63219833374023 + "value": 59.632198333740234 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1449,11 +1449,11 @@ }, "YPosition": { "type": "float", - "value": 73.90415191650391 + "value": 73.9041519165039 }, "ZPosition": { "type": "float", - "value": 0.200001671910286 + "value": 0.20000167191028595 } }, { @@ -1506,15 +1506,15 @@ }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 75.43996429443359 + "value": 75.4399642944336 }, "ZPosition": { "type": "float", - "value": 0.200001671910286 + "value": 0.20000167191028595 } }, { @@ -1563,7 +1563,7 @@ }, "XPosition": { "type": "float", - "value": 73.92471313476563 + "value": 73.92471313476562 }, "YOrientation": { "type": "float", @@ -1575,7 +1575,7 @@ }, "ZPosition": { "type": "float", - "value": -7.171183824539185e-006 + "value": -0.0000071711838245391846 } } ] diff --git a/_module/git/cryptentrance.git.json b/_module/git/cryptentrance.git.json index f6f10d0..0df2d51 100644 --- a/_module/git/cryptentrance.git.json +++ b/_module/git/cryptentrance.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 33.86999893188477 + "value": 33.869998931884766 }, "Z": { "type": "float", @@ -338,11 +338,11 @@ }, "PointY": { "type": "float", - "value": -0.102017879486084 + "value": -0.10201787948608398 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -353,7 +353,7 @@ }, "PointY": { "type": "float", - "value": 1.72000002861023 + "value": 1.7200000286102295 }, "PointZ": { "type": "float", @@ -368,11 +368,11 @@ }, "PointY": { "type": "float", - "value": 1.72000002861023 + "value": 1.7200000286102295 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -478,7 +478,7 @@ }, "XPosition": { "type": "float", - "value": 19.96399307250977 + "value": 19.963993072509766 }, "YOrientation": { "type": "float", @@ -486,7 +486,7 @@ }, "YPosition": { "type": "float", - "value": 0.1508293151855469 + "value": 0.15082931518554688 }, "ZOrientation": { "type": "float", @@ -598,7 +598,7 @@ }, "XPosition": { "type": "float", - "value": 24.93023300170898 + "value": 24.930233001708984 }, "YOrientation": { "type": "float", @@ -610,7 +610,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -659,7 +659,7 @@ }, "XPosition": { "type": "float", - "value": 40.49042129516602 + "value": 40.490421295166016 }, "YOrientation": { "type": "float", @@ -732,7 +732,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/cryptentrance2.git.json b/_module/git/cryptentrance2.git.json index 6ca5320..580127f 100644 --- a/_module/git/cryptentrance2.git.json +++ b/_module/git/cryptentrance2.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 33.86999893188477 + "value": 33.869998931884766 }, "Z": { "type": "float", @@ -338,11 +338,11 @@ }, "PointY": { "type": "float", - "value": -0.102017879486084 + "value": -0.10201787948608398 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -353,7 +353,7 @@ }, "PointY": { "type": "float", - "value": 1.72000002861023 + "value": 1.7200000286102295 }, "PointZ": { "type": "float", @@ -368,11 +368,11 @@ }, "PointY": { "type": "float", - "value": 1.72000002861023 + "value": 1.7200000286102295 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -478,7 +478,7 @@ }, "XPosition": { "type": "float", - "value": 19.96399307250977 + "value": 19.963993072509766 }, "YOrientation": { "type": "float", @@ -486,7 +486,7 @@ }, "YPosition": { "type": "float", - "value": 0.1508293151855469 + "value": 0.15082931518554688 }, "ZOrientation": { "type": "float", @@ -598,7 +598,7 @@ }, "XPosition": { "type": "float", - "value": 24.93023300170898 + "value": 24.930233001708984 }, "YOrientation": { "type": "float", @@ -610,7 +610,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -659,7 +659,7 @@ }, "XPosition": { "type": "float", - "value": 40.49042129516602 + "value": 40.490421295166016 }, "YOrientation": { "type": "float", @@ -720,7 +720,7 @@ }, "XPosition": { "type": "float", - "value": 27.69289398193359 + "value": 27.692893981933594 }, "YOrientation": { "type": "float", @@ -732,7 +732,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/cryptentrance3.git.json b/_module/git/cryptentrance3.git.json index 13b05b4..33c5067 100644 --- a/_module/git/cryptentrance3.git.json +++ b/_module/git/cryptentrance3.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 33.86999893188477 + "value": 33.869998931884766 }, "Z": { "type": "float", @@ -338,11 +338,11 @@ }, "PointY": { "type": "float", - "value": -0.102017879486084 + "value": -0.10201787948608398 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -353,7 +353,7 @@ }, "PointY": { "type": "float", - "value": 1.72000002861023 + "value": 1.7200000286102295 }, "PointZ": { "type": "float", @@ -368,11 +368,11 @@ }, "PointY": { "type": "float", - "value": 1.72000002861023 + "value": 1.7200000286102295 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -478,7 +478,7 @@ }, "XPosition": { "type": "float", - "value": 19.96399307250977 + "value": 19.963993072509766 }, "YOrientation": { "type": "float", @@ -486,7 +486,7 @@ }, "YPosition": { "type": "float", - "value": 0.1508293151855469 + "value": 0.15082931518554688 }, "ZOrientation": { "type": "float", @@ -598,7 +598,7 @@ }, "XPosition": { "type": "float", - "value": 24.93023300170898 + "value": 24.930233001708984 }, "YOrientation": { "type": "float", @@ -610,7 +610,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -659,7 +659,7 @@ }, "XPosition": { "type": "float", - "value": 40.49042129516602 + "value": 40.490421295166016 }, "YOrientation": { "type": "float", @@ -732,7 +732,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/crystalcaverns.git.json b/_module/git/crystalcaverns.git.json index 153f1cf..0751644 100644 --- a/_module/git/crystalcaverns.git.json +++ b/_module/git/crystalcaverns.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588449478149 + "value": 3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -256,11 +256,11 @@ }, "X": { "type": "float", - "value": 125.9899978637695 + "value": 125.98999786376953 }, "Y": { "type": "float", - "value": 125.7600021362305 + "value": 125.76000213623047 }, "Z": { "type": "float", @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -933,15 +933,15 @@ }, "X": { "type": "float", - "value": 19.9449348449707 + "value": 19.944934844970703 }, "Y": { "type": "float", - "value": 147.3710632324219 + "value": 147.37106323242188 }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } }, { @@ -1169,7 +1169,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1188,7 +1188,7 @@ }, "Bearing": { "type": "float", - "value": -1.619882822036743 + "value": -1.6198828220367432 }, "BodyBag": { "type": "byte", @@ -1388,15 +1388,15 @@ }, "X": { "type": "float", - "value": 144.9834289550781 + "value": 144.98342895507812 }, "Y": { "type": "float", - "value": 123.2827606201172 + "value": 123.28276062011719 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1455,7 +1455,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -1803,7 +1803,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } } ] @@ -1881,7 +1881,7 @@ }, "XOrientation": { "type": "float", - "value": 4.204111519356957e-006 + "value": 0.000004204111519356957 }, "XPosition": { "type": "float", @@ -1897,7 +1897,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1946,7 +1946,7 @@ }, "XPosition": { "type": "float", - "value": 33.55391693115234 + "value": 33.553916931152344 }, "YOrientation": { "type": "float", @@ -1958,7 +1958,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2019,7 +2019,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1178737878799439 + "value": 0.11787378787994385 } }, { @@ -2068,7 +2068,7 @@ }, "XPosition": { "type": "float", - "value": 16.16268157958984 + "value": 16.162681579589844 }, "YOrientation": { "type": "float", @@ -2080,7 +2080,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2129,7 +2129,7 @@ }, "XPosition": { "type": "float", - "value": 10.44558906555176 + "value": 10.445589065551758 }, "YOrientation": { "type": "float", @@ -2137,11 +2137,11 @@ }, "YPosition": { "type": "float", - "value": 127.2581481933594 + "value": 127.25814819335938 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2186,7 +2186,7 @@ }, "XOrientation": { "type": "float", - "value": -0.6715614795684815 + "value": -0.6715614795684814 }, "XPosition": { "type": "float", @@ -2202,7 +2202,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2259,11 +2259,11 @@ }, "YPosition": { "type": "float", - "value": 54.42473983764648 + "value": 54.424739837646484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2312,7 +2312,7 @@ }, "XPosition": { "type": "float", - "value": 136.2149353027344 + "value": 136.21493530273438 }, "YOrientation": { "type": "float", @@ -2324,7 +2324,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } }, { @@ -2369,7 +2369,7 @@ }, "XOrientation": { "type": "float", - "value": -0.5956986546516419 + "value": -0.5956986546516418 }, "XPosition": { "type": "float", @@ -2381,11 +2381,11 @@ }, "YPosition": { "type": "float", - "value": 19.48489379882813 + "value": 19.484893798828125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2434,11 +2434,11 @@ }, "XPosition": { "type": "float", - "value": 109.1764984130859 + "value": 109.17649841308594 }, "YOrientation": { "type": "float", - "value": 0.4052420258522034 + "value": 0.40524202585220337 }, "YPosition": { "type": "float", @@ -2446,7 +2446,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2495,7 +2495,7 @@ }, "XPosition": { "type": "float", - "value": 142.3319396972656 + "value": 142.33193969726562 }, "YOrientation": { "type": "float", @@ -2507,7 +2507,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2556,7 +2556,7 @@ }, "XPosition": { "type": "float", - "value": 104.0967864990234 + "value": 104.09678649902344 }, "YOrientation": { "type": "float", @@ -2568,7 +2568,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2629,7 +2629,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2678,7 +2678,7 @@ }, "XPosition": { "type": "float", - "value": 107.9445953369141 + "value": 107.94459533691406 }, "YOrientation": { "type": "float", @@ -2690,7 +2690,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2751,7 +2751,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2812,7 +2812,7 @@ }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-006 + "value": -0.000002384185791015625 } }, { @@ -2869,11 +2869,11 @@ }, "YPosition": { "type": "float", - "value": 28.52523803710938 + "value": 28.525238037109375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2930,7 +2930,7 @@ }, "YPosition": { "type": "float", - "value": 127.1067810058594 + "value": 127.10678100585938 }, "ZPosition": { "type": "float", @@ -2983,7 +2983,7 @@ }, "XPosition": { "type": "float", - "value": 120.2042999267578 + "value": 120.20429992675781 }, "YOrientation": { "type": "float", @@ -2995,7 +2995,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3109,7 +3109,7 @@ }, "XPosition": { "type": "float", - "value": 18.84223365783691 + "value": 18.842233657836914 }, "YOrientation": { "type": "float", @@ -3121,7 +3121,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3178,11 +3178,11 @@ }, "YPosition": { "type": "float", - "value": 33.39129257202148 + "value": 33.391292572021484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/crystalcavernsle.git.json b/_module/git/crystalcavernsle.git.json index 73c8250..f61f256 100644 --- a/_module/git/crystalcavernsle.git.json +++ b/_module/git/crystalcavernsle.git.json @@ -256,15 +256,15 @@ }, "X": { "type": "float", - "value": 120.9300003051758 + "value": 120.93000030517578 }, "Y": { "type": "float", - "value": 43.70999908447266 + "value": 43.709999084472656 }, "Z": { "type": "float", - "value": 2.579999923706055 + "value": 2.5799999237060547 } }, { @@ -502,7 +502,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1159,7 +1159,7 @@ }, "Bearing": { "type": "float", - "value": -3.141586065292358 + "value": -3.1415860652923584 }, "CloseLockDC": { "type": "byte", @@ -1378,7 +1378,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1816,7 +1816,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -2254,7 +2254,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -3344,15 +3344,15 @@ }, "X": { "type": "float", - "value": 107.0954055786133 + "value": 107.09540557861328 }, "Y": { "type": "float", - "value": 145.0009155273438 + "value": 145.00091552734375 }, "Z": { "type": "float", - "value": 0.2499970197677612 + "value": 0.24999701976776123 } }, { @@ -3576,11 +3576,11 @@ }, "Y": { "type": "float", - "value": 143.4630279541016 + "value": 143.46302795410156 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3803,11 +3803,11 @@ }, "Y": { "type": "float", - "value": 111.186653137207 + "value": 111.18665313720703 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4031,11 +4031,11 @@ }, "Y": { "type": "float", - "value": 111.0385360717773 + "value": 111.03853607177734 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4258,11 +4258,11 @@ }, "Y": { "type": "float", - "value": 110.9901580810547 + "value": 110.99015808105469 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4481,15 +4481,15 @@ }, "X": { "type": "float", - "value": 65.26662445068359 + "value": 65.2666244506836 }, "Y": { "type": "float", - "value": 111.1980590820313 + "value": 111.19805908203125 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4712,11 +4712,11 @@ }, "Y": { "type": "float", - "value": 107.0112915039063 + "value": 107.01129150390625 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4943,7 +4943,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5166,11 +5166,11 @@ }, "Y": { "type": "float", - "value": 115.1306304931641 + "value": 115.13063049316406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5393,11 +5393,11 @@ }, "Y": { "type": "float", - "value": 115.1839294433594 + "value": 115.18392944335938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5620,11 +5620,11 @@ }, "Y": { "type": "float", - "value": 110.9267883300781 + "value": 110.92678833007812 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5847,11 +5847,11 @@ }, "Y": { "type": "float", - "value": 111.0598526000977 + "value": 111.05985260009766 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5870,7 +5870,7 @@ }, "Bearing": { "type": "float", - "value": -3.117043256759644 + "value": -3.1170432567596436 }, "BodyBag": { "type": "byte", @@ -6074,11 +6074,11 @@ }, "Y": { "type": "float", - "value": 116.4591369628906 + "value": 116.45913696289062 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6525,15 +6525,15 @@ }, "X": { "type": "float", - "value": 10.02732849121094 + "value": 10.027328491210938 }, "Y": { "type": "float", - "value": 144.0483093261719 + "value": 144.04830932617188 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -6592,7 +6592,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -6989,7 +6989,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -7053,15 +7053,15 @@ }, "XPosition": { "type": "float", - "value": 61.99306488037109 + "value": 61.993064880371094 }, "YPosition": { "type": "float", - "value": 107.3776550292969 + "value": 107.37765502929688 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -7110,7 +7110,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -7178,7 +7178,7 @@ }, "YPosition": { "type": "float", - "value": 106.9248657226563 + "value": 106.92486572265625 }, "ZPosition": { "type": "float", @@ -7231,7 +7231,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -7299,11 +7299,11 @@ }, "YPosition": { "type": "float", - "value": 110.9023284912109 + "value": 110.90232849121094 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -7352,7 +7352,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -7416,15 +7416,15 @@ }, "XPosition": { "type": "float", - "value": 68.86672210693359 + "value": 68.8667221069336 }, "YPosition": { "type": "float", - "value": 115.1218872070313 + "value": 115.12188720703125 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -7473,7 +7473,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -7545,7 +7545,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -7594,7 +7594,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -7658,15 +7658,15 @@ }, "XPosition": { "type": "float", - "value": 59.11330413818359 + "value": 59.113304138183594 }, "YPosition": { "type": "float", - "value": 111.2136077880859 + "value": 111.21360778808594 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -7779,11 +7779,11 @@ }, "XPosition": { "type": "float", - "value": 65.39675140380859 + "value": 65.3967514038086 }, "YPosition": { "type": "float", - "value": 111.7145233154297 + "value": 111.71452331542969 }, "ZPosition": { "type": "float", @@ -7869,7 +7869,7 @@ }, "XPosition": { "type": "float", - "value": 96.98891448974609 + "value": 96.9889144897461 }, "YOrientation": { "type": "float", @@ -7881,7 +7881,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7942,7 +7942,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7991,7 +7991,7 @@ }, "XPosition": { "type": "float", - "value": 124.0646133422852 + "value": 124.06461334228516 }, "YOrientation": { "type": "float", @@ -7999,11 +7999,11 @@ }, "YPosition": { "type": "float", - "value": 114.9191131591797 + "value": 114.91911315917969 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8052,7 +8052,7 @@ }, "XPosition": { "type": "float", - "value": 54.91202545166016 + "value": 54.912025451660156 }, "YOrientation": { "type": "float", @@ -8060,11 +8060,11 @@ }, "YPosition": { "type": "float", - "value": 75.42588043212891 + "value": 75.4258804321289 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8113,7 +8113,7 @@ }, "XPosition": { "type": "float", - "value": 14.91086387634277 + "value": 14.910863876342773 }, "YOrientation": { "type": "float", @@ -8121,11 +8121,11 @@ }, "YPosition": { "type": "float", - "value": 106.1351928710938 + "value": 106.13519287109375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8182,11 +8182,11 @@ }, "YPosition": { "type": "float", - "value": 24.08059501647949 + "value": 24.080595016479492 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8231,11 +8231,11 @@ }, "XOrientation": { "type": "float", - "value": -6.111460152169457e-006 + "value": -0.000006111460152169457 }, "XPosition": { "type": "float", - "value": 107.9001770019531 + "value": 107.90017700195312 }, "YOrientation": { "type": "float", @@ -8243,11 +8243,11 @@ }, "YPosition": { "type": "float", - "value": 140.7294006347656 + "value": 140.72940063476562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8292,11 +8292,11 @@ }, "XOrientation": { "type": "float", - "value": -6.111460152169457e-006 + "value": -0.000006111460152169457 }, "XPosition": { "type": "float", - "value": 114.6878051757813 + "value": 114.68780517578125 }, "YOrientation": { "type": "float", @@ -8304,11 +8304,11 @@ }, "YPosition": { "type": "float", - "value": 102.2910232543945 + "value": 102.29102325439453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8357,11 +8357,11 @@ }, "XPosition": { "type": "float", - "value": 100.3816833496094 + "value": 100.38168334960938 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -8369,7 +8369,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8422,7 +8422,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -8430,7 +8430,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8483,7 +8483,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -8491,7 +8491,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8548,11 +8548,11 @@ }, "YPosition": { "type": "float", - "value": 12.88994693756104 + "value": 12.889946937561035 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8601,7 +8601,7 @@ }, "XPosition": { "type": "float", - "value": 108.0709533691406 + "value": 108.07095336914062 }, "YOrientation": { "type": "float", @@ -8609,11 +8609,11 @@ }, "YPosition": { "type": "float", - "value": 58.64348983764648 + "value": 58.643489837646484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8662,7 +8662,7 @@ }, "XPosition": { "type": "float", - "value": 131.5302886962891 + "value": 131.53028869628906 }, "YOrientation": { "type": "float", @@ -8670,11 +8670,11 @@ }, "YPosition": { "type": "float", - "value": 18.38978958129883 + "value": 18.389789581298828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8723,7 +8723,7 @@ }, "XPosition": { "type": "float", - "value": 141.8768615722656 + "value": 141.87686157226562 }, "YOrientation": { "type": "float", @@ -8735,7 +8735,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8800,11 +8800,11 @@ }, "XOrientation": { "type": "float", - "value": -6.111460152169457e-006 + "value": -0.000006111460152169457 }, "XPosition": { "type": "float", - "value": 16.29903030395508 + "value": 16.299030303955078 }, "YOrientation": { "type": "float", @@ -8816,7 +8816,7 @@ }, "ZPosition": { "type": "float", - "value": 2.999988794326782 + "value": 2.9999887943267822 } }, { @@ -8865,7 +8865,7 @@ }, "XPosition": { "type": "float", - "value": 27.13743591308594 + "value": 27.137435913085938 }, "YOrientation": { "type": "float", @@ -8873,11 +8873,11 @@ }, "YPosition": { "type": "float", - "value": 121.7490081787109 + "value": 121.74900817871094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8938,7 +8938,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8987,11 +8987,11 @@ }, "XPosition": { "type": "float", - "value": 10.66747665405273 + "value": 10.667476654052734 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -8999,7 +8999,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9048,7 +9048,7 @@ }, "XPosition": { "type": "float", - "value": 28.44444847106934 + "value": 28.444448471069336 }, "YOrientation": { "type": "float", @@ -9060,7 +9060,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9109,7 +9109,7 @@ }, "XPosition": { "type": "float", - "value": 17.61682510375977 + "value": 17.616825103759766 }, "YOrientation": { "type": "float", @@ -9121,7 +9121,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9166,11 +9166,11 @@ }, "XOrientation": { "type": "float", - "value": 0.5956986546516419 + "value": 0.5956986546516418 }, "XPosition": { "type": "float", - "value": 11.90631294250488 + "value": 11.906312942504883 }, "YOrientation": { "type": "float", @@ -9182,7 +9182,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9239,11 +9239,11 @@ }, "YPosition": { "type": "float", - "value": 42.17505264282227 + "value": 42.175052642822266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9300,11 +9300,11 @@ }, "YPosition": { "type": "float", - "value": 88.39109039306641 + "value": 88.3910903930664 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9349,7 +9349,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4929004311561585 + "value": -0.49290043115615845 }, "XPosition": { "type": "float", @@ -9361,11 +9361,11 @@ }, "YPosition": { "type": "float", - "value": 53.22415161132813 + "value": 53.224151611328125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9410,7 +9410,7 @@ }, "XOrientation": { "type": "float", - "value": -4.680948677560082e-006 + "value": -0.000004680948677560082 }, "XPosition": { "type": "float", @@ -9426,7 +9426,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9487,7 +9487,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9544,11 +9544,11 @@ }, "YPosition": { "type": "float", - "value": 53.98865127563477 + "value": 53.988651275634766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9597,7 +9597,7 @@ }, "XPosition": { "type": "float", - "value": 102.5618209838867 + "value": 102.56182098388672 }, "YOrientation": { "type": "float", @@ -9609,7 +9609,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } } ] diff --git a/_module/git/desert.git.json b/_module/git/desert.git.json index c11def4..e5ded00 100644 --- a/_module/git/desert.git.json +++ b/_module/git/desert.git.json @@ -257,7 +257,7 @@ }, "X": { "type": "float", - "value": 11.93000030517578 + "value": 11.930000305175781 }, "Y": { "type": "float", @@ -322,7 +322,7 @@ }, "PointY": { "type": "float", - "value": 2.647107124328613 + "value": 2.6471071243286133 }, "PointZ": { "type": "float", @@ -352,7 +352,7 @@ }, "PointY": { "type": "float", - "value": 0.04746007919311523 + "value": 0.047460079193115234 }, "PointZ": { "type": "float", @@ -363,11 +363,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.04131317138672 + "value": 10.041313171386719 }, "PointY": { "type": "float", - "value": 2.647107362747192 + "value": 2.6471073627471924 }, "PointZ": { "type": "float", @@ -477,7 +477,7 @@ }, "XPosition": { "type": "float", - "value": 40.03208160400391 + "value": 40.032081604003906 }, "YOrientation": { "type": "float", @@ -612,7 +612,7 @@ }, "XPosition": { "type": "float", - "value": 45.12551116943359 + "value": 45.125511169433594 }, "YOrientation": { "type": "float", @@ -624,7 +624,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -685,7 +685,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -734,7 +734,7 @@ }, "XPosition": { "type": "float", - "value": 9.385341644287109 + "value": 9.38534164428711 }, "YOrientation": { "type": "float", @@ -746,7 +746,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } } ] diff --git a/_module/git/desert2.git.json b/_module/git/desert2.git.json index c9aee96..4ac6860 100644 --- a/_module/git/desert2.git.json +++ b/_module/git/desert2.git.json @@ -321,7 +321,7 @@ }, "PointY": { "type": "float", - "value": 2.647107124328613 + "value": 2.6471071243286133 }, "PointZ": { "type": "float", @@ -351,7 +351,7 @@ }, "PointY": { "type": "float", - "value": 0.04746007919311523 + "value": 0.047460079193115234 }, "PointZ": { "type": "float", @@ -362,11 +362,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.04131317138672 + "value": 10.041313171386719 }, "PointY": { "type": "float", - "value": 2.647107362747192 + "value": 2.6471073627471924 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 40.03208160400391 + "value": 40.032081604003906 }, "YOrientation": { "type": "float", @@ -611,7 +611,7 @@ }, "XPosition": { "type": "float", - "value": 45.12551116943359 + "value": 45.125511169433594 }, "YOrientation": { "type": "float", @@ -619,11 +619,11 @@ }, "YPosition": { "type": "float", - "value": 0.9350352287292481 + "value": 0.935035228729248 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -672,11 +672,11 @@ }, "XPosition": { "type": "float", - "value": 19.37448120117188 + "value": 19.374481201171875 }, "YOrientation": { "type": "float", - "value": -0.4713962078094482 + "value": -0.47139620780944824 }, "YPosition": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -729,7 +729,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -741,11 +741,11 @@ }, "YPosition": { "type": "float", - "value": 31.43203735351563 + "value": 31.432037353515625 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/desolateanddespa.git.json b/_module/git/desolateanddespa.git.json index 2e5eb64..7bdcbd3 100644 --- a/_module/git/desolateanddespa.git.json +++ b/_module/git/desolateanddespa.git.json @@ -664,7 +664,7 @@ }, "XPosition": { "type": "float", - "value": 20.76999473571777 + "value": 20.769994735717773 }, "YOrientation": { "type": "float", @@ -672,7 +672,7 @@ }, "YPosition": { "type": "float", - "value": 19.48442077636719 + "value": 19.484420776367188 }, "ZPosition": { "type": "float", @@ -1297,7 +1297,7 @@ }, "XPosition": { "type": "float", - "value": 29.05035018920898 + "value": 29.050350189208984 }, "YOrientation": { "type": "float", @@ -2563,7 +2563,7 @@ }, "XPosition": { "type": "float", - "value": 36.24361419677734 + "value": 36.243614196777344 }, "YOrientation": { "type": "float", @@ -2571,7 +2571,7 @@ }, "YPosition": { "type": "float", - "value": 6.99939775466919 + "value": 6.9993977546691895 }, "ZPosition": { "type": "float", @@ -3566,7 +3566,7 @@ }, "XPosition": { "type": "float", - "value": 37.59464263916016 + "value": 37.594642639160156 }, "YOrientation": { "type": "float", @@ -3574,11 +3574,11 @@ }, "YPosition": { "type": "float", - "value": 47.08803558349609 + "value": 47.088035583496094 }, "ZPosition": { "type": "float", - "value": 10.02328968048096 + "value": 10.023289680480957 } }, { @@ -4577,7 +4577,7 @@ }, "YPosition": { "type": "float", - "value": 70.35720825195313 + "value": 70.35720825195312 }, "ZPosition": { "type": "float", @@ -5657,7 +5657,7 @@ }, "XPosition": { "type": "float", - "value": 75.99844360351563 + "value": 75.99844360351562 }, "YOrientation": { "type": "float", @@ -5665,7 +5665,7 @@ }, "YPosition": { "type": "float", - "value": 50.68719863891602 + "value": 50.687198638916016 }, "ZPosition": { "type": "float", @@ -6394,7 +6394,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -6588,7 +6588,7 @@ }, "Y": { "type": "float", - "value": 12.88000011444092 + "value": 12.880000114440918 }, "Z": { "type": "float", @@ -6822,11 +6822,11 @@ }, "X": { "type": "float", - "value": 39.69971084594727 + "value": 39.699710845947266 }, "Y": { "type": "float", - "value": 49.18886566162109 + "value": 49.188865661621094 }, "Z": { "type": "float", @@ -6888,7 +6888,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -6948,15 +6948,15 @@ }, "XPosition": { "type": "float", - "value": 35.77315521240234 + "value": 35.773155212402344 }, "YPosition": { "type": "float", - "value": 28.92969131469727 + "value": 28.929691314697266 }, "ZPosition": { "type": "float", - "value": -1.899999856948853 + "value": -1.8999998569488525 } }, { @@ -7009,7 +7009,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -7069,7 +7069,7 @@ }, "XPosition": { "type": "float", - "value": 2.996747970581055 + "value": 2.9967479705810547 }, "YPosition": { "type": "float", @@ -7077,7 +7077,7 @@ }, "ZPosition": { "type": "float", - "value": 1.588324546813965 + "value": 1.5883245468139648 } }, { @@ -7130,7 +7130,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -7251,7 +7251,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -7374,7 +7374,7 @@ }, "XPosition": { "type": "float", - "value": 39.02038192749023 + "value": 39.020381927490234 }, "YPosition": { "type": "float", @@ -7435,7 +7435,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -7562,11 +7562,11 @@ }, "YPosition": { "type": "float", - "value": 55.63458633422852 + "value": 55.634586334228516 }, "ZPosition": { "type": "float", - "value": 11.29591751098633 + "value": 11.295917510986328 } }, { @@ -7619,7 +7619,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -7742,11 +7742,11 @@ }, "XPosition": { "type": "float", - "value": 7.411387443542481 + "value": 7.4113874435424805 }, "YPosition": { "type": "float", - "value": 46.72670745849609 + "value": 46.726707458496094 }, "ZPosition": { "type": "float", @@ -7803,7 +7803,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -8051,7 +8051,7 @@ }, "YPosition": { "type": "float", - "value": 13.41970634460449 + "value": 13.419706344604492 }, "ZPosition": { "type": "float", @@ -8176,7 +8176,7 @@ }, "ZPosition": { "type": "float", - "value": 2.099999904632568 + "value": 2.0999999046325684 } } ] diff --git a/_module/git/dm_area.git.json b/_module/git/dm_area.git.json index 6e3284c..7b064d1 100644 --- a/_module/git/dm_area.git.json +++ b/_module/git/dm_area.git.json @@ -78,7 +78,7 @@ }, "Bearing": { "type": "float", - "value": 2.945242881774902 + "value": 2.9452428817749023 }, "BodyBag": { "type": "byte", @@ -283,11 +283,11 @@ }, "Y": { "type": "float", - "value": 41.26619720458984 + "value": 41.266197204589844 }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -508,7 +508,7 @@ }, "X": { "type": "float", - "value": 41.56539916992188 + "value": 41.565399169921875 }, "Y": { "type": "float", @@ -516,7 +516,7 @@ }, "Z": { "type": "float", - "value": 0.01000005286186934 + "value": 0.010000052861869335 } } ] diff --git a/_module/git/dngentrance1.git.json b/_module/git/dngentrance1.git.json index 3c1379e..655f449 100644 --- a/_module/git/dngentrance1.git.json +++ b/_module/git/dngentrance1.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 24.73999977111816 + "value": 24.739999771118164 }, "Y": { "type": "float", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -607,11 +607,11 @@ }, "XOrientation": { "type": "float", - "value": 6.826715889474144e-006 + "value": 0.000006826715889474144 }, "XPosition": { "type": "float", - "value": 10.70011901855469 + "value": 10.700119018554688 }, "YOrientation": { "type": "float", @@ -623,7 +623,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -676,7 +676,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -733,7 +733,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -741,11 +741,11 @@ }, "YPosition": { "type": "float", - "value": 1.091484904289246 + "value": 1.0914849042892456 }, "ZPosition": { "type": "float", - "value": 0.01000001654028893 + "value": 0.010000016540288925 } }, { @@ -826,7 +826,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dngentrance2.git.json b/_module/git/dngentrance2.git.json index 703c72e..5b7c9a3 100644 --- a/_module/git/dngentrance2.git.json +++ b/_module/git/dngentrance2.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 24.73999977111816 + "value": 24.739999771118164 }, "Y": { "type": "float", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -607,11 +607,11 @@ }, "XOrientation": { "type": "float", - "value": 7.303553047677269e-006 + "value": 0.000007303553047677269 }, "XPosition": { "type": "float", - "value": 10.70011901855469 + "value": 10.700119018554688 }, "YOrientation": { "type": "float", @@ -623,7 +623,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -676,7 +676,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -733,7 +733,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -745,7 +745,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -794,7 +794,7 @@ }, "XPosition": { "type": "float", - "value": 16.65519714355469 + "value": 16.655197143554688 }, "YOrientation": { "type": "float", @@ -806,7 +806,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dngentrance3.git.json b/_module/git/dngentrance3.git.json index e70c4a4..f47e1c0 100644 --- a/_module/git/dngentrance3.git.json +++ b/_module/git/dngentrance3.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 24.73999977111816 + "value": 24.739999771118164 }, "Y": { "type": "float", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -592,11 +592,11 @@ }, "XOrientation": { "type": "float", - "value": 6.826715889474144e-006 + "value": 0.000006826715889474144 }, "XPosition": { "type": "float", - "value": 10.70011901855469 + "value": 10.700119018554688 }, "YOrientation": { "type": "float", @@ -608,7 +608,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -661,7 +661,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -669,7 +669,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -718,7 +718,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -730,7 +730,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -787,11 +787,11 @@ }, "YPosition": { "type": "float", - "value": 1.15187931060791 + "value": 1.1518793106079102 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dngentrance4.git.json b/_module/git/dngentrance4.git.json index 239fb0d..6fed023 100644 --- a/_module/git/dngentrance4.git.json +++ b/_module/git/dngentrance4.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 24.73999977111816 + "value": 24.739999771118164 }, "Y": { "type": "float", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -607,11 +607,11 @@ }, "XOrientation": { "type": "float", - "value": 7.780390660627745e-006 + "value": 0.000007780390660627745 }, "XPosition": { "type": "float", - "value": 10.70011901855469 + "value": 10.700119018554688 }, "YOrientation": { "type": "float", @@ -623,7 +623,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -676,7 +676,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -733,7 +733,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -745,7 +745,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -802,11 +802,11 @@ }, "YPosition": { "type": "float", - "value": 1.246118545532227 + "value": 1.2461185455322266 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dngtrent2.git.json b/_module/git/dngtrent2.git.json index 12f1518..56a3aa0 100644 --- a/_module/git/dngtrent2.git.json +++ b/_module/git/dngtrent2.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", @@ -336,7 +336,7 @@ }, "PointY": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointZ": { "type": "float", @@ -355,7 +355,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -370,7 +370,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1282005310058594 + "value": 0.12820053100585938 }, "ZOrientation": { "type": "float", @@ -623,7 +623,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -668,11 +668,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", - "value": 12.36881446838379 + "value": 12.368814468383789 }, "YOrientation": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -729,7 +729,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", @@ -745,7 +745,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -790,11 +790,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", - "value": 71.94362640380859 + "value": 71.9436264038086 }, "YOrientation": { "type": "float", @@ -806,7 +806,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -851,11 +851,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", - "value": 20.18475151062012 + "value": 20.184751510620117 }, "YOrientation": { "type": "float", @@ -863,11 +863,11 @@ }, "YPosition": { "type": "float", - "value": 29.78824043273926 + "value": 29.788240432739258 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -912,7 +912,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", @@ -924,11 +924,11 @@ }, "YPosition": { "type": "float", - "value": 28.22505569458008 + "value": 28.225055694580078 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -973,7 +973,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", @@ -985,7 +985,7 @@ }, "YPosition": { "type": "float", - "value": 25.4460563659668 + "value": 25.446056365966797 }, "ZPosition": { "type": "float", @@ -1046,11 +1046,11 @@ }, "YPosition": { "type": "float", - "value": 1.010518550872803 + "value": 1.0105185508728027 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dngtrent3.git.json b/_module/git/dngtrent3.git.json index 15cfbf2..2bcbae6 100644 --- a/_module/git/dngtrent3.git.json +++ b/_module/git/dngtrent3.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", @@ -336,7 +336,7 @@ }, "PointY": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointZ": { "type": "float", @@ -355,7 +355,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -370,7 +370,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1282005310058594 + "value": 0.12820053100585938 }, "ZOrientation": { "type": "float", @@ -623,7 +623,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -668,11 +668,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245488379150629 + "value": 0.024548837915062904 }, "XPosition": { "type": "float", - "value": 12.36881446838379 + "value": 12.368814468383789 }, "YOrientation": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -729,7 +729,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245488379150629 + "value": 0.024548837915062904 }, "XPosition": { "type": "float", @@ -745,7 +745,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -790,11 +790,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245488379150629 + "value": 0.024548837915062904 }, "XPosition": { "type": "float", - "value": 71.94362640380859 + "value": 71.9436264038086 }, "YOrientation": { "type": "float", @@ -806,7 +806,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -851,11 +851,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245488379150629 + "value": 0.024548837915062904 }, "XPosition": { "type": "float", - "value": 20.18475151062012 + "value": 20.184751510620117 }, "YOrientation": { "type": "float", @@ -863,11 +863,11 @@ }, "YPosition": { "type": "float", - "value": 29.78824043273926 + "value": 29.788240432739258 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -912,7 +912,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245488379150629 + "value": 0.024548837915062904 }, "XPosition": { "type": "float", @@ -924,11 +924,11 @@ }, "YPosition": { "type": "float", - "value": 28.22505569458008 + "value": 28.225055694580078 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -973,7 +973,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245488379150629 + "value": 0.024548837915062904 }, "XPosition": { "type": "float", @@ -985,7 +985,7 @@ }, "YPosition": { "type": "float", - "value": 25.4460563659668 + "value": 25.446056365966797 }, "ZPosition": { "type": "float", @@ -1050,7 +1050,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dungeon1.git.json b/_module/git/dungeon1.git.json index 4880b02..7b3d9f0 100644 --- a/_module/git/dungeon1.git.json +++ b/_module/git/dungeon1.git.json @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794463157654 + "value": -1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -2475,7 +2475,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -3132,7 +3132,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -3351,7 +3351,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -3570,7 +3570,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -3802,7 +3802,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -4002,15 +4002,15 @@ }, "X": { "type": "float", - "value": 114.5563430786133 + "value": 114.55634307861328 }, "Y": { "type": "float", - "value": 100.2995910644531 + "value": 100.29959106445312 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4230,7 +4230,7 @@ }, "X": { "type": "float", - "value": 113.7502899169922 + "value": 113.75028991699219 }, "Y": { "type": "float", @@ -4238,7 +4238,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -4373,7 +4373,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4713968634605408 + "value": 0.47139686346054077 }, "YPosition": { "type": "float", @@ -4381,7 +4381,7 @@ }, "ZPosition": { "type": "float", - "value": 0.3618761301040649 + "value": 0.36187613010406494 } }, { @@ -4426,7 +4426,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", @@ -4442,7 +4442,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4487,7 +4487,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", @@ -4503,7 +4503,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4564,7 +4564,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4609,11 +4609,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", - "value": 114.5857772827148 + "value": 114.58577728271484 }, "YOrientation": { "type": "float", @@ -4621,11 +4621,11 @@ }, "YPosition": { "type": "float", - "value": 53.38405609130859 + "value": 53.384056091308594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4682,11 +4682,11 @@ }, "YPosition": { "type": "float", - "value": 114.1944885253906 + "value": 114.19448852539062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4735,7 +4735,7 @@ }, "XPosition": { "type": "float", - "value": 55.92929077148438 + "value": 55.929290771484375 }, "YOrientation": { "type": "float", @@ -4747,7 +4747,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4800,7 +4800,7 @@ }, "YOrientation": { "type": "float", - "value": -0.2667123973369598 + "value": -0.26671239733695984 }, "YPosition": { "type": "float", @@ -4808,7 +4808,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4853,11 +4853,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", - "value": 103.487663269043 + "value": 103.48766326904297 }, "YOrientation": { "type": "float", @@ -4865,11 +4865,11 @@ }, "YPosition": { "type": "float", - "value": 29.38484382629395 + "value": 29.384843826293945 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4914,11 +4914,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", - "value": 114.5895385742188 + "value": 114.58953857421875 }, "YOrientation": { "type": "float", @@ -4926,11 +4926,11 @@ }, "YPosition": { "type": "float", - "value": 14.69846916198731 + "value": 14.698469161987305 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4975,7 +4975,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454430982470512 + "value": -0.024544309824705124 }, "XPosition": { "type": "float", @@ -4987,11 +4987,11 @@ }, "YPosition": { "type": "float", - "value": 21.54208946228027 + "value": 21.542089462280273 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5048,11 +5048,11 @@ }, "YPosition": { "type": "float", - "value": 10.44021320343018 + "value": 10.440213203430176 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5109,11 +5109,11 @@ }, "YPosition": { "type": "float", - "value": 34.16477203369141 + "value": 34.164772033691406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5170,11 +5170,11 @@ }, "YPosition": { "type": "float", - "value": 51.55587768554688 + "value": 51.555877685546875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5235,7 +5235,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5284,7 +5284,7 @@ }, "XPosition": { "type": "float", - "value": 30.59873199462891 + "value": 30.598731994628906 }, "YOrientation": { "type": "float", @@ -5296,7 +5296,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5353,7 +5353,7 @@ }, "YPosition": { "type": "float", - "value": 66.17678070068359 + "value": 66.1767807006836 }, "ZPosition": { "type": "float", @@ -5406,7 +5406,7 @@ }, "XPosition": { "type": "float", - "value": 58.14410018920898 + "value": 58.144100189208984 }, "YOrientation": { "type": "float", @@ -5414,11 +5414,11 @@ }, "YPosition": { "type": "float", - "value": 21.02613258361816 + "value": 21.026132583618164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/dungeon2.git.json b/_module/git/dungeon2.git.json index 0d56a7e..190ade2 100644 --- a/_module/git/dungeon2.git.json +++ b/_module/git/dungeon2.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -1818,7 +1818,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -2256,7 +2256,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -2913,7 +2913,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -3351,7 +3351,7 @@ }, "Bearing": { "type": "float", - "value": -3.14158821105957 + "value": -3.1415882110595703 }, "CloseLockDC": { "type": "byte", @@ -3570,7 +3570,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3802,7 +3802,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -4002,15 +4002,15 @@ }, "X": { "type": "float", - "value": 114.5563430786133 + "value": 114.55634307861328 }, "Y": { "type": "float", - "value": 100.2995910644531 + "value": 100.29959106445312 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4234,11 +4234,11 @@ }, "Y": { "type": "float", - "value": 85.05210113525391 + "value": 85.0521011352539 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] @@ -4373,7 +4373,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4713968634605408 + "value": 0.47139686346054077 }, "YPosition": { "type": "float", @@ -4381,7 +4381,7 @@ }, "ZPosition": { "type": "float", - "value": 0.3618761301040649 + "value": 0.36187613010406494 } }, { @@ -4442,7 +4442,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4503,7 +4503,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4564,7 +4564,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4613,7 +4613,7 @@ }, "XPosition": { "type": "float", - "value": 14.44759273529053 + "value": 14.447592735290527 }, "YOrientation": { "type": "float", @@ -4625,7 +4625,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4682,11 +4682,11 @@ }, "YPosition": { "type": "float", - "value": 114.1944885253906 + "value": 114.19448852539062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4735,7 +4735,7 @@ }, "XPosition": { "type": "float", - "value": 55.92929077148438 + "value": 55.929290771484375 }, "YOrientation": { "type": "float", @@ -4747,7 +4747,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4800,7 +4800,7 @@ }, "YOrientation": { "type": "float", - "value": -0.2667123973369598 + "value": -0.26671239733695984 }, "YPosition": { "type": "float", @@ -4808,7 +4808,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4857,7 +4857,7 @@ }, "XPosition": { "type": "float", - "value": 103.487663269043 + "value": 103.48766326904297 }, "YOrientation": { "type": "float", @@ -4865,11 +4865,11 @@ }, "YPosition": { "type": "float", - "value": 29.38484382629395 + "value": 29.384843826293945 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4918,7 +4918,7 @@ }, "XPosition": { "type": "float", - "value": 114.5895385742188 + "value": 114.58953857421875 }, "YOrientation": { "type": "float", @@ -4926,11 +4926,11 @@ }, "YPosition": { "type": "float", - "value": 14.69846916198731 + "value": 14.698469161987305 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4987,11 +4987,11 @@ }, "YPosition": { "type": "float", - "value": 21.54208946228027 + "value": 21.542089462280273 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5048,11 +5048,11 @@ }, "YPosition": { "type": "float", - "value": 10.44021320343018 + "value": 10.440213203430176 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5109,11 +5109,11 @@ }, "YPosition": { "type": "float", - "value": 34.16477203369141 + "value": 34.164772033691406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5170,11 +5170,11 @@ }, "YPosition": { "type": "float", - "value": 51.55587768554688 + "value": 51.555877685546875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5219,7 +5219,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04907225072383881 + "value": -0.049072250723838806 }, "XPosition": { "type": "float", @@ -5235,7 +5235,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5284,7 +5284,7 @@ }, "XPosition": { "type": "float", - "value": 30.59873199462891 + "value": 30.598731994628906 }, "YOrientation": { "type": "float", @@ -5296,7 +5296,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5357,7 +5357,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5414,11 +5414,11 @@ }, "YPosition": { "type": "float", - "value": 21.44493103027344 + "value": 21.444931030273438 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/dungeon3.git.json b/_module/git/dungeon3.git.json index b20e898..441ecfa 100644 --- a/_module/git/dungeon3.git.json +++ b/_module/git/dungeon3.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3326,7 +3326,7 @@ }, "Y": { "type": "float", - "value": 1.980000019073486 + "value": 1.9800000190734863 }, "Z": { "type": "float", @@ -3781,7 +3781,7 @@ }, "X": { "type": "float", - "value": 112.6830902099609 + "value": 112.68309020996094 }, "Y": { "type": "float", @@ -3789,7 +3789,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4008,7 +4008,7 @@ }, "X": { "type": "float", - "value": 105.1984939575195 + "value": 105.19849395751953 }, "Y": { "type": "float", @@ -4235,7 +4235,7 @@ }, "X": { "type": "float", - "value": 104.9960174560547 + "value": 104.99601745605469 }, "Y": { "type": "float", @@ -4243,7 +4243,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4463,7 +4463,7 @@ }, "X": { "type": "float", - "value": 113.4855117797852 + "value": 113.48551177978516 }, "Y": { "type": "float", @@ -4471,7 +4471,7 @@ }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } } ] @@ -4602,7 +4602,7 @@ }, "XPosition": { "type": "float", - "value": 105.0424270629883 + "value": 105.04242706298828 }, "YOrientation": { "type": "float", @@ -4610,11 +4610,11 @@ }, "YPosition": { "type": "float", - "value": 77.06887054443359 + "value": 77.0688705444336 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4663,7 +4663,7 @@ }, "XPosition": { "type": "float", - "value": 104.4746170043945 + "value": 104.47461700439453 }, "YOrientation": { "type": "float", @@ -4675,7 +4675,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4720,7 +4720,7 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", @@ -4732,11 +4732,11 @@ }, "YPosition": { "type": "float", - "value": 107.484504699707 + "value": 107.48450469970703 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4781,11 +4781,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 71.25217437744141 + "value": 71.2521743774414 }, "YOrientation": { "type": "float", @@ -4797,7 +4797,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4842,11 +4842,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 111.903205871582 + "value": 111.90320587158203 }, "YOrientation": { "type": "float", @@ -4858,7 +4858,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4903,11 +4903,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 19.41630935668945 + "value": 19.416309356689453 }, "YOrientation": { "type": "float", @@ -4919,7 +4919,7 @@ }, "ZPosition": { "type": "float", - "value": -5.221962965151761e-006 + "value": -0.000005221962965151761 } }, { @@ -4964,11 +4964,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 3.64185094833374 + "value": 3.6418509483337402 }, "YOrientation": { "type": "float", @@ -4976,11 +4976,11 @@ }, "YPosition": { "type": "float", - "value": 93.93716430664063 + "value": 93.93716430664062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5025,11 +5025,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 40.36675643920898 + "value": 40.366756439208984 }, "YOrientation": { "type": "float", @@ -5037,11 +5037,11 @@ }, "YPosition": { "type": "float", - "value": 111.9299011230469 + "value": 111.92990112304688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5086,7 +5086,7 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", @@ -5102,7 +5102,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5147,11 +5147,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 44.55684661865234 + "value": 44.556846618652344 }, "YOrientation": { "type": "float", @@ -5163,7 +5163,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5212,7 +5212,7 @@ }, "XPosition": { "type": "float", - "value": 31.97486305236816 + "value": 31.974863052368164 }, "YOrientation": { "type": "float", @@ -5220,11 +5220,11 @@ }, "YPosition": { "type": "float", - "value": 28.37789726257324 + "value": 28.377897262573242 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5281,7 +5281,7 @@ }, "YPosition": { "type": "float", - "value": 13.5812578201294 + "value": 13.581257820129395 }, "ZPosition": { "type": "float", diff --git a/_module/git/dungeon4.git.json b/_module/git/dungeon4.git.json index 071637c..9c1a538 100644 --- a/_module/git/dungeon4.git.json +++ b/_module/git/dungeon4.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 15.28000068664551 + "value": 15.280000686645508 }, "Y": { "type": "float", @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1816,7 +1816,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -2035,7 +2035,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2254,7 +2254,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2692,7 +2692,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2911,7 +2911,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -4000,7 +4000,7 @@ }, "X": { "type": "float", - "value": 114.9869842529297 + "value": 114.98698425292969 }, "Y": { "type": "float", @@ -4027,7 +4027,7 @@ }, "Bearing": { "type": "float", - "value": -3.092502355575562 + "value": -3.0925023555755615 }, "BodyBag": { "type": "byte", @@ -4227,15 +4227,15 @@ }, "X": { "type": "float", - "value": 101.1310501098633 + "value": 101.13105010986328 }, "Y": { "type": "float", - "value": 58.57977676391602 + "value": 58.579776763916016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4459,7 +4459,7 @@ }, "Y": { "type": "float", - "value": 45.00351715087891 + "value": 45.003517150878906 }, "Z": { "type": "float", @@ -4581,7 +4581,7 @@ }, "XPosition": { "type": "float", - "value": 104.8483276367188 + "value": 104.84832763671875 }, "YPosition": { "type": "float", @@ -4589,7 +4589,7 @@ }, "ZPosition": { "type": "float", - "value": 2.466391801834106 + "value": 2.4663918018341064 } } ] @@ -4712,7 +4712,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0245412141084671 + "value": -0.024541214108467102 }, "XPosition": { "type": "float", @@ -4773,11 +4773,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0245412141084671 + "value": -0.024541214108467102 }, "XPosition": { "type": "float", - "value": 105.0072326660156 + "value": 105.00723266601562 }, "YOrientation": { "type": "float", @@ -4785,11 +4785,11 @@ }, "YPosition": { "type": "float", - "value": 96.69936370849609 + "value": 96.6993637084961 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4838,7 +4838,7 @@ }, "XPosition": { "type": "float", - "value": 60.98587036132813 + "value": 60.985870361328125 }, "YOrientation": { "type": "float", @@ -4846,11 +4846,11 @@ }, "YPosition": { "type": "float", - "value": 100.0402679443359 + "value": 100.04026794433594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4895,11 +4895,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2429828494787216 + "value": -0.24298284947872162 }, "XPosition": { "type": "float", - "value": 33.82904434204102 + "value": 33.829044342041016 }, "YOrientation": { "type": "float", @@ -4907,11 +4907,11 @@ }, "YPosition": { "type": "float", - "value": 102.9881286621094 + "value": 102.98812866210938 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4960,7 +4960,7 @@ }, "XPosition": { "type": "float", - "value": 33.63253021240234 + "value": 33.632530212402344 }, "YOrientation": { "type": "float", @@ -4972,7 +4972,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5021,7 +5021,7 @@ }, "XPosition": { "type": "float", - "value": 7.298322200775147 + "value": 7.2983222007751465 }, "YOrientation": { "type": "float", @@ -5033,7 +5033,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5090,11 +5090,11 @@ }, "YPosition": { "type": "float", - "value": 43.67105102539063 + "value": 43.671051025390625 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5143,7 +5143,7 @@ }, "XPosition": { "type": "float", - "value": 63.70068740844727 + "value": 63.700687408447266 }, "YOrientation": { "type": "float", @@ -5151,11 +5151,11 @@ }, "YPosition": { "type": "float", - "value": 63.12692260742188 + "value": 63.126922607421875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5200,7 +5200,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -5212,11 +5212,11 @@ }, "YPosition": { "type": "float", - "value": 93.98117828369141 + "value": 93.9811782836914 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5265,7 +5265,7 @@ }, "XPosition": { "type": "float", - "value": 112.4341506958008 + "value": 112.43415069580078 }, "YOrientation": { "type": "float", @@ -5273,11 +5273,11 @@ }, "YPosition": { "type": "float", - "value": 7.709429264068604 + "value": 7.7094292640686035 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5326,7 +5326,7 @@ }, "XPosition": { "type": "float", - "value": 66.31040191650391 + "value": 66.3104019165039 }, "YOrientation": { "type": "float", @@ -5338,7 +5338,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5391,15 +5391,15 @@ }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", - "value": 34.67740631103516 + "value": 34.677406311035156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5444,7 +5444,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4496112763881683 + "value": -0.44961127638816833 }, "XPosition": { "type": "float", @@ -5460,7 +5460,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5509,7 +5509,7 @@ }, "XPosition": { "type": "float", - "value": 85.50490570068359 + "value": 85.5049057006836 }, "YOrientation": { "type": "float", @@ -5521,7 +5521,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5570,7 +5570,7 @@ }, "XPosition": { "type": "float", - "value": 21.29738807678223 + "value": 21.297388076782227 }, "YOrientation": { "type": "float", @@ -5578,11 +5578,11 @@ }, "YPosition": { "type": "float", - "value": 12.34725379943848 + "value": 12.347253799438477 }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } } ] diff --git a/_module/git/dungeonentrance.git.json b/_module/git/dungeonentrance.git.json index 7bf43e8..da42e0e 100644 --- a/_module/git/dungeonentrance.git.json +++ b/_module/git/dungeonentrance.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", @@ -336,7 +336,7 @@ }, "PointY": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointZ": { "type": "float", @@ -355,7 +355,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -370,7 +370,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1282005310058594 + "value": 0.12820053100585938 }, "ZOrientation": { "type": "float", @@ -623,7 +623,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -668,11 +668,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", - "value": 12.36881446838379 + "value": 12.368814468383789 }, "YOrientation": { "type": "float", @@ -684,7 +684,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -729,7 +729,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", @@ -745,7 +745,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -790,11 +790,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", - "value": 70.88748168945313 + "value": 70.88748168945312 }, "YOrientation": { "type": "float", @@ -806,7 +806,7 @@ }, "ZPosition": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -851,11 +851,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", - "value": 20.18475151062012 + "value": 20.184751510620117 }, "YOrientation": { "type": "float", @@ -863,11 +863,11 @@ }, "YPosition": { "type": "float", - "value": 29.78824043273926 + "value": 29.788240432739258 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -912,7 +912,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", @@ -924,11 +924,11 @@ }, "YPosition": { "type": "float", - "value": 28.22505569458008 + "value": 28.225055694580078 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -973,7 +973,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", @@ -985,7 +985,7 @@ }, "YPosition": { "type": "float", - "value": 25.4460563659668 + "value": 25.446056365966797 }, "ZPosition": { "type": "float", @@ -1038,7 +1038,7 @@ }, "XPosition": { "type": "float", - "value": 42.52169036865234 + "value": 42.521690368652344 }, "YOrientation": { "type": "float", @@ -1050,7 +1050,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/dungeonofgargash.git.json b/_module/git/dungeonofgargash.git.json index 670ab76..c7c1578 100644 --- a/_module/git/dungeonofgargash.git.json +++ b/_module/git/dungeonofgargash.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 14.98999977111816 + "value": 14.989999771118164 }, "Y": { "type": "float", @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -473,11 +473,11 @@ }, "X": { "type": "float", - "value": 98.73000335693359 + "value": 98.7300033569336 }, "Y": { "type": "float", - "value": 101.0500030517578 + "value": 101.05000305175781 }, "Z": { "type": "float", @@ -717,7 +717,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -1155,7 +1155,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -1374,7 +1374,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -2031,7 +2031,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2250,7 +2250,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -2469,7 +2469,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2688,7 +2688,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -2920,7 +2920,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -3120,7 +3120,7 @@ }, "X": { "type": "float", - "value": 20.95078277587891 + "value": 20.950782775878906 }, "Y": { "type": "float", @@ -3128,7 +3128,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3147,7 +3147,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -3347,15 +3347,15 @@ }, "X": { "type": "float", - "value": 20.95624732971191 + "value": 20.956247329711914 }, "Y": { "type": "float", - "value": 36.96380996704102 + "value": 36.963809967041016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3374,7 +3374,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -3574,7 +3574,7 @@ }, "X": { "type": "float", - "value": 21.20978164672852 + "value": 21.209781646728516 }, "Y": { "type": "float", @@ -3582,7 +3582,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3601,7 +3601,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -3801,7 +3801,7 @@ }, "X": { "type": "float", - "value": 21.21524620056152 + "value": 21.215246200561523 }, "Y": { "type": "float", @@ -3809,7 +3809,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3828,7 +3828,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -4028,7 +4028,7 @@ }, "X": { "type": "float", - "value": 21.16567802429199 + "value": 21.165678024291992 }, "Y": { "type": "float", @@ -4036,7 +4036,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4055,7 +4055,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -4263,7 +4263,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4282,7 +4282,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -4486,11 +4486,11 @@ }, "Y": { "type": "float", - "value": 32.38171768188477 + "value": 32.381717681884766 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4509,7 +4509,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -4717,7 +4717,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4736,7 +4736,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -4936,7 +4936,7 @@ }, "X": { "type": "float", - "value": 8.649185180664063 + "value": 8.649185180664062 }, "Y": { "type": "float", @@ -4944,7 +4944,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4963,7 +4963,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -5167,11 +5167,11 @@ }, "Y": { "type": "float", - "value": 46.71265029907227 + "value": 46.712650299072266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5190,7 +5190,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -5398,7 +5398,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5417,7 +5417,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -5625,7 +5625,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5844,7 +5844,7 @@ }, "X": { "type": "float", - "value": 60.64838027954102 + "value": 60.648380279541016 }, "Y": { "type": "float", @@ -5852,7 +5852,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6079,7 +6079,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6302,11 +6302,11 @@ }, "Y": { "type": "float", - "value": 70.42612457275391 + "value": 70.4261245727539 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6533,7 +6533,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6760,7 +6760,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6987,7 +6987,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7210,11 +7210,11 @@ }, "Y": { "type": "float", - "value": 47.86338043212891 + "value": 47.863380432128906 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7441,7 +7441,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7668,7 +7668,7 @@ }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -7887,15 +7887,15 @@ }, "X": { "type": "float", - "value": 22.16181945800781 + "value": 22.161819458007812 }, "Y": { "type": "float", - "value": 8.868129730224609 + "value": 8.86812973022461 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8114,7 +8114,7 @@ }, "X": { "type": "float", - "value": 12.25297832489014 + "value": 12.252978324890137 }, "Y": { "type": "float", @@ -8122,7 +8122,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8341,7 +8341,7 @@ }, "X": { "type": "float", - "value": 16.76700401306152 + "value": 16.767004013061523 }, "Y": { "type": "float", @@ -8349,7 +8349,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8576,7 +8576,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8799,11 +8799,11 @@ }, "Y": { "type": "float", - "value": 38.15105819702148 + "value": 38.151058197021484 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9026,11 +9026,11 @@ }, "Y": { "type": "float", - "value": 43.10547256469727 + "value": 43.105472564697266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9257,7 +9257,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9484,7 +9484,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9711,7 +9711,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9938,7 +9938,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10165,7 +10165,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10384,7 +10384,7 @@ }, "X": { "type": "float", - "value": 22.38201522827148 + "value": 22.382015228271484 }, "Y": { "type": "float", @@ -10392,7 +10392,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10611,7 +10611,7 @@ }, "X": { "type": "float", - "value": 22.60221099853516 + "value": 22.602210998535156 }, "Y": { "type": "float", @@ -10619,7 +10619,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10846,7 +10846,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11069,11 +11069,11 @@ }, "Y": { "type": "float", - "value": 112.5505676269531 + "value": 112.55056762695312 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11292,7 +11292,7 @@ }, "X": { "type": "float", - "value": 31.9605598449707 + "value": 31.960559844970703 }, "Y": { "type": "float", @@ -11300,7 +11300,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11519,7 +11519,7 @@ }, "X": { "type": "float", - "value": 31.9605598449707 + "value": 31.960559844970703 }, "Y": { "type": "float", @@ -11527,7 +11527,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11977,7 +11977,7 @@ }, "Y": { "type": "float", - "value": 29.38008880615234 + "value": 29.380088806152344 }, "Z": { "type": "float", @@ -12200,11 +12200,11 @@ }, "X": { "type": "float", - "value": 41.01483535766602 + "value": 41.014835357666016 }, "Y": { "type": "float", - "value": 11.10423278808594 + "value": 11.104232788085938 }, "Z": { "type": "float", @@ -12431,7 +12431,7 @@ }, "Y": { "type": "float", - "value": 10.8840446472168 + "value": 10.884044647216797 }, "Z": { "type": "float", @@ -12654,7 +12654,7 @@ }, "X": { "type": "float", - "value": 109.2777786254883 + "value": 109.27777862548828 }, "Y": { "type": "float", @@ -12662,7 +12662,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12889,7 +12889,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -13112,11 +13112,11 @@ }, "Y": { "type": "float", - "value": 10.88953018188477 + "value": 10.889530181884766 }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -13335,15 +13335,15 @@ }, "X": { "type": "float", - "value": 109.3851470947266 + "value": 109.38514709472656 }, "Y": { "type": "float", - "value": 10.78215312957764 + "value": 10.782153129577637 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13562,15 +13562,15 @@ }, "X": { "type": "float", - "value": 109.0632858276367 + "value": 109.06328582763672 }, "Y": { "type": "float", - "value": 108.9748840332031 + "value": 108.97488403320312 }, "Z": { "type": "float", - "value": -7.852911949157715e-006 + "value": -0.000007852911949157715 } }, { @@ -13793,11 +13793,11 @@ }, "Y": { "type": "float", - "value": 109.0814895629883 + "value": 109.08148956298828 }, "Z": { "type": "float", - "value": 0.0004447102546691895 + "value": 0.00044471025466918945 } }, { @@ -14024,7 +14024,7 @@ }, "Z": { "type": "float", - "value": -7.852911949157715e-006 + "value": -0.000007852911949157715 } }, { @@ -14243,7 +14243,7 @@ }, "X": { "type": "float", - "value": 109.0632781982422 + "value": 109.06327819824219 }, "Y": { "type": "float", @@ -14251,7 +14251,7 @@ }, "Z": { "type": "float", - "value": -7.852911949157715e-006 + "value": -0.000007852911949157715 } } ] @@ -14309,7 +14309,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -14622,7 +14622,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } }, { @@ -14735,11 +14735,11 @@ }, "XPosition": { "type": "float", - "value": 19.97910118103027 + "value": 19.979101181030273 }, "YPosition": { "type": "float", - "value": 100.0032348632813 + "value": 100.00323486328125 }, "ZPosition": { "type": "float", @@ -14856,15 +14856,15 @@ }, "XPosition": { "type": "float", - "value": 22.51982688903809 + "value": 22.519826889038086 }, "YPosition": { "type": "float", - "value": 33.96865081787109 + "value": 33.968650817871094 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -14977,7 +14977,7 @@ }, "XPosition": { "type": "float", - "value": 22.36335945129395 + "value": 22.363359451293945 }, "YPosition": { "type": "float", @@ -14985,7 +14985,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15098,7 +15098,7 @@ }, "XPosition": { "type": "float", - "value": 5.726051807403565 + "value": 5.7260518074035645 }, "YPosition": { "type": "float", @@ -15106,7 +15106,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15223,11 +15223,11 @@ }, "YPosition": { "type": "float", - "value": 38.28517913818359 + "value": 38.285179138183594 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15348,7 +15348,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15469,7 +15469,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15582,7 +15582,7 @@ }, "XPosition": { "type": "float", - "value": 22.50028991699219 + "value": 22.500289916992188 }, "YPosition": { "type": "float", @@ -15590,7 +15590,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15703,7 +15703,7 @@ }, "XPosition": { "type": "float", - "value": 22.50029373168945 + "value": 22.500293731689453 }, "YPosition": { "type": "float", @@ -15711,7 +15711,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15832,7 +15832,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15953,7 +15953,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -16070,11 +16070,11 @@ }, "YPosition": { "type": "float", - "value": 10.96039199829102 + "value": 10.960391998291016 }, "ZPosition": { "type": "float", - "value": 1.501881241798401 + "value": 1.5018812417984009 } }, { @@ -16195,7 +16195,7 @@ }, "ZPosition": { "type": "float", - "value": 1.501881241798401 + "value": 1.5018812417984009 } }, { @@ -16312,11 +16312,11 @@ }, "YPosition": { "type": "float", - "value": 29.62203216552734 + "value": 29.622032165527344 }, "ZPosition": { "type": "float", - "value": 1.501881241798401 + "value": 1.5018812417984009 } }, { @@ -16437,7 +16437,7 @@ }, "ZPosition": { "type": "float", - "value": 1.501881241798401 + "value": 1.5018812417984009 } }, { @@ -16550,15 +16550,15 @@ }, "XPosition": { "type": "float", - "value": 109.4369277954102 + "value": 109.43692779541016 }, "YPosition": { "type": "float", - "value": 10.95475006103516 + "value": 10.954750061035156 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -16671,7 +16671,7 @@ }, "XPosition": { "type": "float", - "value": 109.3337936401367 + "value": 109.33379364013672 }, "YPosition": { "type": "float", @@ -16679,7 +16679,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -16800,7 +16800,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -16913,15 +16913,15 @@ }, "XPosition": { "type": "float", - "value": 90.56296539306641 + "value": 90.5629653930664 }, "YPosition": { "type": "float", - "value": 10.85161399841309 + "value": 10.851613998413086 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -17163,7 +17163,7 @@ }, "ZPosition": { "type": "float", - "value": 1.49999213218689 + "value": 1.4999921321868896 } }, { @@ -17280,11 +17280,11 @@ }, "YPosition": { "type": "float", - "value": 109.4300689697266 + "value": 109.43006896972656 }, "ZPosition": { "type": "float", - "value": 1.49999213218689 + "value": 1.4999921321868896 } }, { @@ -17405,7 +17405,7 @@ }, "ZPosition": { "type": "float", - "value": 1.500444650650024 + "value": 1.5004446506500244 } }, { @@ -17526,7 +17526,7 @@ }, "ZPosition": { "type": "float", - "value": 1.49999213218689 + "value": 1.4999921321868896 } }, { @@ -17647,7 +17647,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -17768,7 +17768,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -17881,7 +17881,7 @@ }, "XPosition": { "type": "float", - "value": 69.98660278320313 + "value": 69.98660278320312 }, "YPosition": { "type": "float", @@ -17889,7 +17889,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -18010,7 +18010,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } } ] @@ -18133,11 +18133,11 @@ }, "XOrientation": { "type": "float", - "value": -3.727274588527507e-006 + "value": -0.000003727274588527507 }, "XPosition": { "type": "float", - "value": 14.95784378051758 + "value": 14.957843780517578 }, "YOrientation": { "type": "float", @@ -18149,7 +18149,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18194,11 +18194,11 @@ }, "XOrientation": { "type": "float", - "value": -3.727274588527507e-006 + "value": -0.000003727274588527507 }, "XPosition": { "type": "float", - "value": 14.95784187316895 + "value": 14.957841873168945 }, "YOrientation": { "type": "float", @@ -18210,7 +18210,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18255,7 +18255,7 @@ }, "XOrientation": { "type": "float", - "value": -3.727274588527507e-006 + "value": -0.000003727274588527507 }, "XPosition": { "type": "float", @@ -18267,11 +18267,11 @@ }, "YPosition": { "type": "float", - "value": 23.7392692565918 + "value": 23.739269256591797 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18332,7 +18332,7 @@ }, "ZPosition": { "type": "float", - "value": 0.3618761301040649 + "value": 0.36187613010406494 } }, { @@ -18377,7 +18377,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906762391328812 + "value": -0.049067623913288116 }, "XPosition": { "type": "float", @@ -18389,11 +18389,11 @@ }, "YPosition": { "type": "float", - "value": 11.24249362945557 + "value": 11.242493629455566 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18438,7 +18438,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906762391328812 + "value": -0.049067623913288116 }, "XPosition": { "type": "float", @@ -18450,11 +18450,11 @@ }, "YPosition": { "type": "float", - "value": 43.23807525634766 + "value": 43.238075256347656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18503,7 +18503,7 @@ }, "XPosition": { "type": "float", - "value": 56.53673934936523 + "value": 56.536739349365234 }, "YOrientation": { "type": "float", @@ -18515,7 +18515,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18560,11 +18560,11 @@ }, "XOrientation": { "type": "float", - "value": -0.04906762391328812 + "value": -0.049067623913288116 }, "XPosition": { "type": "float", - "value": 106.1259155273438 + "value": 106.12591552734375 }, "YOrientation": { "type": "float", @@ -18576,7 +18576,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18638,7 +18638,7 @@ }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -18700,7 +18700,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18758,11 +18758,11 @@ }, "YPosition": { "type": "float", - "value": 63.21844863891602 + "value": 63.218448638916016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18824,7 +18824,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18874,7 +18874,7 @@ }, "XPosition": { "type": "float", - "value": 14.32374000549316 + "value": 14.323740005493164 }, "YOrientation": { "type": "float", @@ -18882,11 +18882,11 @@ }, "YPosition": { "type": "float", - "value": 16.26271057128906 + "value": 16.262710571289062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { diff --git a/_module/git/dungeonofzod.git.json b/_module/git/dungeonofzod.git.json index 4a3a4a6..28881df 100644 --- a/_module/git/dungeonofzod.git.json +++ b/_module/git/dungeonofzod.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": 1.748454110384046e-007 + "value": 0.00000017484541103840456 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -1380,7 +1380,7 @@ }, "Bearing": { "type": "float", - "value": 1.748454110384046e-007 + "value": 0.00000017484541103840456 }, "CloseLockDC": { "type": "byte", @@ -1818,7 +1818,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -2475,7 +2475,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2694,7 +2694,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -2913,7 +2913,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3132,7 +3132,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3570,7 +3570,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3789,7 +3789,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -4446,7 +4446,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -4665,7 +4665,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -5103,7 +5103,7 @@ }, "Bearing": { "type": "float", - "value": 1.748454110384046e-007 + "value": 0.00000017484541103840456 }, "CloseLockDC": { "type": "byte", @@ -5555,7 +5555,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -5764,7 +5764,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5988,11 +5988,11 @@ }, "Y": { "type": "float", - "value": 114.3223037719727 + "value": 114.32230377197266 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -6211,15 +6211,15 @@ }, "X": { "type": "float", - "value": 18.98039627075195 + "value": 18.980396270751953 }, "Y": { "type": "float", - "value": 142.4922790527344 + "value": 142.49227905273438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6446,7 +6446,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6465,7 +6465,7 @@ }, "Bearing": { "type": "float", - "value": 1.546251535415649 + "value": 1.5462515354156494 }, "BodyBag": { "type": "byte", @@ -6666,11 +6666,11 @@ }, "X": { "type": "float", - "value": 14.41446018218994 + "value": 14.414460182189941 }, "Y": { "type": "float", - "value": 125.2827758789063 + "value": 125.28277587890625 }, "Z": { "type": "float", @@ -6902,7 +6902,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7121,15 +7121,15 @@ }, "X": { "type": "float", - "value": 131.3781890869141 + "value": 131.37818908691406 }, "Y": { "type": "float", - "value": 107.3910293579102 + "value": 107.39102935791016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7348,15 +7348,15 @@ }, "X": { "type": "float", - "value": 118.6564254760742 + "value": 118.65642547607422 }, "Y": { "type": "float", - "value": 107.3390808105469 + "value": 107.33908081054688 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -7575,7 +7575,7 @@ }, "X": { "type": "float", - "value": 131.2744445800781 + "value": 131.27444458007812 }, "Y": { "type": "float", @@ -7583,7 +7583,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7802,15 +7802,15 @@ }, "X": { "type": "float", - "value": 118.5526809692383 + "value": 118.55268096923828 }, "Y": { "type": "float", - "value": 113.8681945800781 + "value": 113.86819458007812 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8029,15 +8029,15 @@ }, "X": { "type": "float", - "value": 131.5724029541016 + "value": 131.57240295410156 }, "Y": { "type": "float", - "value": 121.4684219360352 + "value": 121.46842193603516 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8256,15 +8256,15 @@ }, "X": { "type": "float", - "value": 118.8506393432617 + "value": 118.85063934326172 }, "Y": { "type": "float", - "value": 121.4164733886719 + "value": 121.41647338867188 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8483,15 +8483,15 @@ }, "X": { "type": "float", - "value": 131.2744445800781 + "value": 131.27444458007812 }, "Y": { "type": "float", - "value": 129.7120971679688 + "value": 129.71209716796875 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -8710,7 +8710,7 @@ }, "X": { "type": "float", - "value": 118.5526733398438 + "value": 118.55267333984375 }, "Y": { "type": "float", @@ -8718,7 +8718,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -8776,7 +8776,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -9081,11 +9081,11 @@ }, "XPosition": { "type": "float", - "value": 71.93015289306641 + "value": 71.9301528930664 }, "YPosition": { "type": "float", - "value": 74.52439117431641 + "value": 74.5243911743164 }, "ZPosition": { "type": "float", @@ -9138,7 +9138,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -9202,7 +9202,7 @@ }, "XPosition": { "type": "float", - "value": 24.43567848205566 + "value": 24.435678482055664 }, "YPosition": { "type": "float", @@ -9210,7 +9210,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -9259,7 +9259,7 @@ }, "MinDistance": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "PitchVariation": { "type": "float", @@ -9323,7 +9323,7 @@ }, "XPosition": { "type": "float", - "value": 22.32986640930176 + "value": 22.329866409301758 }, "YPosition": { "type": "float", @@ -9331,7 +9331,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } } ] @@ -9413,11 +9413,11 @@ }, "XPosition": { "type": "float", - "value": 132.4342956542969 + "value": 132.43429565429688 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -9425,7 +9425,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9470,7 +9470,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1467331647872925 + "value": 0.14673316478729248 }, "XPosition": { "type": "float", @@ -9486,7 +9486,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9535,11 +9535,11 @@ }, "XPosition": { "type": "float", - "value": 123.374137878418 + "value": 123.37413787841797 }, "YOrientation": { "type": "float", - "value": 0.1709630340337753 + "value": 0.17096303403377533 }, "YPosition": { "type": "float", @@ -9547,7 +9547,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9596,19 +9596,19 @@ }, "XPosition": { "type": "float", - "value": 143.5316314697266 + "value": 143.53163146972656 }, "YOrientation": { "type": "float", - "value": 0.02454232610762119 + "value": 0.024542326107621193 }, "YPosition": { "type": "float", - "value": 17.00454139709473 + "value": 17.004541397094727 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9657,19 +9657,19 @@ }, "XPosition": { "type": "float", - "value": 116.4772262573242 + "value": 116.47722625732422 }, "YOrientation": { "type": "float", - "value": 0.02454232610762119 + "value": 0.024542326107621193 }, "YPosition": { "type": "float", - "value": 14.54505062103272 + "value": 14.545050621032715 }, "ZPosition": { "type": "float", - "value": -5.216598765400704e-006 + "value": -0.000005216598765400704 } }, { @@ -9722,15 +9722,15 @@ }, "YOrientation": { "type": "float", - "value": 0.02454232610762119 + "value": 0.024542326107621193 }, "YPosition": { "type": "float", - "value": 17.61941337585449 + "value": 17.619413375854492 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9775,7 +9775,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", @@ -9787,11 +9787,11 @@ }, "YPosition": { "type": "float", - "value": 101.496696472168 + "value": 101.49669647216797 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9836,11 +9836,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", - "value": 25.01350021362305 + "value": 25.013500213623047 }, "YOrientation": { "type": "float", @@ -9852,7 +9852,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9897,11 +9897,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", - "value": 63.43572616577148 + "value": 63.435726165771484 }, "YOrientation": { "type": "float", @@ -9913,7 +9913,7 @@ }, "ZPosition": { "type": "float", - "value": -5.216598765400704e-006 + "value": -0.000005216598765400704 } }, { @@ -9958,11 +9958,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", - "value": 25.01349830627441 + "value": 25.013498306274414 }, "YOrientation": { "type": "float", @@ -9974,7 +9974,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10035,7 +10035,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10080,7 +10080,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", @@ -10096,7 +10096,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10165,7 +10165,7 @@ }, "XPosition": { "type": "float", - "value": 17.57549095153809 + "value": 17.575490951538086 }, "YOrientation": { "type": "float", @@ -10173,11 +10173,11 @@ }, "YPosition": { "type": "float", - "value": 127.6002731323242 + "value": 127.60027313232422 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10230,7 +10230,7 @@ }, "YOrientation": { "type": "float", - "value": 0.02454232610762119 + "value": 0.024542326107621193 }, "YPosition": { "type": "float", @@ -10238,7 +10238,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10287,7 +10287,7 @@ }, "XPosition": { "type": "float", - "value": 46.85614395141602 + "value": 46.856143951416016 }, "YOrientation": { "type": "float", @@ -10299,7 +10299,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10356,11 +10356,11 @@ }, "YPosition": { "type": "float", - "value": 134.9373168945313 + "value": 134.93731689453125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10417,11 +10417,11 @@ }, "YPosition": { "type": "float", - "value": 103.747917175293 + "value": 103.74791717529297 }, "ZPosition": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -10470,7 +10470,7 @@ }, "XPosition": { "type": "float", - "value": 86.82859039306641 + "value": 86.8285903930664 }, "YOrientation": { "type": "float", @@ -10478,11 +10478,11 @@ }, "YPosition": { "type": "float", - "value": 137.5067749023438 + "value": 137.50677490234375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10531,19 +10531,19 @@ }, "XPosition": { "type": "float", - "value": 105.3988342285156 + "value": 105.39883422851562 }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", - "value": 137.0970611572266 + "value": 137.09706115722656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10588,11 +10588,11 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 123.673469543457 + "value": 123.67346954345703 }, "YOrientation": { "type": "float", @@ -10600,11 +10600,11 @@ }, "YPosition": { "type": "float", - "value": 114.5762405395508 + "value": 114.57624053955078 }, "ZPosition": { "type": "float", - "value": -5.216598765400704e-006 + "value": -0.000005216598765400704 } }, { @@ -10653,7 +10653,7 @@ }, "XPosition": { "type": "float", - "value": 45.31317520141602 + "value": 45.313175201416016 }, "YOrientation": { "type": "float", @@ -10665,7 +10665,7 @@ }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -10722,11 +10722,11 @@ }, "YPosition": { "type": "float", - "value": 114.2291107177734 + "value": 114.22911071777344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10783,11 +10783,11 @@ }, "YPosition": { "type": "float", - "value": 124.1820831298828 + "value": 124.18208312988281 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10844,11 +10844,11 @@ }, "YPosition": { "type": "float", - "value": 125.0602874755859 + "value": 125.06028747558594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10897,7 +10897,7 @@ }, "XPosition": { "type": "float", - "value": 125.9164581298828 + "value": 125.91645812988281 }, "YOrientation": { "type": "float", @@ -10905,11 +10905,11 @@ }, "YPosition": { "type": "float", - "value": 93.58261871337891 + "value": 93.5826187133789 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10970,7 +10970,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11019,7 +11019,7 @@ }, "XPosition": { "type": "float", - "value": 144.3574523925781 + "value": 144.35745239257812 }, "YOrientation": { "type": "float", @@ -11031,7 +11031,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11080,7 +11080,7 @@ }, "XPosition": { "type": "float", - "value": 144.9429016113281 + "value": 144.94290161132812 }, "YOrientation": { "type": "float", @@ -11092,7 +11092,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11141,7 +11141,7 @@ }, "XPosition": { "type": "float", - "value": 13.73092842102051 + "value": 13.730928421020508 }, "YOrientation": { "type": "float", @@ -11149,11 +11149,11 @@ }, "YPosition": { "type": "float", - "value": 14.0816240310669 + "value": 14.081624031066895 }, "ZPosition": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -11202,7 +11202,7 @@ }, "XPosition": { "type": "float", - "value": 45.56195449829102 + "value": 45.561954498291016 }, "YOrientation": { "type": "float", @@ -11210,11 +11210,11 @@ }, "YPosition": { "type": "float", - "value": 24.79669570922852 + "value": 24.796695709228516 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } } ] diff --git a/_module/git/dungeontr1.git.json b/_module/git/dungeontr1.git.json index 5b30795..d298f32 100644 --- a/_module/git/dungeontr1.git.json +++ b/_module/git/dungeontr1.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 2.888515710830689 + "value": 2.8885157108306885 }, "CloseLockDC": { "type": "byte", @@ -496,15 +496,15 @@ }, "X": { "type": "float", - "value": 120.5764007568359 + "value": 120.57640075683594 }, "Y": { "type": "float", - "value": 102.3725128173828 + "value": 102.37251281738281 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -723,15 +723,15 @@ }, "X": { "type": "float", - "value": 123.1257934570313 + "value": 123.12579345703125 }, "Y": { "type": "float", - "value": 101.9178009033203 + "value": 101.91780090332031 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -950,11 +950,11 @@ }, "X": { "type": "float", - "value": 117.6011047363281 + "value": 117.60110473632812 }, "Y": { "type": "float", - "value": 99.21231079101563 + "value": 99.21231079101562 }, "Z": { "type": "float", @@ -977,7 +977,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -1177,15 +1177,15 @@ }, "X": { "type": "float", - "value": 117.5120468139648 + "value": 117.51204681396484 }, "Y": { "type": "float", - "value": 97.69919586181641 + "value": 97.6991958618164 }, "Z": { "type": "float", - "value": 1.110899925231934 + "value": 1.1108999252319336 } }, { @@ -1404,11 +1404,11 @@ }, "X": { "type": "float", - "value": 118.8486785888672 + "value": 118.84867858886719 }, "Y": { "type": "float", - "value": 101.2446670532227 + "value": 101.24466705322266 }, "Z": { "type": "float", @@ -1639,7 +1639,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -1858,7 +1858,7 @@ }, "X": { "type": "float", - "value": 117.4661483764648 + "value": 117.46614837646484 }, "Y": { "type": "float", @@ -1866,7 +1866,7 @@ }, "Z": { "type": "float", - "value": 1.010006785392761 + "value": 1.0100067853927612 } }, { @@ -2089,11 +2089,11 @@ }, "Y": { "type": "float", - "value": 103.0591888427734 + "value": 103.05918884277344 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -2420,7 +2420,7 @@ }, "Y": { "type": "float", - "value": 100.9804534912109 + "value": 100.98045349121094 }, "Z": { "type": "float", @@ -2647,11 +2647,11 @@ }, "Y": { "type": "float", - "value": 102.0707702636719 + "value": 102.07077026367188 }, "Z": { "type": "float", - "value": 1.000005960464478 + "value": 1.0000059604644775 } }, { @@ -2870,7 +2870,7 @@ }, "X": { "type": "float", - "value": 60.12188339233398 + "value": 60.121883392333984 }, "Y": { "type": "float", @@ -2878,7 +2878,7 @@ }, "Z": { "type": "float", - "value": 1.010006785392761 + "value": 1.0100067853927612 } }, { @@ -3324,15 +3324,15 @@ }, "X": { "type": "float", - "value": 134.6480407714844 + "value": 134.64804077148438 }, "Y": { "type": "float", - "value": 145.7689056396484 + "value": 145.76890563964844 }, "Z": { "type": "float", - "value": 1.587430953979492 + "value": 1.5874309539794922 } }, { @@ -3551,11 +3551,11 @@ }, "X": { "type": "float", - "value": 128.8826599121094 + "value": 128.88265991210938 }, "Y": { "type": "float", - "value": 139.9591217041016 + "value": 139.95912170410156 }, "Z": { "type": "float", @@ -3778,7 +3778,7 @@ }, "X": { "type": "float", - "value": 127.5352630615234 + "value": 127.53526306152344 }, "Y": { "type": "float", @@ -3786,7 +3786,7 @@ }, "Z": { "type": "float", - "value": 0.9999998807907105 + "value": 0.9999998807907104 } }, { @@ -4005,15 +4005,15 @@ }, "X": { "type": "float", - "value": 136.2574768066406 + "value": 136.25747680664062 }, "Y": { "type": "float", - "value": 135.3547515869141 + "value": 135.35475158691406 }, "Z": { "type": "float", - "value": 1.615904569625855 + "value": 1.6159045696258545 } }, { @@ -4232,7 +4232,7 @@ }, "X": { "type": "float", - "value": 134.3600769042969 + "value": 134.36007690429688 }, "Y": { "type": "float", @@ -4240,7 +4240,7 @@ }, "Z": { "type": "float", - "value": 1.168406009674072 + "value": 1.1684060096740723 } }, { @@ -4259,7 +4259,7 @@ }, "Bearing": { "type": "float", - "value": -1.644427180290222 + "value": -1.6444271802902222 }, "BodyBag": { "type": "byte", @@ -4463,7 +4463,7 @@ }, "Y": { "type": "float", - "value": 131.3130493164063 + "value": 131.31304931640625 }, "Z": { "type": "float", @@ -4486,7 +4486,7 @@ }, "Bearing": { "type": "float", - "value": -1.055378556251526 + "value": -1.0553785562515259 }, "BodyBag": { "type": "byte", @@ -4690,11 +4690,11 @@ }, "Y": { "type": "float", - "value": 139.6991882324219 + "value": 139.69918823242188 }, "Z": { "type": "float", - "value": 1.000005960464478 + "value": 1.0000059604644775 } }, { @@ -4713,7 +4713,7 @@ }, "Bearing": { "type": "float", - "value": -3.018870353698731 + "value": -3.0188703536987305 }, "BodyBag": { "type": "byte", @@ -4917,11 +4917,11 @@ }, "Y": { "type": "float", - "value": 110.4212951660156 + "value": 110.42129516601562 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } } ] @@ -5056,15 +5056,15 @@ }, "YOrientation": { "type": "float", - "value": -0.8819193840026856 + "value": -0.8819193840026855 }, "YPosition": { "type": "float", - "value": 70.04347991943359 + "value": 70.0434799194336 }, "ZPosition": { "type": "float", - "value": 1.000007390975952 + "value": 1.0000073909759521 } }, { @@ -5117,11 +5117,11 @@ }, "YOrientation": { "type": "float", - "value": -0.3826813101768494 + "value": -0.38268131017684937 }, "YPosition": { "type": "float", - "value": 50.06496429443359 + "value": 50.064964294433594 }, "ZPosition": { "type": "float", @@ -5186,7 +5186,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -5239,7 +5239,7 @@ }, "YOrientation": { "type": "float", - "value": -0.2190994471311569 + "value": -0.21909944713115692 }, "YPosition": { "type": "float", @@ -5247,7 +5247,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -5296,7 +5296,7 @@ }, "XPosition": { "type": "float", - "value": 42.12668609619141 + "value": 42.126686096191406 }, "YOrientation": { "type": "float", @@ -5304,7 +5304,7 @@ }, "YPosition": { "type": "float", - "value": 11.56061935424805 + "value": 11.560619354248047 }, "ZPosition": { "type": "float", @@ -5357,11 +5357,11 @@ }, "XPosition": { "type": "float", - "value": 132.6030426025391 + "value": 132.60304260253906 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -5369,7 +5369,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000520706176758 + "value": 1.0005207061767578 } }, { @@ -5430,7 +5430,7 @@ }, "ZPosition": { "type": "float", - "value": 1.801406860351563 + "value": 1.8014068603515625 } }, { @@ -5487,7 +5487,7 @@ }, "YPosition": { "type": "float", - "value": 140.2165832519531 + "value": 140.21658325195312 }, "ZPosition": { "type": "float", @@ -5540,7 +5540,7 @@ }, "XPosition": { "type": "float", - "value": 25.04946899414063 + "value": 25.049468994140625 }, "YOrientation": { "type": "float", @@ -5552,7 +5552,7 @@ }, "ZPosition": { "type": "float", - "value": 1.004385709762573 + "value": 1.0043857097625732 } }, { @@ -5601,7 +5601,7 @@ }, "XPosition": { "type": "float", - "value": 23.16742134094238 + "value": 23.167421340942383 }, "YOrientation": { "type": "float", @@ -5613,7 +5613,7 @@ }, "ZPosition": { "type": "float", - "value": 1.282904386520386 + "value": 1.2829043865203857 } }, { @@ -5662,7 +5662,7 @@ }, "XPosition": { "type": "float", - "value": 69.35049438476563 + "value": 69.35049438476562 }, "YOrientation": { "type": "float", @@ -5674,7 +5674,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -5723,7 +5723,7 @@ }, "XPosition": { "type": "float", - "value": 100.2113571166992 + "value": 100.21135711669922 }, "YOrientation": { "type": "float", @@ -5796,7 +5796,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -5853,11 +5853,11 @@ }, "YPosition": { "type": "float", - "value": 27.25222015380859 + "value": 27.252220153808594 }, "ZPosition": { "type": "float", - "value": 1.363930463790894 + "value": 1.3639304637908936 } }, { @@ -5906,7 +5906,7 @@ }, "XPosition": { "type": "float", - "value": 120.3038635253906 + "value": 120.30386352539062 }, "YOrientation": { "type": "float", @@ -5918,7 +5918,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000007033348084 + "value": 1.0000070333480835 } }, { @@ -5963,7 +5963,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454478666186333 + "value": 0.024544786661863327 }, "XPosition": { "type": "float", @@ -6024,11 +6024,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454478666186333 + "value": 0.024544786661863327 }, "XPosition": { "type": "float", - "value": 141.0024261474609 + "value": 141.00242614746094 }, "YOrientation": { "type": "float", @@ -6040,7 +6040,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000007629394531 + "value": 1.0000076293945312 } }, { @@ -6097,11 +6097,11 @@ }, "YPosition": { "type": "float", - "value": 8.321620941162109 + "value": 8.32162094116211 }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -6150,7 +6150,7 @@ }, "XPosition": { "type": "float", - "value": 110.1415634155273 + "value": 110.14156341552734 }, "YOrientation": { "type": "float", @@ -6158,7 +6158,7 @@ }, "YPosition": { "type": "float", - "value": 19.41766548156738 + "value": 19.417665481567383 }, "ZPosition": { "type": "float", @@ -6219,7 +6219,7 @@ }, "YPosition": { "type": "float", - "value": 21.11101341247559 + "value": 21.111013412475586 }, "ZPosition": { "type": "float", diff --git a/_module/git/dungeontr2.git.json b/_module/git/dungeontr2.git.json index 6a32545..cca0563 100644 --- a/_module/git/dungeontr2.git.json +++ b/_module/git/dungeontr2.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -1378,7 +1378,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -1816,7 +1816,7 @@ }, "Bearing": { "type": "float", - "value": 1.57079553604126 + "value": 1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -2035,7 +2035,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -2254,7 +2254,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -2473,7 +2473,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -2911,7 +2911,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -4000,7 +4000,7 @@ }, "X": { "type": "float", - "value": 29.96496772766113 + "value": 29.964967727661133 }, "Y": { "type": "float", @@ -4008,7 +4008,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4227,15 +4227,15 @@ }, "X": { "type": "float", - "value": 135.1067199707031 + "value": 135.10671997070312 }, "Y": { "type": "float", - "value": 144.3985900878906 + "value": 144.39859008789062 }, "Z": { "type": "float", - "value": 0.1405831575393677 + "value": 0.14058315753936768 } }, { @@ -4254,7 +4254,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "BodyBag": { "type": "byte", @@ -4454,7 +4454,7 @@ }, "X": { "type": "float", - "value": 115.1118545532227 + "value": 115.11185455322266 }, "Y": { "type": "float", @@ -4462,7 +4462,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -4593,7 +4593,7 @@ }, "XPosition": { "type": "float", - "value": 29.56652450561523 + "value": 29.566524505615234 }, "YOrientation": { "type": "float", @@ -4601,11 +4601,11 @@ }, "YPosition": { "type": "float", - "value": 141.8835601806641 + "value": 141.88356018066406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4654,7 +4654,7 @@ }, "XPosition": { "type": "float", - "value": 14.21118831634522 + "value": 14.211188316345215 }, "YOrientation": { "type": "float", @@ -4666,7 +4666,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4715,7 +4715,7 @@ }, "XPosition": { "type": "float", - "value": 31.68014526367188 + "value": 31.680145263671875 }, "YOrientation": { "type": "float", @@ -4727,7 +4727,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4784,11 +4784,11 @@ }, "YPosition": { "type": "float", - "value": 20.15649795532227 + "value": 20.156497955322266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4845,11 +4845,11 @@ }, "YPosition": { "type": "float", - "value": 13.689621925354 + "value": 13.689621925354004 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4910,7 +4910,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4963,7 +4963,7 @@ }, "YOrientation": { "type": "float", - "value": 7.907536314633035e-007 + "value": 0.0000007907536314633035 }, "YPosition": { "type": "float", @@ -4971,7 +4971,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5020,7 +5020,7 @@ }, "XPosition": { "type": "float", - "value": 65.03701782226563 + "value": 65.03701782226562 }, "YOrientation": { "type": "float", @@ -5028,11 +5028,11 @@ }, "YPosition": { "type": "float", - "value": 134.1746215820313 + "value": 134.17462158203125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5093,7 +5093,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5150,11 +5150,11 @@ }, "YPosition": { "type": "float", - "value": 88.87197113037109 + "value": 88.8719711303711 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5215,7 +5215,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5272,11 +5272,11 @@ }, "YPosition": { "type": "float", - "value": 52.64858245849609 + "value": 52.648582458496094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5333,11 +5333,11 @@ }, "YPosition": { "type": "float", - "value": 140.5682983398438 + "value": 140.56829833984375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5390,15 +5390,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 104.7849273681641 + "value": 104.78492736816406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5447,7 +5447,7 @@ }, "XPosition": { "type": "float", - "value": 115.2501678466797 + "value": 115.25016784667969 }, "YOrientation": { "type": "float", @@ -5459,7 +5459,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5508,7 +5508,7 @@ }, "XPosition": { "type": "float", - "value": 144.8742065429688 + "value": 144.87420654296875 }, "YOrientation": { "type": "float", @@ -5520,7 +5520,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5569,7 +5569,7 @@ }, "XPosition": { "type": "float", - "value": 134.7348327636719 + "value": 134.73483276367188 }, "YOrientation": { "type": "float", @@ -5581,7 +5581,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5638,11 +5638,11 @@ }, "YPosition": { "type": "float", - "value": 14.16021537780762 + "value": 14.160215377807617 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5699,7 +5699,7 @@ }, "YPosition": { "type": "float", - "value": 14.25374794006348 + "value": 14.253747940063477 }, "ZPosition": { "type": "float", diff --git a/_module/git/dungeontr3.git.json b/_module/git/dungeontr3.git.json index 080d7d5..a887d4e 100644 --- a/_module/git/dungeontr3.git.json +++ b/_module/git/dungeontr3.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 1.980000019073486 + "value": 1.9800000190734863 }, "Z": { "type": "float", @@ -1159,7 +1159,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -1378,7 +1378,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2254,7 +2254,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2692,7 +2692,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2911,7 +2911,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3568,7 +3568,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3787,7 +3787,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -4006,7 +4006,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -4444,7 +4444,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -4663,7 +4663,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -5095,7 +5095,7 @@ }, "X": { "type": "float", - "value": 128.1391448974609 + "value": 128.13914489746094 }, "Y": { "type": "float", @@ -5103,7 +5103,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5322,7 +5322,7 @@ }, "X": { "type": "float", - "value": 15.8603458404541 + "value": 15.860345840454102 }, "Y": { "type": "float", @@ -5330,7 +5330,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5349,7 +5349,7 @@ }, "Bearing": { "type": "float", - "value": -3.117046117782593 + "value": -3.1170461177825928 }, "BodyBag": { "type": "byte", @@ -5553,11 +5553,11 @@ }, "Y": { "type": "float", - "value": 103.5371780395508 + "value": 103.53717803955078 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -5700,7 +5700,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5761,7 +5761,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5810,7 +5810,7 @@ }, "XPosition": { "type": "float", - "value": 135.1437835693359 + "value": 135.14378356933594 }, "YOrientation": { "type": "float", @@ -5822,7 +5822,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5871,7 +5871,7 @@ }, "XPosition": { "type": "float", - "value": 113.8903274536133 + "value": 113.89032745361328 }, "YOrientation": { "type": "float", @@ -5879,11 +5879,11 @@ }, "YPosition": { "type": "float", - "value": 25.86696624755859 + "value": 25.866966247558594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5928,7 +5928,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1224105656147003 + "value": 0.12241056561470032 }, "XPosition": { "type": "float", @@ -5944,7 +5944,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5993,19 +5993,19 @@ }, "XPosition": { "type": "float", - "value": 116.6352233886719 + "value": 116.63522338867188 }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 58.27828216552734 + "value": 58.278282165527344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6066,7 +6066,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6115,11 +6115,11 @@ }, "XPosition": { "type": "float", - "value": 17.59172630310059 + "value": 17.591726303100586 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -6127,7 +6127,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6180,7 +6180,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -6188,7 +6188,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6237,7 +6237,7 @@ }, "XPosition": { "type": "float", - "value": 31.03997421264648 + "value": 31.039974212646484 }, "YOrientation": { "type": "float", @@ -6249,7 +6249,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6294,7 +6294,7 @@ }, "XOrientation": { "type": "float", - "value": -0.1224105656147003 + "value": -0.12241056561470032 }, "XPosition": { "type": "float", @@ -6310,7 +6310,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6371,7 +6371,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6416,7 +6416,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1224137768149376 + "value": 0.12241377681493759 }, "XPosition": { "type": "float", @@ -6428,11 +6428,11 @@ }, "YPosition": { "type": "float", - "value": 111.3376541137695 + "value": 111.33765411376953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6477,7 +6477,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454121224582195 + "value": -0.024541212245821953 }, "XPosition": { "type": "float", @@ -6489,11 +6489,11 @@ }, "YPosition": { "type": "float", - "value": 106.6240158081055 + "value": 106.62401580810547 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6550,11 +6550,11 @@ }, "YPosition": { "type": "float", - "value": 143.8545227050781 + "value": 143.85452270507812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6603,7 +6603,7 @@ }, "XPosition": { "type": "float", - "value": 105.3869705200195 + "value": 105.38697052001953 }, "YOrientation": { "type": "float", @@ -6615,7 +6615,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6660,7 +6660,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4275574386119843 + "value": -0.42755743861198425 }, "XPosition": { "type": "float", @@ -6672,11 +6672,11 @@ }, "YPosition": { "type": "float", - "value": 143.4084625244141 + "value": 143.40846252441406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6725,7 +6725,7 @@ }, "XPosition": { "type": "float", - "value": 75.62661743164063 + "value": 75.62661743164062 }, "YOrientation": { "type": "float", @@ -6733,11 +6733,11 @@ }, "YPosition": { "type": "float", - "value": 116.1850051879883 + "value": 116.18500518798828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6798,7 +6798,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6847,7 +6847,7 @@ }, "XPosition": { "type": "float", - "value": 29.85577583312988 + "value": 29.855775833129883 }, "YOrientation": { "type": "float", @@ -6855,11 +6855,11 @@ }, "YPosition": { "type": "float", - "value": 10.57294845581055 + "value": 10.572948455810547 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6904,7 +6904,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -6920,7 +6920,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6973,15 +6973,15 @@ }, "YOrientation": { "type": "float", - "value": 0.02454256452620029 + "value": 0.024542564526200294 }, "YPosition": { "type": "float", - "value": 10.49753952026367 + "value": 10.497539520263672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7030,7 +7030,7 @@ }, "XPosition": { "type": "float", - "value": 81.74094390869141 + "value": 81.7409439086914 }, "YOrientation": { "type": "float", @@ -7042,7 +7042,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/easternadonwo001.git.json b/_module/git/easternadonwo001.git.json index 965d322..55a1c19 100644 --- a/_module/git/easternadonwo001.git.json +++ b/_module/git/easternadonwo001.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590356826782 + "value": -3.1415903568267822 }, "CloseLockDC": { "type": "byte", @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 12.21000003814697 + "value": 12.210000038146973 }, "Z": { "type": "float", @@ -392,11 +392,11 @@ }, "YPosition": { "type": "float", - "value": 20.11030769348145 + "value": 20.110307693481445 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -465,7 +465,7 @@ }, "XPosition": { "type": "float", - "value": 26.01886177062988 + "value": 26.018861770629883 }, "YOrientation": { "type": "float", @@ -473,11 +473,11 @@ }, "YPosition": { "type": "float", - "value": 20.47238349914551 + "value": 20.472383499145508 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/easternadonwoods.git.json b/_module/git/easternadonwoods.git.json index 6aa4121..3244729 100644 --- a/_module/git/easternadonwoods.git.json +++ b/_module/git/easternadonwoods.git.json @@ -475,11 +475,11 @@ }, "X": { "type": "float", - "value": 52.93999862670898 + "value": 52.939998626708984 }, "Y": { "type": "float", - "value": 133.1600036621094 + "value": 133.16000366210938 }, "Z": { "type": "float", @@ -946,11 +946,11 @@ }, "Y": { "type": "float", - "value": 64.47048187255859 + "value": 64.4704818725586 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1169,15 +1169,15 @@ }, "X": { "type": "float", - "value": 35.34832382202148 + "value": 35.348323822021484 }, "Y": { "type": "float", - "value": 137.9458312988281 + "value": 137.94583129882812 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1396,15 +1396,15 @@ }, "X": { "type": "float", - "value": 19.96228408813477 + "value": 19.962284088134766 }, "Y": { "type": "float", - "value": 122.2644424438477 + "value": 122.26444244384766 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1623,7 +1623,7 @@ }, "X": { "type": "float", - "value": 29.56192779541016 + "value": 29.561927795410156 }, "Y": { "type": "float", @@ -1631,7 +1631,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2077,15 +2077,15 @@ }, "X": { "type": "float", - "value": 29.47153282165527 + "value": 29.471532821655273 }, "Y": { "type": "float", - "value": 21.84586143493652 + "value": 21.845861434936523 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2531,15 +2531,15 @@ }, "X": { "type": "float", - "value": 72.06064605712891 + "value": 72.0606460571289 }, "Y": { "type": "float", - "value": 11.67778778076172 + "value": 11.677787780761719 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2758,15 +2758,15 @@ }, "X": { "type": "float", - "value": 139.0786743164063 + "value": 139.07867431640625 }, "Y": { "type": "float", - "value": 10.38302803039551 + "value": 10.383028030395508 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2985,7 +2985,7 @@ }, "X": { "type": "float", - "value": 131.2380523681641 + "value": 131.23805236816406 }, "Y": { "type": "float", @@ -2993,7 +2993,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3220,7 +3220,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -3443,11 +3443,11 @@ }, "Y": { "type": "float", - "value": 79.12839508056641 + "value": 79.1283950805664 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3674,7 +3674,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3901,7 +3901,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4128,7 +4128,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4355,7 +4355,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4574,7 +4574,7 @@ }, "X": { "type": "float", - "value": 11.4820499420166 + "value": 11.482049942016602 }, "Y": { "type": "float", @@ -4582,7 +4582,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4809,7 +4809,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5036,7 +5036,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5255,15 +5255,15 @@ }, "X": { "type": "float", - "value": 47.13921737670898 + "value": 47.139217376708984 }, "Y": { "type": "float", - "value": 114.358772277832 + "value": 114.35877227783203 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5482,7 +5482,7 @@ }, "X": { "type": "float", - "value": 25.69137573242188 + "value": 25.691375732421875 }, "Y": { "type": "float", @@ -5490,7 +5490,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5709,15 +5709,15 @@ }, "X": { "type": "float", - "value": 100.7499847412109 + "value": 100.74998474121094 }, "Y": { "type": "float", - "value": 20.03908538818359 + "value": 20.039085388183594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5936,7 +5936,7 @@ }, "X": { "type": "float", - "value": 120.6464309692383 + "value": 120.64643096923828 }, "Y": { "type": "float", @@ -5944,7 +5944,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6163,7 +6163,7 @@ }, "X": { "type": "float", - "value": 111.2919998168945 + "value": 111.29199981689453 }, "Y": { "type": "float", @@ -6171,7 +6171,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6394,11 +6394,11 @@ }, "Y": { "type": "float", - "value": 117.5482482910156 + "value": 117.54824829101562 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6617,15 +6617,15 @@ }, "X": { "type": "float", - "value": 108.4401321411133 + "value": 108.44013214111328 }, "Y": { "type": "float", - "value": 107.5508422851563 + "value": 107.55084228515625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6844,7 +6844,7 @@ }, "X": { "type": "float", - "value": 110.9711456298828 + "value": 110.97114562988281 }, "Y": { "type": "float", @@ -6852,7 +6852,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7075,11 +7075,11 @@ }, "Y": { "type": "float", - "value": 104.2871017456055 + "value": 104.28710174560547 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7298,7 +7298,7 @@ }, "X": { "type": "float", - "value": 129.6089172363281 + "value": 129.60891723632812 }, "Y": { "type": "float", @@ -7306,7 +7306,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7529,11 +7529,11 @@ }, "Y": { "type": "float", - "value": 141.9040374755859 + "value": 141.90403747558594 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7752,15 +7752,15 @@ }, "X": { "type": "float", - "value": 21.07590293884277 + "value": 21.075902938842773 }, "Y": { "type": "float", - "value": 9.860244750976563 + "value": 9.860244750976562 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7979,7 +7979,7 @@ }, "X": { "type": "float", - "value": 110.3579940795898 + "value": 110.35799407958984 }, "Y": { "type": "float", @@ -7987,7 +7987,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8210,11 +8210,11 @@ }, "Y": { "type": "float", - "value": 61.79319000244141 + "value": 61.793190002441406 }, "Z": { "type": "float", - "value": 0.01000000815838575 + "value": 0.010000008158385754 } }, { @@ -8233,7 +8233,7 @@ }, "Bearing": { "type": "float", - "value": -3.092502355575562 + "value": -3.0925023555755615 }, "BodyBag": { "type": "byte", @@ -8437,7 +8437,7 @@ }, "Y": { "type": "float", - "value": 130.9292602539063 + "value": 130.92926025390625 }, "Z": { "type": "float", @@ -8460,7 +8460,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -8668,7 +8668,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8891,11 +8891,11 @@ }, "Y": { "type": "float", - "value": 130.1133422851563 + "value": 130.11334228515625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9122,7 +9122,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9341,7 +9341,7 @@ }, "X": { "type": "float", - "value": 132.0437622070313 + "value": 132.04376220703125 }, "Y": { "type": "float", @@ -9349,7 +9349,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -9568,7 +9568,7 @@ }, "X": { "type": "float", - "value": 131.5283050537109 + "value": 131.52830505371094 }, "Y": { "type": "float", @@ -9576,7 +9576,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -9634,7 +9634,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -9995,7 +9995,7 @@ }, "XPosition": { "type": "float", - "value": 86.63083648681641 + "value": 86.6308364868164 }, "YPosition": { "type": "float", @@ -10055,7 +10055,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.2994322776794434 + "value": 0.29943227767944336 }, "PointY": { "type": "float", @@ -10206,7 +10206,7 @@ }, "YPosition": { "type": "float", - "value": 40.01047515869141 + "value": 40.010475158691406 }, "ZOrientation": { "type": "float", @@ -10272,7 +10272,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 4.137529850006104 + "value": 4.1375298500061035 }, "PointY": { "type": "float", @@ -10408,7 +10408,7 @@ }, "YPosition": { "type": "float", - "value": 140.0087738037109 + "value": 140.00877380371094 }, "ZOrientation": { "type": "float", @@ -10510,7 +10510,7 @@ }, "XPosition": { "type": "float", - "value": 123.6522369384766 + "value": 123.65223693847656 }, "YOrientation": { "type": "float", @@ -10518,11 +10518,11 @@ }, "YPosition": { "type": "float", - "value": 106.0829010009766 + "value": 106.08290100097656 }, "ZPosition": { "type": "float", - "value": 1.799991607666016 + "value": 1.7999916076660156 } }, { @@ -10579,11 +10579,11 @@ }, "YPosition": { "type": "float", - "value": 127.9866638183594 + "value": 127.98666381835938 }, "ZPosition": { "type": "float", - "value": -5.334615707397461e-006 + "value": -0.000005334615707397461 } }, { @@ -10628,7 +10628,7 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", @@ -10640,7 +10640,7 @@ }, "YPosition": { "type": "float", - "value": 125.3530349731445 + "value": 125.35303497314453 }, "ZPosition": { "type": "float", @@ -10689,7 +10689,7 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", @@ -10701,7 +10701,7 @@ }, "YPosition": { "type": "float", - "value": 110.2008438110352 + "value": 110.20084381103516 }, "ZPosition": { "type": "float", @@ -10762,11 +10762,11 @@ }, "YPosition": { "type": "float", - "value": 94.29184722900391 + "value": 94.2918472290039 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10815,7 +10815,7 @@ }, "XPosition": { "type": "float", - "value": 91.77053070068359 + "value": 91.7705307006836 }, "YOrientation": { "type": "float", @@ -10823,11 +10823,11 @@ }, "YPosition": { "type": "float", - "value": 69.46852874755859 + "value": 69.4685287475586 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10892,7 +10892,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", @@ -10908,7 +10908,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10953,7 +10953,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", @@ -10965,11 +10965,11 @@ }, "YPosition": { "type": "float", - "value": 29.52942085266113 + "value": 29.529420852661133 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11018,7 +11018,7 @@ }, "XPosition": { "type": "float", - "value": 116.2278213500977 + "value": 116.22782135009766 }, "YOrientation": { "type": "float", @@ -11030,7 +11030,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11091,7 +11091,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11148,11 +11148,11 @@ }, "YPosition": { "type": "float", - "value": 10.77195549011231 + "value": 10.771955490112305 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11209,11 +11209,11 @@ }, "YPosition": { "type": "float", - "value": 30.73728752136231 + "value": 30.737287521362305 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11290,11 +11290,11 @@ }, "YPosition": { "type": "float", - "value": 10.13610076904297 + "value": 10.136100769042969 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11375,7 +11375,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11452,11 +11452,11 @@ }, "YPosition": { "type": "float", - "value": 109.9792098999023 + "value": 109.97920989990234 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11537,7 +11537,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11614,11 +11614,11 @@ }, "YPosition": { "type": "float", - "value": 86.09157562255859 + "value": 86.0915756225586 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11687,7 +11687,7 @@ }, "XPosition": { "type": "float", - "value": 35.38561630249023 + "value": 35.385616302490234 }, "YOrientation": { "type": "float", @@ -11695,11 +11695,11 @@ }, "YPosition": { "type": "float", - "value": 120.3355865478516 + "value": 120.33558654785156 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11780,7 +11780,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11849,7 +11849,7 @@ }, "XPosition": { "type": "float", - "value": 18.62388610839844 + "value": 18.623886108398438 }, "YOrientation": { "type": "float", @@ -11861,7 +11861,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11910,19 +11910,19 @@ }, "XPosition": { "type": "float", - "value": 34.53918838500977 + "value": 34.539188385009766 }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", - "value": 94.81589508056641 + "value": 94.8158950805664 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11971,11 +11971,11 @@ }, "XPosition": { "type": "float", - "value": 23.21018600463867 + "value": 23.210186004638672 }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -11983,7 +11983,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12036,15 +12036,15 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", - "value": 39.54474258422852 + "value": 39.544742584228516 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12101,7 +12101,7 @@ }, "YPosition": { "type": "float", - "value": 57.55160522460938 + "value": 57.551605224609375 }, "ZPosition": { "type": "float", @@ -12154,7 +12154,7 @@ }, "XPosition": { "type": "float", - "value": 47.55373382568359 + "value": 47.553733825683594 }, "YOrientation": { "type": "float", @@ -12162,7 +12162,7 @@ }, "YPosition": { "type": "float", - "value": 108.4362640380859 + "value": 108.43626403808594 }, "ZPosition": { "type": "float", @@ -12219,15 +12219,15 @@ }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", - "value": 137.9012145996094 + "value": 137.90121459960938 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12296,7 +12296,7 @@ }, "XPosition": { "type": "float", - "value": 128.4096832275391 + "value": 128.40968322753906 }, "YOrientation": { "type": "float", @@ -12304,11 +12304,11 @@ }, "YPosition": { "type": "float", - "value": 62.83837509155273 + "value": 62.838375091552734 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12373,11 +12373,11 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 118.7923278808594 + "value": 118.79232788085938 }, "YOrientation": { "type": "float", @@ -12389,7 +12389,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12442,7 +12442,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -12450,7 +12450,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12503,15 +12503,15 @@ }, "YOrientation": { "type": "float", - "value": 6.715443419125222e-007 + "value": 0.0000006715443419125222 }, "YPosition": { "type": "float", - "value": 135.0340728759766 + "value": 135.03407287597656 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12572,7 +12572,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/easternborder001.git.json b/_module/git/easternborder001.git.json index c715c9c..1da8964 100644 --- a/_module/git/easternborder001.git.json +++ b/_module/git/easternborder001.git.json @@ -770,7 +770,7 @@ }, "XPosition": { "type": "float", - "value": 28.61363792419434 + "value": 28.613637924194336 }, "YOrientation": { "type": "float", @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -806,7 +806,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1238,15 +1238,15 @@ }, "X": { "type": "float", - "value": 25.32038307189941 + "value": 25.320383071899414 }, "Y": { "type": "float", - "value": 24.75976943969727 + "value": 24.759769439697266 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -1465,7 +1465,7 @@ }, "X": { "type": "float", - "value": 25.37510299682617 + "value": 25.375102996826172 }, "Y": { "type": "float", @@ -1692,7 +1692,7 @@ }, "X": { "type": "float", - "value": 27.76844787597656 + "value": 27.768447875976562 }, "Y": { "type": "float", @@ -1700,7 +1700,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1919,15 +1919,15 @@ }, "X": { "type": "float", - "value": 27.81756782531738 + "value": 27.817567825317383 }, "Y": { "type": "float", - "value": 26.42438888549805 + "value": 26.424388885498047 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2150,11 +2150,11 @@ }, "Y": { "type": "float", - "value": 23.41131210327148 + "value": 23.411312103271484 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2373,15 +2373,15 @@ }, "X": { "type": "float", - "value": 22.50528144836426 + "value": 22.505281448364258 }, "Y": { "type": "float", - "value": 26.22172164916992 + "value": 26.221721649169922 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2604,11 +2604,11 @@ }, "Y": { "type": "float", - "value": 27.6611213684082 + "value": 27.661121368408203 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -4585,7 +4585,7 @@ }, "XPosition": { "type": "float", - "value": 29.09440231323242 + "value": 29.094402313232422 }, "YOrientation": { "type": "float", @@ -4593,11 +4593,11 @@ }, "YPosition": { "type": "float", - "value": 14.28614807128906 + "value": 14.286148071289062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -4703,11 +4703,11 @@ }, "YPosition": { "type": "float", - "value": 18.2423210144043 + "value": 18.242321014404297 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4788,7 +4788,7 @@ }, "ZPosition": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -4861,15 +4861,15 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 30.89226341247559 + "value": 30.892263412475586 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4953,19 +4953,19 @@ }, "XPosition": { "type": "float", - "value": 28.39195060729981 + "value": 28.391950607299805 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 22.38154983520508 + "value": 22.381549835205078 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5034,7 +5034,7 @@ }, "XPosition": { "type": "float", - "value": 18.47116279602051 + "value": 18.471162796020508 }, "YOrientation": { "type": "float", @@ -5042,11 +5042,11 @@ }, "YPosition": { "type": "float", - "value": 30.83703994750977 + "value": 30.837039947509766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/easternborderhil.git.json b/_module/git/easternborderhil.git.json index 57e3d16..2c0cc66 100644 --- a/_module/git/easternborderhil.git.json +++ b/_module/git/easternborderhil.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": 1.748454963035329e-007 + "value": 0.00000017484549630353285 }, "CloseLockDC": { "type": "byte", @@ -717,11 +717,11 @@ }, "X": { "type": "float", - "value": 142.3183288574219 + "value": 142.31832885742188 }, "Y": { "type": "float", - "value": 13.07167816162109 + "value": 13.071678161621094 }, "Z": { "type": "float", @@ -944,11 +944,11 @@ }, "X": { "type": "float", - "value": 142.6918029785156 + "value": 142.69180297851562 }, "Y": { "type": "float", - "value": 12.39262390136719 + "value": 12.392623901367188 }, "Z": { "type": "float", @@ -1171,11 +1171,11 @@ }, "X": { "type": "float", - "value": 143.2722473144531 + "value": 143.27224731445312 }, "Y": { "type": "float", - "value": 11.99356842041016 + "value": 11.993568420410156 }, "Z": { "type": "float", @@ -1402,7 +1402,7 @@ }, "Y": { "type": "float", - "value": 11.20177745819092 + "value": 11.201777458190918 }, "Z": { "type": "float", @@ -1633,7 +1633,7 @@ }, "Z": { "type": "float", - "value": 15.01000022888184 + "value": 15.010000228881836 } }, { @@ -1852,7 +1852,7 @@ }, "X": { "type": "float", - "value": 141.6392669677734 + "value": 141.63926696777344 }, "Y": { "type": "float", @@ -2079,7 +2079,7 @@ }, "X": { "type": "float", - "value": 141.3689575195313 + "value": 141.36895751953125 }, "Y": { "type": "float", @@ -2306,7 +2306,7 @@ }, "X": { "type": "float", - "value": 140.5188293457031 + "value": 140.51882934570312 }, "Y": { "type": "float", @@ -2333,7 +2333,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -2533,7 +2533,7 @@ }, "X": { "type": "float", - "value": 138.6514282226563 + "value": 138.65142822265625 }, "Y": { "type": "float", @@ -2541,7 +2541,7 @@ }, "Z": { "type": "float", - "value": 15.00000190734863 + "value": 15.000001907348633 } }, { @@ -2760,15 +2760,15 @@ }, "X": { "type": "float", - "value": 137.8365631103516 + "value": 137.83656311035156 }, "Y": { "type": "float", - "value": 10.89870643615723 + "value": 10.898706436157227 }, "Z": { "type": "float", - "value": 15.00000095367432 + "value": 15.000000953674316 } }, { @@ -2987,11 +2987,11 @@ }, "X": { "type": "float", - "value": 135.4119567871094 + "value": 135.41195678710938 }, "Y": { "type": "float", - "value": 137.0877990722656 + "value": 137.08779907226562 }, "Z": { "type": "float", @@ -3214,11 +3214,11 @@ }, "X": { "type": "float", - "value": 135.2644348144531 + "value": 135.26443481445312 }, "Y": { "type": "float", - "value": 143.6397094726563 + "value": 143.63970947265625 }, "Z": { "type": "float", @@ -3668,11 +3668,11 @@ }, "X": { "type": "float", - "value": 128.9888000488281 + "value": 128.98880004882812 }, "Y": { "type": "float", - "value": 143.4871215820313 + "value": 143.48712158203125 }, "Z": { "type": "float", @@ -4122,11 +4122,11 @@ }, "X": { "type": "float", - "value": 28.33269882202148 + "value": 28.332698822021484 }, "Y": { "type": "float", - "value": 131.4509887695313 + "value": 131.45098876953125 }, "Z": { "type": "float", @@ -4349,15 +4349,15 @@ }, "X": { "type": "float", - "value": 24.80164527893066 + "value": 24.801645278930664 }, "Y": { "type": "float", - "value": 117.5344619750977 + "value": 117.53446197509766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4580,11 +4580,11 @@ }, "Y": { "type": "float", - "value": 134.7743530273438 + "value": 134.77435302734375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4807,11 +4807,11 @@ }, "Y": { "type": "float", - "value": 133.3203735351563 + "value": 133.32037353515625 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5038,7 +5038,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5265,7 +5265,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5492,7 +5492,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5715,11 +5715,11 @@ }, "Y": { "type": "float", - "value": 93.44016265869141 + "value": 93.4401626586914 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5942,7 +5942,7 @@ }, "Y": { "type": "float", - "value": 132.7239685058594 + "value": 132.72396850585938 }, "Z": { "type": "float", @@ -6392,11 +6392,11 @@ }, "X": { "type": "float", - "value": 110.4388961791992 + "value": 110.43889617919922 }, "Y": { "type": "float", - "value": 87.19265747070313 + "value": 87.19265747070312 }, "Z": { "type": "float", @@ -6619,7 +6619,7 @@ }, "X": { "type": "float", - "value": 127.5456466674805 + "value": 127.54564666748047 }, "Y": { "type": "float", @@ -6846,11 +6846,11 @@ }, "X": { "type": "float", - "value": 140.2762145996094 + "value": 140.27621459960938 }, "Y": { "type": "float", - "value": 101.7136077880859 + "value": 101.71360778808594 }, "Z": { "type": "float", @@ -7077,7 +7077,7 @@ }, "Y": { "type": "float", - "value": 129.2317047119141 + "value": 129.23170471191406 }, "Z": { "type": "float", @@ -7300,7 +7300,7 @@ }, "X": { "type": "float", - "value": 141.2707824707031 + "value": 141.27078247070312 }, "Y": { "type": "float", @@ -7527,11 +7527,11 @@ }, "X": { "type": "float", - "value": 108.2508850097656 + "value": 108.25088500976562 }, "Y": { "type": "float", - "value": 127.9180297851563 + "value": 127.91802978515625 }, "Z": { "type": "float", @@ -7754,7 +7754,7 @@ }, "X": { "type": "float", - "value": 114.1743698120117 + "value": 114.17436981201172 }, "Y": { "type": "float", @@ -7981,15 +7981,15 @@ }, "X": { "type": "float", - "value": 144.0233306884766 + "value": 144.02333068847656 }, "Y": { "type": "float", - "value": 35.34238433837891 + "value": 35.342384338378906 }, "Z": { "type": "float", - "value": 9.999997138977051 + "value": 9.99999713897705 } }, { @@ -8208,11 +8208,11 @@ }, "X": { "type": "float", - "value": 123.8705215454102 + "value": 123.87052154541016 }, "Y": { "type": "float", - "value": 49.60143661499023 + "value": 49.601436614990234 }, "Z": { "type": "float", @@ -8439,7 +8439,7 @@ }, "Y": { "type": "float", - "value": 5.303306102752686 + "value": 5.3033061027526855 }, "Z": { "type": "float", @@ -8666,7 +8666,7 @@ }, "Y": { "type": "float", - "value": 22.19998168945313 + "value": 22.199981689453125 }, "Z": { "type": "float", @@ -9116,7 +9116,7 @@ }, "X": { "type": "float", - "value": 107.8532028198242 + "value": 107.85320281982422 }, "Y": { "type": "float", @@ -9124,7 +9124,7 @@ }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -9343,7 +9343,7 @@ }, "X": { "type": "float", - "value": 10.51407432556152 + "value": 10.514074325561523 }, "Y": { "type": "float", @@ -9351,7 +9351,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9570,7 +9570,7 @@ }, "X": { "type": "float", - "value": 30.45417976379395 + "value": 30.454179763793945 }, "Y": { "type": "float", @@ -9578,7 +9578,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9805,7 +9805,7 @@ }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -10024,7 +10024,7 @@ }, "X": { "type": "float", - "value": 11.24319267272949 + "value": 11.243192672729492 }, "Y": { "type": "float", @@ -10090,7 +10090,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -10459,7 +10459,7 @@ }, "ZPosition": { "type": "float", - "value": 1.009999513626099 + "value": 1.0099995136260986 } } ] @@ -10511,7 +10511,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1812052726745606 + "value": 0.18120527267456055 }, "PointY": { "type": "float", @@ -10654,7 +10654,7 @@ }, "XPosition": { "type": "float", - "value": 0.1308836936950684 + "value": 0.13088369369506836 }, "YOrientation": { "type": "float", @@ -10717,7 +10717,7 @@ }, "PointY": { "type": "float", - "value": -2.386917114257813 + "value": -2.3869171142578125 }, "PointZ": { "type": "float", @@ -10728,7 +10728,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.09010696411133 + "value": 10.090106964111328 }, "PointY": { "type": "float", @@ -10736,14 +10736,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.09010696411133 + "value": 10.090106964111328 }, "PointY": { "type": "float", @@ -10751,7 +10751,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -10879,7 +10879,7 @@ }, "YPosition": { "type": "float", - "value": 149.5404663085938 + "value": 149.54046630859375 }, "ZOrientation": { "type": "float", @@ -10981,7 +10981,7 @@ }, "XPosition": { "type": "float", - "value": 134.1109313964844 + "value": 134.11093139648438 }, "YOrientation": { "type": "float", @@ -10989,7 +10989,7 @@ }, "YPosition": { "type": "float", - "value": 139.8802642822266 + "value": 139.88026428222656 }, "ZPosition": { "type": "float", @@ -11042,7 +11042,7 @@ }, "XPosition": { "type": "float", - "value": 141.6974029541016 + "value": 141.69740295410156 }, "YOrientation": { "type": "float", @@ -11050,7 +11050,7 @@ }, "YPosition": { "type": "float", - "value": 116.3840026855469 + "value": 116.38400268554688 }, "ZPosition": { "type": "float", @@ -11103,15 +11103,15 @@ }, "XPosition": { "type": "float", - "value": 125.9303283691406 + "value": 125.93032836914062 }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", - "value": 100.3009338378906 + "value": 100.30093383789062 }, "ZPosition": { "type": "float", @@ -11164,15 +11164,15 @@ }, "XPosition": { "type": "float", - "value": 118.9279403686523 + "value": 118.92794036865234 }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", - "value": 120.5346527099609 + "value": 120.53465270996094 }, "ZPosition": { "type": "float", @@ -11229,11 +11229,11 @@ }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", - "value": 142.5564880371094 + "value": 142.55648803710938 }, "ZPosition": { "type": "float", @@ -11286,7 +11286,7 @@ }, "XPosition": { "type": "float", - "value": 89.91421508789063 + "value": 89.91421508789062 }, "YOrientation": { "type": "float", @@ -11294,11 +11294,11 @@ }, "YPosition": { "type": "float", - "value": 108.5528106689453 + "value": 108.55281066894531 }, "ZPosition": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -11371,7 +11371,7 @@ }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", @@ -11428,7 +11428,7 @@ }, "XPosition": { "type": "float", - "value": 122.1418533325195 + "value": 122.14185333251953 }, "YOrientation": { "type": "float", @@ -11493,7 +11493,7 @@ }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", @@ -11619,7 +11619,7 @@ }, "YPosition": { "type": "float", - "value": 21.69145202636719 + "value": 21.691452026367188 }, "ZPosition": { "type": "float", @@ -11672,7 +11672,7 @@ }, "XPosition": { "type": "float", - "value": 97.07839965820313 + "value": 97.07839965820312 }, "YOrientation": { "type": "float", @@ -11753,7 +11753,7 @@ }, "XPosition": { "type": "float", - "value": 10.34562206268311 + "value": 10.345622062683105 }, "YOrientation": { "type": "float", @@ -11761,11 +11761,11 @@ }, "YPosition": { "type": "float", - "value": 10.58200168609619 + "value": 10.582001686096191 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11814,7 +11814,7 @@ }, "XPosition": { "type": "float", - "value": 29.9954719543457 + "value": 29.995471954345703 }, "YOrientation": { "type": "float", @@ -11822,11 +11822,11 @@ }, "YPosition": { "type": "float", - "value": 10.72173500061035 + "value": 10.721735000610352 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11883,11 +11883,11 @@ }, "YPosition": { "type": "float", - "value": 10.28037071228027 + "value": 10.280370712280273 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11936,7 +11936,7 @@ }, "XPosition": { "type": "float", - "value": 12.22493553161621 + "value": 12.224935531616211 }, "YOrientation": { "type": "float", @@ -11948,7 +11948,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11997,7 +11997,7 @@ }, "XPosition": { "type": "float", - "value": 29.51224327087402 + "value": 29.512243270874023 }, "YOrientation": { "type": "float", @@ -12005,11 +12005,11 @@ }, "YPosition": { "type": "float", - "value": 33.21191787719727 + "value": 33.211917877197266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12058,11 +12058,11 @@ }, "XPosition": { "type": "float", - "value": 30.98269081115723 + "value": 30.982690811157227 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -12070,7 +12070,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12139,11 +12139,11 @@ }, "XPosition": { "type": "float", - "value": 17.99006080627441 + "value": 17.990060806274414 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -12151,7 +12151,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12224,7 +12224,7 @@ }, "YOrientation": { "type": "float", - "value": 0.9495281577110291 + "value": 0.949528157711029 }, "YPosition": { "type": "float", @@ -12232,7 +12232,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12313,7 +12313,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12382,19 +12382,19 @@ }, "XPosition": { "type": "float", - "value": 50.89902496337891 + "value": 50.899024963378906 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 50.00431060791016 + "value": 50.004310607910156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12447,7 +12447,7 @@ }, "YOrientation": { "type": "float", - "value": 0.02454256452620029 + "value": 0.024542564526200294 }, "YPosition": { "type": "float", @@ -12516,7 +12516,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003126144409179688 + "value": 0.0031261444091796875 } }, { @@ -12565,7 +12565,7 @@ }, "XPosition": { "type": "float", - "value": 126.8448638916016 + "value": 126.84486389160156 }, "YOrientation": { "type": "float", @@ -12573,7 +12573,7 @@ }, "YPosition": { "type": "float", - "value": 140.3520660400391 + "value": 140.35206604003906 }, "ZPosition": { "type": "float", @@ -12658,7 +12658,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12711,15 +12711,15 @@ }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 104.301399230957 + "value": 104.30139923095703 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12764,11 +12764,11 @@ }, "XOrientation": { "type": "float", - "value": 0.09801699966192246 + "value": 0.09801699966192245 }, "XPosition": { "type": "float", - "value": 39.80764007568359 + "value": 39.807640075683594 }, "YOrientation": { "type": "float", @@ -12780,7 +12780,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12829,7 +12829,7 @@ }, "XPosition": { "type": "float", - "value": 2.395983219146729 + "value": 2.3959832191467285 }, "YOrientation": { "type": "float", @@ -12837,11 +12837,11 @@ }, "YPosition": { "type": "float", - "value": 125.1339721679688 + "value": 125.13397216796875 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12894,15 +12894,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 94.44321441650391 + "value": 94.4432144165039 }, "ZPosition": { "type": "float", - "value": 2.145767211914063e-006 + "value": 0.0000021457672119140625 } }, { @@ -12955,7 +12955,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -13024,7 +13024,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13069,7 +13069,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -13081,11 +13081,11 @@ }, "YPosition": { "type": "float", - "value": 148.3741149902344 + "value": 148.37411499023438 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13154,7 +13154,7 @@ }, "XPosition": { "type": "float", - "value": 49.29788970947266 + "value": 49.297889709472656 }, "YOrientation": { "type": "float", @@ -13162,11 +13162,11 @@ }, "YPosition": { "type": "float", - "value": 110.5564041137695 + "value": 110.55640411376953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13247,7 +13247,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13324,11 +13324,11 @@ }, "YPosition": { "type": "float", - "value": 131.5253753662109 + "value": 131.52537536621094 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/easternmorathpla.git.json b/_module/git/easternmorathpla.git.json index b64c188..1e4a32a 100644 --- a/_module/git/easternmorathpla.git.json +++ b/_module/git/easternmorathpla.git.json @@ -282,11 +282,11 @@ }, "Y": { "type": "float", - "value": 65.15415191650391 + "value": 65.1541519165039 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -513,7 +513,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -740,7 +740,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -963,11 +963,11 @@ }, "Y": { "type": "float", - "value": 20.70028686523438 + "value": 20.700286865234375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1186,7 +1186,7 @@ }, "X": { "type": "float", - "value": 39.84296035766602 + "value": 39.842960357666016 }, "Y": { "type": "float", @@ -1194,7 +1194,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1417,11 +1417,11 @@ }, "Y": { "type": "float", - "value": 44.53073120117188 + "value": 44.530731201171875 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1644,11 +1644,11 @@ }, "Y": { "type": "float", - "value": 56.82483291625977 + "value": 56.824832916259766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1875,7 +1875,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2325,11 +2325,11 @@ }, "Y": { "type": "float", - "value": 26.10325431823731 + "value": 26.103254318237305 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2556,7 +2556,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2775,15 +2775,15 @@ }, "X": { "type": "float", - "value": 14.80587291717529 + "value": 14.805872917175293 }, "Y": { "type": "float", - "value": 19.51240158081055 + "value": 19.512401580810547 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3002,7 +3002,7 @@ }, "X": { "type": "float", - "value": 19.51362228393555 + "value": 19.513622283935547 }, "Y": { "type": "float", @@ -3010,7 +3010,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3464,7 +3464,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -3687,11 +3687,11 @@ }, "Y": { "type": "float", - "value": 94.41249847412109 + "value": 94.4124984741211 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -3910,7 +3910,7 @@ }, "X": { "type": "float", - "value": 58.84331893920898 + "value": 58.843318939208984 }, "Y": { "type": "float", @@ -3918,7 +3918,7 @@ }, "Z": { "type": "float", - "value": 0.01000010129064322 + "value": 0.010000101290643215 } }, { @@ -4164,7 +4164,7 @@ }, "Bearing": { "type": "float", - "value": 2.380736351013184 + "value": 2.3807363510131836 }, "BodyBag": { "type": "byte", @@ -4364,7 +4364,7 @@ }, "X": { "type": "float", - "value": 57.24422454833984 + "value": 57.244224548339844 }, "Y": { "type": "float", @@ -4372,7 +4372,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4391,7 +4391,7 @@ }, "Bearing": { "type": "float", - "value": -1.963494181632996 + "value": -1.9634941816329956 }, "BodyBag": { "type": "byte", @@ -4599,7 +4599,7 @@ }, "Z": { "type": "float", - "value": 0.002288550138473511 + "value": 0.0022885501384735107 } }, { @@ -4826,7 +4826,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -4884,7 +4884,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -5245,7 +5245,7 @@ }, "XPosition": { "type": "float", - "value": 47.62194442749023 + "value": 47.621944427490234 }, "YPosition": { "type": "float", @@ -5306,7 +5306,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -5380,11 +5380,11 @@ }, "XPosition": { "type": "float", - "value": 87.17966461181641 + "value": 87.1796646118164 }, "YPosition": { "type": "float", - "value": 67.49228668212891 + "value": 67.4922866821289 }, "ZPosition": { "type": "float", @@ -5441,7 +5441,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -5576,7 +5576,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -5654,11 +5654,11 @@ }, "YPosition": { "type": "float", - "value": 83.71799468994141 + "value": 83.7179946899414 }, "ZPosition": { "type": "float", - "value": 0.4999979734420776 + "value": 0.49999797344207764 } }, { @@ -5779,7 +5779,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } } ] @@ -5824,14 +5824,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1324052810668945 + "value": 0.13240528106689453 }, "PointY": { "type": "float", @@ -5861,7 +5861,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 3.64113974571228 + "value": 3.6411397457122803 }, "PointY": { "type": "float", @@ -5974,7 +5974,7 @@ }, "XPosition": { "type": "float", - "value": 0.1631388664245606 + "value": 0.16313886642456055 }, "YOrientation": { "type": "float", @@ -6129,7 +6129,7 @@ }, "XPosition": { "type": "float", - "value": 14.07461071014404 + "value": 14.074610710144043 }, "YOrientation": { "type": "float", @@ -6137,11 +6137,11 @@ }, "YPosition": { "type": "float", - "value": 9.095912933349609 + "value": 9.09591293334961 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6202,7 +6202,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6259,11 +6259,11 @@ }, "YPosition": { "type": "float", - "value": 71.21121215820313 + "value": 71.21121215820312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6312,7 +6312,7 @@ }, "XPosition": { "type": "float", - "value": 17.19386291503906 + "value": 17.193862915039062 }, "YOrientation": { "type": "float", @@ -6324,7 +6324,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6373,7 +6373,7 @@ }, "XPosition": { "type": "float", - "value": 18.65591239929199 + "value": 18.655912399291992 }, "YOrientation": { "type": "float", @@ -6381,11 +6381,11 @@ }, "YPosition": { "type": "float", - "value": 48.54977416992188 + "value": 48.549774169921875 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6434,7 +6434,7 @@ }, "XPosition": { "type": "float", - "value": 50.08999633789063 + "value": 50.089996337890625 }, "YOrientation": { "type": "float", @@ -6446,7 +6446,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6499,7 +6499,7 @@ }, "YOrientation": { "type": "float", - "value": 0.02454220689833164 + "value": 0.024542206898331642 }, "YPosition": { "type": "float", @@ -6507,7 +6507,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6552,11 +6552,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2191010415554047 + "value": -0.21910104155540466 }, "XPosition": { "type": "float", - "value": 90.77451324462891 + "value": 90.7745132446289 }, "YOrientation": { "type": "float", @@ -6564,11 +6564,11 @@ }, "YPosition": { "type": "float", - "value": 12.15578746795654 + "value": 12.155787467956543 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6613,7 +6613,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2191010415554047 + "value": -0.21910104155540466 }, "XPosition": { "type": "float", @@ -6625,11 +6625,11 @@ }, "YPosition": { "type": "float", - "value": 42.31056976318359 + "value": 42.310569763183594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6682,15 +6682,15 @@ }, "YOrientation": { "type": "float", - "value": 0.02454220689833164 + "value": 0.024542206898331642 }, "YPosition": { "type": "float", - "value": 14.88200950622559 + "value": 14.882009506225586 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/easternreddes001.git.json b/_module/git/easternreddes001.git.json index d552f62..4bfabab 100644 --- a/_module/git/easternreddes001.git.json +++ b/_module/git/easternreddes001.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159107208252 + "value": -3.1415910720825195 }, "CloseLockDC": { "type": "byte", @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 12.21000003814697 + "value": 12.210000038146973 }, "Z": { "type": "float", @@ -382,7 +382,7 @@ }, "XPosition": { "type": "float", - "value": 24.66100120544434 + "value": 24.661001205444336 }, "YOrientation": { "type": "float", @@ -394,7 +394,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -463,7 +463,7 @@ }, "XPosition": { "type": "float", - "value": 20.4738941192627 + "value": 20.473894119262695 }, "YOrientation": { "type": "float", @@ -471,11 +471,11 @@ }, "YPosition": { "type": "float", - "value": 24.02810478210449 + "value": 24.028104782104492 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -544,7 +544,7 @@ }, "XPosition": { "type": "float", - "value": 15.840256690979 + "value": 15.840256690979004 }, "YOrientation": { "type": "float", @@ -556,7 +556,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/easternreddesert.git.json b/_module/git/easternreddesert.git.json index d215a96..880cb16 100644 --- a/_module/git/easternreddesert.git.json +++ b/_module/git/easternreddesert.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 133.1799926757813 + "value": 133.17999267578125 }, "Z": { "type": "float", @@ -334,7 +334,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -412,11 +412,11 @@ }, "YPosition": { "type": "float", - "value": 1.519443988800049 + "value": 1.5194439888000488 }, "ZPosition": { "type": "float", - "value": 9.684658050537109 + "value": 9.68465805053711 } }, { @@ -469,7 +469,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -588,7 +588,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.001109123229980469 + "value": -0.0011091232299804688 }, "PointY": { "type": "float", @@ -596,7 +596,7 @@ }, "PointZ": { "type": "float", - "value": 0.02078899554908276 + "value": 0.020788995549082756 } }, { @@ -611,29 +611,29 @@ }, "PointZ": { "type": "float", - "value": 0.02683481387794018 + "value": 0.026834813877940178 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 4.083783626556397 + "value": 4.0837836265563965 }, "PointY": { "type": "float", - "value": -0.3714370727539063 + "value": -0.37143707275390625 }, "PointZ": { "type": "float", - "value": 0.02543172053992748 + "value": 0.025431720539927483 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.2481575012207031 + "value": 0.24815750122070312 }, "PointY": { "type": "float", @@ -656,7 +656,7 @@ }, "PointZ": { "type": "float", - "value": 0.02656540088355541 + "value": 0.026565400883555412 } } ] @@ -769,7 +769,7 @@ }, "YPosition": { "type": "float", - "value": 79.74098968505859 + "value": 79.7409896850586 }, "ZOrientation": { "type": "float", @@ -813,14 +813,14 @@ }, "PointZ": { "type": "float", - "value": 0.02019366435706615 + "value": 0.020193664357066154 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1151642799377441 + "value": 0.11516427993774414 }, "PointY": { "type": "float", @@ -839,22 +839,22 @@ }, "PointY": { "type": "float", - "value": -9.905349731445313 + "value": -9.905349731445312 }, "PointZ": { "type": "float", - "value": 0.02041712217032909 + "value": 0.020417122170329094 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.455368041992188 + "value": 3.4553680419921875 }, "PointY": { "type": "float", - "value": 1.52587890625e-005 + "value": 0.0000152587890625 }, "PointZ": { "type": "float", @@ -1053,11 +1053,11 @@ }, "XPosition": { "type": "float", - "value": 20.20212554931641 + "value": 20.202125549316406 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -1065,7 +1065,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1114,11 +1114,11 @@ }, "XPosition": { "type": "float", - "value": 47.90002822875977 + "value": 47.900028228759766 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -1126,7 +1126,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1175,7 +1175,7 @@ }, "XPosition": { "type": "float", - "value": 15.59953308105469 + "value": 15.599533081054688 }, "YOrientation": { "type": "float", @@ -1187,7 +1187,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1232,11 +1232,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4496139287948608 + "value": 0.44961392879486084 }, "XPosition": { "type": "float", - "value": 25.16374778747559 + "value": 25.163747787475586 }, "YOrientation": { "type": "float", @@ -1248,7 +1248,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1301,7 +1301,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -1309,7 +1309,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1382,15 +1382,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 11.75631809234619 + "value": 11.756318092346191 }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -1435,11 +1435,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2667154669761658 + "value": -0.26671546697616577 }, "XPosition": { "type": "float", - "value": 48.94164657592773 + "value": 48.941646575927734 }, "YOrientation": { "type": "float", @@ -1447,11 +1447,11 @@ }, "YPosition": { "type": "float", - "value": 17.71079063415527 + "value": 17.710790634155273 }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1512,7 +1512,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -1561,19 +1561,19 @@ }, "XPosition": { "type": "float", - "value": 30.93265914916992 + "value": 30.932659149169922 }, "YOrientation": { "type": "float", - "value": 0.2429817318916321 + "value": 0.24298173189163208 }, "YPosition": { "type": "float", - "value": 32.23435211181641 + "value": 32.234352111816406 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -1622,11 +1622,11 @@ }, "XPosition": { "type": "float", - "value": 37.37438583374023 + "value": 37.374385833740234 }, "YOrientation": { "type": "float", - "value": 0.4713968634605408 + "value": 0.47139686346054077 }, "YPosition": { "type": "float", @@ -1634,7 +1634,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1695,7 +1695,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -1764,7 +1764,7 @@ }, "XPosition": { "type": "float", - "value": 144.5456390380859 + "value": 144.54563903808594 }, "YOrientation": { "type": "float", @@ -1772,11 +1772,11 @@ }, "YPosition": { "type": "float", - "value": 3.269872665405273 + "value": 3.2698726654052734 }, "ZPosition": { "type": "float", - "value": 0.2463695555925369 + "value": 0.24636955559253693 } }, { @@ -1825,7 +1825,7 @@ }, "XPosition": { "type": "float", - "value": 117.7632293701172 + "value": 117.76322937011719 }, "YOrientation": { "type": "float", @@ -1833,7 +1833,7 @@ }, "YPosition": { "type": "float", - "value": 16.81416702270508 + "value": 16.814167022705078 }, "ZPosition": { "type": "float", @@ -1898,7 +1898,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003877639770507813 + "value": 0.0038776397705078125 } }, { @@ -1955,11 +1955,11 @@ }, "YPosition": { "type": "float", - "value": 32.01065063476563 + "value": 32.010650634765625 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2008,7 +2008,7 @@ }, "XPosition": { "type": "float", - "value": 118.5302429199219 + "value": 118.53024291992188 }, "YOrientation": { "type": "float", @@ -2020,7 +2020,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2069,7 +2069,7 @@ }, "XPosition": { "type": "float", - "value": 142.7819671630859 + "value": 142.78196716308594 }, "YOrientation": { "type": "float", @@ -2081,7 +2081,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2146,11 +2146,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2667154669761658 + "value": -0.26671546697616577 }, "XPosition": { "type": "float", - "value": 138.2044830322266 + "value": 138.20448303222656 }, "YOrientation": { "type": "float", @@ -2158,11 +2158,11 @@ }, "YPosition": { "type": "float", - "value": 135.7873687744141 + "value": 135.78736877441406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2207,11 +2207,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2667154669761658 + "value": -0.26671546697616577 }, "XPosition": { "type": "float", - "value": 144.2401275634766 + "value": 144.24012756347656 }, "YOrientation": { "type": "float", @@ -2219,11 +2219,11 @@ }, "YPosition": { "type": "float", - "value": 108.059700012207 + "value": 108.05970001220703 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2268,7 +2268,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2667154669761658 + "value": -0.26671546697616577 }, "XPosition": { "type": "float", @@ -2280,11 +2280,11 @@ }, "YPosition": { "type": "float", - "value": 108.9196090698242 + "value": 108.91960906982422 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2333,7 +2333,7 @@ }, "XPosition": { "type": "float", - "value": 105.5440521240234 + "value": 105.54405212402344 }, "YOrientation": { "type": "float", @@ -2341,11 +2341,11 @@ }, "YPosition": { "type": "float", - "value": 135.0036315917969 + "value": 135.00363159179688 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2390,11 +2390,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2667154669761658 + "value": -0.26671546697616577 }, "XPosition": { "type": "float", - "value": 126.4685974121094 + "value": 126.46859741210938 }, "YOrientation": { "type": "float", @@ -2406,7 +2406,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2463,11 +2463,11 @@ }, "YPosition": { "type": "float", - "value": 117.5187454223633 + "value": 117.51874542236328 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2532,7 +2532,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2667154669761658 + "value": -0.26671546697616577 }, "XPosition": { "type": "float", @@ -2544,11 +2544,11 @@ }, "YPosition": { "type": "float", - "value": 147.9023284912109 + "value": 147.90232849121094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2621,15 +2621,15 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 99.74721527099609 + "value": 99.7472152709961 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2702,7 +2702,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -2710,7 +2710,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2779,7 +2779,7 @@ }, "XPosition": { "type": "float", - "value": 98.68679809570313 + "value": 98.68679809570312 }, "YOrientation": { "type": "float", @@ -2791,7 +2791,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2840,7 +2840,7 @@ }, "XPosition": { "type": "float", - "value": 15.8109884262085 + "value": 15.810988426208496 }, "YOrientation": { "type": "float", @@ -2848,7 +2848,7 @@ }, "YPosition": { "type": "float", - "value": 124.7693786621094 + "value": 124.76937866210938 }, "ZPosition": { "type": "float", @@ -2901,7 +2901,7 @@ }, "XPosition": { "type": "float", - "value": 57.78081893920898 + "value": 57.780818939208984 }, "YOrientation": { "type": "float", @@ -2913,7 +2913,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -2966,7 +2966,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3019,11 +3019,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", - "value": 147.2555999755859 + "value": 147.25559997558594 }, "YOrientation": { "type": "float", @@ -3031,11 +3031,11 @@ }, "YPosition": { "type": "float", - "value": 1.206604957580566 + "value": 1.2066049575805664 }, "ZPosition": { "type": "float", - "value": -8.393079042434692e-006 + "value": -0.000008393079042434692 } }, { @@ -3080,11 +3080,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0245412103831768 + "value": -0.024541210383176804 }, "XPosition": { "type": "float", - "value": 144.9173889160156 + "value": 144.91738891601562 }, "YOrientation": { "type": "float", @@ -3092,11 +3092,11 @@ }, "YPosition": { "type": "float", - "value": 135.8797302246094 + "value": 135.87973022460938 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3157,7 +3157,7 @@ }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -3206,7 +3206,7 @@ }, "XPosition": { "type": "float", - "value": 11.38631248474121 + "value": 11.386312484741211 }, "YOrientation": { "type": "float", @@ -3218,7 +3218,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3263,7 +3263,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2902879118919373 + "value": -0.29028791189193726 }, "XPosition": { "type": "float", @@ -3271,15 +3271,15 @@ }, "YOrientation": { "type": "float", - "value": -0.9569393396377564 + "value": -0.9569393396377563 }, "YPosition": { "type": "float", - "value": 102.7606811523438 + "value": 102.76068115234375 }, "ZPosition": { "type": "float", - "value": 0.0007447050884366036 + "value": 0.0007447050884366035 } }, { @@ -3340,7 +3340,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3393,7 +3393,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -3401,7 +3401,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/evaricliffs.git.json b/_module/git/evaricliffs.git.json index e0e217e..6e5b456 100644 --- a/_module/git/evaricliffs.git.json +++ b/_module/git/evaricliffs.git.json @@ -286,7 +286,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -305,7 +305,7 @@ }, "Bearing": { "type": "float", - "value": -1.546252131462097 + "value": -1.5462521314620972 }, "BodyBag": { "type": "byte", @@ -571,7 +571,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -940,7 +940,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000000476837158 + "value": 1.0000004768371582 } } ] @@ -1000,7 +1000,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -1015,18 +1015,18 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointY": { "type": "float", - "value": 2.810359954833984 + "value": 2.8103599548339844 }, "PointZ": { "type": "float", @@ -1143,7 +1143,7 @@ }, "YPosition": { "type": "float", - "value": 0.1220312118530273 + "value": 0.12203121185302734 }, "ZOrientation": { "type": "float", @@ -1353,7 +1353,7 @@ }, "XPosition": { "type": "float", - "value": 79.09963226318359 + "value": 79.0996322631836 }, "YOrientation": { "type": "float", @@ -1361,11 +1361,11 @@ }, "YPosition": { "type": "float", - "value": 1.0312659740448 + "value": 1.0312659740447998 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -1483,7 +1483,7 @@ }, "YOrientation": { "type": "float", - "value": 0.02454173192381859 + "value": 0.024541731923818588 }, "YPosition": { "type": "float", @@ -1491,7 +1491,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1151790618896484 + "value": 0.11517906188964844 } }, { @@ -1617,7 +1617,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01743698120117188 + "value": 0.017436981201171875 } }, { @@ -1743,7 +1743,7 @@ }, "ZPosition": { "type": "float", - "value": -7.867813110351563e-006 + "value": -0.000007867813110351562 } }, { @@ -1857,7 +1857,7 @@ }, "XPosition": { "type": "float", - "value": 26.39265632629395 + "value": 26.392656326293945 }, "YOrientation": { "type": "float", @@ -1865,11 +1865,11 @@ }, "YPosition": { "type": "float", - "value": 50.64734268188477 + "value": 50.647342681884766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1983,11 +1983,11 @@ }, "XPosition": { "type": "float", - "value": 39.25146865844727 + "value": 39.251468658447266 }, "YOrientation": { "type": "float", - "value": 0.02454173192381859 + "value": 0.024541731923818588 }, "YPosition": { "type": "float", @@ -2105,7 +2105,7 @@ }, "XOrientation": { "type": "float", - "value": -0.471397876739502 + "value": -0.47139787673950195 }, "XPosition": { "type": "float", @@ -2117,11 +2117,11 @@ }, "YPosition": { "type": "float", - "value": 31.77637100219727 + "value": 31.776371002197266 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/evariforest.git.json b/_module/git/evariforest.git.json index da1dc37..055f143 100644 --- a/_module/git/evariforest.git.json +++ b/_module/git/evariforest.git.json @@ -258,7 +258,7 @@ }, "X": { "type": "float", - "value": 134.4299926757813 + "value": 134.42999267578125 }, "Y": { "type": "float", @@ -336,7 +336,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -750,14 +750,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.2197494506835938 + "value": 0.21974945068359375 }, "PointY": { "type": "float", @@ -765,7 +765,7 @@ }, "PointZ": { "type": "float", - "value": 1.084536910057068 + "value": 1.0845369100570679 } }, { @@ -776,7 +776,7 @@ }, "PointY": { "type": "float", - "value": -3.813919067382813 + "value": -3.8139190673828125 }, "PointZ": { "type": "float", @@ -909,7 +909,7 @@ }, "YPosition": { "type": "float", - "value": 149.3938598632813 + "value": 149.39385986328125 }, "ZOrientation": { "type": "float", @@ -953,14 +953,14 @@ }, "PointZ": { "type": "float", - "value": 0.02704915218055248 + "value": 0.027049152180552483 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -4.436721801757813 + "value": -4.4367218017578125 }, "PointY": { "type": "float", @@ -968,7 +968,7 @@ }, "PointZ": { "type": "float", - "value": 0.02687039785087109 + "value": 0.026870397850871086 } }, { @@ -983,7 +983,7 @@ }, "PointZ": { "type": "float", - "value": 0.02430555038154125 + "value": 0.024305550381541252 } }, { @@ -998,7 +998,7 @@ }, "PointZ": { "type": "float", - "value": 0.02897146157920361 + "value": 0.028971461579203606 } } ] @@ -1155,7 +1155,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -1166,33 +1166,33 @@ }, "PointY": { "type": "float", - "value": -2.870071411132813 + "value": -2.8700714111328125 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.24085235595703 + "value": 10.240852355957031 }, "PointY": { "type": "float", - "value": -2.870071411132813 + "value": -2.8700714111328125 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.24085235595703 + "value": 10.240852355957031 }, "PointY": { "type": "float", @@ -1200,7 +1200,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -1215,7 +1215,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -1372,7 +1372,7 @@ }, "PointZ": { "type": "float", - "value": 0.02291026525199413 + "value": 0.022910265251994133 } }, { @@ -1402,7 +1402,7 @@ }, "PointZ": { "type": "float", - "value": 0.0250029843300581 + "value": 0.025002984330058098 } }, { @@ -1570,7 +1570,7 @@ }, "PointY": { "type": "float", - "value": -1.807868957519531 + "value": -1.8078689575195312 }, "PointZ": { "type": "float", @@ -1585,7 +1585,7 @@ }, "PointY": { "type": "float", - "value": -1.807258605957031 + "value": -1.8072586059570312 }, "PointZ": { "type": "float", @@ -1600,11 +1600,11 @@ }, "PointY": { "type": "float", - "value": -0.5318679809570313 + "value": -0.5318679809570312 }, "PointZ": { "type": "float", - "value": 0.02380755357444286 + "value": 0.023807553574442863 } }, { @@ -1619,7 +1619,7 @@ }, "PointZ": { "type": "float", - "value": 0.0254835169762373 + "value": 0.025483516976237297 } } ] @@ -1725,7 +1725,7 @@ }, "XPosition": { "type": "float", - "value": 110.8879318237305 + "value": 110.88793182373047 }, "YOrientation": { "type": "float", @@ -1777,7 +1777,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -1788,7 +1788,7 @@ }, "PointY": { "type": "float", - "value": -3.548333883285523 + "value": -3.5483338832855225 }, "PointZ": { "type": "float", @@ -1803,7 +1803,7 @@ }, "PointY": { "type": "float", - "value": -3.403502225875855 + "value": -3.4035022258758545 }, "PointZ": { "type": "float", @@ -1818,11 +1818,11 @@ }, "PointY": { "type": "float", - "value": -7.152557373046875e-007 + "value": -0.0000007152557373046875 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } } ] @@ -1936,7 +1936,7 @@ }, "YPosition": { "type": "float", - "value": 76.67311859130859 + "value": 76.6731185913086 }, "ZOrientation": { "type": "float", @@ -2026,7 +2026,7 @@ }, "YPosition": { "type": "float", - "value": 80.91604614257813 + "value": 80.91604614257812 }, "ZPosition": { "type": "float", @@ -2171,7 +2171,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2240,11 +2240,11 @@ }, "XPosition": { "type": "float", - "value": 16.40159416198731 + "value": 16.401594161987305 }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", @@ -2301,11 +2301,11 @@ }, "XPosition": { "type": "float", - "value": 25.19586563110352 + "value": 25.195865631103516 }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", @@ -2366,7 +2366,7 @@ }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", @@ -2374,7 +2374,7 @@ }, "ZPosition": { "type": "float", - "value": 0.001601696014404297 + "value": 0.0016016960144042969 } }, { @@ -2427,7 +2427,7 @@ }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", @@ -2484,11 +2484,11 @@ }, "XPosition": { "type": "float", - "value": 64.55149078369141 + "value": 64.5514907836914 }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", @@ -2496,7 +2496,7 @@ }, "ZPosition": { "type": "float", - "value": 0.001601696014404297 + "value": 0.0016016960144042969 } }, { @@ -2553,11 +2553,11 @@ }, "YPosition": { "type": "float", - "value": 2.183356046676636 + "value": 2.1833560466766357 }, "ZPosition": { "type": "float", - "value": 0.04578301310539246 + "value": 0.045783013105392456 } }, { @@ -2622,11 +2622,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", - "value": 141.4983215332031 + "value": 141.49832153320312 }, "YOrientation": { "type": "float", @@ -2638,7 +2638,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1510366201400757 + "value": 0.15103662014007568 } }, { @@ -2683,7 +2683,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", @@ -2695,7 +2695,7 @@ }, "YPosition": { "type": "float", - "value": 2.836795806884766 + "value": 2.8367958068847656 }, "ZPosition": { "type": "float", @@ -2744,11 +2744,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", - "value": 127.5613632202148 + "value": 127.56136322021484 }, "YOrientation": { "type": "float", @@ -2756,11 +2756,11 @@ }, "YPosition": { "type": "float", - "value": 25.60281181335449 + "value": 25.602811813354492 }, "ZPosition": { "type": "float", - "value": 0.1076240539550781 + "value": 0.10762405395507812 } }, { @@ -2805,7 +2805,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", @@ -2817,7 +2817,7 @@ }, "YPosition": { "type": "float", - "value": 38.28540420532227 + "value": 38.285404205322266 }, "ZPosition": { "type": "float", @@ -2866,7 +2866,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", @@ -2878,11 +2878,11 @@ }, "YPosition": { "type": "float", - "value": 21.98614120483398 + "value": 21.986141204833984 }, "ZPosition": { "type": "float", - "value": 0.1677753925323486 + "value": 0.16777539253234863 } }, { @@ -2927,11 +2927,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", - "value": 111.0121383666992 + "value": 111.01213836669922 }, "YOrientation": { "type": "float", @@ -3008,7 +3008,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04906757920980454 + "value": 0.049067579209804535 }, "XPosition": { "type": "float", @@ -3024,7 +3024,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -3073,11 +3073,11 @@ }, "XPosition": { "type": "float", - "value": 20.87734794616699 + "value": 20.877347946166992 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3085,7 +3085,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3134,11 +3134,11 @@ }, "XPosition": { "type": "float", - "value": 36.58233261108398 + "value": 36.582332611083984 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3146,7 +3146,7 @@ }, "ZPosition": { "type": "float", - "value": -8.58306884765625e-006 + "value": -0.00000858306884765625 } }, { @@ -3195,15 +3195,15 @@ }, "XPosition": { "type": "float", - "value": 58.43441772460938 + "value": 58.434417724609375 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 81.70046234130859 + "value": 81.7004623413086 }, "ZPosition": { "type": "float", @@ -3260,15 +3260,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 110.5768203735352 + "value": 110.57682037353516 }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3321,7 +3321,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3329,7 +3329,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -3382,7 +3382,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3390,7 +3390,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3463,15 +3463,15 @@ }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", - "value": 137.1656799316406 + "value": 137.16567993164062 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -3524,7 +3524,7 @@ }, "YOrientation": { "type": "float", - "value": -0.1950868219137192 + "value": -0.19508682191371918 }, "YPosition": { "type": "float", @@ -3532,7 +3532,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01346784830093384 + "value": 0.013467848300933838 } }, { @@ -3581,7 +3581,7 @@ }, "XPosition": { "type": "float", - "value": 125.3622436523438 + "value": 125.36224365234375 }, "YOrientation": { "type": "float", @@ -3589,7 +3589,7 @@ }, "YPosition": { "type": "float", - "value": 123.4635772705078 + "value": 123.46357727050781 }, "ZPosition": { "type": "float", @@ -3638,11 +3638,11 @@ }, "XOrientation": { "type": "float", - "value": 0.170968621969223 + "value": 0.17096862196922302 }, "XPosition": { "type": "float", - "value": 111.683967590332 + "value": 111.68396759033203 }, "YOrientation": { "type": "float", @@ -3650,11 +3650,11 @@ }, "YPosition": { "type": "float", - "value": 117.7738876342773 + "value": 117.77388763427734 }, "ZPosition": { "type": "float", - "value": 0.001538162119686604 + "value": 0.0015381621196866035 } }, { @@ -3699,11 +3699,11 @@ }, "XOrientation": { "type": "float", - "value": 0.170968621969223 + "value": 0.17096862196922302 }, "XPosition": { "type": "float", - "value": 117.7634353637695 + "value": 117.76343536376953 }, "YOrientation": { "type": "float", @@ -3715,7 +3715,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003941421397030354 + "value": 0.0039414213970303535 } }, { @@ -3760,11 +3760,11 @@ }, "XOrientation": { "type": "float", - "value": 0.170968621969223 + "value": 0.17096862196922302 }, "XPosition": { "type": "float", - "value": 116.4126281738281 + "value": 116.41262817382812 }, "YOrientation": { "type": "float", @@ -3776,7 +3776,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3825,7 +3825,7 @@ }, "XPosition": { "type": "float", - "value": 115.3988418579102 + "value": 115.39884185791016 }, "YOrientation": { "type": "float", @@ -3837,7 +3837,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3914,11 +3914,11 @@ }, "YPosition": { "type": "float", - "value": 145.2351379394531 + "value": 145.23513793945312 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3987,7 +3987,7 @@ }, "XPosition": { "type": "float", - "value": 147.2505798339844 + "value": 147.25057983398438 }, "YOrientation": { "type": "float", @@ -3995,11 +3995,11 @@ }, "YPosition": { "type": "float", - "value": 140.0001373291016 + "value": 140.00013732910156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4068,7 +4068,7 @@ }, "XPosition": { "type": "float", - "value": 135.9354553222656 + "value": 135.93545532226562 }, "YOrientation": { "type": "float", @@ -4080,7 +4080,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4149,7 +4149,7 @@ }, "XPosition": { "type": "float", - "value": 40.42684936523438 + "value": 40.426849365234375 }, "YOrientation": { "type": "float", @@ -4157,11 +4157,11 @@ }, "YPosition": { "type": "float", - "value": 147.3799133300781 + "value": 147.37991333007812 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -4210,11 +4210,11 @@ }, "XPosition": { "type": "float", - "value": 147.4801635742188 + "value": 147.48016357421875 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -4222,7 +4222,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4267,11 +4267,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", - "value": 115.0551147460938 + "value": 115.05511474609375 }, "YOrientation": { "type": "float", @@ -4279,11 +4279,11 @@ }, "YPosition": { "type": "float", - "value": 148.3497009277344 + "value": 148.34970092773438 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4352,19 +4352,19 @@ }, "XPosition": { "type": "float", - "value": 19.82967376708984 + "value": 19.829673767089844 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 19.52446365356445 + "value": 19.524463653564453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4429,11 +4429,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454693056643009 + "value": 0.024546930566430092 }, "XPosition": { "type": "float", - "value": 140.6412963867188 + "value": 140.64129638671875 }, "YOrientation": { "type": "float", @@ -4514,7 +4514,7 @@ }, "XPosition": { "type": "float", - "value": 10.10721778869629 + "value": 10.107217788696289 }, "YOrientation": { "type": "float", @@ -4526,7 +4526,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -4587,7 +4587,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000031270086765 + "value": 0.010000312700867653 } }, { @@ -4648,7 +4648,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4697,19 +4697,19 @@ }, "XPosition": { "type": "float", - "value": 2.264938354492188 + "value": 2.2649383544921875 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 124.718132019043 + "value": 124.71813201904297 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4752,7 +4752,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04907225072383881 + "value": 0.049072250723838806 }, "XPosition": { "type": "float", @@ -4764,11 +4764,11 @@ }, "YPosition": { "type": "float", - "value": 147.4230041503906 + "value": 147.42300415039062 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -4829,7 +4829,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4886,7 +4886,7 @@ }, "YPosition": { "type": "float", - "value": 118.5912628173828 + "value": 118.59126281738281 }, "ZPosition": { "type": "float", @@ -5000,7 +5000,7 @@ }, "XPosition": { "type": "float", - "value": 131.0672760009766 + "value": 131.06727600097656 }, "YOrientation": { "type": "float", @@ -5061,7 +5061,7 @@ }, "XPosition": { "type": "float", - "value": 121.6726226806641 + "value": 121.67262268066406 }, "YOrientation": { "type": "float", @@ -5073,7 +5073,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5122,7 +5122,7 @@ }, "XPosition": { "type": "float", - "value": 106.2909774780273 + "value": 106.29097747802734 }, "YOrientation": { "type": "float", @@ -5134,7 +5134,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5191,11 +5191,11 @@ }, "YPosition": { "type": "float", - "value": 111.9011917114258 + "value": 111.90119171142578 }, "ZPosition": { "type": "float", - "value": 0.003746956586837769 + "value": 0.0037469565868377686 } }, { @@ -5240,11 +5240,11 @@ }, "XOrientation": { "type": "float", - "value": -0.1950905472040176 + "value": -0.19509054720401764 }, "XPosition": { "type": "float", - "value": 117.9684295654297 + "value": 117.96842956542969 }, "YOrientation": { "type": "float", @@ -5252,11 +5252,11 @@ }, "YPosition": { "type": "float", - "value": 131.0097961425781 + "value": 131.00979614257812 }, "ZPosition": { "type": "float", - "value": 0.001217727549374104 + "value": 0.0012177275493741035 } } ] diff --git a/_module/git/evariforestcott.git.json b/_module/git/evariforestcott.git.json index bf58a3b..eb0eecb 100644 --- a/_module/git/evariforestcott.git.json +++ b/_module/git/evariforestcott.git.json @@ -2283,7 +2283,7 @@ }, "XPosition": { "type": "float", - "value": 25.10201454162598 + "value": 25.102014541625977 }, "YOrientation": { "type": "float", @@ -2295,7 +2295,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4535,7 +4535,7 @@ }, "XPosition": { "type": "float", - "value": 27.93743705749512 + "value": 27.937437057495117 }, "YOrientation": { "type": "float", @@ -4547,7 +4547,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6787,7 +6787,7 @@ }, "XPosition": { "type": "float", - "value": 25.00871849060059 + "value": 25.008718490600586 }, "YOrientation": { "type": "float", @@ -6795,11 +6795,11 @@ }, "YPosition": { "type": "float", - "value": 12.7380313873291 + "value": 12.738031387329102 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7660,7 +7660,7 @@ }, "XPosition": { "type": "float", - "value": 14.22195434570313 + "value": 14.221954345703125 }, "YOrientation": { "type": "float", @@ -7668,11 +7668,11 @@ }, "YPosition": { "type": "float", - "value": 20.41265487670898 + "value": 20.412654876708984 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8399,7 +8399,7 @@ }, "XPosition": { "type": "float", - "value": 20.64974212646484 + "value": 20.649742126464844 }, "YOrientation": { "type": "float", @@ -8631,7 +8631,7 @@ }, "Y": { "type": "float", - "value": 3.840000152587891 + "value": 3.8400001525878906 }, "Z": { "type": "float", @@ -8871,11 +8871,11 @@ }, "Y": { "type": "float", - "value": 26.10231399536133 + "value": 26.102313995361328 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -8894,7 +8894,7 @@ }, "Bearing": { "type": "float", - "value": -2.331647157669067 + "value": -2.3316471576690674 }, "BodyBag": { "type": "byte", @@ -9098,11 +9098,11 @@ }, "Y": { "type": "float", - "value": 26.10677337646484 + "value": 26.106773376464844 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9325,11 +9325,11 @@ }, "Y": { "type": "float", - "value": 27.94392776489258 + "value": 27.943927764892578 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9348,7 +9348,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9548,15 +9548,15 @@ }, "X": { "type": "float", - "value": 24.94983100891113 + "value": 24.949831008911133 }, "Y": { "type": "float", - "value": 14.96132659912109 + "value": 14.961326599121094 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9575,7 +9575,7 @@ }, "Bearing": { "type": "float", - "value": 2.429820775985718 + "value": 2.4298207759857178 }, "BodyBag": { "type": "byte", @@ -9779,11 +9779,11 @@ }, "Y": { "type": "float", - "value": 11.56149291992188 + "value": 11.561492919921875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10002,15 +10002,15 @@ }, "X": { "type": "float", - "value": 35.70491790771484 + "value": 35.704917907714844 }, "Y": { "type": "float", - "value": 19.2924919128418 + "value": 19.292491912841797 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10229,15 +10229,15 @@ }, "X": { "type": "float", - "value": 26.26057815551758 + "value": 26.260578155517578 }, "Y": { "type": "float", - "value": 17.00842094421387 + "value": 17.008420944213867 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10456,15 +10456,15 @@ }, "X": { "type": "float", - "value": 24.01066589355469 + "value": 24.010665893554688 }, "Y": { "type": "float", - "value": 17.04538154602051 + "value": 17.045381546020508 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10483,7 +10483,7 @@ }, "Bearing": { "type": "float", - "value": -3.141579866409302 + "value": -3.1415798664093018 }, "BodyBag": { "type": "byte", @@ -10683,15 +10683,15 @@ }, "X": { "type": "float", - "value": 24.0218677520752 + "value": 24.021867752075195 }, "Y": { "type": "float", - "value": 12.77200126647949 + "value": 12.772001266479492 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10710,7 +10710,7 @@ }, "Bearing": { "type": "float", - "value": -3.141579866409302 + "value": -3.1415798664093018 }, "BodyBag": { "type": "byte", @@ -10914,11 +10914,11 @@ }, "Y": { "type": "float", - "value": 12.79978847503662 + "value": 12.799788475036621 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -13300,7 +13300,7 @@ }, "XPosition": { "type": "float", - "value": 20.9189338684082 + "value": 20.918933868408203 }, "YOrientation": { "type": "float", @@ -13312,7 +13312,7 @@ }, "ZPosition": { "type": "float", - "value": -0.0001394748687744141 + "value": -0.00013947486877441406 } } ] @@ -13420,7 +13420,7 @@ }, "XPosition": { "type": "float", - "value": 20.75364303588867 + "value": 20.753643035888672 }, "YOrientation": { "type": "float", @@ -13432,7 +13432,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13505,7 +13505,7 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -13513,7 +13513,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13582,7 +13582,7 @@ }, "XPosition": { "type": "float", - "value": 32.96652221679688 + "value": 32.966522216796875 }, "YOrientation": { "type": "float", @@ -13594,7 +13594,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13659,11 +13659,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04907510802149773 + "value": 0.049075108021497726 }, "XPosition": { "type": "float", - "value": 29.82791900634766 + "value": 29.827919006347656 }, "YOrientation": { "type": "float", @@ -13675,7 +13675,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13759,19 +13759,19 @@ }, "XPosition": { "type": "float", - "value": 21.38860702514648 + "value": 21.388607025146484 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 14.96491622924805 + "value": 14.964916229248047 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13820,7 +13820,7 @@ }, "XPosition": { "type": "float", - "value": 13.43849563598633 + "value": 13.438495635986328 }, "YOrientation": { "type": "float", @@ -13828,11 +13828,11 @@ }, "YPosition": { "type": "float", - "value": 18.99328422546387 + "value": 18.993284225463867 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13909,11 +13909,11 @@ }, "YPosition": { "type": "float", - "value": 15.50893020629883 + "value": 15.508930206298828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13990,11 +13990,11 @@ }, "YPosition": { "type": "float", - "value": 14.61561012268066 + "value": 14.615610122680664 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/evariforestshack.git.json b/_module/git/evariforestshack.git.json index 165eefb..17e2259 100644 --- a/_module/git/evariforestshack.git.json +++ b/_module/git/evariforestshack.git.json @@ -1140,7 +1140,7 @@ }, "XPosition": { "type": "float", - "value": 25.59759140014648 + "value": 25.597591400146484 }, "YOrientation": { "type": "float", @@ -1148,11 +1148,11 @@ }, "YPosition": { "type": "float", - "value": 16.03178024291992 + "value": 16.031780242919922 }, "ZPosition": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -1883,7 +1883,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4052420258522034 + "value": 0.40524202585220337 }, "YPosition": { "type": "float", @@ -1891,7 +1891,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1915,7 +1915,7 @@ }, "Bearing": { "type": "float", - "value": -3.141582012176514 + "value": -3.1415820121765137 }, "CloseLockDC": { "type": "byte", @@ -2109,7 +2109,7 @@ }, "Y": { "type": "float", - "value": 3.840000152587891 + "value": 3.8400001525878906 }, "Z": { "type": "float", @@ -2353,7 +2353,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2572,15 +2572,15 @@ }, "X": { "type": "float", - "value": 21.08112716674805 + "value": 21.081127166748047 }, "Y": { "type": "float", - "value": 28.27585411071777 + "value": 28.275854110717773 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2799,11 +2799,11 @@ }, "X": { "type": "float", - "value": 14.84180068969727 + "value": 14.841800689697266 }, "Y": { "type": "float", - "value": 13.61819934844971 + "value": 13.618199348449707 }, "Z": { "type": "float", @@ -3026,15 +3026,15 @@ }, "X": { "type": "float", - "value": 14.63275337219238 + "value": 14.632753372192383 }, "Y": { "type": "float", - "value": 12.76245307922363 + "value": 12.762453079223633 }, "Z": { "type": "float", - "value": 0.03999814391136169 + "value": 0.039998143911361694 } }, { @@ -3053,7 +3053,7 @@ }, "Bearing": { "type": "float", - "value": 3.141582012176514 + "value": 3.1415820121765137 }, "BodyBag": { "type": "byte", @@ -3261,7 +3261,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3280,7 +3280,7 @@ }, "Bearing": { "type": "float", - "value": -1.546251058578491 + "value": -1.5462510585784912 }, "BodyBag": { "type": "byte", @@ -3480,15 +3480,15 @@ }, "X": { "type": "float", - "value": 14.67573928833008 + "value": 14.675739288330078 }, "Y": { "type": "float", - "value": 19.91673088073731 + "value": 19.916730880737305 }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } } ] @@ -3616,7 +3616,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3677,7 +3677,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3742,11 +3742,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454621531069279 + "value": -0.024546215310692787 }, "XPosition": { "type": "float", - "value": 19.37417602539063 + "value": 19.374176025390625 }, "YOrientation": { "type": "float", @@ -3754,11 +3754,11 @@ }, "YPosition": { "type": "float", - "value": 12.8098258972168 + "value": 12.809825897216797 }, "ZPosition": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -3835,11 +3835,11 @@ }, "YPosition": { "type": "float", - "value": 15.45485496520996 + "value": 15.454854965209961 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3919,7 +3919,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454621531069279 + "value": -0.024546215310692787 }, "XPosition": { "type": "float", @@ -3931,11 +3931,11 @@ }, "YPosition": { "type": "float", - "value": 22.36606025695801 + "value": 22.366060256958008 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/evaritower.git.json b/_module/git/evaritower.git.json index c7d2fd9..e3aadab 100644 --- a/_module/git/evaritower.git.json +++ b/_module/git/evaritower.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795893669128 + "value": 1.5707958936691284 }, "CloseLockDC": { "type": "byte", @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159107208252 + "value": -3.1415910720825195 }, "CloseLockDC": { "type": "byte", @@ -1829,7 +1829,7 @@ }, "Bearing": { "type": "float", - "value": -0.2699806094169617 + "value": -0.26998060941696167 }, "BodyBag": { "type": "byte", @@ -2033,11 +2033,11 @@ }, "Y": { "type": "float", - "value": 33.88556289672852 + "value": 33.885562896728516 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -2264,7 +2264,7 @@ }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -2483,11 +2483,11 @@ }, "X": { "type": "float", - "value": 23.34947204589844 + "value": 23.349472045898438 }, "Y": { "type": "float", - "value": 18.90976715087891 + "value": 18.909767150878906 }, "Z": { "type": "float", @@ -2714,11 +2714,11 @@ }, "Y": { "type": "float", - "value": 20.2375602722168 + "value": 20.237560272216797 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -2737,7 +2737,7 @@ }, "Bearing": { "type": "float", - "value": -1.644427180290222 + "value": -1.6444271802902222 }, "BodyBag": { "type": "byte", @@ -2937,15 +2937,15 @@ }, "X": { "type": "float", - "value": 26.27062606811523 + "value": 26.270626068115234 }, "Y": { "type": "float", - "value": 28.27072906494141 + "value": 28.270729064941406 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -3164,11 +3164,11 @@ }, "X": { "type": "float", - "value": 19.76442337036133 + "value": 19.764423370361328 }, "Y": { "type": "float", - "value": 27.54044151306152 + "value": 27.540441513061523 }, "Z": { "type": "float", @@ -3191,7 +3191,7 @@ }, "Bearing": { "type": "float", - "value": 0.2699806094169617 + "value": 0.26998060941696167 }, "BodyBag": { "type": "byte", @@ -3399,7 +3399,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3418,7 +3418,7 @@ }, "Bearing": { "type": "float", - "value": 1.055378556251526 + "value": 1.0553785562515259 }, "BodyBag": { "type": "byte", @@ -3618,7 +3618,7 @@ }, "X": { "type": "float", - "value": 22.81835556030273 + "value": 22.818355560302734 }, "Y": { "type": "float", @@ -3845,7 +3845,7 @@ }, "X": { "type": "float", - "value": 22.68557548522949 + "value": 22.685575485229492 }, "Y": { "type": "float", @@ -3853,7 +3853,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4076,7 +4076,7 @@ }, "Y": { "type": "float", - "value": 67.18556976318359 + "value": 67.1855697631836 }, "Z": { "type": "float", @@ -4307,7 +4307,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4526,7 +4526,7 @@ }, "X": { "type": "float", - "value": 26.56899452209473 + "value": 26.568994522094727 }, "Y": { "type": "float", @@ -4757,11 +4757,11 @@ }, "Y": { "type": "float", - "value": 68.64614868164063 + "value": 68.64614868164062 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -4780,7 +4780,7 @@ }, "Bearing": { "type": "float", - "value": 1.349903106689453 + "value": 1.3499031066894531 }, "BodyBag": { "type": "byte", @@ -4988,7 +4988,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5215,7 +5215,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -5438,7 +5438,7 @@ }, "Y": { "type": "float", - "value": 48.31851196289063 + "value": 48.318511962890625 }, "Z": { "type": "float", @@ -5669,7 +5669,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -5688,7 +5688,7 @@ }, "Bearing": { "type": "float", - "value": -0.4908736646175385 + "value": -0.49087366461753845 }, "BodyBag": { "type": "byte", @@ -5915,7 +5915,7 @@ }, "Bearing": { "type": "float", - "value": -2.20893144607544 + "value": -2.2089314460754395 }, "BodyBag": { "type": "byte", @@ -6115,7 +6115,7 @@ }, "X": { "type": "float", - "value": 53.99532318115234 + "value": 53.995323181152344 }, "Y": { "type": "float", @@ -6123,7 +6123,7 @@ }, "Z": { "type": "float", - "value": -5.211829829931958e-006 + "value": -0.000005211829829931958 } }, { @@ -6346,7 +6346,7 @@ }, "Y": { "type": "float", - "value": 58.54254531860352 + "value": 58.542545318603516 }, "Z": { "type": "float", @@ -6577,7 +6577,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -6804,7 +6804,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -7027,11 +7027,11 @@ }, "Y": { "type": "float", - "value": 26.63336372375488 + "value": 26.633363723754883 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -7258,7 +7258,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -7485,7 +7485,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -7704,7 +7704,7 @@ }, "X": { "type": "float", - "value": 72.71414184570313 + "value": 72.71414184570312 }, "Y": { "type": "float", @@ -7931,7 +7931,7 @@ }, "X": { "type": "float", - "value": 72.24942016601563 + "value": 72.24942016601562 }, "Y": { "type": "float", @@ -7939,7 +7939,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -8158,7 +8158,7 @@ }, "X": { "type": "float", - "value": 68.79714965820313 + "value": 68.79714965820312 }, "Y": { "type": "float", @@ -8166,7 +8166,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -8393,7 +8393,7 @@ }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -8612,7 +8612,7 @@ }, "X": { "type": "float", - "value": 69.99216461181641 + "value": 69.9921646118164 }, "Y": { "type": "float", @@ -8620,7 +8620,7 @@ }, "Z": { "type": "float", - "value": -1.937150955200195e-007 + "value": -0.00000019371509552001953 } }, { @@ -8639,7 +8639,7 @@ }, "Bearing": { "type": "float", - "value": 1.153552889823914 + "value": 1.1535528898239136 }, "BodyBag": { "type": "byte", @@ -8843,11 +8843,11 @@ }, "Y": { "type": "float", - "value": 2.600258827209473 + "value": 2.6002588272094727 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -9066,7 +9066,7 @@ }, "X": { "type": "float", - "value": 56.78060150146484 + "value": 56.780601501464844 }, "Y": { "type": "float", @@ -9074,7 +9074,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -9297,11 +9297,11 @@ }, "Y": { "type": "float", - "value": 22.51719665527344 + "value": 22.517196655273438 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -9524,11 +9524,11 @@ }, "Y": { "type": "float", - "value": 18.06908226013184 + "value": 18.069082260131836 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -9751,7 +9751,7 @@ }, "Y": { "type": "float", - "value": 19.79521560668945 + "value": 19.795215606689453 }, "Z": { "type": "float", @@ -9974,11 +9974,11 @@ }, "X": { "type": "float", - "value": 39.10237884521484 + "value": 39.102378845214844 }, "Y": { "type": "float", - "value": 52.80136871337891 + "value": 52.801368713378906 }, "Z": { "type": "float", @@ -10209,7 +10209,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -10663,7 +10663,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -11109,7 +11109,7 @@ }, "X": { "type": "float", - "value": 18.83804893493652 + "value": 18.838048934936523 }, "Y": { "type": "float", @@ -11117,7 +11117,7 @@ }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -11336,7 +11336,7 @@ }, "X": { "type": "float", - "value": 20.56418609619141 + "value": 20.564186096191406 }, "Y": { "type": "float", @@ -11402,7 +11402,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -11793,11 +11793,11 @@ }, "XOrientation": { "type": "float", - "value": -1.819925842028169e-006 + "value": -0.0000018199258420281694 }, "XPosition": { "type": "float", - "value": 15.24437808990479 + "value": 15.244378089904785 }, "YOrientation": { "type": "float", @@ -11809,7 +11809,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11858,7 +11858,7 @@ }, "XPosition": { "type": "float", - "value": 28.88425827026367 + "value": 28.884258270263672 }, "YOrientation": { "type": "float", @@ -11870,7 +11870,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11919,7 +11919,7 @@ }, "XPosition": { "type": "float", - "value": 61.72946929931641 + "value": 61.729469299316406 }, "YOrientation": { "type": "float", @@ -11927,11 +11927,11 @@ }, "YPosition": { "type": "float", - "value": 65.80593109130859 + "value": 65.8059310913086 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11992,7 +11992,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12049,11 +12049,11 @@ }, "YPosition": { "type": "float", - "value": 11.95844650268555 + "value": 11.958446502685547 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12102,7 +12102,7 @@ }, "XPosition": { "type": "float", - "value": 15.0280351638794 + "value": 15.028035163879395 }, "YOrientation": { "type": "float", @@ -12110,11 +12110,11 @@ }, "YPosition": { "type": "float", - "value": 43.05678558349609 + "value": 43.056785583496094 }, "ZPosition": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -12163,7 +12163,7 @@ }, "XPosition": { "type": "float", - "value": 14.88473510742188 + "value": 14.884735107421875 }, "YOrientation": { "type": "float", @@ -12171,11 +12171,11 @@ }, "YPosition": { "type": "float", - "value": 53.66101455688477 + "value": 53.661014556884766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12236,7 +12236,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12297,7 +12297,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12354,11 +12354,11 @@ }, "YPosition": { "type": "float", - "value": 16.40291595458984 + "value": 16.402915954589844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12419,7 +12419,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/evaritowerlevel2.git.json b/_module/git/evaritowerlevel2.git.json index 98f942c..1020bec 100644 --- a/_module/git/evaritowerlevel2.git.json +++ b/_module/git/evaritowerlevel2.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795655250549 + "value": -1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "CloseLockDC": { "type": "byte", @@ -944,7 +944,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -1163,11 +1163,11 @@ }, "X": { "type": "float", - "value": 33.87935638427734 + "value": 33.879356384277344 }, "Y": { "type": "float", - "value": 22.0579719543457 + "value": 22.057971954345703 }, "Z": { "type": "float", @@ -1390,11 +1390,11 @@ }, "X": { "type": "float", - "value": 18.41125869750977 + "value": 18.411258697509766 }, "Y": { "type": "float", - "value": 24.97710800170898 + "value": 24.977108001708984 }, "Z": { "type": "float", @@ -1617,15 +1617,15 @@ }, "X": { "type": "float", - "value": 16.72885894775391 + "value": 16.728858947753906 }, "Y": { "type": "float", - "value": 23.72522926330566 + "value": 23.725229263305664 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -1644,7 +1644,7 @@ }, "Bearing": { "type": "float", - "value": -0.4908736646175385 + "value": -0.49087366461753845 }, "BodyBag": { "type": "byte", @@ -1844,15 +1844,15 @@ }, "X": { "type": "float", - "value": 17.22915840148926 + "value": 17.229158401489258 }, "Y": { "type": "float", - "value": 13.67167663574219 + "value": 13.671676635742188 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -2071,11 +2071,11 @@ }, "X": { "type": "float", - "value": 17.88528251647949 + "value": 17.885282516479492 }, "Y": { "type": "float", - "value": 23.39193916320801 + "value": 23.391939163208008 }, "Z": { "type": "float", @@ -2298,7 +2298,7 @@ }, "X": { "type": "float", - "value": 30.55368614196777 + "value": 30.553686141967773 }, "Y": { "type": "float", @@ -2525,15 +2525,15 @@ }, "X": { "type": "float", - "value": 32.64410018920898 + "value": 32.644100189208984 }, "Y": { "type": "float", - "value": 18.73129272460938 + "value": 18.731292724609375 }, "Z": { "type": "float", - "value": -3.576278686523438e-007 + "value": -0.00000035762786865234375 } }, { @@ -2817,7 +2817,7 @@ }, "X": { "type": "float", - "value": 25.07936096191406 + "value": 25.079360961914062 }, "Y": { "type": "float", @@ -2825,7 +2825,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -2844,7 +2844,7 @@ }, "Bearing": { "type": "float", - "value": 1.619882941246033 + "value": 1.6198829412460327 }, "BodyBag": { "type": "byte", @@ -3044,7 +3044,7 @@ }, "X": { "type": "float", - "value": 12.00736045837402 + "value": 12.007360458374023 }, "Y": { "type": "float", @@ -3052,7 +3052,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3271,15 +3271,15 @@ }, "X": { "type": "float", - "value": 19.27829170227051 + "value": 19.278291702270508 }, "Y": { "type": "float", - "value": 78.01723480224609 + "value": 78.0172348022461 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -3298,7 +3298,7 @@ }, "Bearing": { "type": "float", - "value": 0.3926988840103149 + "value": 0.39269888401031494 }, "BodyBag": { "type": "byte", @@ -3498,7 +3498,7 @@ }, "X": { "type": "float", - "value": 19.05921936035156 + "value": 19.059219360351562 }, "Y": { "type": "float", @@ -3729,11 +3729,11 @@ }, "Y": { "type": "float", - "value": 68.85292816162109 + "value": 68.8529281616211 }, "Z": { "type": "float", - "value": 3.576278686523438e-007 + "value": 0.00000035762786865234375 } }, { @@ -3952,15 +3952,15 @@ }, "X": { "type": "float", - "value": 30.80877876281738 + "value": 30.808778762817383 }, "Y": { "type": "float", - "value": 60.97914886474609 + "value": 60.979148864746094 }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -4187,7 +4187,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -4410,11 +4410,11 @@ }, "Y": { "type": "float", - "value": 64.11025238037109 + "value": 64.1102523803711 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -4633,7 +4633,7 @@ }, "X": { "type": "float", - "value": 23.85687065124512 + "value": 23.856870651245117 }, "Y": { "type": "float", @@ -4860,11 +4860,11 @@ }, "X": { "type": "float", - "value": 25.03904533386231 + "value": 25.039045333862305 }, "Y": { "type": "float", - "value": 67.70425415039063 + "value": 67.70425415039062 }, "Z": { "type": "float", @@ -5091,11 +5091,11 @@ }, "Y": { "type": "float", - "value": 77.64028930664063 + "value": 77.64028930664062 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5541,7 +5541,7 @@ }, "X": { "type": "float", - "value": 12.91522979736328 + "value": 12.915229797363281 }, "Y": { "type": "float", @@ -5549,7 +5549,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -5568,7 +5568,7 @@ }, "Bearing": { "type": "float", - "value": 0.3436115682125092 + "value": 0.34361156821250916 }, "BodyBag": { "type": "byte", @@ -5995,7 +5995,7 @@ }, "X": { "type": "float", - "value": 15.23287010192871 + "value": 15.232870101928711 }, "Y": { "type": "float", @@ -6003,7 +6003,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -6230,7 +6230,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -6449,7 +6449,7 @@ }, "X": { "type": "float", - "value": 17.92116737365723 + "value": 17.921167373657227 }, "Y": { "type": "float", @@ -6676,7 +6676,7 @@ }, "X": { "type": "float", - "value": 30.0495719909668 + "value": 30.049571990966797 }, "Y": { "type": "float", @@ -6684,7 +6684,7 @@ }, "Z": { "type": "float", - "value": 1.706566214561462 + "value": 1.7065662145614624 } }, { @@ -6703,7 +6703,7 @@ }, "Bearing": { "type": "float", - "value": 0.2945242524147034 + "value": 0.29452425241470337 }, "BodyBag": { "type": "byte", @@ -6907,11 +6907,11 @@ }, "Y": { "type": "float", - "value": 53.90164184570313 + "value": 53.901641845703125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6930,7 +6930,7 @@ }, "Bearing": { "type": "float", - "value": 1.276271462440491 + "value": 1.2762714624404907 }, "BodyBag": { "type": "byte", @@ -7130,7 +7130,7 @@ }, "X": { "type": "float", - "value": 13.83952617645264 + "value": 13.839526176452637 }, "Y": { "type": "float", @@ -7138,7 +7138,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7365,7 +7365,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -7592,7 +7592,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -7811,7 +7811,7 @@ }, "X": { "type": "float", - "value": 46.45373916625977 + "value": 46.453739166259766 }, "Y": { "type": "float", @@ -7819,7 +7819,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -7838,7 +7838,7 @@ }, "Bearing": { "type": "float", - "value": -1.42353367805481 + "value": -1.4235336780548096 }, "BodyBag": { "type": "byte", @@ -8042,11 +8042,11 @@ }, "Y": { "type": "float", - "value": 63.10397338867188 + "value": 63.103973388671875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8273,7 +8273,7 @@ }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -8492,7 +8492,7 @@ }, "X": { "type": "float", - "value": 19.87652969360352 + "value": 19.876529693603516 }, "Y": { "type": "float", @@ -8500,7 +8500,7 @@ }, "Z": { "type": "float", - "value": 3.576278686523438e-007 + "value": 0.00000035762786865234375 } } ] @@ -8558,7 +8558,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -8867,7 +8867,7 @@ }, "YPosition": { "type": "float", - "value": 56.64636611938477 + "value": 56.646366119384766 }, "ZPosition": { "type": "float", @@ -8933,7 +8933,7 @@ }, "XPosition": { "type": "float", - "value": 25.1627082824707 + "value": 25.162708282470703 }, "YOrientation": { "type": "float", @@ -8941,11 +8941,11 @@ }, "YPosition": { "type": "float", - "value": 24.98506355285645 + "value": 24.985063552856445 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9014,7 +9014,7 @@ }, "XPosition": { "type": "float", - "value": 25.18047904968262 + "value": 25.180479049682617 }, "YOrientation": { "type": "float", @@ -9026,7 +9026,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9071,7 +9071,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04906764999032021 + "value": 0.049067649990320206 }, "XPosition": { "type": "float", @@ -9087,7 +9087,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] diff --git a/_module/git/ey_dpcon_erewood.git.json b/_module/git/ey_dpcon_erewood.git.json index 2883ed0..d2ddbb1 100644 --- a/_module/git/ey_dpcon_erewood.git.json +++ b/_module/git/ey_dpcon_erewood.git.json @@ -282,7 +282,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -497,7 +497,7 @@ }, "X": { "type": "float", - "value": 42.82106781005859 + "value": 42.821067810058594 }, "Y": { "type": "float", @@ -505,7 +505,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -728,7 +728,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -1166,15 +1166,15 @@ }, "X": { "type": "float", - "value": 37.77213287353516 + "value": 37.772132873535156 }, "Y": { "type": "float", - "value": 12.39786338806152 + "value": 12.397863388061523 }, "Z": { "type": "float", - "value": -1.937150955200195e-007 + "value": -0.00000019371509552001953 } }, { @@ -1389,15 +1389,15 @@ }, "X": { "type": "float", - "value": 43.51470565795898 + "value": 43.514705657958984 }, "Y": { "type": "float", - "value": 14.01102447509766 + "value": 14.011024475097656 }, "Z": { "type": "float", - "value": 0.04150157049298286 + "value": 0.041501570492982864 } }, { @@ -1616,7 +1616,7 @@ }, "Y": { "type": "float", - "value": 13.1573600769043 + "value": 13.157360076904297 }, "Z": { "type": "float", @@ -1843,7 +1843,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -2058,11 +2058,11 @@ }, "X": { "type": "float", - "value": 39.49908065795898 + "value": 39.499080657958984 }, "Y": { "type": "float", - "value": 42.78000640869141 + "value": 42.780006408691406 }, "Z": { "type": "float", @@ -2281,7 +2281,7 @@ }, "X": { "type": "float", - "value": 44.82220077514648 + "value": 44.822200775146484 }, "Y": { "type": "float", @@ -2289,7 +2289,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -2512,7 +2512,7 @@ }, "Z": { "type": "float", - "value": 0.0429927408695221 + "value": 0.042992740869522095 } }, { @@ -2728,7 +2728,7 @@ }, "X": { "type": "float", - "value": 41.14682006835938 + "value": 41.146820068359375 }, "Y": { "type": "float", @@ -2959,7 +2959,7 @@ }, "Z": { "type": "float", - "value": 1.001358032226563e-005 + "value": 0.000010013580322265625 } }, { @@ -3174,15 +3174,15 @@ }, "X": { "type": "float", - "value": 15.25651454925537 + "value": 15.256514549255371 }, "Y": { "type": "float", - "value": 13.30093288421631 + "value": 13.300932884216309 }, "Z": { "type": "float", - "value": 0.4138407707214356 + "value": 0.41384077072143555 } }, { @@ -3405,7 +3405,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -3620,15 +3620,15 @@ }, "X": { "type": "float", - "value": 27.46503829956055 + "value": 27.465038299560547 }, "Y": { "type": "float", - "value": 25.76974487304688 + "value": 25.769744873046875 }, "Z": { "type": "float", - "value": 0.3609549999237061 + "value": 0.36095499992370605 } }, { @@ -3843,11 +3843,11 @@ }, "X": { "type": "float", - "value": 27.54284286499023 + "value": 27.542842864990234 }, "Y": { "type": "float", - "value": 25.75577354431152 + "value": 25.755773544311523 }, "Z": { "type": "float", @@ -4070,7 +4070,7 @@ }, "Y": { "type": "float", - "value": 24.61386680603027 + "value": 24.613866806030273 }, "Z": { "type": "float", @@ -4289,7 +4289,7 @@ }, "X": { "type": "float", - "value": 10.4328727722168 + "value": 10.432872772216797 }, "Y": { "type": "float", @@ -4297,7 +4297,7 @@ }, "Z": { "type": "float", - "value": 0.0183146595954895 + "value": 0.018314659595489502 } }, { @@ -4512,11 +4512,11 @@ }, "X": { "type": "float", - "value": 10.39583396911621 + "value": 10.395833969116211 }, "Y": { "type": "float", - "value": 37.53082656860352 + "value": 37.530826568603516 }, "Z": { "type": "float", @@ -4735,7 +4735,7 @@ }, "X": { "type": "float", - "value": 10.88762187957764 + "value": 10.887621879577637 }, "Y": { "type": "float", @@ -4762,7 +4762,7 @@ }, "Bearing": { "type": "float", - "value": 1.816232323646545 + "value": 1.8162323236465454 }, "BodyBag": { "type": "byte", @@ -4966,7 +4966,7 @@ }, "Z": { "type": "float", - "value": 1.001358032226563e-005 + "value": 0.000010013580322265625 } }, { @@ -5185,11 +5185,11 @@ }, "Y": { "type": "float", - "value": 40.45883941650391 + "value": 40.458839416503906 }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -5408,11 +5408,11 @@ }, "Y": { "type": "float", - "value": 43.67095565795898 + "value": 43.670955657958984 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -5631,11 +5631,11 @@ }, "Y": { "type": "float", - "value": 42.22009658813477 + "value": 42.220096588134766 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -5850,11 +5850,11 @@ }, "X": { "type": "float", - "value": 45.83562850952148 + "value": 45.835628509521484 }, "Y": { "type": "float", - "value": 25.5269947052002 + "value": 25.526994705200195 }, "Z": { "type": "float", @@ -6081,7 +6081,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -6296,7 +6296,7 @@ }, "X": { "type": "float", - "value": 29.97814559936523 + "value": 29.978145599365234 }, "Y": { "type": "float", @@ -6519,7 +6519,7 @@ }, "X": { "type": "float", - "value": 31.14458847045898 + "value": 31.144588470458984 }, "Y": { "type": "float", @@ -6750,7 +6750,7 @@ }, "Z": { "type": "float", - "value": -5.960464477539063e-008 + "value": -5.960464477539063e-8 } }, { @@ -6973,7 +6973,7 @@ }, "Z": { "type": "float", - "value": 1.402871608734131 + "value": 1.4028716087341309 } }, { @@ -7188,7 +7188,7 @@ }, "X": { "type": "float", - "value": 29.47326850891113 + "value": 29.473268508911133 }, "Y": { "type": "float", @@ -7413,7 +7413,7 @@ }, "X": { "type": "float", - "value": 20.85512161254883 + "value": 20.855121612548828 }, "Y": { "type": "float", @@ -7539,7 +7539,7 @@ }, "XPosition": { "type": "float", - "value": 42.78046035766602 + "value": 42.780460357666016 }, "YPosition": { "type": "float", @@ -7664,7 +7664,7 @@ }, "YPosition": { "type": "float", - "value": 20.61979675292969 + "value": 20.619796752929688 }, "ZPosition": { "type": "float", @@ -7785,7 +7785,7 @@ }, "YPosition": { "type": "float", - "value": 36.72332382202148 + "value": 36.723323822021484 }, "ZPosition": { "type": "float", @@ -7842,7 +7842,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -7916,11 +7916,11 @@ }, "XPosition": { "type": "float", - "value": 14.50231838226318 + "value": 14.502318382263184 }, "YPosition": { "type": "float", - "value": 30.95841979980469 + "value": 30.958419799804688 }, "ZPosition": { "type": "float", @@ -7977,7 +7977,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -8059,7 +8059,7 @@ }, "ZPosition": { "type": "float", - "value": 1.500010013580322 + "value": 1.5000100135803223 } }, { @@ -8172,15 +8172,15 @@ }, "XPosition": { "type": "float", - "value": 20.66150856018066 + "value": 20.661508560180664 }, "YPosition": { "type": "float", - "value": 11.34990882873535 + "value": 11.349908828735352 }, "ZPosition": { "type": "float", - "value": 1.50374698638916 + "value": 1.5037469863891602 } } ] @@ -8242,7 +8242,7 @@ }, "XPosition": { "type": "float", - "value": 20.94911575317383 + "value": 20.949115753173828 }, "YOrientation": { "type": "float", @@ -8250,7 +8250,7 @@ }, "YPosition": { "type": "float", - "value": 11.40368461608887 + "value": 11.403684616088867 }, "ZPosition": { "type": "float", diff --git a/_module/git/faction.git.json b/_module/git/faction.git.json index d080624..5992264 100644 --- a/_module/git/faction.git.json +++ b/_module/git/faction.git.json @@ -520,7 +520,7 @@ }, "XPosition": { "type": "float", - "value": 10.47211265563965 + "value": 10.472112655639648 }, "YOrientation": { "type": "float", @@ -528,11 +528,11 @@ }, "YPosition": { "type": "float", - "value": 140.3904724121094 + "value": 140.39047241210938 }, "ZPosition": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -1009,7 +1009,7 @@ }, "XPosition": { "type": "float", - "value": 7.146443367004395 + "value": 7.1464433670043945 }, "YOrientation": { "type": "float", @@ -1017,11 +1017,11 @@ }, "YPosition": { "type": "float", - "value": 137.8962097167969 + "value": 137.89620971679688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1498,7 +1498,7 @@ }, "XPosition": { "type": "float", - "value": 12.13494396209717 + "value": 12.134943962097168 }, "YOrientation": { "type": "float", @@ -1506,11 +1506,11 @@ }, "YPosition": { "type": "float", - "value": 137.0648040771484 + "value": 137.06480407714844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1987,7 +1987,7 @@ }, "XPosition": { "type": "float", - "value": 12.96636295318604 + "value": 12.966362953186035 }, "YOrientation": { "type": "float", @@ -1995,11 +1995,11 @@ }, "YPosition": { "type": "float", - "value": 139.7253265380859 + "value": 139.72532653808594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2484,7 +2484,7 @@ }, "YPosition": { "type": "float", - "value": 142.5521545410156 + "value": 142.55215454101562 }, "ZPosition": { "type": "float", @@ -2965,7 +2965,7 @@ }, "XPosition": { "type": "float", - "value": 29.09584045410156 + "value": 29.095840454101562 }, "YOrientation": { "type": "float", @@ -3454,7 +3454,7 @@ }, "XPosition": { "type": "float", - "value": 10.27408313751221 + "value": 10.274083137512207 }, "YOrientation": { "type": "float", @@ -3462,7 +3462,7 @@ }, "YPosition": { "type": "float", - "value": 119.7894897460938 + "value": 119.78948974609375 }, "ZPosition": { "type": "float", diff --git a/_module/git/fields.git.json b/_module/git/fields.git.json index 751f0d2..3a3ccab 100644 --- a/_module/git/fields.git.json +++ b/_module/git/fields.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 13.21000003814697 + "value": 13.210000038146973 }, "Y": { "type": "float", @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -473,7 +473,7 @@ }, "X": { "type": "float", - "value": 26.79999923706055 + "value": 26.799999237060547 }, "Y": { "type": "float", @@ -500,7 +500,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -921,7 +921,7 @@ }, "Z": { "type": "float", - "value": -0.1700000017881393 + "value": -0.17000000178813934 } } ] @@ -989,26 +989,26 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.05894279479981 + "value": 10.058942794799805 }, "PointY": { "type": "float", - "value": 1.430511474609375e-006 + "value": 0.000001430511474609375 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.10229873657227 + "value": 10.102298736572266 }, "PointY": { "type": "float", - "value": 2.297948598861694 + "value": 2.2979485988616943 }, "PointZ": { "type": "float", @@ -1023,7 +1023,7 @@ }, "PointY": { "type": "float", - "value": 2.297948837280273 + "value": 2.2979488372802734 }, "PointZ": { "type": "float", @@ -1231,11 +1231,11 @@ }, "YPosition": { "type": "float", - "value": 26.11817932128906 + "value": 26.118179321289062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1296,7 +1296,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1345,7 +1345,7 @@ }, "XPosition": { "type": "float", - "value": 68.18552398681641 + "value": 68.1855239868164 }, "YOrientation": { "type": "float", @@ -1357,7 +1357,7 @@ }, "ZPosition": { "type": "float", - "value": -4.641711711883545e-006 + "value": -0.000004641711711883545 } }, { @@ -1406,7 +1406,7 @@ }, "XPosition": { "type": "float", - "value": 10.1585636138916 + "value": 10.158563613891602 }, "YOrientation": { "type": "float", @@ -1418,7 +1418,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1589,7 +1589,7 @@ }, "XPosition": { "type": "float", - "value": 14.98526287078857 + "value": 14.985262870788574 }, "YOrientation": { "type": "float", @@ -1597,11 +1597,11 @@ }, "YPosition": { "type": "float", - "value": 1.18362832069397 + "value": 1.1836283206939697 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/fields2.git.json b/_module/git/fields2.git.json index 7aee0f5..2c5aa6a 100644 --- a/_module/git/fields2.git.json +++ b/_module/git/fields2.git.json @@ -114,26 +114,26 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.05894279479981 + "value": 10.058942794799805 }, "PointY": { "type": "float", - "value": 1.430511474609375e-006 + "value": 0.000001430511474609375 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.10229873657227 + "value": 10.102298736572266 }, "PointY": { "type": "float", - "value": 2.297948598861694 + "value": 2.2979485988616943 }, "PointZ": { "type": "float", @@ -148,7 +148,7 @@ }, "PointY": { "type": "float", - "value": 2.297948837280273 + "value": 2.2979488372802734 }, "PointZ": { "type": "float", @@ -348,7 +348,7 @@ }, "XPosition": { "type": "float", - "value": 39.03067779541016 + "value": 39.030677795410156 }, "YOrientation": { "type": "float", @@ -421,7 +421,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -470,7 +470,7 @@ }, "XPosition": { "type": "float", - "value": 68.18552398681641 + "value": 68.1855239868164 }, "YOrientation": { "type": "float", @@ -482,7 +482,7 @@ }, "ZPosition": { "type": "float", - "value": -4.641711711883545e-006 + "value": -0.000004641711711883545 } }, { @@ -543,7 +543,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -665,7 +665,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -714,7 +714,7 @@ }, "XPosition": { "type": "float", - "value": 14.98526287078857 + "value": 14.985262870788574 }, "YOrientation": { "type": "float", @@ -722,11 +722,11 @@ }, "YPosition": { "type": "float", - "value": 1.18362832069397 + "value": 1.1836283206939697 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -771,11 +771,11 @@ }, "XOrientation": { "type": "float", - "value": 0.1224118769168854 + "value": 0.12241187691688538 }, "XPosition": { "type": "float", - "value": 10.86005210876465 + "value": 10.860052108764648 }, "YOrientation": { "type": "float", @@ -787,7 +787,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/forgottentempleo.git.json b/_module/git/forgottentempleo.git.json index f522785..26d7a9a 100644 --- a/_module/git/forgottentempleo.git.json +++ b/_module/git/forgottentempleo.git.json @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -1599,7 +1599,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2037,7 +2037,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2475,7 +2475,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2694,7 +2694,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3132,7 +3132,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3351,7 +3351,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3570,7 +3570,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -3789,7 +3789,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -4008,7 +4008,7 @@ }, "Bearing": { "type": "float", - "value": 1.748453826166951e-007 + "value": 0.00000017484538261669513 }, "CloseLockDC": { "type": "byte", @@ -4667,7 +4667,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4894,7 +4894,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5117,11 +5117,11 @@ }, "Y": { "type": "float", - "value": 99.42856597900391 + "value": 99.4285659790039 }, "Z": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 } }, { @@ -5348,7 +5348,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5567,15 +5567,15 @@ }, "X": { "type": "float", - "value": 71.57089996337891 + "value": 71.5708999633789 }, "Y": { "type": "float", - "value": 104.6471481323242 + "value": 104.64714813232422 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5798,11 +5798,11 @@ }, "Y": { "type": "float", - "value": 104.6471481323242 + "value": 104.64714813232422 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6025,11 +6025,11 @@ }, "Y": { "type": "float", - "value": 104.6004180908203 + "value": 104.60041809082031 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6252,11 +6252,11 @@ }, "Y": { "type": "float", - "value": 106.4217834472656 + "value": 106.42178344726562 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -6479,11 +6479,11 @@ }, "Y": { "type": "float", - "value": 106.4217834472656 + "value": 106.42178344726562 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6706,11 +6706,11 @@ }, "Y": { "type": "float", - "value": 106.3750534057617 + "value": 106.37505340576172 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6933,11 +6933,11 @@ }, "Y": { "type": "float", - "value": 108.5106582641602 + "value": 108.51065826416016 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -7160,11 +7160,11 @@ }, "Y": { "type": "float", - "value": 108.5106582641602 + "value": 108.51065826416016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7387,11 +7387,11 @@ }, "Y": { "type": "float", - "value": 108.4639282226563 + "value": 108.46392822265625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7614,11 +7614,11 @@ }, "Y": { "type": "float", - "value": 110.3773345947266 + "value": 110.37733459472656 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7837,15 +7837,15 @@ }, "X": { "type": "float", - "value": 75.09060668945313 + "value": 75.09060668945312 }, "Y": { "type": "float", - "value": 110.3773345947266 + "value": 110.37733459472656 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8068,11 +8068,11 @@ }, "Y": { "type": "float", - "value": 110.3306045532227 + "value": 110.33060455322266 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -8299,7 +8299,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -8518,7 +8518,7 @@ }, "X": { "type": "float", - "value": 75.36147308349609 + "value": 75.3614730834961 }, "Y": { "type": "float", @@ -8526,7 +8526,7 @@ }, "Z": { "type": "float", - "value": 1.028566122055054 + "value": 1.0285661220550537 } }, { @@ -8749,11 +8749,11 @@ }, "Y": { "type": "float", - "value": 99.49331665039063 + "value": 99.49331665039062 }, "Z": { "type": "float", - "value": 1.025919079780579 + "value": 1.0259190797805786 } }, { @@ -8972,15 +8972,15 @@ }, "X": { "type": "float", - "value": 10.11911773681641 + "value": 10.119117736816406 }, "Y": { "type": "float", - "value": 131.1967926025391 + "value": 131.19679260253906 }, "Z": { "type": "float", - "value": -2.086162567138672e-007 + "value": -0.0000002086162567138672 } }, { @@ -8999,7 +8999,7 @@ }, "Bearing": { "type": "float", - "value": 0.2699806094169617 + "value": 0.26998060941696167 }, "BodyBag": { "type": "byte", @@ -9207,7 +9207,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9434,7 +9434,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9653,15 +9653,15 @@ }, "X": { "type": "float", - "value": 12.42273139953613 + "value": 12.422731399536133 }, "Y": { "type": "float", - "value": 127.9717407226563 + "value": 127.97174072265625 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -9880,15 +9880,15 @@ }, "X": { "type": "float", - "value": 13.71275329589844 + "value": 13.712753295898438 }, "Y": { "type": "float", - "value": 122.4430541992188 + "value": 122.44305419921875 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -9907,7 +9907,7 @@ }, "Bearing": { "type": "float", - "value": 0.2454367280006409 + "value": 0.24543672800064087 }, "BodyBag": { "type": "byte", @@ -10107,7 +10107,7 @@ }, "X": { "type": "float", - "value": 27.5344352722168 + "value": 27.534435272216797 }, "Y": { "type": "float", @@ -10115,7 +10115,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10338,11 +10338,11 @@ }, "Y": { "type": "float", - "value": 135.1589965820313 + "value": 135.15899658203125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10565,7 +10565,7 @@ }, "Y": { "type": "float", - "value": 116.4544143676758 + "value": 116.45441436767578 }, "Z": { "type": "float", @@ -10796,7 +10796,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -11023,7 +11023,7 @@ }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -11042,7 +11042,7 @@ }, "Bearing": { "type": "float", - "value": -1.276271224021912 + "value": -1.2762712240219116 }, "BodyBag": { "type": "byte", @@ -11242,7 +11242,7 @@ }, "X": { "type": "float", - "value": 31.27297973632813 + "value": 31.272979736328125 }, "Y": { "type": "float", @@ -11250,7 +11250,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11477,7 +11477,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -11496,7 +11496,7 @@ }, "Bearing": { "type": "float", - "value": -1.497163891792297 + "value": -1.4971638917922974 }, "BodyBag": { "type": "byte", @@ -11696,7 +11696,7 @@ }, "X": { "type": "float", - "value": 16.16127395629883 + "value": 16.161273956298828 }, "Y": { "type": "float", @@ -11704,7 +11704,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12150,7 +12150,7 @@ }, "X": { "type": "float", - "value": 15.97698593139648 + "value": 15.976985931396484 }, "Y": { "type": "float", @@ -12377,15 +12377,15 @@ }, "X": { "type": "float", - "value": 20.39992713928223 + "value": 20.399927139282227 }, "Y": { "type": "float", - "value": 26.71570777893066 + "value": 26.715707778930664 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -12608,7 +12608,7 @@ }, "Y": { "type": "float", - "value": 26.16283988952637 + "value": 26.162839889526367 }, "Z": { "type": "float", @@ -12835,7 +12835,7 @@ }, "Y": { "type": "float", - "value": 22.20062446594238 + "value": 22.200624465942383 }, "Z": { "type": "float", @@ -13062,11 +13062,11 @@ }, "Y": { "type": "float", - "value": 3.778796195983887 + "value": 3.7787961959838867 }, "Z": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -13289,11 +13289,11 @@ }, "Y": { "type": "float", - "value": 10.05525302886963 + "value": 10.055253028869629 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13312,7 +13312,7 @@ }, "Bearing": { "type": "float", - "value": 1.54625129699707 + "value": 1.5462512969970703 }, "BodyBag": { "type": "byte", @@ -13512,15 +13512,15 @@ }, "X": { "type": "float", - "value": 14.60111999511719 + "value": 14.601119995117188 }, "Y": { "type": "float", - "value": 15.38900852203369 + "value": 15.389008522033691 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -13743,7 +13743,7 @@ }, "Y": { "type": "float", - "value": 17.60047912597656 + "value": 17.600479125976562 }, "Z": { "type": "float", @@ -13966,11 +13966,11 @@ }, "X": { "type": "float", - "value": 31.37143135070801 + "value": 31.371431350708008 }, "Y": { "type": "float", - "value": 12.71681785583496 + "value": 12.716817855834961 }, "Z": { "type": "float", @@ -14197,7 +14197,7 @@ }, "Y": { "type": "float", - "value": 11.24250507354736 + "value": 11.242505073547363 }, "Z": { "type": "float", @@ -14420,7 +14420,7 @@ }, "X": { "type": "float", - "value": 20.59051704406738 + "value": 20.590517044067383 }, "Y": { "type": "float", @@ -14428,7 +14428,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -14647,15 +14647,15 @@ }, "X": { "type": "float", - "value": 22.27072715759277 + "value": 22.270727157592773 }, "Y": { "type": "float", - "value": 18.09006500244141 + "value": 18.090065002441406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14875,11 +14875,11 @@ }, "X": { "type": "float", - "value": 30.19593238830566 + "value": 30.195932388305664 }, "Y": { "type": "float", - "value": 2.474504947662354 + "value": 2.4745049476623535 }, "Z": { "type": "float", @@ -15107,11 +15107,11 @@ }, "Y": { "type": "float", - "value": 2.50074052810669 + "value": 2.5007405281066895 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15330,11 +15330,11 @@ }, "X": { "type": "float", - "value": 141.7661743164063 + "value": 141.76617431640625 }, "Y": { "type": "float", - "value": 2.579651832580566 + "value": 2.5796518325805664 }, "Z": { "type": "float", @@ -15557,7 +15557,7 @@ }, "X": { "type": "float", - "value": 136.6486968994141 + "value": 136.64869689941406 }, "Y": { "type": "float", @@ -15565,7 +15565,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15784,15 +15784,15 @@ }, "X": { "type": "float", - "value": 145.4588470458984 + "value": 145.45884704589844 }, "Y": { "type": "float", - "value": 2.912693023681641 + "value": 2.9126930236816406 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -16011,7 +16011,7 @@ }, "X": { "type": "float", - "value": 141.7590484619141 + "value": 141.75904846191406 }, "Y": { "type": "float", @@ -16238,7 +16238,7 @@ }, "X": { "type": "float", - "value": 127.4343872070313 + "value": 127.43438720703125 }, "Y": { "type": "float", @@ -16246,7 +16246,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -16465,11 +16465,11 @@ }, "X": { "type": "float", - "value": 126.1296768188477 + "value": 126.12967681884766 }, "Y": { "type": "float", - "value": 26.90893173217773 + "value": 26.908931732177734 }, "Z": { "type": "float", @@ -16692,15 +16692,15 @@ }, "X": { "type": "float", - "value": 144.0552368164063 + "value": 144.05523681640625 }, "Y": { "type": "float", - "value": 11.28633117675781 + "value": 11.286331176757812 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -16919,15 +16919,15 @@ }, "X": { "type": "float", - "value": 131.8391418457031 + "value": 131.83914184570312 }, "Y": { "type": "float", - "value": 18.96055221557617 + "value": 18.960552215576172 }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -17146,7 +17146,7 @@ }, "X": { "type": "float", - "value": 129.5221252441406 + "value": 129.52212524414062 }, "Y": { "type": "float", @@ -17154,7 +17154,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17373,15 +17373,15 @@ }, "X": { "type": "float", - "value": 128.4703674316406 + "value": 128.47036743164062 }, "Y": { "type": "float", - "value": 66.78525543212891 + "value": 66.7852554321289 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -17600,7 +17600,7 @@ }, "X": { "type": "float", - "value": 133.3965454101563 + "value": 133.39654541015625 }, "Y": { "type": "float", @@ -17835,7 +17835,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18062,7 +18062,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18081,7 +18081,7 @@ }, "Bearing": { "type": "float", - "value": 1.030834794044495 + "value": 1.0308347940444946 }, "BodyBag": { "type": "byte", @@ -18512,11 +18512,11 @@ }, "Y": { "type": "float", - "value": 111.1255035400391 + "value": 111.12550354003906 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -18739,11 +18739,11 @@ }, "Y": { "type": "float", - "value": 122.3855285644531 + "value": 122.38552856445312 }, "Z": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -19416,11 +19416,11 @@ }, "X": { "type": "float", - "value": 83.78627777099609 + "value": 83.7862777709961 }, "Y": { "type": "float", - "value": 137.0811614990234 + "value": 137.08116149902344 }, "Z": { "type": "float", @@ -19670,7 +19670,7 @@ }, "Bearing": { "type": "float", - "value": 3.117046117782593 + "value": 3.1170461177825928 }, "BodyBag": { "type": "byte", @@ -19870,15 +19870,15 @@ }, "X": { "type": "float", - "value": 134.8345336914063 + "value": 134.83453369140625 }, "Y": { "type": "float", - "value": 14.94769191741943 + "value": 14.947691917419434 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -19936,7 +19936,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -20249,7 +20249,7 @@ }, "ZPosition": { "type": "float", - "value": 0.9999998807907105 + "value": 0.9999998807907104 } } ] @@ -20286,11 +20286,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.457321166992188 + "value": -1.4573211669921875 }, "PointY": { "type": "float", - "value": -1.499294281005859 + "value": -1.4992942810058594 }, "PointZ": { "type": "float", @@ -20301,7 +20301,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.427749633789063 + "value": -1.4277496337890625 }, "PointY": { "type": "float", @@ -20316,7 +20316,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.4603652954101563 + "value": -0.46036529541015625 }, "PointY": { "type": "float", @@ -20331,7 +20331,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.3860397338867188 + "value": -0.38603973388671875 }, "PointY": { "type": "float", @@ -20354,7 +20354,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -20365,7 +20365,7 @@ }, "PointY": { "type": "float", - "value": -1.086784362792969 + "value": -1.0867843627929688 }, "PointZ": { "type": "float", @@ -20380,11 +20380,11 @@ }, "PointY": { "type": "float", - "value": -1.049617767333984 + "value": -1.0496177673339844 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -20395,11 +20395,11 @@ }, "PointY": { "type": "float", - "value": 0.02814102172851563 + "value": 0.028141021728515625 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -20414,7 +20414,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -20519,7 +20519,7 @@ }, "XPosition": { "type": "float", - "value": 102.5315322875977 + "value": 102.53153228759766 }, "YOrientation": { "type": "float", @@ -20593,7 +20593,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.05636978149414063 + "value": 0.056369781494140625 }, "PointY": { "type": "float", @@ -20729,7 +20729,7 @@ }, "YPosition": { "type": "float", - "value": 19.96641540527344 + "value": 19.966415405273438 }, "ZOrientation": { "type": "float", @@ -20923,7 +20923,7 @@ }, "XPosition": { "type": "float", - "value": 122.3337478637695 + "value": 122.33374786376953 }, "YOrientation": { "type": "float", @@ -20931,7 +20931,7 @@ }, "YPosition": { "type": "float", - "value": 20.02326393127441 + "value": 20.023263931274414 }, "ZOrientation": { "type": "float", @@ -21021,11 +21021,11 @@ }, "YPosition": { "type": "float", - "value": 122.5076751708984 + "value": 122.50767517089844 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -21147,11 +21147,11 @@ }, "YPosition": { "type": "float", - "value": 133.1903686523438 + "value": 133.19036865234375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21212,7 +21212,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21265,7 +21265,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4713968634605408 + "value": 0.47139686346054077 }, "YPosition": { "type": "float", @@ -21273,7 +21273,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21322,7 +21322,7 @@ }, "XPosition": { "type": "float", - "value": 19.38681793212891 + "value": 19.386817932128906 }, "YOrientation": { "type": "float", @@ -21334,7 +21334,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21391,11 +21391,11 @@ }, "YPosition": { "type": "float", - "value": 124.5304412841797 + "value": 124.53044128417969 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21456,7 +21456,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21513,11 +21513,11 @@ }, "YPosition": { "type": "float", - "value": 12.28798675537109 + "value": 12.287986755371094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21578,7 +21578,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21627,7 +21627,7 @@ }, "XPosition": { "type": "float", - "value": 127.6488647460938 + "value": 127.64886474609375 }, "YOrientation": { "type": "float", @@ -21639,7 +21639,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21688,11 +21688,11 @@ }, "XPosition": { "type": "float", - "value": 112.8492813110352 + "value": 112.84928131103516 }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", @@ -21700,7 +21700,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21745,11 +21745,11 @@ }, "XOrientation": { "type": "float", - "value": 0.1709648668766022 + "value": 0.17096486687660217 }, "XPosition": { "type": "float", - "value": 104.7080383300781 + "value": 104.70803833007812 }, "YOrientation": { "type": "float", @@ -21761,7 +21761,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21810,19 +21810,19 @@ }, "XPosition": { "type": "float", - "value": 133.3474731445313 + "value": 133.34747314453125 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 84.54177856445313 + "value": 84.54177856445312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21879,11 +21879,11 @@ }, "YPosition": { "type": "float", - "value": 128.2614440917969 + "value": 128.26144409179688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21932,7 +21932,7 @@ }, "XPosition": { "type": "float", - "value": 82.52005004882813 + "value": 82.52005004882812 }, "YOrientation": { "type": "float", @@ -21940,11 +21940,11 @@ }, "YPosition": { "type": "float", - "value": 106.4257202148438 + "value": 106.42572021484375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21993,7 +21993,7 @@ }, "XPosition": { "type": "float", - "value": 54.57245254516602 + "value": 54.572452545166016 }, "YOrientation": { "type": "float", @@ -22001,11 +22001,11 @@ }, "YPosition": { "type": "float", - "value": 101.8256759643555 + "value": 101.82567596435547 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22054,7 +22054,7 @@ }, "XPosition": { "type": "float", - "value": 103.4636306762695 + "value": 103.46363067626953 }, "YOrientation": { "type": "float", @@ -22062,11 +22062,11 @@ }, "YPosition": { "type": "float", - "value": 53.04754257202148 + "value": 53.047542572021484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22115,7 +22115,7 @@ }, "XPosition": { "type": "float", - "value": 103.5948944091797 + "value": 103.59489440917969 }, "YOrientation": { "type": "float", @@ -22127,7 +22127,7 @@ }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -22176,11 +22176,11 @@ }, "XPosition": { "type": "float", - "value": 117.5749588012695 + "value": 117.57495880126953 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -22188,7 +22188,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -22241,15 +22241,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 14.60347557067871 + "value": 14.603475570678711 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -22298,19 +22298,19 @@ }, "XPosition": { "type": "float", - "value": 121.4356842041016 + "value": 121.43568420410156 }, "YOrientation": { "type": "float", - "value": 0.02454256452620029 + "value": 0.024542564526200294 }, "YPosition": { "type": "float", - "value": 16.64053535461426 + "value": 16.640535354614258 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22367,11 +22367,11 @@ }, "YPosition": { "type": "float", - "value": 13.93473720550537 + "value": 13.934737205505371 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22432,7 +22432,7 @@ }, "ZPosition": { "type": "float", - "value": 9.313225746154785e-008 + "value": 9.313225746154785e-8 } }, { @@ -22489,11 +22489,11 @@ }, "YPosition": { "type": "float", - "value": 96.03970336914063 + "value": 96.03970336914062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22554,7 +22554,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22615,7 +22615,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22664,7 +22664,7 @@ }, "XPosition": { "type": "float", - "value": 23.93184280395508 + "value": 23.931842803955078 }, "YOrientation": { "type": "float", @@ -22672,11 +22672,11 @@ }, "YPosition": { "type": "float", - "value": 33.92450332641602 + "value": 33.924503326416016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22725,7 +22725,7 @@ }, "XPosition": { "type": "float", - "value": 24.15269088745117 + "value": 24.152690887451172 }, "YOrientation": { "type": "float", @@ -22733,11 +22733,11 @@ }, "YPosition": { "type": "float", - "value": 64.84336090087891 + "value": 64.8433609008789 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22794,11 +22794,11 @@ }, "YPosition": { "type": "float", - "value": 104.4999160766602 + "value": 104.49991607666016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/fort1.git.json b/_module/git/fort1.git.json index 3a94d4c..b611279 100644 --- a/_module/git/fort1.git.json +++ b/_module/git/fort1.git.json @@ -504,7 +504,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -723,15 +723,15 @@ }, "X": { "type": "float", - "value": 29.84527969360352 + "value": 29.845279693603516 }, "Y": { "type": "float", - "value": 49.34308242797852 + "value": 49.343082427978516 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -750,7 +750,7 @@ }, "Bearing": { "type": "float", - "value": 3.092501878738403 + "value": 3.0925018787384033 }, "BodyBag": { "type": "byte", @@ -958,7 +958,7 @@ }, "Z": { "type": "float", - "value": 7.987022399902344e-006 + "value": 0.000007987022399902344 } }, { @@ -977,7 +977,7 @@ }, "Bearing": { "type": "float", - "value": 3.092501878738403 + "value": 3.0925018787384033 }, "BodyBag": { "type": "byte", @@ -1185,7 +1185,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -1204,7 +1204,7 @@ }, "Bearing": { "type": "float", - "value": 3.092501878738403 + "value": 3.0925018787384033 }, "BodyBag": { "type": "byte", @@ -1404,7 +1404,7 @@ }, "X": { "type": "float", - "value": 26.67291641235352 + "value": 26.672916412353516 }, "Y": { "type": "float", @@ -1412,7 +1412,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -1631,15 +1631,15 @@ }, "X": { "type": "float", - "value": 40.26444244384766 + "value": 40.264442443847656 }, "Y": { "type": "float", - "value": 77.09854125976563 + "value": 77.09854125976562 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1858,15 +1858,15 @@ }, "X": { "type": "float", - "value": 43.87231063842773 + "value": 43.872310638427734 }, "Y": { "type": "float", - "value": 76.97536468505859 + "value": 76.9753646850586 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2093,7 +2093,7 @@ }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -2312,7 +2312,7 @@ }, "X": { "type": "float", - "value": 36.41138076782227 + "value": 36.411380767822266 }, "Y": { "type": "float", @@ -2320,7 +2320,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2547,7 +2547,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2770,11 +2770,11 @@ }, "Y": { "type": "float", - "value": 65.50662231445313 + "value": 65.50662231445312 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2793,7 +2793,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -2993,7 +2993,7 @@ }, "X": { "type": "float", - "value": 60.98705673217773 + "value": 60.987056732177734 }, "Y": { "type": "float", @@ -3001,7 +3001,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3455,7 +3455,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -3682,7 +3682,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -3701,7 +3701,7 @@ }, "Bearing": { "type": "float", - "value": 1.521707773208618 + "value": 1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -3909,7 +3909,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3928,7 +3928,7 @@ }, "Bearing": { "type": "float", - "value": 1.521707773208618 + "value": 1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -4136,7 +4136,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4355,7 +4355,7 @@ }, "X": { "type": "float", - "value": 66.87783813476563 + "value": 66.87783813476562 }, "Y": { "type": "float", @@ -4582,15 +4582,15 @@ }, "X": { "type": "float", - "value": 66.93703460693359 + "value": 66.9370346069336 }, "Y": { "type": "float", - "value": 37.97141265869141 + "value": 37.971412658691406 }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -4817,7 +4817,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -5044,7 +5044,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -5267,11 +5267,11 @@ }, "Y": { "type": "float", - "value": 57.27437591552734 + "value": 57.274375915527344 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -5490,7 +5490,7 @@ }, "X": { "type": "float", - "value": 81.53798675537109 + "value": 81.5379867553711 }, "Y": { "type": "float", @@ -5498,7 +5498,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5725,7 +5725,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5952,7 +5952,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -6001,7 +6001,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -6012,11 +6012,11 @@ }, "PointY": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -6038,7 +6038,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.04664993286132813 + "value": 0.046649932861328125 }, "PointY": { "type": "float", @@ -6046,7 +6046,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -6152,7 +6152,7 @@ }, "XPosition": { "type": "float", - "value": 20.15293502807617 + "value": 20.152935028076172 }, "YOrientation": { "type": "float", @@ -6160,7 +6160,7 @@ }, "YPosition": { "type": "float", - "value": 0.02767419815063477 + "value": 0.027674198150634766 }, "ZOrientation": { "type": "float", @@ -6218,7 +6218,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -6279,7 +6279,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4713993668556213 + "value": -0.47139936685562134 }, "XPosition": { "type": "float", @@ -6295,7 +6295,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6401,7 +6401,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -6462,11 +6462,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", - "value": 42.13242340087891 + "value": 42.132423400878906 }, "YOrientation": { "type": "float", @@ -6478,7 +6478,7 @@ }, "ZPosition": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -6531,7 +6531,7 @@ }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", @@ -6539,7 +6539,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6592,11 +6592,11 @@ }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 11.84355735778809 + "value": 11.843557357788086 }, "ZPosition": { "type": "float", @@ -6649,7 +6649,7 @@ }, "XPosition": { "type": "float", - "value": 11.26359176635742 + "value": 11.263591766357422 }, "YOrientation": { "type": "float", @@ -6657,11 +6657,11 @@ }, "YPosition": { "type": "float", - "value": 30.27811431884766 + "value": 30.278114318847656 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6706,7 +6706,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454121224582195 + "value": -0.024541212245821953 }, "XPosition": { "type": "float", @@ -6718,11 +6718,11 @@ }, "YPosition": { "type": "float", - "value": 1.031118869781494 + "value": 1.0311188697814941 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/fort2.git.json b/_module/git/fort2.git.json index 2db84d6..063cce9 100644 --- a/_module/git/fort2.git.json +++ b/_module/git/fort2.git.json @@ -278,15 +278,15 @@ }, "X": { "type": "float", - "value": 30.26119232177734 + "value": 30.261192321777344 }, "Y": { "type": "float", - "value": 30.69822311401367 + "value": 30.698223114013672 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -305,7 +305,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -505,15 +505,15 @@ }, "X": { "type": "float", - "value": 40.26444244384766 + "value": 40.264442443847656 }, "Y": { "type": "float", - "value": 77.09854125976563 + "value": 77.09854125976562 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -532,7 +532,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -732,15 +732,15 @@ }, "X": { "type": "float", - "value": 43.87231063842773 + "value": 43.872310638427734 }, "Y": { "type": "float", - "value": 76.97536468505859 + "value": 76.9753646850586 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -759,7 +759,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -967,7 +967,7 @@ }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -986,7 +986,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -1186,7 +1186,7 @@ }, "X": { "type": "float", - "value": 36.41138076782227 + "value": 36.411380767822266 }, "Y": { "type": "float", @@ -1194,7 +1194,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1213,7 +1213,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -1421,7 +1421,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1648,7 +1648,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1667,7 +1667,7 @@ }, "Bearing": { "type": "float", - "value": 1.521707773208618 + "value": 1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -1875,7 +1875,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1894,7 +1894,7 @@ }, "Bearing": { "type": "float", - "value": 1.521707773208618 + "value": 1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -2094,7 +2094,7 @@ }, "X": { "type": "float", - "value": 17.94330024719238 + "value": 17.943300247192383 }, "Y": { "type": "float", @@ -2102,7 +2102,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2321,15 +2321,15 @@ }, "X": { "type": "float", - "value": 66.93703460693359 + "value": 66.9370346069336 }, "Y": { "type": "float", - "value": 37.97141265869141 + "value": 37.971412658691406 }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -2556,7 +2556,7 @@ }, "Z": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -2783,7 +2783,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3010,7 +3010,7 @@ }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -3233,11 +3233,11 @@ }, "Y": { "type": "float", - "value": 69.77420043945313 + "value": 69.77420043945312 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3464,7 +3464,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3691,7 +3691,7 @@ }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -3918,7 +3918,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -4141,11 +4141,11 @@ }, "Y": { "type": "float", - "value": 31.37311935424805 + "value": 31.373119354248047 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4372,7 +4372,7 @@ }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -4599,7 +4599,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4822,11 +4822,11 @@ }, "Y": { "type": "float", - "value": 31.35484313964844 + "value": 31.354843139648438 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5049,11 +5049,11 @@ }, "Y": { "type": "float", - "value": 31.27099800109863 + "value": 31.270998001098633 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5276,11 +5276,11 @@ }, "Y": { "type": "float", - "value": 31.18669700622559 + "value": 31.186697006225586 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5503,11 +5503,11 @@ }, "Y": { "type": "float", - "value": 31.18853950500488 + "value": 31.188539505004883 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5526,7 +5526,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -5730,11 +5730,11 @@ }, "Y": { "type": "float", - "value": 34.97428131103516 + "value": 34.974281311035156 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5753,7 +5753,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -5957,11 +5957,11 @@ }, "Y": { "type": "float", - "value": 41.70386123657227 + "value": 41.703861236572266 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5980,7 +5980,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -6180,7 +6180,7 @@ }, "X": { "type": "float", - "value": 87.78037261962891 + "value": 87.7803726196289 }, "Y": { "type": "float", @@ -6188,7 +6188,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6207,7 +6207,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -6415,7 +6415,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6434,7 +6434,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -6638,11 +6638,11 @@ }, "Y": { "type": "float", - "value": 61.83029937744141 + "value": 61.830299377441406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6661,7 +6661,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -6861,7 +6861,7 @@ }, "X": { "type": "float", - "value": 87.77321624755859 + "value": 87.7732162475586 }, "Y": { "type": "float", @@ -6869,7 +6869,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6888,7 +6888,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -7088,15 +7088,15 @@ }, "X": { "type": "float", - "value": 87.81923675537109 + "value": 87.8192367553711 }, "Y": { "type": "float", - "value": 75.14479827880859 + "value": 75.1447982788086 }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -7115,7 +7115,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795297622681 + "value": -1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -7323,7 +7323,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7342,7 +7342,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -7542,7 +7542,7 @@ }, "X": { "type": "float", - "value": 14.41844844818115 + "value": 14.418448448181152 }, "Y": { "type": "float", @@ -7550,7 +7550,7 @@ }, "Z": { "type": "float", - "value": 8.129394700517878e-006 + "value": 0.000008129394700517878 } }, { @@ -7569,7 +7569,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -7777,7 +7777,7 @@ }, "Z": { "type": "float", - "value": 0.01000606268644333 + "value": 0.010006062686443329 } }, { @@ -7796,7 +7796,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -7996,7 +7996,7 @@ }, "X": { "type": "float", - "value": 14.3881368637085 + "value": 14.388136863708496 }, "Y": { "type": "float", @@ -8004,7 +8004,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8023,7 +8023,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -8231,7 +8231,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8250,7 +8250,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -8450,7 +8450,7 @@ }, "X": { "type": "float", - "value": 14.42140865325928 + "value": 14.421408653259277 }, "Y": { "type": "float", @@ -8458,7 +8458,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8477,7 +8477,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -8677,7 +8677,7 @@ }, "X": { "type": "float", - "value": 14.38098049163818 + "value": 14.380980491638184 }, "Y": { "type": "float", @@ -8704,7 +8704,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -8904,7 +8904,7 @@ }, "X": { "type": "float", - "value": 14.42700099945068 + "value": 14.427000999450684 }, "Y": { "type": "float", @@ -8912,7 +8912,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8931,7 +8931,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -9131,7 +9131,7 @@ }, "X": { "type": "float", - "value": 14.43711757659912 + "value": 14.437117576599121 }, "Y": { "type": "float", @@ -9139,7 +9139,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9366,7 +9366,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9593,7 +9593,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9820,7 +9820,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10047,7 +10047,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10274,7 +10274,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10497,11 +10497,11 @@ }, "Y": { "type": "float", - "value": 84.87461090087891 + "value": 84.8746109008789 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10720,7 +10720,7 @@ }, "X": { "type": "float", - "value": 31.18597793579102 + "value": 31.185977935791016 }, "Y": { "type": "float", @@ -10728,7 +10728,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10955,7 +10955,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11182,7 +11182,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11409,7 +11409,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11628,7 +11628,7 @@ }, "X": { "type": "float", - "value": 24.63570022583008 + "value": 24.635700225830078 }, "Y": { "type": "float", @@ -11636,7 +11636,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11859,11 +11859,11 @@ }, "Y": { "type": "float", - "value": 30.88796424865723 + "value": 30.887964248657227 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12082,7 +12082,7 @@ }, "X": { "type": "float", - "value": 71.05252075195313 + "value": 71.05252075195312 }, "Y": { "type": "float", @@ -12090,7 +12090,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12317,7 +12317,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12544,7 +12544,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12763,7 +12763,7 @@ }, "X": { "type": "float", - "value": 74.66420745849609 + "value": 74.6642074584961 }, "Y": { "type": "float", @@ -12771,7 +12771,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12998,7 +12998,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13225,7 +13225,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13448,11 +13448,11 @@ }, "Y": { "type": "float", - "value": 59.68027496337891 + "value": 59.680274963378906 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13671,15 +13671,15 @@ }, "X": { "type": "float", - "value": 82.26467895507813 + "value": 82.26467895507812 }, "Y": { "type": "float", - "value": 59.41255950927734 + "value": 59.412559509277344 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13906,7 +13906,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14133,7 +14133,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14360,7 +14360,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14587,7 +14587,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14806,15 +14806,15 @@ }, "X": { "type": "float", - "value": 72.40073394775391 + "value": 72.4007339477539 }, "Y": { "type": "float", - "value": 40.29931259155273 + "value": 40.299312591552734 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14833,7 +14833,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -15033,7 +15033,7 @@ }, "X": { "type": "float", - "value": 27.25976181030273 + "value": 27.259761810302734 }, "Y": { "type": "float", @@ -15041,7 +15041,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15060,7 +15060,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -15268,7 +15268,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15287,7 +15287,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -15495,7 +15495,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15514,7 +15514,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -15714,7 +15714,7 @@ }, "X": { "type": "float", - "value": 26.9398078918457 + "value": 26.939807891845703 }, "Y": { "type": "float", @@ -15722,7 +15722,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15741,7 +15741,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -15949,7 +15949,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15968,7 +15968,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -16176,7 +16176,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16195,7 +16195,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -16395,7 +16395,7 @@ }, "X": { "type": "float", - "value": 26.86971282958984 + "value": 26.869712829589844 }, "Y": { "type": "float", @@ -16403,7 +16403,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16422,7 +16422,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -16630,7 +16630,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16649,7 +16649,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -16853,11 +16853,11 @@ }, "Y": { "type": "float", - "value": 48.81640243530273 + "value": 48.816402435302734 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16876,7 +16876,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -17084,7 +17084,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17103,7 +17103,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -17303,15 +17303,15 @@ }, "X": { "type": "float", - "value": 22.73359870910645 + "value": 22.733598709106445 }, "Y": { "type": "float", - "value": 54.40962982177734 + "value": 54.409629821777344 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17330,7 +17330,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -17530,15 +17530,15 @@ }, "X": { "type": "float", - "value": 18.63175201416016 + "value": 18.631752014160156 }, "Y": { "type": "float", - "value": 54.54089736938477 + "value": 54.540897369384766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17557,7 +17557,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -17765,7 +17765,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17784,7 +17784,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -17984,7 +17984,7 @@ }, "X": { "type": "float", - "value": 23.17847061157227 + "value": 23.178470611572266 }, "Y": { "type": "float", @@ -17992,7 +17992,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18011,7 +18011,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -18211,7 +18211,7 @@ }, "X": { "type": "float", - "value": 19.07662391662598 + "value": 19.076623916625977 }, "Y": { "type": "float", @@ -18219,7 +18219,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18238,7 +18238,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -18446,7 +18446,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18465,7 +18465,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -18665,7 +18665,7 @@ }, "X": { "type": "float", - "value": 22.7367115020752 + "value": 22.736711502075195 }, "Y": { "type": "float", @@ -18673,7 +18673,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18692,7 +18692,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -18892,7 +18892,7 @@ }, "X": { "type": "float", - "value": 18.63486480712891 + "value": 18.634864807128906 }, "Y": { "type": "float", @@ -18900,7 +18900,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19123,11 +19123,11 @@ }, "Y": { "type": "float", - "value": 60.19692993164063 + "value": 60.196929931640625 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19354,7 +19354,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19573,7 +19573,7 @@ }, "X": { "type": "float", - "value": 40.32376861572266 + "value": 40.323768615722656 }, "Y": { "type": "float", @@ -19581,7 +19581,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19600,7 +19600,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -19808,7 +19808,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19827,7 +19827,7 @@ }, "Bearing": { "type": "float", - "value": 3.141588926315308 + "value": 3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -20027,15 +20027,15 @@ }, "X": { "type": "float", - "value": 55.56067276000977 + "value": 55.560672760009766 }, "Y": { "type": "float", - "value": 77.18698883056641 + "value": 77.1869888305664 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] @@ -20084,7 +20084,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -20095,11 +20095,11 @@ }, "PointY": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -20121,7 +20121,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.04664993286132813 + "value": 0.046649932861328125 }, "PointY": { "type": "float", @@ -20129,7 +20129,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -20235,7 +20235,7 @@ }, "XPosition": { "type": "float", - "value": 20.15293502807617 + "value": 20.152935028076172 }, "YOrientation": { "type": "float", @@ -20243,7 +20243,7 @@ }, "YPosition": { "type": "float", - "value": 0.02767419815063477 + "value": 0.027674198150634766 }, "ZOrientation": { "type": "float", @@ -20301,7 +20301,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", @@ -20317,7 +20317,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20362,7 +20362,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4713997840881348 + "value": -0.47139978408813477 }, "XPosition": { "type": "float", @@ -20370,7 +20370,7 @@ }, "YOrientation": { "type": "float", - "value": -0.8819196224212647 + "value": -0.8819196224212646 }, "YPosition": { "type": "float", @@ -20378,7 +20378,7 @@ }, "ZPosition": { "type": "float", - "value": 1.799991607666016 + "value": 1.7999916076660156 } }, { @@ -20439,7 +20439,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -20484,7 +20484,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", @@ -20500,7 +20500,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -20545,11 +20545,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454430982470512 + "value": 0.024544309824705124 }, "XPosition": { "type": "float", - "value": 44.46341705322266 + "value": 44.463417053222656 }, "YOrientation": { "type": "float", @@ -20557,11 +20557,11 @@ }, "YPosition": { "type": "float", - "value": 65.82058715820313 + "value": 65.82058715820312 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -20679,11 +20679,11 @@ }, "YPosition": { "type": "float", - "value": 27.29776191711426 + "value": 27.297761917114258 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -20728,7 +20728,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0245412103831768 + "value": -0.024541210383176804 }, "XPosition": { "type": "float", @@ -20740,11 +20740,11 @@ }, "YPosition": { "type": "float", - "value": 1.031118869781494 + "value": 1.0311188697814941 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/fort3.git.json b/_module/git/fort3.git.json index 2913e5f..1618d49 100644 --- a/_module/git/fort3.git.json +++ b/_module/git/fort3.git.json @@ -950,7 +950,7 @@ }, "X": { "type": "float", - "value": 55.60785293579102 + "value": 55.607852935791016 }, "Y": { "type": "float", @@ -958,7 +958,7 @@ }, "Z": { "type": "float", - "value": 9.999997138977051 + "value": 9.99999713897705 } }, { @@ -1404,7 +1404,7 @@ }, "X": { "type": "float", - "value": 31.85153961181641 + "value": 31.851539611816406 }, "Y": { "type": "float", @@ -2089,7 +2089,7 @@ }, "Y": { "type": "float", - "value": 42.66466903686523 + "value": 42.664669036865234 }, "Z": { "type": "float", @@ -2339,7 +2339,7 @@ }, "Bearing": { "type": "float", - "value": -3.117048263549805 + "value": -3.1170482635498047 }, "BodyBag": { "type": "byte", @@ -2766,11 +2766,11 @@ }, "X": { "type": "float", - "value": 39.23333358764648 + "value": 39.233333587646484 }, "Y": { "type": "float", - "value": 87.52858734130859 + "value": 87.5285873413086 }, "Z": { "type": "float", @@ -2823,7 +2823,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -2834,11 +2834,11 @@ }, "PointY": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -2853,14 +2853,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.04664993286132813 + "value": 0.046649932861328125 }, "PointY": { "type": "float", @@ -2868,7 +2868,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -3040,7 +3040,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454121224582195 + "value": -0.024541212245821953 }, "XPosition": { "type": "float", @@ -3052,11 +3052,11 @@ }, "YPosition": { "type": "float", - "value": 1.488980293273926 + "value": 1.4889802932739258 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3101,7 +3101,7 @@ }, "XOrientation": { "type": "float", - "value": -1.343088683825044e-006 + "value": -0.0000013430886838250444 }, "XPosition": { "type": "float", @@ -3117,7 +3117,7 @@ }, "ZPosition": { "type": "float", - "value": 9.999997138977051 + "value": 9.99999713897705 } }, { @@ -3162,11 +3162,11 @@ }, "XOrientation": { "type": "float", - "value": 1.343088683825044e-006 + "value": 0.0000013430886838250444 }, "XPosition": { "type": "float", - "value": 30.98315238952637 + "value": 30.983152389526367 }, "YOrientation": { "type": "float", @@ -3292,7 +3292,7 @@ }, "YOrientation": { "type": "float", - "value": -0.04906714335083962 + "value": -0.049067143350839615 }, "YPosition": { "type": "float", @@ -3345,7 +3345,7 @@ }, "XOrientation": { "type": "float", - "value": -1.343088683825044e-006 + "value": -0.0000013430886838250444 }, "XPosition": { "type": "float", @@ -3361,7 +3361,7 @@ }, "ZPosition": { "type": "float", - "value": 14.00000762939453 + "value": 14.000007629394531 } }, { @@ -3406,11 +3406,11 @@ }, "XOrientation": { "type": "float", - "value": -1.343088683825044e-006 + "value": -0.0000013430886838250444 }, "XPosition": { "type": "float", - "value": 54.76303863525391 + "value": 54.763038635253906 }, "YOrientation": { "type": "float", @@ -3418,11 +3418,11 @@ }, "YPosition": { "type": "float", - "value": 31.93421363830566 + "value": 31.934213638305664 }, "ZPosition": { "type": "float", - "value": 10.00296020507813 + "value": 10.002960205078125 } } ] diff --git a/_module/git/frostedpits.git.json b/_module/git/frostedpits.git.json index 4e61823..a700a97 100644 --- a/_module/git/frostedpits.git.json +++ b/_module/git/frostedpits.git.json @@ -1821,7 +1821,7 @@ }, "ZPosition": { "type": "float", - "value": 10.01521682739258 + "value": 10.015216827392578 } }, { @@ -2706,7 +2706,7 @@ }, "YPosition": { "type": "float", - "value": 11.91598606109619 + "value": 11.915986061096191 }, "ZPosition": { "type": "float", @@ -5761,7 +5761,7 @@ }, "XPosition": { "type": "float", - "value": 12.07069492340088 + "value": 12.070694923400879 }, "YOrientation": { "type": "float", @@ -5769,11 +5769,11 @@ }, "YPosition": { "type": "float", - "value": 2.657718181610107 + "value": 2.6577181816101074 }, "ZPosition": { "type": "float", - "value": 15.00350952148438 + "value": 15.003509521484375 } }, { @@ -6856,7 +6856,7 @@ }, "YPosition": { "type": "float", - "value": 45.96895599365234 + "value": 45.968955993652344 }, "ZPosition": { "type": "float", @@ -7851,7 +7851,7 @@ }, "XPosition": { "type": "float", - "value": 59.94933700561523 + "value": 59.949337005615234 }, "YOrientation": { "type": "float", @@ -8854,7 +8854,7 @@ }, "XPosition": { "type": "float", - "value": 1.767436027526856 + "value": 1.7674360275268555 }, "YOrientation": { "type": "float", @@ -8862,7 +8862,7 @@ }, "YPosition": { "type": "float", - "value": 40.20157623291016 + "value": 40.201576232910156 }, "ZPosition": { "type": "float", @@ -10490,7 +10490,7 @@ }, "XPosition": { "type": "float", - "value": 44.25854873657227 + "value": 44.258548736572266 }, "YOrientation": { "type": "float", @@ -10498,11 +10498,11 @@ }, "YPosition": { "type": "float", - "value": 22.75637054443359 + "value": 22.756370544433594 }, "ZPosition": { "type": "float", - "value": 0.02256107330322266 + "value": 0.022561073303222656 } }, { @@ -11135,7 +11135,7 @@ }, "ZPosition": { "type": "float", - "value": 9.573996067047119e-006 + "value": 0.000009573996067047119 } }, { @@ -11756,7 +11756,7 @@ }, "XPosition": { "type": "float", - "value": 29.31690406799316 + "value": 29.316904067993164 }, "YOrientation": { "type": "float", @@ -11768,7 +11768,7 @@ }, "ZPosition": { "type": "float", - "value": 9.715557098388672e-006 + "value": 0.000009715557098388672 } }, { @@ -12397,11 +12397,11 @@ }, "YPosition": { "type": "float", - "value": 30.9926872253418 + "value": 30.992687225341797 }, "ZPosition": { "type": "float", - "value": 9.715557098388672e-006 + "value": 0.000009715557098388672 } }, { @@ -13058,7 +13058,7 @@ }, "Bearing": { "type": "float", - "value": -3.14158821105957 + "value": -3.1415882110595703 }, "CloseLockDC": { "type": "byte", @@ -13256,7 +13256,7 @@ }, "Z": { "type": "float", - "value": 9.560000419616699 + "value": 9.5600004196167 } }, { @@ -13958,7 +13958,7 @@ }, "ZPosition": { "type": "float", - "value": 11.45095634460449 + "value": 11.450956344604492 } }, { @@ -14079,7 +14079,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499998569488525 + "value": 1.4999985694885254 } }, { @@ -14132,7 +14132,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -14255,11 +14255,11 @@ }, "XPosition": { "type": "float", - "value": 50.90689849853516 + "value": 50.906898498535156 }, "YPosition": { "type": "float", - "value": 75.14443969726563 + "value": 75.14443969726562 }, "ZPosition": { "type": "float", @@ -14316,7 +14316,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -14443,11 +14443,11 @@ }, "YPosition": { "type": "float", - "value": 3.519330024719238 + "value": 3.5193300247192383 }, "ZPosition": { "type": "float", - "value": 11.08508682250977 + "value": 11.085086822509766 } }, { @@ -14500,7 +14500,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -14623,7 +14623,7 @@ }, "XPosition": { "type": "float", - "value": 10.31266021728516 + "value": 10.312660217285156 }, "YPosition": { "type": "float", @@ -14684,7 +14684,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -14811,7 +14811,7 @@ }, "YPosition": { "type": "float", - "value": 31.39634704589844 + "value": 31.396347045898438 }, "ZPosition": { "type": "float", @@ -14928,15 +14928,15 @@ }, "XPosition": { "type": "float", - "value": 19.8398551940918 + "value": 19.839855194091797 }, "YPosition": { "type": "float", - "value": 39.80170059204102 + "value": 39.801700592041016 }, "ZPosition": { "type": "float", - "value": 2.100000143051148 + "value": 2.1000001430511475 } }, { @@ -15057,7 +15057,7 @@ }, "ZPosition": { "type": "float", - "value": 1.799998044967651 + "value": 1.7999980449676514 } }, { @@ -15110,7 +15110,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -15192,7 +15192,7 @@ }, "ZPosition": { "type": "float", - "value": 6.351634025573731 + "value": 6.3516340255737305 } }, { @@ -15245,7 +15245,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -15327,7 +15327,7 @@ }, "ZPosition": { "type": "float", - "value": 11.42726707458496 + "value": 11.427267074584961 } }, { @@ -15380,7 +15380,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -15503,7 +15503,7 @@ }, "XPosition": { "type": "float", - "value": 15.50753593444824 + "value": 15.507535934448242 }, "YPosition": { "type": "float", @@ -15511,7 +15511,7 @@ }, "ZPosition": { "type": "float", - "value": 12.21456909179688 + "value": 12.214569091796875 } }, { @@ -15564,7 +15564,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -15695,7 +15695,7 @@ }, "ZPosition": { "type": "float", - "value": 11.88608932495117 + "value": 11.886089324951172 } }, { @@ -15748,7 +15748,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -15815,11 +15815,11 @@ }, "XPosition": { "type": "float", - "value": 60.30273818969727 + "value": 60.302738189697266 }, "YPosition": { "type": "float", - "value": 73.92276000976563 + "value": 73.92276000976562 }, "ZPosition": { "type": "float", @@ -15864,22 +15864,22 @@ }, "PointY": { "type": "float", - "value": -13.18122100830078 + "value": -13.181221008300781 }, "PointZ": { "type": "float", - "value": 0.02500003017485142 + "value": 0.025000030174851418 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.10875701904297 + "value": 10.108757019042969 }, "PointY": { "type": "float", - "value": -12.62993621826172 + "value": -12.629936218261719 }, "PointZ": { "type": "float", @@ -15890,11 +15890,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.02248382568359 + "value": 10.022483825683594 }, "PointY": { "type": "float", - "value": -1.512523651123047 + "value": -1.5125236511230469 }, "PointZ": { "type": "float", @@ -15909,11 +15909,11 @@ }, "PointY": { "type": "float", - "value": -0.02091973647475243 + "value": -0.020919736474752426 }, "PointZ": { "type": "float", - "value": 0.02500003017485142 + "value": 0.025000030174851418 } } ] @@ -16019,7 +16019,7 @@ }, "XPosition": { "type": "float", - "value": 54.11525726318359 + "value": 54.115257263183594 }, "YOrientation": { "type": "float", @@ -16067,11 +16067,11 @@ }, "PointY": { "type": "float", - "value": -0.04742050170898438 + "value": -0.047420501708984375 }, "PointZ": { "type": "float", - "value": 0.3250000178813934 + "value": 0.32500001788139343 } }, { @@ -16082,11 +16082,11 @@ }, "PointY": { "type": "float", - "value": 0.1060066223144531 + "value": 0.10600662231445312 }, "PointZ": { "type": "float", - "value": 0.3250000178813934 + "value": 0.32500001788139343 } }, { @@ -16101,14 +16101,14 @@ }, "PointZ": { "type": "float", - "value": 0.3249999582767487 + "value": 0.32499995827674866 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01214790344238281 + "value": -0.012147903442382812 }, "PointY": { "type": "float", @@ -16116,7 +16116,7 @@ }, "PointZ": { "type": "float", - "value": 0.3249999582767487 + "value": 0.32499995827674866 } }, { @@ -16131,7 +16131,7 @@ }, "PointZ": { "type": "float", - "value": 0.3250000178813934 + "value": 0.32500001788139343 } } ] @@ -16312,7 +16312,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -16370,7 +16370,7 @@ }, "XPosition": { "type": "float", - "value": 59.26678848266602 + "value": 59.266788482666016 }, "YOrientation": { "type": "float", @@ -16432,7 +16432,7 @@ }, "XPosition": { "type": "float", - "value": 23.06696701049805 + "value": 23.066967010498047 }, "YOrientation": { "type": "float", @@ -16444,7 +16444,7 @@ }, "ZPosition": { "type": "float", - "value": 0.3000019192695618 + "value": 0.30000191926956177 } } ] diff --git a/_module/git/frozentimes.git.json b/_module/git/frozentimes.git.json index cb3e977..eb270d6 100644 --- a/_module/git/frozentimes.git.json +++ b/_module/git/frozentimes.git.json @@ -2436,7 +2436,7 @@ }, "XPosition": { "type": "float", - "value": 32.63839721679688 + "value": 32.638397216796875 }, "YOrientation": { "type": "float", @@ -2448,7 +2448,7 @@ }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } } ] @@ -2906,7 +2906,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -3129,7 +3129,7 @@ }, "Z": { "type": "float", - "value": -7.450580596923828e-008 + "value": -7.450580596923828e-8 } }, { @@ -4825,11 +4825,11 @@ }, "X": { "type": "float", - "value": 50.71347808837891 + "value": 50.713478088378906 }, "Y": { "type": "float", - "value": 63.52807998657227 + "value": 63.528079986572266 }, "Z": { "type": "float", @@ -5251,11 +5251,11 @@ }, "X": { "type": "float", - "value": 49.41516494750977 + "value": 49.415164947509766 }, "Y": { "type": "float", - "value": 61.46741104125977 + "value": 61.467411041259766 }, "Z": { "type": "float", @@ -5681,7 +5681,7 @@ }, "Y": { "type": "float", - "value": 60.10503768920898 + "value": 60.105037689208984 }, "Z": { "type": "float", @@ -6103,11 +6103,11 @@ }, "X": { "type": "float", - "value": 50.68542098999023 + "value": 50.685420989990234 }, "Y": { "type": "float", - "value": 60.95910263061523 + "value": 60.959102630615234 }, "Z": { "type": "float", @@ -6963,7 +6963,7 @@ }, "Z": { "type": "float", - "value": 4.994669914245606 + "value": 4.9946699142456055 } }, { @@ -7807,7 +7807,7 @@ }, "X": { "type": "float", - "value": 60.74097061157227 + "value": 60.740970611572266 }, "Y": { "type": "float", @@ -8663,7 +8663,7 @@ }, "Y": { "type": "float", - "value": 70.36428070068359 + "value": 70.3642807006836 }, "Z": { "type": "float", @@ -9511,7 +9511,7 @@ }, "X": { "type": "float", - "value": 57.73852157592773 + "value": 57.738521575927734 }, "Y": { "type": "float", @@ -9937,7 +9937,7 @@ }, "X": { "type": "float", - "value": 58.82275772094727 + "value": 58.822757720947266 }, "Y": { "type": "float", @@ -10367,7 +10367,7 @@ }, "Y": { "type": "float", - "value": 69.34561157226563 + "value": 69.34561157226562 }, "Z": { "type": "float", @@ -10793,7 +10793,7 @@ }, "Y": { "type": "float", - "value": 71.84975433349609 + "value": 71.8497543334961 }, "Z": { "type": "float", @@ -11641,7 +11641,7 @@ }, "X": { "type": "float", - "value": 50.43076324462891 + "value": 50.430763244628906 }, "Y": { "type": "float", @@ -12071,7 +12071,7 @@ }, "Y": { "type": "float", - "value": 72.38181304931641 + "value": 72.3818130493164 }, "Z": { "type": "float", @@ -12923,7 +12923,7 @@ }, "Y": { "type": "float", - "value": 70.99416351318359 + "value": 70.9941635131836 }, "Z": { "type": "float", @@ -13345,11 +13345,11 @@ }, "X": { "type": "float", - "value": 52.44454956054688 + "value": 52.444549560546875 }, "Y": { "type": "float", - "value": 68.77835083007813 + "value": 68.77835083007812 }, "Z": { "type": "float", @@ -13771,11 +13771,11 @@ }, "X": { "type": "float", - "value": 54.10591888427734 + "value": 54.105918884277344 }, "Y": { "type": "float", - "value": 70.72537231445313 + "value": 70.72537231445312 }, "Z": { "type": "float", @@ -14201,11 +14201,11 @@ }, "Y": { "type": "float", - "value": 72.56570434570313 + "value": 72.56570434570312 }, "Z": { "type": "float", - "value": 5.000926017761231 + "value": 5.0009260177612305 } }, { @@ -14631,7 +14631,7 @@ }, "Z": { "type": "float", - "value": 5.382365226745606 + "value": 5.3823652267456055 } }, { @@ -16550,11 +16550,11 @@ }, "X": { "type": "float", - "value": 23.66611480712891 + "value": 23.666114807128906 }, "Y": { "type": "float", - "value": 60.83400726318359 + "value": 60.834007263183594 }, "Z": { "type": "float", @@ -16773,15 +16773,15 @@ }, "X": { "type": "float", - "value": 21.79962348937988 + "value": 21.799623489379883 }, "Y": { "type": "float", - "value": 60.82422256469727 + "value": 60.824222564697266 }, "Z": { "type": "float", - "value": 2.980232238769531e-008 + "value": 2.9802322387695312e-8 } }, { @@ -16996,7 +16996,7 @@ }, "X": { "type": "float", - "value": 28.06956291198731 + "value": 28.069562911987305 }, "Y": { "type": "float", @@ -17004,7 +17004,7 @@ }, "Z": { "type": "float", - "value": -3.725290298461914e-008 + "value": -3.725290298461914e-8 } }, { @@ -17442,7 +17442,7 @@ }, "X": { "type": "float", - "value": 54.67763519287109 + "value": 54.677635192871094 }, "Y": { "type": "float", @@ -17671,7 +17671,7 @@ }, "Y": { "type": "float", - "value": 25.12516403198242 + "value": 25.125164031982422 }, "Z": { "type": "float", @@ -17733,7 +17733,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17797,11 +17797,11 @@ }, "YPosition": { "type": "float", - "value": 47.05260848999023 + "value": 47.052608489990234 }, "ZPosition": { "type": "float", - "value": 6.509417057037354 + "value": 6.5094170570373535 } }, { @@ -17854,7 +17854,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17996,7 +17996,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -18063,11 +18063,11 @@ }, "XPosition": { "type": "float", - "value": 60.23028182983398 + "value": 60.230281829833984 }, "YPosition": { "type": "float", - "value": 56.69518661499023 + "value": 56.695186614990234 }, "ZPosition": { "type": "float", @@ -18143,7 +18143,7 @@ }, "ZPosition": { "type": "float", - "value": 9.298324584960938e-006 + "value": 0.000009298324584960938 } }, { @@ -18190,7 +18190,7 @@ }, "XPosition": { "type": "float", - "value": 32.41534042358398 + "value": 32.415340423583984 }, "YOrientation": { "type": "float", @@ -18198,7 +18198,7 @@ }, "YPosition": { "type": "float", - "value": 48.59499359130859 + "value": 48.594993591308594 }, "ZPosition": { "type": "float", @@ -18261,7 +18261,7 @@ }, "ZPosition": { "type": "float", - "value": -4.470348358154297e-008 + "value": -4.470348358154297e-8 } }, { @@ -18379,7 +18379,7 @@ }, "ZPosition": { "type": "float", - "value": 9.804964065551758e-006 + "value": 0.000009804964065551758 } }, { @@ -18426,7 +18426,7 @@ }, "XPosition": { "type": "float", - "value": 64.37526702880859 + "value": 64.3752670288086 }, "YOrientation": { "type": "float", @@ -18493,11 +18493,11 @@ }, "YPosition": { "type": "float", - "value": 27.59383583068848 + "value": 27.593835830688477 }, "ZPosition": { "type": "float", - "value": 0.02670013159513474 + "value": 0.026700131595134735 } }, { @@ -18556,7 +18556,7 @@ }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } } ] diff --git a/_module/git/g1crypt.git.json b/_module/git/g1crypt.git.json index fd7e45c..6f0ae80 100644 --- a/_module/git/g1crypt.git.json +++ b/_module/git/g1crypt.git.json @@ -266,7 +266,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } } ] @@ -340,11 +340,11 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 15.52755641937256 + "value": 15.527556419372559 }, "YOrientation": { "type": "float", @@ -352,7 +352,7 @@ }, "YPosition": { "type": "float", - "value": 31.71441268920898 + "value": 31.714412689208984 }, "ZPosition": { "type": "float", diff --git a/_module/git/ghoulpit.git.json b/_module/git/ghoulpit.git.json index d3f19ee..9041333 100644 --- a/_module/git/ghoulpit.git.json +++ b/_module/git/ghoulpit.git.json @@ -1376,11 +1376,11 @@ }, "YPosition": { "type": "float", - "value": 17.42514038085938 + "value": 17.425140380859375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2701,11 +2701,11 @@ }, "XOrientation": { "type": "float", - "value": -0.5956986546516419 + "value": -0.5956986546516418 }, "XPosition": { "type": "float", - "value": 24.23278427124023 + "value": 24.232784271240234 }, "YOrientation": { "type": "float", @@ -4050,11 +4050,11 @@ }, "YPosition": { "type": "float", - "value": 23.22839546203613 + "value": 23.228395462036133 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } } ] @@ -4521,7 +4521,7 @@ }, "Y": { "type": "float", - "value": 25.44282531738281 + "value": 25.442825317382812 }, "Z": { "type": "float", @@ -4544,7 +4544,7 @@ }, "Bearing": { "type": "float", - "value": -0.4172422885894775 + "value": -0.41724228858947754 }, "BodyBag": { "type": "byte", @@ -4744,15 +4744,15 @@ }, "X": { "type": "float", - "value": 14.98711395263672 + "value": 14.987113952636719 }, "Y": { "type": "float", - "value": 31.33720397949219 + "value": 31.337203979492188 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5198,15 +5198,15 @@ }, "X": { "type": "float", - "value": 14.60287475585938 + "value": 14.602874755859375 }, "Y": { "type": "float", - "value": 31.68829154968262 + "value": 31.688291549682617 }, "Z": { "type": "float", - "value": 0.4450469017028809 + "value": 0.44504690170288086 } }, { @@ -5425,11 +5425,11 @@ }, "X": { "type": "float", - "value": 23.76015090942383 + "value": 23.760150909423828 }, "Y": { "type": "float", - "value": 25.89308166503906 + "value": 25.893081665039062 }, "Z": { "type": "float", @@ -5660,7 +5660,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5883,11 +5883,11 @@ }, "Y": { "type": "float", - "value": 29.32849502563477 + "value": 29.328495025634766 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6114,7 +6114,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6333,7 +6333,7 @@ }, "X": { "type": "float", - "value": 6.493270874023438 + "value": 6.4932708740234375 }, "Y": { "type": "float", @@ -6341,7 +6341,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6564,11 +6564,11 @@ }, "Y": { "type": "float", - "value": 25.58577346801758 + "value": 25.585773468017578 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6791,11 +6791,11 @@ }, "Y": { "type": "float", - "value": 25.21150207519531 + "value": 25.211502075195312 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7018,11 +7018,11 @@ }, "Y": { "type": "float", - "value": 24.57991790771484 + "value": 24.579917907714844 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7241,7 +7241,7 @@ }, "X": { "type": "float", - "value": 20.56343841552734 + "value": 20.563438415527344 }, "Y": { "type": "float", @@ -7249,7 +7249,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7476,7 +7476,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7703,7 +7703,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7922,15 +7922,15 @@ }, "X": { "type": "float", - "value": 44.76712799072266 + "value": 44.767127990722656 }, "Y": { "type": "float", - "value": 24.68138122558594 + "value": 24.681381225585938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8149,15 +8149,15 @@ }, "X": { "type": "float", - "value": 45.04782867431641 + "value": 45.047828674316406 }, "Y": { "type": "float", - "value": 24.02640533447266 + "value": 24.026405334472656 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8380,11 +8380,11 @@ }, "Y": { "type": "float", - "value": 27.96455383300781 + "value": 27.964553833007812 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8603,15 +8603,15 @@ }, "X": { "type": "float", - "value": 21.65954208374023 + "value": 21.659542083740234 }, "Y": { "type": "float", - "value": 27.73190307617188 + "value": 27.731903076171875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8830,15 +8830,15 @@ }, "X": { "type": "float", - "value": 21.40043449401856 + "value": 21.400434494018555 }, "Y": { "type": "float", - "value": 25.97676849365234 + "value": 25.976768493652344 }, "Z": { "type": "float", - "value": -0.01373863220214844 + "value": -0.013738632202148438 } }, { @@ -9057,15 +9057,15 @@ }, "X": { "type": "float", - "value": 27.25685119628906 + "value": 27.256851196289062 }, "Y": { "type": "float", - "value": 22.61931419372559 + "value": 22.619314193725586 }, "Z": { "type": "float", - "value": 0.4704513549804688 + "value": 0.47045135498046875 } }, { @@ -9284,7 +9284,7 @@ }, "X": { "type": "float", - "value": 27.35664367675781 + "value": 27.356643676757812 }, "Y": { "type": "float", @@ -9511,7 +9511,7 @@ }, "X": { "type": "float", - "value": 28.87803268432617 + "value": 28.878032684326172 }, "Y": { "type": "float", @@ -9738,7 +9738,7 @@ }, "X": { "type": "float", - "value": 31.25011825561523 + "value": 31.250118255615234 }, "Y": { "type": "float", @@ -9746,7 +9746,7 @@ }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } }, { @@ -9965,15 +9965,15 @@ }, "X": { "type": "float", - "value": 26.94876861572266 + "value": 26.948768615722656 }, "Y": { "type": "float", - "value": 45.51663208007813 + "value": 45.516632080078125 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -10192,15 +10192,15 @@ }, "X": { "type": "float", - "value": 27.05442810058594 + "value": 27.054428100585938 }, "Y": { "type": "float", - "value": 45.23950576782227 + "value": 45.239505767822266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10419,7 +10419,7 @@ }, "X": { "type": "float", - "value": 32.64818954467773 + "value": 32.648189544677734 }, "Y": { "type": "float", @@ -10427,7 +10427,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10650,7 +10650,7 @@ }, "Y": { "type": "float", - "value": 24.63506126403809 + "value": 24.635061264038086 }, "Z": { "type": "float", @@ -10873,15 +10873,15 @@ }, "X": { "type": "float", - "value": 31.18037796020508 + "value": 31.180377960205078 }, "Y": { "type": "float", - "value": 15.78073215484619 + "value": 15.780732154846191 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } } ] @@ -10947,7 +10947,7 @@ }, "XPosition": { "type": "float", - "value": 23.67253112792969 + "value": 23.672531127929688 }, "YOrientation": { "type": "float", @@ -10955,11 +10955,11 @@ }, "YPosition": { "type": "float", - "value": 22.61786079406738 + "value": 22.617860794067383 }, "ZPosition": { "type": "float", - "value": 0.4559574127197266 + "value": 0.45595741271972656 } } ] diff --git a/_module/git/goblincaves.git.json b/_module/git/goblincaves.git.json index 8475907..da2e19a 100644 --- a/_module/git/goblincaves.git.json +++ b/_module/git/goblincaves.git.json @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -515,7 +515,7 @@ }, "Bearing": { "type": "float", - "value": -3.117047309875488 + "value": -3.1170473098754883 }, "BodyBag": { "type": "byte", @@ -715,7 +715,7 @@ }, "X": { "type": "float", - "value": 133.5903625488281 + "value": 133.59036254882812 }, "Y": { "type": "float", @@ -723,7 +723,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -946,7 +946,7 @@ }, "Y": { "type": "float", - "value": 118.6601104736328 + "value": 118.66011047363281 }, "Z": { "type": "float", @@ -1234,15 +1234,15 @@ }, "X": { "type": "float", - "value": 133.1430053710938 + "value": 133.14300537109375 }, "Y": { "type": "float", - "value": 118.6609573364258 + "value": 118.66095733642578 }, "Z": { "type": "float", - "value": 1.044801473617554 + "value": 1.0448014736175537 } }, { @@ -1526,15 +1526,15 @@ }, "X": { "type": "float", - "value": 134.4652709960938 + "value": 134.46527099609375 }, "Y": { "type": "float", - "value": 118.6598205566406 + "value": 118.65982055664062 }, "Z": { "type": "float", - "value": 1.085360407829285 + "value": 1.0853604078292847 } }, { @@ -1818,15 +1818,15 @@ }, "X": { "type": "float", - "value": 136.0215911865234 + "value": 136.02159118652344 }, "Y": { "type": "float", - "value": 122.5986709594727 + "value": 122.59867095947266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2110,15 +2110,15 @@ }, "X": { "type": "float", - "value": 130.9624328613281 + "value": 130.96243286132812 }, "Y": { "type": "float", - "value": 122.8921279907227 + "value": 122.89212799072266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2337,11 +2337,11 @@ }, "X": { "type": "float", - "value": 133.9026489257813 + "value": 133.90264892578125 }, "Y": { "type": "float", - "value": 114.1495971679688 + "value": 114.14959716796875 }, "Z": { "type": "float", @@ -2568,11 +2568,11 @@ }, "Y": { "type": "float", - "value": 127.6679992675781 + "value": 127.66799926757812 }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } }, { @@ -2791,15 +2791,15 @@ }, "X": { "type": "float", - "value": 2.157108068466187 + "value": 2.1571080684661865 }, "Y": { "type": "float", - "value": 121.5215301513672 + "value": 121.52153015136719 }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } }, { @@ -3018,7 +3018,7 @@ }, "X": { "type": "float", - "value": 3.344709396362305 + "value": 3.3447093963623047 }, "Y": { "type": "float", @@ -3026,7 +3026,7 @@ }, "Z": { "type": "float", - "value": 0.2499998807907105 + "value": 0.24999988079071045 } }, { @@ -3245,15 +3245,15 @@ }, "X": { "type": "float", - "value": 13.88039016723633 + "value": 13.880390167236328 }, "Y": { "type": "float", - "value": 125.7932739257813 + "value": 125.79327392578125 }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } }, { @@ -3476,11 +3476,11 @@ }, "Y": { "type": "float", - "value": 124.7403182983398 + "value": 124.74031829833984 }, "Z": { "type": "float", - "value": 0.2052574157714844 + "value": 0.20525741577148438 } }, { @@ -3703,11 +3703,11 @@ }, "Y": { "type": "float", - "value": 121.7895584106445 + "value": 121.78955841064453 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3726,7 +3726,7 @@ }, "Bearing": { "type": "float", - "value": 1.619882822036743 + "value": 1.6198828220367432 }, "BodyBag": { "type": "byte", @@ -3931,11 +3931,11 @@ }, "Y": { "type": "float", - "value": 139.4102478027344 + "value": 139.41024780273438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4159,11 +4159,11 @@ }, "Y": { "type": "float", - "value": 144.5666809082031 + "value": 144.56668090820312 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] @@ -4222,7 +4222,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -4570,7 +4570,7 @@ }, "ZPosition": { "type": "float", - "value": 0.9392466545104981 + "value": 0.939246654510498 } } ] @@ -4652,7 +4652,7 @@ }, "XPosition": { "type": "float", - "value": 51.60678100585938 + "value": 51.606781005859375 }, "YOrientation": { "type": "float", @@ -4660,11 +4660,11 @@ }, "YPosition": { "type": "float", - "value": 106.8298492431641 + "value": 106.82984924316406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4713,7 +4713,7 @@ }, "XPosition": { "type": "float", - "value": 74.64285278320313 + "value": 74.64285278320312 }, "YOrientation": { "type": "float", @@ -4725,7 +4725,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4770,11 +4770,11 @@ }, "XOrientation": { "type": "float", - "value": -0.1950902044773102 + "value": -0.19509020447731018 }, "XPosition": { "type": "float", - "value": 125.7853393554688 + "value": 125.78533935546875 }, "YOrientation": { "type": "float", @@ -4782,11 +4782,11 @@ }, "YPosition": { "type": "float", - "value": 68.32253265380859 + "value": 68.3225326538086 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4835,7 +4835,7 @@ }, "XPosition": { "type": "float", - "value": 88.18735504150391 + "value": 88.1873550415039 }, "YOrientation": { "type": "float", @@ -4847,7 +4847,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4904,11 +4904,11 @@ }, "YPosition": { "type": "float", - "value": 66.08816528320313 + "value": 66.08816528320312 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4957,7 +4957,7 @@ }, "XPosition": { "type": "float", - "value": 9.697830200195313 + "value": 9.697830200195312 }, "YOrientation": { "type": "float", @@ -4965,11 +4965,11 @@ }, "YPosition": { "type": "float", - "value": 27.93794631958008 + "value": 27.937946319580078 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5030,7 +5030,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5087,11 +5087,11 @@ }, "YPosition": { "type": "float", - "value": 38.24881744384766 + "value": 38.248817443847656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5148,11 +5148,11 @@ }, "YPosition": { "type": "float", - "value": 12.47165107727051 + "value": 12.471651077270508 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5201,7 +5201,7 @@ }, "XPosition": { "type": "float", - "value": 139.2710876464844 + "value": 139.27108764648438 }, "YOrientation": { "type": "float", @@ -5213,7 +5213,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5258,7 +5258,7 @@ }, "XOrientation": { "type": "float", - "value": 0.170963928103447 + "value": 0.17096392810344696 }, "XPosition": { "type": "float", @@ -5270,11 +5270,11 @@ }, "YPosition": { "type": "float", - "value": 131.8905181884766 + "value": 131.89051818847656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5319,11 +5319,11 @@ }, "XOrientation": { "type": "float", - "value": 0.170963928103447 + "value": 0.17096392810344696 }, "XPosition": { "type": "float", - "value": 10.45299339294434 + "value": 10.452993392944336 }, "YOrientation": { "type": "float", @@ -5331,11 +5331,11 @@ }, "YPosition": { "type": "float", - "value": 117.8516464233398 + "value": 117.85164642333984 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5380,11 +5380,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454287931323052 + "value": -0.024542879313230515 }, "XPosition": { "type": "float", - "value": 133.8774566650391 + "value": 133.87745666503906 }, "YOrientation": { "type": "float", @@ -5392,11 +5392,11 @@ }, "YPosition": { "type": "float", - "value": 115.9791641235352 + "value": 115.97916412353516 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5445,7 +5445,7 @@ }, "XPosition": { "type": "float", - "value": 131.3762359619141 + "value": 131.37623596191406 }, "YOrientation": { "type": "float", @@ -5453,11 +5453,11 @@ }, "YPosition": { "type": "float", - "value": 27.88557624816895 + "value": 27.885576248168945 }, "ZPosition": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -5506,7 +5506,7 @@ }, "XPosition": { "type": "float", - "value": 106.2086868286133 + "value": 106.20868682861328 }, "YOrientation": { "type": "float", @@ -5518,7 +5518,7 @@ }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -5579,7 +5579,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5640,7 +5640,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/grasslands.git.json b/_module/git/grasslands.git.json index ed11522..325fd5d 100644 --- a/_module/git/grasslands.git.json +++ b/_module/git/grasslands.git.json @@ -257,7 +257,7 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", @@ -497,15 +497,15 @@ }, "X": { "type": "float", - "value": 34.43782806396484 + "value": 34.437828063964844 }, "Y": { "type": "float", - "value": 17.84532165527344 + "value": 17.845321655273438 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -732,7 +732,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -955,11 +955,11 @@ }, "Y": { "type": "float", - "value": 18.94124603271484 + "value": 18.941246032714844 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1186,7 +1186,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1409,11 +1409,11 @@ }, "Y": { "type": "float", - "value": 34.50342178344727 + "value": 34.503421783447266 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1632,15 +1632,15 @@ }, "X": { "type": "float", - "value": 92.52199554443359 + "value": 92.5219955444336 }, "Y": { "type": "float", - "value": 48.96966934204102 + "value": 48.969669342041016 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1859,7 +1859,7 @@ }, "X": { "type": "float", - "value": 90.98769378662109 + "value": 90.9876937866211 }, "Y": { "type": "float", @@ -1867,7 +1867,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2094,7 +2094,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2321,7 +2321,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2548,7 +2548,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2767,7 +2767,7 @@ }, "X": { "type": "float", - "value": 41.89013290405273 + "value": 41.890132904052734 }, "Y": { "type": "float", @@ -2775,7 +2775,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3002,7 +3002,7 @@ }, "Z": { "type": "float", - "value": 0.003126144409179688 + "value": 0.0031261444091796875 } }, { @@ -3221,11 +3221,11 @@ }, "X": { "type": "float", - "value": 20.7556266784668 + "value": 20.755626678466797 }, "Y": { "type": "float", - "value": 50.15726470947266 + "value": 50.157264709472656 }, "Z": { "type": "float", @@ -3448,15 +3448,15 @@ }, "X": { "type": "float", - "value": 30.71175956726074 + "value": 30.711759567260742 }, "Y": { "type": "float", - "value": 39.10635375976563 + "value": 39.106353759765625 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3683,7 +3683,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3910,7 +3910,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -3951,15 +3951,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.06473159790039063 + "value": -0.06473159790039062 }, "PointY": { "type": "float", - "value": -0.1941781044006348 + "value": -0.19417810440063477 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -3970,11 +3970,11 @@ }, "PointY": { "type": "float", - "value": -0.1941766738891602 + "value": -0.19417667388916016 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -3985,7 +3985,7 @@ }, "PointY": { "type": "float", - "value": 2.977399349212647 + "value": 2.9773993492126465 }, "PointZ": { "type": "float", @@ -3996,7 +3996,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointY": { "type": "float", @@ -4004,7 +4004,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -4019,7 +4019,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -4215,7 +4215,7 @@ }, "XPosition": { "type": "float", - "value": 24.5659351348877 + "value": 24.565935134887695 }, "YOrientation": { "type": "float", @@ -4227,7 +4227,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4284,11 +4284,11 @@ }, "YPosition": { "type": "float", - "value": 81.43483734130859 + "value": 81.4348373413086 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4337,7 +4337,7 @@ }, "XPosition": { "type": "float", - "value": 28.76605033874512 + "value": 28.766050338745117 }, "YOrientation": { "type": "float", @@ -4349,7 +4349,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4406,11 +4406,11 @@ }, "YPosition": { "type": "float", - "value": 55.06667327880859 + "value": 55.066673278808594 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4459,7 +4459,7 @@ }, "XPosition": { "type": "float", - "value": 84.06765747070313 + "value": 84.06765747070312 }, "YOrientation": { "type": "float", @@ -4471,7 +4471,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4528,11 +4528,11 @@ }, "YPosition": { "type": "float", - "value": 24.26578330993652 + "value": 24.265783309936523 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4585,7 +4585,7 @@ }, "YOrientation": { "type": "float", - "value": -0.04906726256012917 + "value": -0.049067262560129166 }, "YPosition": { "type": "float", @@ -4593,7 +4593,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4642,7 +4642,7 @@ }, "XPosition": { "type": "float", - "value": 13.36560821533203 + "value": 13.365608215332031 }, "YOrientation": { "type": "float", @@ -4654,7 +4654,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4707,15 +4707,15 @@ }, "YOrientation": { "type": "float", - "value": -0.04906726256012917 + "value": -0.049067262560129166 }, "YPosition": { "type": "float", - "value": 26.59918403625488 + "value": 26.599184036254883 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4788,7 +4788,7 @@ }, "YOrientation": { "type": "float", - "value": -0.04906726256012917 + "value": -0.049067262560129166 }, "YPosition": { "type": "float", @@ -4796,7 +4796,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4853,11 +4853,11 @@ }, "YPosition": { "type": "float", - "value": 1.606853008270264 + "value": 1.6068530082702637 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } } ] diff --git a/_module/git/graveyard1.git.json b/_module/git/graveyard1.git.json index 9f87fca..370663a 100644 --- a/_module/git/graveyard1.git.json +++ b/_module/git/graveyard1.git.json @@ -479,7 +479,7 @@ }, "Y": { "type": "float", - "value": 63.86999893188477 + "value": 63.869998931884766 }, "Z": { "type": "float", @@ -942,15 +942,15 @@ }, "X": { "type": "float", - "value": 39.40537261962891 + "value": 39.405372619628906 }, "Y": { "type": "float", - "value": 30.1429328918457 + "value": 30.142932891845703 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1169,15 +1169,15 @@ }, "X": { "type": "float", - "value": 39.86257171630859 + "value": 39.862571716308594 }, "Y": { "type": "float", - "value": 31.02246284484863 + "value": 31.022462844848633 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1400,11 +1400,11 @@ }, "Y": { "type": "float", - "value": 31.04508972167969 + "value": 31.045089721679688 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1631,7 +1631,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1850,7 +1850,7 @@ }, "X": { "type": "float", - "value": 39.44659805297852 + "value": 39.446598052978516 }, "Y": { "type": "float", @@ -1858,7 +1858,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2085,7 +2085,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2308,11 +2308,11 @@ }, "Y": { "type": "float", - "value": 33.24469375610352 + "value": 33.244693756103516 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2535,11 +2535,11 @@ }, "Y": { "type": "float", - "value": 34.30783081054688 + "value": 34.307830810546875 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2758,7 +2758,7 @@ }, "X": { "type": "float", - "value": 39.46227645874023 + "value": 39.462276458740234 }, "Y": { "type": "float", @@ -2766,7 +2766,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2985,15 +2985,15 @@ }, "X": { "type": "float", - "value": 39.94419097900391 + "value": 39.944190979003906 }, "Y": { "type": "float", - "value": 35.30087280273438 + "value": 35.300872802734375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3220,7 +3220,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3447,7 +3447,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3674,7 +3674,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3901,7 +3901,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4120,7 +4120,7 @@ }, "X": { "type": "float", - "value": 39.57876586914063 + "value": 39.578765869140625 }, "Y": { "type": "float", @@ -4128,7 +4128,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4355,7 +4355,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4582,7 +4582,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4809,7 +4809,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5032,11 +5032,11 @@ }, "Y": { "type": "float", - "value": 40.56064605712891 + "value": 40.560646057128906 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5263,7 +5263,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5482,7 +5482,7 @@ }, "X": { "type": "float", - "value": 39.68949127197266 + "value": 39.689491271972656 }, "Y": { "type": "float", @@ -5490,7 +5490,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5717,7 +5717,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5944,7 +5944,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6171,7 +6171,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6390,15 +6390,15 @@ }, "X": { "type": "float", - "value": 39.73138046264648 + "value": 39.731380462646484 }, "Y": { "type": "float", - "value": 43.91760635375977 + "value": 43.917606353759766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6621,11 +6621,11 @@ }, "Y": { "type": "float", - "value": 30.19005393981934 + "value": 30.190053939819336 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6844,7 +6844,7 @@ }, "X": { "type": "float", - "value": 30.33421897888184 + "value": 30.334218978881836 }, "Y": { "type": "float", @@ -6852,7 +6852,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7071,7 +7071,7 @@ }, "X": { "type": "float", - "value": 30.79141807556152 + "value": 30.791418075561523 }, "Y": { "type": "float", @@ -7079,7 +7079,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7302,11 +7302,11 @@ }, "Y": { "type": "float", - "value": 31.11483764648438 + "value": 31.114837646484375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7533,7 +7533,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7752,15 +7752,15 @@ }, "X": { "type": "float", - "value": 30.37544441223145 + "value": 30.375444412231445 }, "Y": { "type": "float", - "value": 32.10787963867188 + "value": 32.107879638671875 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7983,11 +7983,11 @@ }, "Y": { "type": "float", - "value": 33.29181289672852 + "value": 33.291812896728516 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8206,7 +8206,7 @@ }, "X": { "type": "float", - "value": 30.38436317443848 + "value": 30.384363174438477 }, "Y": { "type": "float", @@ -8214,7 +8214,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8441,7 +8441,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8660,7 +8660,7 @@ }, "X": { "type": "float", - "value": 30.39112281799316 + "value": 30.391122817993164 }, "Y": { "type": "float", @@ -8668,7 +8668,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8887,7 +8887,7 @@ }, "X": { "type": "float", - "value": 30.87303733825684 + "value": 30.873037338256836 }, "Y": { "type": "float", @@ -8895,7 +8895,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9122,7 +9122,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9341,7 +9341,7 @@ }, "X": { "type": "float", - "value": 30.88195610046387 + "value": 30.881956100463867 }, "Y": { "type": "float", @@ -9349,7 +9349,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9568,7 +9568,7 @@ }, "X": { "type": "float", - "value": 30.43301200866699 + "value": 30.433012008666992 }, "Y": { "type": "float", @@ -9576,7 +9576,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9803,7 +9803,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10022,15 +10022,15 @@ }, "X": { "type": "float", - "value": 30.50761222839356 + "value": 30.507612228393555 }, "Y": { "type": "float", - "value": 38.43078994750977 + "value": 38.430789947509766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10249,7 +10249,7 @@ }, "X": { "type": "float", - "value": 30.98952674865723 + "value": 30.989526748657227 }, "Y": { "type": "float", @@ -10257,7 +10257,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10480,11 +10480,11 @@ }, "Y": { "type": "float", - "value": 39.42383193969727 + "value": 39.423831939697266 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10703,15 +10703,15 @@ }, "X": { "type": "float", - "value": 30.99844551086426 + "value": 30.998445510864258 }, "Y": { "type": "float", - "value": 40.60776519775391 + "value": 40.607765197753906 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10930,15 +10930,15 @@ }, "X": { "type": "float", - "value": 30.54950141906738 + "value": 30.549501419067383 }, "Y": { "type": "float", - "value": 40.63039398193359 + "value": 40.630393981933594 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11165,7 +11165,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11384,15 +11384,15 @@ }, "X": { "type": "float", - "value": 30.61833763122559 + "value": 30.618337631225586 }, "Y": { "type": "float", - "value": 41.78775024414063 + "value": 41.787750244140625 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11611,7 +11611,7 @@ }, "X": { "type": "float", - "value": 31.10025215148926 + "value": 31.100252151489258 }, "Y": { "type": "float", @@ -11619,7 +11619,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11838,15 +11838,15 @@ }, "X": { "type": "float", - "value": 30.65130805969238 + "value": 30.651308059692383 }, "Y": { "type": "float", - "value": 42.78079223632813 + "value": 42.780792236328125 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12069,11 +12069,11 @@ }, "Y": { "type": "float", - "value": 43.96472549438477 + "value": 43.964725494384766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12292,7 +12292,7 @@ }, "X": { "type": "float", - "value": 30.66022682189941 + "value": 30.660226821899414 }, "Y": { "type": "float", @@ -12300,7 +12300,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12746,7 +12746,7 @@ }, "X": { "type": "float", - "value": 34.83327484130859 + "value": 34.833274841308594 }, "Y": { "type": "float", @@ -12754,7 +12754,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12977,11 +12977,11 @@ }, "Y": { "type": "float", - "value": 44.69020843505859 + "value": 44.690208435058594 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13204,7 +13204,7 @@ }, "Y": { "type": "float", - "value": 18.37082672119141 + "value": 18.370826721191406 }, "Z": { "type": "float", @@ -13435,7 +13435,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13654,7 +13654,7 @@ }, "X": { "type": "float", - "value": 34.70211791992188 + "value": 34.702117919921875 }, "Y": { "type": "float", @@ -13662,7 +13662,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13908,7 +13908,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -14108,7 +14108,7 @@ }, "X": { "type": "float", - "value": 43.89511108398438 + "value": 43.895111083984375 }, "Y": { "type": "float", @@ -14116,7 +14116,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14135,7 +14135,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -14335,7 +14335,7 @@ }, "X": { "type": "float", - "value": 26.95257186889648 + "value": 26.952571868896484 }, "Y": { "type": "float", @@ -14343,7 +14343,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14362,7 +14362,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -14562,15 +14562,15 @@ }, "X": { "type": "float", - "value": 18.13939476013184 + "value": 18.139394760131836 }, "Y": { "type": "float", - "value": 50.73724746704102 + "value": 50.737247467041016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14589,7 +14589,7 @@ }, "Bearing": { "type": "float", - "value": 1.546251535415649 + "value": 1.5462515354156494 }, "BodyBag": { "type": "byte", @@ -14789,7 +14789,7 @@ }, "X": { "type": "float", - "value": 12.00918292999268 + "value": 12.009182929992676 }, "Y": { "type": "float", @@ -14816,7 +14816,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -15024,7 +15024,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15043,7 +15043,7 @@ }, "Bearing": { "type": "float", - "value": 1.546251535415649 + "value": 1.5462515354156494 }, "BodyBag": { "type": "byte", @@ -15247,11 +15247,11 @@ }, "Y": { "type": "float", - "value": 50.63312149047852 + "value": 50.633121490478516 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15478,7 +15478,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -15697,7 +15697,7 @@ }, "X": { "type": "float", - "value": 10.2558069229126 + "value": 10.255806922912598 }, "Y": { "type": "float", @@ -15705,7 +15705,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -15924,7 +15924,7 @@ }, "X": { "type": "float", - "value": 10.17882442474365 + "value": 10.178824424743652 }, "Y": { "type": "float", @@ -15932,7 +15932,7 @@ }, "Z": { "type": "float", - "value": -1.788139343261719e-007 + "value": -0.00000017881393432617188 } }, { @@ -16159,7 +16159,7 @@ }, "Z": { "type": "float", - "value": 0.03000000305473805 + "value": 0.030000003054738045 } } ] @@ -16208,7 +16208,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -16219,18 +16219,18 @@ }, "PointY": { "type": "float", - "value": -0.1115555763244629 + "value": -0.11155557632446289 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.0058650970459 + "value": 10.005865097045898 }, "PointY": { "type": "float", @@ -16249,11 +16249,11 @@ }, "PointY": { "type": "float", - "value": 2.177084684371948 + "value": 2.1770846843719482 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -16437,7 +16437,7 @@ }, "YPosition": { "type": "float", - "value": 1.090238571166992 + "value": 1.0902385711669922 }, "ZPosition": { "type": "float", @@ -16486,7 +16486,7 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", @@ -16502,7 +16502,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16547,11 +16547,11 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 35.13528442382813 + "value": 35.135284423828125 }, "YOrientation": { "type": "float", @@ -16608,7 +16608,7 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", @@ -16620,11 +16620,11 @@ }, "YPosition": { "type": "float", - "value": 60.12765502929688 + "value": 60.127655029296875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16669,7 +16669,7 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", @@ -16685,7 +16685,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16730,11 +16730,11 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 19.32527923583984 + "value": 19.325279235839844 }, "YOrientation": { "type": "float", @@ -16742,11 +16742,11 @@ }, "YPosition": { "type": "float", - "value": 40.48830413818359 + "value": 40.488304138183594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16791,11 +16791,11 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 34.88385391235352 + "value": 34.883853912353516 }, "YOrientation": { "type": "float", @@ -16803,11 +16803,11 @@ }, "YPosition": { "type": "float", - "value": 28.92513275146484 + "value": 28.925132751464844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/graveyard2.git.json b/_module/git/graveyard2.git.json index 48ca510..a36ef52 100644 --- a/_module/git/graveyard2.git.json +++ b/_module/git/graveyard2.git.json @@ -286,7 +286,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -505,7 +505,7 @@ }, "X": { "type": "float", - "value": 34.70211791992188 + "value": 34.702117919921875 }, "Y": { "type": "float", @@ -513,7 +513,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -732,7 +732,7 @@ }, "X": { "type": "float", - "value": 10.17882442474365 + "value": 10.178824424743652 }, "Y": { "type": "float", @@ -740,7 +740,7 @@ }, "Z": { "type": "float", - "value": -1.788139343261719e-007 + "value": -0.00000017881393432617188 } }, { @@ -967,7 +967,7 @@ }, "Z": { "type": "float", - "value": 0.03000000305473805 + "value": 0.030000003054738045 } } ] @@ -1016,7 +1016,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -1027,18 +1027,18 @@ }, "PointY": { "type": "float", - "value": -0.1115555763244629 + "value": -0.11155557632446289 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.0058650970459 + "value": 10.005865097045898 }, "PointY": { "type": "float", @@ -1057,11 +1057,11 @@ }, "PointY": { "type": "float", - "value": 2.177084684371948 + "value": 2.1770846843719482 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -1245,7 +1245,7 @@ }, "YPosition": { "type": "float", - "value": 1.090238571166992 + "value": 1.0902385711669922 }, "ZPosition": { "type": "float", @@ -1294,7 +1294,7 @@ }, "XOrientation": { "type": "float", - "value": 3.727274588527507e-006 + "value": 0.000003727274588527507 }, "XPosition": { "type": "float", @@ -1310,7 +1310,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1355,7 +1355,7 @@ }, "XOrientation": { "type": "float", - "value": 3.727274588527507e-006 + "value": 0.000003727274588527507 }, "XPosition": { "type": "float", @@ -1371,7 +1371,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1420,7 +1420,7 @@ }, "XPosition": { "type": "float", - "value": 10.16668319702148 + "value": 10.166683197021484 }, "YOrientation": { "type": "float", @@ -1428,11 +1428,11 @@ }, "YPosition": { "type": "float", - "value": 19.64270210266113 + "value": 19.642702102661133 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1481,7 +1481,7 @@ }, "XPosition": { "type": "float", - "value": 69.73403167724609 + "value": 69.7340316772461 }, "YOrientation": { "type": "float", @@ -1489,11 +1489,11 @@ }, "YPosition": { "type": "float", - "value": 28.55564117431641 + "value": 28.555641174316406 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1538,7 +1538,7 @@ }, "XOrientation": { "type": "float", - "value": 3.727274588527507e-006 + "value": 0.000003727274588527507 }, "XPosition": { "type": "float", @@ -1550,11 +1550,11 @@ }, "YPosition": { "type": "float", - "value": 51.22561645507813 + "value": 51.225616455078125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1599,7 +1599,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3826854825019836 + "value": -0.38268548250198364 }, "XPosition": { "type": "float", @@ -1615,7 +1615,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/graveyard3.git.json b/_module/git/graveyard3.git.json index e7dfcf8..42278f7 100644 --- a/_module/git/graveyard3.git.json +++ b/_module/git/graveyard3.git.json @@ -286,7 +286,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -505,7 +505,7 @@ }, "X": { "type": "float", - "value": 34.70211791992188 + "value": 34.702117919921875 }, "Y": { "type": "float", @@ -513,7 +513,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -732,7 +732,7 @@ }, "X": { "type": "float", - "value": 10.17882442474365 + "value": 10.178824424743652 }, "Y": { "type": "float", @@ -740,7 +740,7 @@ }, "Z": { "type": "float", - "value": -1.788139343261719e-007 + "value": -0.00000017881393432617188 } }, { @@ -967,7 +967,7 @@ }, "Z": { "type": "float", - "value": 0.03000000305473805 + "value": 0.030000003054738045 } }, { @@ -1194,7 +1194,7 @@ }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -1413,7 +1413,7 @@ }, "X": { "type": "float", - "value": 15.38870048522949 + "value": 15.388700485229492 }, "Y": { "type": "float", @@ -1440,7 +1440,7 @@ }, "Bearing": { "type": "float", - "value": -0.2945242524147034 + "value": -0.29452425241470337 }, "BodyBag": { "type": "byte", @@ -1640,11 +1640,11 @@ }, "X": { "type": "float", - "value": 15.37696075439453 + "value": 15.376960754394531 }, "Y": { "type": "float", - "value": 15.79255104064941 + "value": 15.792551040649414 }, "Z": { "type": "float", @@ -1667,7 +1667,7 @@ }, "Bearing": { "type": "float", - "value": -1.448077321052551 + "value": -1.4480773210525513 }, "BodyBag": { "type": "byte", @@ -1867,11 +1867,11 @@ }, "X": { "type": "float", - "value": 16.86658096313477 + "value": 16.866580963134766 }, "Y": { "type": "float", - "value": 14.23803234100342 + "value": 14.238032341003418 }, "Z": { "type": "float", @@ -2098,7 +2098,7 @@ }, "Y": { "type": "float", - "value": 1.839410543441773 + "value": 1.8394105434417725 }, "Z": { "type": "float", @@ -2151,7 +2151,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -2162,18 +2162,18 @@ }, "PointY": { "type": "float", - "value": -0.1115555763244629 + "value": -0.11155557632446289 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.0058650970459 + "value": 10.005865097045898 }, "PointY": { "type": "float", @@ -2192,11 +2192,11 @@ }, "PointY": { "type": "float", - "value": 2.177084684371948 + "value": 2.1770846843719482 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -2380,7 +2380,7 @@ }, "YPosition": { "type": "float", - "value": 1.090238571166992 + "value": 1.0902385711669922 }, "ZPosition": { "type": "float", @@ -2429,7 +2429,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3826854825019836 + "value": -0.38268548250198364 }, "XPosition": { "type": "float", @@ -2441,7 +2441,7 @@ }, "YPosition": { "type": "float", - "value": 77.37222290039063 + "value": 77.37222290039062 }, "ZPosition": { "type": "float", @@ -2494,7 +2494,7 @@ }, "XPosition": { "type": "float", - "value": 22.79745483398438 + "value": 22.797454833984375 }, "YOrientation": { "type": "float", @@ -2677,7 +2677,7 @@ }, "XPosition": { "type": "float", - "value": 19.78774261474609 + "value": 19.787742614746094 }, "YOrientation": { "type": "float", @@ -2685,7 +2685,7 @@ }, "YPosition": { "type": "float", - "value": 26.28027725219727 + "value": 26.280277252197266 }, "ZPosition": { "type": "float", diff --git a/_module/git/harwoodcellar.git.json b/_module/git/harwoodcellar.git.json index 75d6ec5..ea3baf0 100644 --- a/_module/git/harwoodcellar.git.json +++ b/_module/git/harwoodcellar.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 3.071776390075684 + "value": 3.0717763900756836 }, "CloseLockDC": { "type": "byte", @@ -257,11 +257,11 @@ }, "X": { "type": "float", - "value": 22.20000076293945 + "value": 22.200000762939453 }, "Y": { "type": "float", - "value": 19.86000061035156 + "value": 19.860000610351562 }, "Z": { "type": "float", @@ -297,7 +297,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -502,11 +502,11 @@ }, "Y": { "type": "float", - "value": 52.67089462280273 + "value": 52.670894622802734 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -734,7 +734,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -753,7 +753,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -980,7 +980,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -1188,7 +1188,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -1476,11 +1476,11 @@ }, "Y": { "type": "float", - "value": 50.82509613037109 + "value": 50.825096130371094 }, "Z": { "type": "float", - "value": 1.000007033348084 + "value": 1.0000070333480835 } }, { @@ -1772,7 +1772,7 @@ }, "Z": { "type": "float", - "value": 1.000007033348084 + "value": 1.0000070333480835 } }, { @@ -2064,7 +2064,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -2352,7 +2352,7 @@ }, "Y": { "type": "float", - "value": 46.33168792724609 + "value": 46.331687927246094 }, "Z": { "type": "float", @@ -2940,7 +2940,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -3228,7 +3228,7 @@ }, "Y": { "type": "float", - "value": 49.65609741210938 + "value": 49.656097412109375 }, "Z": { "type": "float", @@ -3812,7 +3812,7 @@ }, "Y": { "type": "float", - "value": 48.58282852172852 + "value": 48.582828521728516 }, "Z": { "type": "float", @@ -4035,15 +4035,15 @@ }, "X": { "type": "float", - "value": 13.94975852966309 + "value": 13.949758529663086 }, "Y": { "type": "float", - "value": 60.07407379150391 + "value": 60.074073791503906 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -4062,7 +4062,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "BodyBag": { "type": "byte", @@ -4270,7 +4270,7 @@ }, "Z": { "type": "float", - "value": 1.000007629394531 + "value": 1.0000076293945312 } }, { @@ -4289,7 +4289,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "BodyBag": { "type": "byte", @@ -4489,7 +4489,7 @@ }, "X": { "type": "float", - "value": 6.763438224792481 + "value": 6.7634382247924805 }, "Y": { "type": "float", @@ -4497,7 +4497,7 @@ }, "Z": { "type": "float", - "value": 1.010006785392761 + "value": 1.0100067853927612 } }, { @@ -4724,7 +4724,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -4951,7 +4951,7 @@ }, "Z": { "type": "float", - "value": 1.010006785392761 + "value": 1.0100067853927612 } }, { @@ -5170,7 +5170,7 @@ }, "X": { "type": "float", - "value": 12.97698593139648 + "value": 12.976985931396484 }, "Y": { "type": "float", @@ -5178,7 +5178,7 @@ }, "Z": { "type": "float", - "value": 1.000007629394531 + "value": 1.0000076293945312 } }, { @@ -5397,7 +5397,7 @@ }, "X": { "type": "float", - "value": 22.09125900268555 + "value": 22.091259002685547 }, "Y": { "type": "float", @@ -5405,7 +5405,7 @@ }, "Z": { "type": "float", - "value": 1.00000011920929 + "value": 1.0000001192092896 } }, { @@ -5624,7 +5624,7 @@ }, "X": { "type": "float", - "value": 28.78076553344727 + "value": 28.780765533447266 }, "Y": { "type": "float", @@ -5651,7 +5651,7 @@ }, "Bearing": { "type": "float", - "value": 3.14159083366394 + "value": 3.1415908336639404 }, "BodyBag": { "type": "byte", @@ -5851,7 +5851,7 @@ }, "X": { "type": "float", - "value": 27.36422729492188 + "value": 27.364227294921875 }, "Y": { "type": "float", @@ -5859,7 +5859,7 @@ }, "Z": { "type": "float", - "value": 1.117315769195557 + "value": 1.1173157691955566 } }, { @@ -5878,7 +5878,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "BodyBag": { "type": "byte", @@ -6086,7 +6086,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -6313,7 +6313,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -6536,11 +6536,11 @@ }, "Y": { "type": "float", - "value": 49.21163940429688 + "value": 49.211639404296875 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -6763,11 +6763,11 @@ }, "Y": { "type": "float", - "value": 60.13225936889648 + "value": 60.132259368896484 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -6991,11 +6991,11 @@ }, "Y": { "type": "float", - "value": 48.06851959228516 + "value": 48.068519592285156 }, "Z": { "type": "float", - "value": 1.000007629394531 + "value": 1.0000076293945312 } }, { @@ -7014,7 +7014,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "BodyBag": { "type": "byte", @@ -7222,7 +7222,7 @@ }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -7241,7 +7241,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -7446,11 +7446,11 @@ }, "Y": { "type": "float", - "value": 62.75180053710938 + "value": 62.751800537109375 }, "Z": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -7738,11 +7738,11 @@ }, "Y": { "type": "float", - "value": 61.47965240478516 + "value": 61.479652404785156 }, "Z": { "type": "float", - "value": 2.087806701660156 + "value": 2.0878067016601562 } }, { @@ -8034,7 +8034,7 @@ }, "Z": { "type": "float", - "value": 2.087806701660156 + "value": 2.0878067016601562 } } ] @@ -8152,15 +8152,15 @@ }, "XPosition": { "type": "float", - "value": 27.11776161193848 + "value": 27.117761611938477 }, "YPosition": { "type": "float", - "value": 48.62121200561523 + "value": 48.621212005615234 }, "ZPosition": { "type": "float", - "value": 2.500005722045898 + "value": 2.5000057220458984 } }, { @@ -8281,7 +8281,7 @@ }, "ZPosition": { "type": "float", - "value": 2.500007629394531 + "value": 2.5000076293945312 } }, { @@ -8568,7 +8568,7 @@ }, "PointZ": { "type": "float", - "value": 1.025000214576721 + "value": 1.0250002145767212 } }, { @@ -8583,7 +8583,7 @@ }, "PointZ": { "type": "float", - "value": 1.025000214576721 + "value": 1.0250002145767212 } }, { @@ -8609,7 +8609,7 @@ }, "PointY": { "type": "float", - "value": 11.01191329956055 + "value": 11.011913299560547 }, "PointZ": { "type": "float", @@ -8620,26 +8620,26 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.1411628723144531 + "value": -0.14116287231445312 }, "PointY": { "type": "float", - "value": 11.69514083862305 + "value": 11.695140838623047 }, "PointZ": { "type": "float", - "value": 1.025000214576721 + "value": 1.0250002145767212 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -0.1651268005371094 + "value": -0.16512680053710938 }, "PointY": { "type": "float", - "value": 10.01102828979492 + "value": 10.011028289794922 }, "PointZ": { "type": "float", @@ -8650,11 +8650,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.836589813232422 + "value": -1.8365898132324219 }, "PointY": { "type": "float", - "value": 8.569980621337891 + "value": 8.56998062133789 }, "PointZ": { "type": "float", @@ -8763,7 +8763,7 @@ }, "XPosition": { "type": "float", - "value": 48.70068740844727 + "value": 48.700687408447266 }, "YOrientation": { "type": "float", @@ -8837,11 +8837,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.333717346191406 + "value": 2.3337173461914062 }, "PointY": { "type": "float", - "value": -1.948520660400391 + "value": -1.9485206604003906 }, "PointZ": { "type": "float", @@ -8856,7 +8856,7 @@ }, "PointY": { "type": "float", - "value": 0.2203712463378906 + "value": 0.22037124633789062 }, "PointZ": { "type": "float", @@ -9010,7 +9010,7 @@ }, "XPosition": { "type": "float", - "value": 11.06715774536133 + "value": 11.067157745361328 }, "YOrientation": { "type": "float", @@ -9018,7 +9018,7 @@ }, "YPosition": { "type": "float", - "value": 57.09120941162109 + "value": 57.091209411621094 }, "ZOrientation": { "type": "float", @@ -9054,11 +9054,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -4.247879028320313 + "value": -4.2478790283203125 }, "PointY": { "type": "float", - "value": -3.520565032958984 + "value": -3.5205650329589844 }, "PointZ": { "type": "float", @@ -9069,7 +9069,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.906408309936523 + "value": -2.9064083099365234 }, "PointY": { "type": "float", @@ -9084,7 +9084,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.030258178710938 + "value": -2.0302581787109375 }, "PointY": { "type": "float", @@ -9099,7 +9099,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.3058242797851563 + "value": -0.30582427978515625 }, "PointY": { "type": "float", @@ -9107,22 +9107,22 @@ }, "PointZ": { "type": "float", - "value": 1.025000214576721 + "value": 1.0250002145767212 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 1.933073043823242 + "value": 1.9330730438232422 }, "PointY": { "type": "float", - "value": -1.821815490722656 + "value": -1.8218154907226562 }, "PointZ": { "type": "float", - "value": 1.025000214576721 + "value": 1.0250002145767212 } }, { @@ -9152,7 +9152,7 @@ }, "PointZ": { "type": "float", - "value": 1.025000214576721 + "value": 1.0250002145767212 } } ] @@ -9257,7 +9257,7 @@ }, "XPosition": { "type": "float", - "value": 31.73106956481934 + "value": 31.731069564819336 }, "YOrientation": { "type": "float", @@ -9436,7 +9436,7 @@ }, "YPosition": { "type": "float", - "value": 11.94660949707031 + "value": 11.946609497070312 }, "ZPosition": { "type": "float", @@ -9550,7 +9550,7 @@ }, "XPosition": { "type": "float", - "value": 50.24727630615234 + "value": 50.247276306152344 }, "YOrientation": { "type": "float", @@ -9619,11 +9619,11 @@ }, "YPosition": { "type": "float", - "value": 29.85238456726074 + "value": 29.852384567260742 }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -9684,7 +9684,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -9733,7 +9733,7 @@ }, "XPosition": { "type": "float", - "value": 46.01132965087891 + "value": 46.011329650878906 }, "YOrientation": { "type": "float", @@ -9741,7 +9741,7 @@ }, "YPosition": { "type": "float", - "value": 50.45827484130859 + "value": 50.458274841308594 }, "ZPosition": { "type": "float", @@ -9794,11 +9794,11 @@ }, "XPosition": { "type": "float", - "value": 31.64437103271484 + "value": 31.644371032714844 }, "YOrientation": { "type": "float", - "value": -0.2191005051136017 + "value": -0.21910050511360168 }, "YPosition": { "type": "float", @@ -9806,7 +9806,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -9855,7 +9855,7 @@ }, "XPosition": { "type": "float", - "value": 47.76263809204102 + "value": 47.762638092041016 }, "YOrientation": { "type": "float", @@ -9867,7 +9867,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005722045898 + "value": 1.0000057220458984 } }, { @@ -9920,15 +9920,15 @@ }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 59.16359710693359 + "value": 59.163597106933594 }, "ZPosition": { "type": "float", - "value": 1.010006785392761 + "value": 1.0100067853927612 } } ] diff --git a/_module/git/harwoodmanor.git.json b/_module/git/harwoodmanor.git.json index 35f6ec2..94414fd 100644 --- a/_module/git/harwoodmanor.git.json +++ b/_module/git/harwoodmanor.git.json @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2256,7 +2256,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -2694,7 +2694,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2886,7 +2886,7 @@ }, "X": { "type": "float", - "value": 3.840000152587891 + "value": 3.8400001525878906 }, "Y": { "type": "float", @@ -2913,7 +2913,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -3568,7 +3568,7 @@ }, "Y": { "type": "float", - "value": 36.20613861083984 + "value": 36.206138610839844 }, "Z": { "type": "float", @@ -3799,7 +3799,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4026,7 +4026,7 @@ }, "Z": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -4249,11 +4249,11 @@ }, "Y": { "type": "float", - "value": 45.18358993530273 + "value": 45.183589935302734 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4476,11 +4476,11 @@ }, "Y": { "type": "float", - "value": 57.27648544311523 + "value": 57.276485443115234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4707,7 +4707,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -5161,7 +5161,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -5180,7 +5180,7 @@ }, "Bearing": { "type": "float", - "value": 1.54625129699707 + "value": 1.5462512969970703 }, "BodyBag": { "type": "byte", @@ -5388,7 +5388,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5407,7 +5407,7 @@ }, "Bearing": { "type": "float", - "value": -0.490873396396637 + "value": -0.49087339639663696 }, "BodyBag": { "type": "byte", @@ -5607,11 +5607,11 @@ }, "X": { "type": "float", - "value": 15.72394371032715 + "value": 15.723943710327148 }, "Y": { "type": "float", - "value": 46.60498428344727 + "value": 46.604984283447266 }, "Z": { "type": "float", @@ -5834,11 +5834,11 @@ }, "X": { "type": "float", - "value": 15.78420066833496 + "value": 15.784200668334961 }, "Y": { "type": "float", - "value": 43.60671234130859 + "value": 43.606712341308594 }, "Z": { "type": "float", @@ -6061,7 +6061,7 @@ }, "X": { "type": "float", - "value": 14.77926158905029 + "value": 14.779261589050293 }, "Y": { "type": "float", @@ -6288,15 +6288,15 @@ }, "X": { "type": "float", - "value": 41.66573333740234 + "value": 41.665733337402344 }, "Y": { "type": "float", - "value": 86.95559692382813 + "value": 86.95559692382812 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -6315,7 +6315,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -6523,7 +6523,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -6542,7 +6542,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -6750,7 +6750,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -6769,7 +6769,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -6973,11 +6973,11 @@ }, "Y": { "type": "float", - "value": 88.21775054931641 + "value": 88.2177505493164 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -6996,7 +6996,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -7204,7 +7204,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7223,7 +7223,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -7431,7 +7431,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7450,7 +7450,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -7658,7 +7658,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7677,7 +7677,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -7881,11 +7881,11 @@ }, "Y": { "type": "float", - "value": 88.21828460693359 + "value": 88.2182846069336 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7904,7 +7904,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "BodyBag": { "type": "byte", @@ -8108,11 +8108,11 @@ }, "Y": { "type": "float", - "value": 90.69692230224609 + "value": 90.6969223022461 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -8170,7 +8170,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -8393,7 +8393,7 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", @@ -8458,11 +8458,11 @@ }, "XPosition": { "type": "float", - "value": 54.99716186523438 + "value": 54.997161865234375 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -8523,15 +8523,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 12.87713146209717 + "value": 12.877131462097168 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8580,19 +8580,19 @@ }, "XPosition": { "type": "float", - "value": 29.56896591186523 + "value": 29.568965911865234 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 91.05544281005859 + "value": 91.0554428100586 }, "ZPosition": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -8641,19 +8641,19 @@ }, "XPosition": { "type": "float", - "value": 22.75298118591309 + "value": 22.752981185913086 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 40.67984771728516 + "value": 40.679847717285156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8702,7 +8702,7 @@ }, "XPosition": { "type": "float", - "value": 15.11402988433838 + "value": 15.114029884338379 }, "YOrientation": { "type": "float", @@ -8710,11 +8710,11 @@ }, "YPosition": { "type": "float", - "value": 68.57729339599609 + "value": 68.5772933959961 }, "ZPosition": { "type": "float", - "value": 0.01000134646892548 + "value": 0.010001346468925476 } }, { @@ -8824,7 +8824,7 @@ }, "XPosition": { "type": "float", - "value": 14.97474575042725 + "value": 14.974745750427246 }, "YOrientation": { "type": "float", @@ -8893,7 +8893,7 @@ }, "YPosition": { "type": "float", - "value": 23.79213714599609 + "value": 23.792137145996094 }, "ZPosition": { "type": "float", @@ -8946,7 +8946,7 @@ }, "XPosition": { "type": "float", - "value": 85.62075042724609 + "value": 85.6207504272461 }, "YOrientation": { "type": "float", @@ -8958,7 +8958,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9007,7 +9007,7 @@ }, "XPosition": { "type": "float", - "value": 65.29873657226563 + "value": 65.29873657226562 }, "YOrientation": { "type": "float", diff --git a/_module/git/lair1.git.json b/_module/git/lair1.git.json index 790141f..72655af 100644 --- a/_module/git/lair1.git.json +++ b/_module/git/lair1.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590595245361 + "value": -3.1415905952453613 }, "CloseLockDC": { "type": "byte", @@ -342,7 +342,7 @@ }, "XPosition": { "type": "float", - "value": 44.28002548217773 + "value": 44.280025482177734 }, "YOrientation": { "type": "float", @@ -350,11 +350,11 @@ }, "YPosition": { "type": "float", - "value": 49.40063858032227 + "value": 49.400638580322266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/lair2.git.json b/_module/git/lair2.git.json index 77c1306..555638e 100644 --- a/_module/git/lair2.git.json +++ b/_module/git/lair2.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "CloseLockDC": { "type": "byte", @@ -350,11 +350,11 @@ }, "YPosition": { "type": "float", - "value": 46.27849960327148 + "value": 46.278499603271484 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/lair3.git.json b/_module/git/lair3.git.json index cb72962..388c692 100644 --- a/_module/git/lair3.git.json +++ b/_module/git/lair3.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "CloseLockDC": { "type": "byte", @@ -354,7 +354,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/lair4.git.json b/_module/git/lair4.git.json index d7e410d..5f1b8d6 100644 --- a/_module/git/lair4.git.json +++ b/_module/git/lair4.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "CloseLockDC": { "type": "byte", @@ -400,11 +400,11 @@ }, "YPosition": { "type": "float", - "value": 122.0868530273438 + "value": 122.08685302734375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -465,7 +465,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -526,7 +526,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/lairentrance.git.json b/_module/git/lairentrance.git.json index b114aca..97e879f 100644 --- a/_module/git/lairentrance.git.json +++ b/_module/git/lairentrance.git.json @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -562,7 +562,7 @@ }, "XOrientation": { "type": "float", - "value": 4.442530098458519e-006 + "value": 0.000004442530098458519 }, "XPosition": { "type": "float", @@ -578,7 +578,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -631,15 +631,15 @@ }, "YOrientation": { "type": "float", - "value": 1.863637294263754e-006 + "value": 0.0000018636372942637536 }, "YPosition": { "type": "float", - "value": 19.84500312805176 + "value": 19.845003128051758 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -688,7 +688,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -700,7 +700,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -781,7 +781,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/lairentrance2.git.json b/_module/git/lairentrance2.git.json index 752cceb..3fcdbf8 100644 --- a/_module/git/lairentrance2.git.json +++ b/_module/git/lairentrance2.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -562,7 +562,7 @@ }, "XOrientation": { "type": "float", - "value": 6.111460152169457e-006 + "value": 0.000006111460152169457 }, "XPosition": { "type": "float", @@ -578,7 +578,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -631,15 +631,15 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 19.84500312805176 + "value": 19.845003128051758 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -688,7 +688,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -700,7 +700,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -769,7 +769,7 @@ }, "XPosition": { "type": "float", - "value": 17.61275100708008 + "value": 17.612751007080078 }, "YOrientation": { "type": "float", @@ -781,7 +781,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/lairentrance3.git.json b/_module/git/lairentrance3.git.json index ccca2fe..5053966 100644 --- a/_module/git/lairentrance3.git.json +++ b/_module/git/lairentrance3.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -562,7 +562,7 @@ }, "XOrientation": { "type": "float", - "value": 5.634622993966332e-006 + "value": 0.000005634622993966332 }, "XPosition": { "type": "float", @@ -578,7 +578,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -631,15 +631,15 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 19.84500312805176 + "value": 19.845003128051758 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -688,7 +688,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -700,7 +700,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -769,7 +769,7 @@ }, "XPosition": { "type": "float", - "value": 17.26097679138184 + "value": 17.260976791381836 }, "YOrientation": { "type": "float", @@ -781,7 +781,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/lairentrance4.git.json b/_module/git/lairentrance4.git.json index eca0835..a1c9a76 100644 --- a/_module/git/lairentrance4.git.json +++ b/_module/git/lairentrance4.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -332,7 +332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -347,7 +347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03108406066895 + "value": 10.031084060668945 }, "PointY": { "type": "float", @@ -366,7 +366,7 @@ }, "PointY": { "type": "float", - "value": 2.57207179069519 + "value": 2.5720717906951904 }, "PointZ": { "type": "float", @@ -476,7 +476,7 @@ }, "XPosition": { "type": "float", - "value": 9.996242523193359 + "value": 9.99624252319336 }, "YOrientation": { "type": "float", @@ -484,7 +484,7 @@ }, "YPosition": { "type": "float", - "value": 0.1471018791198731 + "value": 0.14710187911987305 }, "ZOrientation": { "type": "float", @@ -562,11 +562,11 @@ }, "XOrientation": { "type": "float", - "value": 5.634622993966332e-006 + "value": 0.000005634622993966332 }, "XPosition": { "type": "float", - "value": 14.12555885314941 + "value": 14.125558853149414 }, "YOrientation": { "type": "float", @@ -578,7 +578,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -627,19 +627,19 @@ }, "XPosition": { "type": "float", - "value": 38.68127822875977 + "value": 38.681278228759766 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 19.72851371765137 + "value": 19.728513717651367 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -688,7 +688,7 @@ }, "XPosition": { "type": "float", - "value": 15.05633068084717 + "value": 15.056330680847168 }, "YOrientation": { "type": "float", @@ -700,7 +700,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -769,7 +769,7 @@ }, "XPosition": { "type": "float", - "value": 17.7006950378418 + "value": 17.700695037841797 }, "YOrientation": { "type": "float", @@ -781,7 +781,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/lairofgargash.git.json b/_module/git/lairofgargash.git.json index 5921b48..24a7863 100644 --- a/_module/git/lairofgargash.git.json +++ b/_module/git/lairofgargash.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 78.01999664306641 + "value": 78.0199966430664 }, "Z": { "type": "float", @@ -504,7 +504,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -723,7 +723,7 @@ }, "X": { "type": "float", - "value": 30.26975631713867 + "value": 30.269756317138672 }, "Y": { "type": "float", @@ -950,7 +950,7 @@ }, "X": { "type": "float", - "value": 29.54655075073242 + "value": 29.546550750732422 }, "Y": { "type": "float", @@ -958,7 +958,7 @@ }, "Z": { "type": "float", - "value": 1.490116119384766e-008 + "value": 1.4901161193847656e-8 } }, { @@ -1177,7 +1177,7 @@ }, "X": { "type": "float", - "value": 20.08529472351074 + "value": 20.085294723510742 }, "Y": { "type": "float", @@ -1185,7 +1185,7 @@ }, "Z": { "type": "float", - "value": 1.713633537292481e-007 + "value": 0.00000017136335372924805 } }, { @@ -1408,11 +1408,11 @@ }, "Y": { "type": "float", - "value": 28.46991348266602 + "value": 28.469913482666016 }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -1639,7 +1639,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -1858,15 +1858,15 @@ }, "X": { "type": "float", - "value": 33.55081176757813 + "value": 33.550811767578125 }, "Y": { "type": "float", - "value": 15.91113662719727 + "value": 15.911136627197266 }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -2085,15 +2085,15 @@ }, "X": { "type": "float", - "value": 27.50399780273438 + "value": 27.503997802734375 }, "Y": { "type": "float", - "value": 12.30630207061768 + "value": 12.306302070617676 }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -2312,7 +2312,7 @@ }, "X": { "type": "float", - "value": 21.80603408813477 + "value": 21.806034088134766 }, "Y": { "type": "float", @@ -2320,7 +2320,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -2539,15 +2539,15 @@ }, "X": { "type": "float", - "value": 14.94521999359131 + "value": 14.945219993591309 }, "Y": { "type": "float", - "value": 15.67856979370117 + "value": 15.678569793701172 }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -2766,15 +2766,15 @@ }, "X": { "type": "float", - "value": 11.68924427032471 + "value": 11.689244270324707 }, "Y": { "type": "float", - "value": 21.72538566589356 + "value": 21.725385665893555 }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -2993,7 +2993,7 @@ }, "X": { "type": "float", - "value": 11.34038639068604 + "value": 11.340386390686035 }, "Y": { "type": "float", @@ -3001,7 +3001,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -3220,7 +3220,7 @@ }, "X": { "type": "float", - "value": 14.94521999359131 + "value": 14.945219993591309 }, "Y": { "type": "float", @@ -3228,7 +3228,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -3447,7 +3447,7 @@ }, "X": { "type": "float", - "value": 21.18906402587891 + "value": 21.189064025878906 }, "Y": { "type": "float", @@ -3455,7 +3455,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -3674,7 +3674,7 @@ }, "X": { "type": "float", - "value": 28.19791221618652 + "value": 28.197912216186523 }, "Y": { "type": "float", @@ -3682,7 +3682,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -3909,7 +3909,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -4133,7 +4133,7 @@ }, "Y": { "type": "float", - "value": 8.634379386901856 + "value": 8.634379386901855 }, "Z": { "type": "float", @@ -4255,7 +4255,7 @@ }, "XPosition": { "type": "float", - "value": 14.20966053009033 + "value": 14.209660530090332 }, "YPosition": { "type": "float", @@ -4263,7 +4263,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -4384,7 +4384,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -4505,7 +4505,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -4618,15 +4618,15 @@ }, "XPosition": { "type": "float", - "value": 35.57234954833984 + "value": 35.572349548339844 }, "YPosition": { "type": "float", - "value": 34.82281875610352 + "value": 34.822818756103516 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -4747,7 +4747,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -4860,15 +4860,15 @@ }, "XPosition": { "type": "float", - "value": 37.75222015380859 + "value": 37.752220153808594 }, "YPosition": { "type": "float", - "value": 20.76267814636231 + "value": 20.762678146362305 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -4985,11 +4985,11 @@ }, "YPosition": { "type": "float", - "value": 14.76804351806641 + "value": 14.768043518066406 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -5102,15 +5102,15 @@ }, "XPosition": { "type": "float", - "value": 27.72483444213867 + "value": 27.724834442138672 }, "YPosition": { "type": "float", - "value": 12.03276443481445 + "value": 12.032764434814453 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -5223,7 +5223,7 @@ }, "XPosition": { "type": "float", - "value": 21.40322113037109 + "value": 21.403221130371094 }, "YPosition": { "type": "float", @@ -5231,7 +5231,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -5344,15 +5344,15 @@ }, "XPosition": { "type": "float", - "value": 14.10066604614258 + "value": 14.100666046142578 }, "YPosition": { "type": "float", - "value": 15.41155624389648 + "value": 15.411556243896484 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -5465,15 +5465,15 @@ }, "XPosition": { "type": "float", - "value": 10.50388908386231 + "value": 10.503889083862305 }, "YPosition": { "type": "float", - "value": 21.95115661621094 + "value": 21.951156616210938 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -5586,15 +5586,15 @@ }, "XPosition": { "type": "float", - "value": 10.39489555358887 + "value": 10.394895553588867 }, "YPosition": { "type": "float", - "value": 28.70874404907227 + "value": 28.708744049072266 }, "ZPosition": { "type": "float", - "value": 1.499994516372681 + "value": 1.4999945163726807 } }, { @@ -5828,15 +5828,15 @@ }, "XPosition": { "type": "float", - "value": 15.73556804656982 + "value": 15.735568046569824 }, "YPosition": { "type": "float", - "value": 41.24297714233398 + "value": 41.242977142333984 }, "ZPosition": { "type": "float", - "value": 1.499999523162842 + "value": 1.4999995231628418 } }, { @@ -5953,7 +5953,7 @@ }, "YPosition": { "type": "float", - "value": 30.56163024902344 + "value": 30.561630249023438 }, "ZPosition": { "type": "float", @@ -6074,7 +6074,7 @@ }, "YPosition": { "type": "float", - "value": 17.37343788146973 + "value": 17.373437881469727 }, "ZPosition": { "type": "float", @@ -6312,7 +6312,7 @@ }, "XPosition": { "type": "float", - "value": 17.58845138549805 + "value": 17.588451385498047 }, "YPosition": { "type": "float", @@ -6437,11 +6437,11 @@ }, "YPosition": { "type": "float", - "value": 16.39249420166016 + "value": 16.392494201660156 }, "ZPosition": { "type": "float", - "value": 1.499999523162842 + "value": 1.4999995231628418 } }, { @@ -6562,7 +6562,7 @@ }, "ZPosition": { "type": "float", - "value": 1.640696048736572 + "value": 1.6406960487365723 } }, { @@ -6675,7 +6675,7 @@ }, "XPosition": { "type": "float", - "value": 24.90929985046387 + "value": 24.909299850463867 }, "YPosition": { "type": "float", @@ -6683,7 +6683,7 @@ }, "ZPosition": { "type": "float", - "value": 1.500001192092896 + "value": 1.5000011920928955 } } ] @@ -6745,7 +6745,7 @@ }, "XPosition": { "type": "float", - "value": 24.92345809936523 + "value": 24.923458099365234 }, "YOrientation": { "type": "float", @@ -6757,7 +6757,7 @@ }, "ZPosition": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } } ] diff --git a/_module/git/lake.git.json b/_module/git/lake.git.json index 1ae5687..dcc1043 100644 --- a/_module/git/lake.git.json +++ b/_module/git/lake.git.json @@ -278,11 +278,11 @@ }, "X": { "type": "float", - "value": 29.25211334228516 + "value": 29.252113342285156 }, "Y": { "type": "float", - "value": 16.41738319396973 + "value": 16.417383193969727 }, "Z": { "type": "float", @@ -505,15 +505,15 @@ }, "X": { "type": "float", - "value": 18.51802444458008 + "value": 18.518024444580078 }, "Y": { "type": "float", - "value": 23.50114822387695 + "value": 23.501148223876953 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -732,11 +732,11 @@ }, "X": { "type": "float", - "value": 14.76494407653809 + "value": 14.764944076538086 }, "Y": { "type": "float", - "value": 13.24516582489014 + "value": 13.245165824890137 }, "Z": { "type": "float", @@ -1190,7 +1190,7 @@ }, "Y": { "type": "float", - "value": 20.56967926025391 + "value": 20.569679260253906 }, "Z": { "type": "float", @@ -1421,7 +1421,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -1648,7 +1648,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -1875,7 +1875,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -2098,7 +2098,7 @@ }, "Y": { "type": "float", - "value": 32.52182769775391 + "value": 32.521827697753906 }, "Z": { "type": "float", @@ -2329,7 +2329,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -2548,7 +2548,7 @@ }, "X": { "type": "float", - "value": 10.74899864196777 + "value": 10.748998641967773 }, "Y": { "type": "float", @@ -2556,7 +2556,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -2775,7 +2775,7 @@ }, "X": { "type": "float", - "value": 11.70920372009277 + "value": 11.709203720092773 }, "Y": { "type": "float", @@ -3237,7 +3237,7 @@ }, "Z": { "type": "float", - "value": 5.960464477539063e-008 + "value": 5.960464477539063e-8 } }, { @@ -3464,7 +3464,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -3691,7 +3691,7 @@ }, "Z": { "type": "float", - "value": 0.01000001188367605 + "value": 0.010000011883676052 } }, { @@ -3710,7 +3710,7 @@ }, "Bearing": { "type": "float", - "value": -1.521707773208618 + "value": -1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -3918,7 +3918,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -4186,7 +4186,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.02148056030273438 + "value": -0.021480560302734375 }, "PointY": { "type": "float", @@ -4209,7 +4209,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -4224,7 +4224,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -4415,7 +4415,7 @@ }, "XPosition": { "type": "float", - "value": 15.09819602966309 + "value": 15.098196029663086 }, "YOrientation": { "type": "float", @@ -4423,7 +4423,7 @@ }, "YPosition": { "type": "float", - "value": 1.405115842819214 + "value": 1.4051158428192139 }, "ZPosition": { "type": "float", @@ -4472,11 +4472,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2902876734733582 + "value": -0.29028767347335815 }, "XPosition": { "type": "float", - "value": 64.24831390380859 + "value": 64.2483139038086 }, "YOrientation": { "type": "float", @@ -4484,11 +4484,11 @@ }, "YPosition": { "type": "float", - "value": 90.53476715087891 + "value": 90.5347671508789 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4533,11 +4533,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2902876734733582 + "value": -0.29028767347335815 }, "XPosition": { "type": "float", - "value": 20.1005744934082 + "value": 20.100574493408203 }, "YOrientation": { "type": "float", @@ -4549,7 +4549,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4594,7 +4594,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2902876734733582 + "value": -0.29028767347335815 }, "XPosition": { "type": "float", @@ -4606,11 +4606,11 @@ }, "YPosition": { "type": "float", - "value": 68.00271606445313 + "value": 68.00271606445312 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4655,11 +4655,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2902876734733582 + "value": -0.29028767347335815 }, "XPosition": { "type": "float", - "value": 16.72219657897949 + "value": 16.722196578979492 }, "YOrientation": { "type": "float", @@ -4671,7 +4671,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4728,11 +4728,11 @@ }, "YPosition": { "type": "float", - "value": 23.05017471313477 + "value": 23.050174713134766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4793,7 +4793,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4840,7 +4840,7 @@ }, "XPosition": { "type": "float", - "value": 22.53861618041992 + "value": 22.538616180419922 }, "YOrientation": { "type": "float", @@ -4852,7 +4852,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -4899,7 +4899,7 @@ }, "XPosition": { "type": "float", - "value": 23.07180786132813 + "value": 23.071807861328125 }, "YOrientation": { "type": "float", @@ -4911,7 +4911,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -4958,7 +4958,7 @@ }, "XPosition": { "type": "float", - "value": 25.94137763977051 + "value": 25.941377639770508 }, "YOrientation": { "type": "float", @@ -4966,11 +4966,11 @@ }, "YPosition": { "type": "float", - "value": 23.63237571716309 + "value": 23.632375717163086 }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-007 + "value": -0.0000007152557373046875 } }, { @@ -5029,7 +5029,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-007 + "value": -0.0000007152557373046875 } }, { @@ -5135,7 +5135,7 @@ }, "XPosition": { "type": "float", - "value": 16.7688159942627 + "value": 16.768815994262695 }, "YOrientation": { "type": "float", @@ -5147,7 +5147,7 @@ }, "ZPosition": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -5194,7 +5194,7 @@ }, "XPosition": { "type": "float", - "value": 26.0670051574707 + "value": 26.067005157470703 }, "YOrientation": { "type": "float", @@ -5206,7 +5206,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -5253,7 +5253,7 @@ }, "XPosition": { "type": "float", - "value": 23.86526679992676 + "value": 23.865266799926758 }, "YOrientation": { "type": "float", @@ -5261,11 +5261,11 @@ }, "YPosition": { "type": "float", - "value": 67.19265747070313 + "value": 67.19265747070312 }, "ZPosition": { "type": "float", - "value": -3.576278686523438e-007 + "value": -0.00000035762786865234375 } }, { @@ -5312,7 +5312,7 @@ }, "XPosition": { "type": "float", - "value": 40.37606048583984 + "value": 40.376060485839844 }, "YOrientation": { "type": "float", @@ -5324,7 +5324,7 @@ }, "ZPosition": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { diff --git a/_module/git/lakeblood.git.json b/_module/git/lakeblood.git.json index a04717f..ebe6023 100644 --- a/_module/git/lakeblood.git.json +++ b/_module/git/lakeblood.git.json @@ -256,15 +256,15 @@ }, "X": { "type": "float", - "value": 130.9299926757813 + "value": 130.92999267578125 }, "Y": { "type": "float", - "value": 23.70999908447266 + "value": 23.709999084472656 }, "Z": { "type": "float", - "value": 2.579999923706055 + "value": 2.5799999237060547 } }, { @@ -477,7 +477,7 @@ }, "Y": { "type": "float", - "value": 146.0099945068359 + "value": 146.00999450683594 }, "Z": { "type": "float", @@ -717,7 +717,7 @@ }, "Y": { "type": "float", - "value": 117.9529495239258 + "value": 117.95294952392578 }, "Z": { "type": "float", @@ -940,11 +940,11 @@ }, "X": { "type": "float", - "value": 10.41732692718506 + "value": 10.417326927185059 }, "Y": { "type": "float", - "value": 117.7961120605469 + "value": 117.79611206054688 }, "Z": { "type": "float", @@ -1171,7 +1171,7 @@ }, "Y": { "type": "float", - "value": 117.8161544799805 + "value": 117.81615447998047 }, "Z": { "type": "float", @@ -1233,7 +1233,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -1360,11 +1360,11 @@ }, "YPosition": { "type": "float", - "value": 31.83563613891602 + "value": 31.835636138916016 }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } }, { @@ -1477,11 +1477,11 @@ }, "XPosition": { "type": "float", - "value": 130.6235961914063 + "value": 130.62359619140625 }, "YPosition": { "type": "float", - "value": 21.97038841247559 + "value": 21.970388412475586 }, "ZPosition": { "type": "float", @@ -1598,7 +1598,7 @@ }, "XPosition": { "type": "float", - "value": 127.0921249389648 + "value": 127.09212493896484 }, "YPosition": { "type": "float", @@ -1606,7 +1606,7 @@ }, "ZPosition": { "type": "float", - "value": 1.390000224113464 + "value": 1.3900002241134644 } }, { @@ -1719,7 +1719,7 @@ }, "XPosition": { "type": "float", - "value": 115.6057586669922 + "value": 115.60575866699219 }, "YPosition": { "type": "float", @@ -1844,11 +1844,11 @@ }, "YPosition": { "type": "float", - "value": 115.1462860107422 + "value": 115.14628601074219 }, "ZPosition": { "type": "float", - "value": 1.999999046325684 + "value": 1.9999990463256836 } }, { @@ -1965,7 +1965,7 @@ }, "YPosition": { "type": "float", - "value": 134.5202331542969 + "value": 134.52023315429688 }, "ZPosition": { "type": "float", @@ -2082,11 +2082,11 @@ }, "XPosition": { "type": "float", - "value": 13.64273548126221 + "value": 13.642735481262207 }, "YPosition": { "type": "float", - "value": 144.0823059082031 + "value": 144.08230590820312 }, "ZPosition": { "type": "float", @@ -2264,7 +2264,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2331,7 +2331,7 @@ }, "XPosition": { "type": "float", - "value": 18.33305168151856 + "value": 18.333051681518555 }, "YPosition": { "type": "float", @@ -2392,7 +2392,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2463,7 +2463,7 @@ }, "YPosition": { "type": "float", - "value": 59.86812591552734 + "value": 59.868125915527344 }, "ZPosition": { "type": "float", @@ -2520,7 +2520,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2648,7 +2648,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2719,7 +2719,7 @@ }, "YPosition": { "type": "float", - "value": 38.77738189697266 + "value": 38.777381896972656 }, "ZPosition": { "type": "float", @@ -2776,7 +2776,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2904,7 +2904,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3032,7 +3032,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3103,7 +3103,7 @@ }, "YPosition": { "type": "float", - "value": 110.4119338989258 + "value": 110.41193389892578 }, "ZPosition": { "type": "float", @@ -3160,7 +3160,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3231,7 +3231,7 @@ }, "YPosition": { "type": "float", - "value": 117.1342849731445 + "value": 117.13428497314453 }, "ZPosition": { "type": "float", @@ -3288,7 +3288,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3355,11 +3355,11 @@ }, "XPosition": { "type": "float", - "value": 102.4836273193359 + "value": 102.48362731933594 }, "YPosition": { "type": "float", - "value": 133.9606781005859 + "value": 133.96067810058594 }, "ZPosition": { "type": "float", @@ -3416,7 +3416,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3483,11 +3483,11 @@ }, "XPosition": { "type": "float", - "value": 111.9708557128906 + "value": 111.97085571289062 }, "YPosition": { "type": "float", - "value": 76.32131195068359 + "value": 76.3213119506836 }, "ZPosition": { "type": "float", @@ -3544,7 +3544,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3611,11 +3611,11 @@ }, "XPosition": { "type": "float", - "value": 88.87930297851563 + "value": 88.87930297851562 }, "YPosition": { "type": "float", - "value": 31.36777877807617 + "value": 31.367778778076172 }, "ZPosition": { "type": "float", @@ -3672,7 +3672,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3743,7 +3743,7 @@ }, "YPosition": { "type": "float", - "value": 19.46156311035156 + "value": 19.461563110351562 }, "ZPosition": { "type": "float", @@ -3890,7 +3890,7 @@ }, "XOrientation": { "type": "float", - "value": 0.4929004311561585 + "value": 0.49290043115615845 }, "XPosition": { "type": "float", @@ -3906,7 +3906,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3951,7 +3951,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4714010357856751 + "value": -0.47140103578567505 }, "XPosition": { "type": "float", @@ -3967,7 +3967,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4012,11 +4012,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454621531069279 + "value": 0.024546215310692787 }, "XPosition": { "type": "float", - "value": 14.91063213348389 + "value": 14.910632133483887 }, "YOrientation": { "type": "float", @@ -4028,7 +4028,7 @@ }, "ZPosition": { "type": "float", - "value": -0.4999923706054688 + "value": -0.49999237060546875 } }, { @@ -4077,19 +4077,19 @@ }, "XPosition": { "type": "float", - "value": 29.5641975402832 + "value": 29.564197540283203 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 11.59775924682617 + "value": 11.597759246826172 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4142,7 +4142,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -4150,7 +4150,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4199,19 +4199,19 @@ }, "XPosition": { "type": "float", - "value": 70.85757446289063 + "value": 70.85757446289062 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 98.18650054931641 + "value": 98.1865005493164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4260,7 +4260,7 @@ }, "XPosition": { "type": "float", - "value": 108.4495697021484 + "value": 108.44956970214844 }, "YOrientation": { "type": "float", @@ -4268,11 +4268,11 @@ }, "YPosition": { "type": "float", - "value": 123.8931732177734 + "value": 123.89317321777344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4321,7 +4321,7 @@ }, "XPosition": { "type": "float", - "value": 117.4365310668945 + "value": 117.43653106689453 }, "YOrientation": { "type": "float", @@ -4333,7 +4333,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4390,11 +4390,11 @@ }, "YPosition": { "type": "float", - "value": 58.32464981079102 + "value": 58.324649810791016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4455,7 +4455,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4500,7 +4500,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4714010357856751 + "value": -0.47140103578567505 }, "XPosition": { "type": "float", @@ -4512,11 +4512,11 @@ }, "YPosition": { "type": "float", - "value": 37.22586822509766 + "value": 37.225868225097656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4565,7 +4565,7 @@ }, "XPosition": { "type": "float", - "value": 111.9202728271484 + "value": 111.92027282714844 }, "YOrientation": { "type": "float", @@ -4577,7 +4577,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4627,7 +4627,7 @@ }, "XPosition": { "type": "float", - "value": 79.81216430664063 + "value": 79.81216430664062 }, "YOrientation": { "type": "float", @@ -4635,11 +4635,11 @@ }, "YPosition": { "type": "float", - "value": 32.24542617797852 + "value": 32.245426177978516 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4701,7 +4701,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4751,7 +4751,7 @@ }, "XPosition": { "type": "float", - "value": 15.61198806762695 + "value": 15.611988067626953 }, "YOrientation": { "type": "float", @@ -4763,7 +4763,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4825,7 +4825,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4875,7 +4875,7 @@ }, "XPosition": { "type": "float", - "value": 19.98997497558594 + "value": 19.989974975585938 }, "YOrientation": { "type": "float", @@ -4883,11 +4883,11 @@ }, "YPosition": { "type": "float", - "value": 132.4123840332031 + "value": 132.41238403320312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/limbo001.git.json b/_module/git/limbo001.git.json index 9fa4158..46b1a05 100644 --- a/_module/git/limbo001.git.json +++ b/_module/git/limbo001.git.json @@ -280,7 +280,7 @@ }, "X": { "type": "float", - "value": 39.99505233764648 + "value": 39.995052337646484 }, "Y": { "type": "float", @@ -288,7 +288,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -307,7 +307,7 @@ }, "Bearing": { "type": "float", - "value": 3.14158821105957 + "value": 3.1415882110595703 }, "BodyBag": { "type": "byte", @@ -515,7 +515,7 @@ }, "Z": { "type": "float", - "value": -8.381903171539307e-009 + "value": -8.381903171539307e-9 } }, { @@ -1278,7 +1278,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { diff --git a/_module/git/morathcaverns.git.json b/_module/git/morathcaverns.git.json index 78f7e0e..022ce82 100644 --- a/_module/git/morathcaverns.git.json +++ b/_module/git/morathcaverns.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 3.990000247955322 + "value": 3.9900002479553223 }, "Y": { "type": "float", @@ -496,15 +496,15 @@ }, "X": { "type": "float", - "value": 15.12143993377686 + "value": 15.121439933776855 }, "Y": { "type": "float", - "value": 114.4803924560547 + "value": 114.48039245605469 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] @@ -563,7 +563,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -911,7 +911,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000001668930054 + "value": 1.0000016689300537 } } ] @@ -1013,7 +1013,7 @@ }, "XPosition": { "type": "float", - "value": 15.24438667297363 + "value": 15.244386672973633 }, "YOrientation": { "type": "float", @@ -1025,7 +1025,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1078,15 +1078,15 @@ }, "YOrientation": { "type": "float", - "value": 0.09801808744668961 + "value": 0.0980180874466896 }, "YPosition": { "type": "float", - "value": 143.0579528808594 + "value": 143.05795288085938 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1131,7 +1131,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454335615038872 + "value": 0.024543356150388718 }, "XPosition": { "type": "float", @@ -1147,7 +1147,7 @@ }, "ZPosition": { "type": "float", - "value": -0.1247615814208984 + "value": -0.12476158142089844 } }, { @@ -1192,7 +1192,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2902867496013641 + "value": -0.29028674960136414 }, "XPosition": { "type": "float", @@ -1204,11 +1204,11 @@ }, "YPosition": { "type": "float", - "value": 112.3176345825195 + "value": 112.31763458251953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1269,7 +1269,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1318,19 +1318,19 @@ }, "XPosition": { "type": "float", - "value": 20.96329498291016 + "value": 20.963294982910156 }, "YOrientation": { "type": "float", - "value": -0.8448523879051209 + "value": -0.8448523879051208 }, "YPosition": { "type": "float", - "value": 58.21512603759766 + "value": 58.215126037597656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1395,11 +1395,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454335615038872 + "value": -0.024543356150388718 }, "XPosition": { "type": "float", - "value": 134.8115539550781 + "value": 134.81155395507812 }, "YOrientation": { "type": "float", @@ -1407,7 +1407,7 @@ }, "YPosition": { "type": "float", - "value": 135.1037750244141 + "value": 135.10377502441406 }, "ZPosition": { "type": "float", @@ -1456,11 +1456,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454335615038872 + "value": -0.024543356150388718 }, "XPosition": { "type": "float", - "value": 135.4160766601563 + "value": 135.41607666015625 }, "YOrientation": { "type": "float", @@ -1468,11 +1468,11 @@ }, "YPosition": { "type": "float", - "value": 110.3874816894531 + "value": 110.38748168945312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1521,11 +1521,11 @@ }, "XPosition": { "type": "float", - "value": 124.9259414672852 + "value": 124.92594146728516 }, "YOrientation": { "type": "float", - "value": 0.02454220689833164 + "value": 0.024542206898331642 }, "YPosition": { "type": "float", @@ -1533,7 +1533,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1582,7 +1582,7 @@ }, "XPosition": { "type": "float", - "value": 140.3953704833984 + "value": 140.39537048339844 }, "YOrientation": { "type": "float", @@ -1594,7 +1594,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1643,7 +1643,7 @@ }, "XPosition": { "type": "float", - "value": 128.6680603027344 + "value": 128.66806030273438 }, "YOrientation": { "type": "float", @@ -1651,11 +1651,11 @@ }, "YPosition": { "type": "float", - "value": 20.51136779785156 + "value": 20.511367797851562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1712,11 +1712,11 @@ }, "YPosition": { "type": "float", - "value": 33.64595794677734 + "value": 33.645957946777344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1773,11 +1773,11 @@ }, "YPosition": { "type": "float", - "value": 22.73161697387695 + "value": 22.731616973876953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1850,7 +1850,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4496119320392609 + "value": 0.44961193203926086 }, "YPosition": { "type": "float", @@ -1858,7 +1858,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1911,15 +1911,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 75.40720367431641 + "value": 75.4072036743164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1976,11 +1976,11 @@ }, "YPosition": { "type": "float", - "value": 82.94046020507813 + "value": 82.94046020507812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2025,7 +2025,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454335615038872 + "value": -0.024543356150388718 }, "XPosition": { "type": "float", @@ -2041,7 +2041,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2094,15 +2094,15 @@ }, "YOrientation": { "type": "float", - "value": 0.4496119320392609 + "value": 0.44961193203926086 }, "YPosition": { "type": "float", - "value": 53.73459625244141 + "value": 53.734596252441406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2163,7 +2163,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2220,11 +2220,11 @@ }, "YPosition": { "type": "float", - "value": 115.2970657348633 + "value": 115.29706573486328 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2269,7 +2269,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454335615038872 + "value": 0.024543356150388718 }, "XPosition": { "type": "float", @@ -2281,11 +2281,11 @@ }, "YPosition": { "type": "float", - "value": 115.6416320800781 + "value": 115.64163208007812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2362,11 +2362,11 @@ }, "YPosition": { "type": "float", - "value": 142.8695220947266 + "value": 142.86952209472656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2431,7 +2431,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -2447,7 +2447,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2565,11 +2565,11 @@ }, "YPosition": { "type": "float", - "value": 33.26584625244141 + "value": 33.265846252441406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2618,7 +2618,7 @@ }, "XPosition": { "type": "float", - "value": 13.1004810333252 + "value": 13.100481033325195 }, "YOrientation": { "type": "float", @@ -2630,7 +2630,7 @@ }, "ZPosition": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } } ] diff --git a/_module/git/morathplains.git.json b/_module/git/morathplains.git.json index 4e0dee8..7e4c251 100644 --- a/_module/git/morathplains.git.json +++ b/_module/git/morathplains.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -256,11 +256,11 @@ }, "X": { "type": "float", - "value": 144.5099945068359 + "value": 144.50999450683594 }, "Y": { "type": "float", - "value": 135.2599945068359 + "value": 135.25999450683594 }, "Z": { "type": "float", @@ -500,11 +500,11 @@ }, "Y": { "type": "float", - "value": 13.47901916503906 + "value": 13.479019165039062 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -731,7 +731,7 @@ }, "Z": { "type": "float", - "value": 0.01000001095235348 + "value": 0.010000010952353477 } }, { @@ -750,7 +750,7 @@ }, "Bearing": { "type": "float", - "value": -3.117041349411011 + "value": -3.1170413494110107 }, "BodyBag": { "type": "byte", @@ -1177,11 +1177,11 @@ }, "X": { "type": "float", - "value": 13.24034214019775 + "value": 13.240342140197754 }, "Y": { "type": "float", - "value": 11.82696437835693 + "value": 11.826964378356934 }, "Z": { "type": "float", @@ -1404,15 +1404,15 @@ }, "X": { "type": "float", - "value": 12.61607456207275 + "value": 12.616074562072754 }, "Y": { "type": "float", - "value": 11.22996425628662 + "value": 11.229964256286621 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1631,7 +1631,7 @@ }, "X": { "type": "float", - "value": 13.88107395172119 + "value": 13.881073951721191 }, "Y": { "type": "float", @@ -1639,7 +1639,7 @@ }, "Z": { "type": "float", - "value": 0.009999865666031838 + "value": 0.009999865666031837 } }, { @@ -1862,11 +1862,11 @@ }, "Y": { "type": "float", - "value": 145.3929748535156 + "value": 145.39297485351562 }, "Z": { "type": "float", - "value": 0.01000004354864359 + "value": 0.010000043548643589 } }, { @@ -2085,15 +2085,15 @@ }, "X": { "type": "float", - "value": 11.06933403015137 + "value": 11.069334030151367 }, "Y": { "type": "float", - "value": 145.4531097412109 + "value": 145.45310974121094 }, "Z": { "type": "float", - "value": 0.01000004354864359 + "value": 0.010000043548643589 } }, { @@ -2320,7 +2320,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2539,15 +2539,15 @@ }, "X": { "type": "float", - "value": 118.9625778198242 + "value": 118.96257781982422 }, "Y": { "type": "float", - "value": 130.2463989257813 + "value": 130.24639892578125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2766,15 +2766,15 @@ }, "X": { "type": "float", - "value": 114.0936126708984 + "value": 114.09361267089844 }, "Y": { "type": "float", - "value": 118.5304412841797 + "value": 118.53044128417969 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2993,15 +2993,15 @@ }, "X": { "type": "float", - "value": 120.1792907714844 + "value": 120.17929077148438 }, "Y": { "type": "float", - "value": 111.5313186645508 + "value": 111.53131866455078 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3220,7 +3220,7 @@ }, "X": { "type": "float", - "value": 119.1147384643555 + "value": 119.11473846435547 }, "Y": { "type": "float", @@ -3228,7 +3228,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3455,7 +3455,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3674,7 +3674,7 @@ }, "X": { "type": "float", - "value": 136.3082885742188 + "value": 136.30828857421875 }, "Y": { "type": "float", @@ -3682,7 +3682,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3909,7 +3909,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4128,7 +4128,7 @@ }, "X": { "type": "float", - "value": 147.1113128662109 + "value": 147.11131286621094 }, "Y": { "type": "float", @@ -4136,7 +4136,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4363,7 +4363,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4582,7 +4582,7 @@ }, "X": { "type": "float", - "value": 133.1130218505859 + "value": 133.11302185058594 }, "Y": { "type": "float", @@ -4590,7 +4590,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4809,7 +4809,7 @@ }, "X": { "type": "float", - "value": 106.0081329345703 + "value": 106.00813293457031 }, "Y": { "type": "float", @@ -4817,7 +4817,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5036,7 +5036,7 @@ }, "X": { "type": "float", - "value": 111.6378784179688 + "value": 111.63787841796875 }, "Y": { "type": "float", @@ -5044,7 +5044,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5267,11 +5267,11 @@ }, "Y": { "type": "float", - "value": 20.21419715881348 + "value": 20.214197158813477 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5490,7 +5490,7 @@ }, "X": { "type": "float", - "value": 70.70810699462891 + "value": 70.7081069946289 }, "Y": { "type": "float", @@ -5498,7 +5498,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5725,7 +5725,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5952,7 +5952,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6171,15 +6171,15 @@ }, "X": { "type": "float", - "value": 45.94391250610352 + "value": 45.943912506103516 }, "Y": { "type": "float", - "value": 20.21419525146484 + "value": 20.214195251464844 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6406,7 +6406,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6629,11 +6629,11 @@ }, "Y": { "type": "float", - "value": 53.07974243164063 + "value": 53.079742431640625 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6852,7 +6852,7 @@ }, "X": { "type": "float", - "value": 24.33786201477051 + "value": 24.337862014770508 }, "Y": { "type": "float", @@ -6860,7 +6860,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7087,7 +7087,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7306,7 +7306,7 @@ }, "X": { "type": "float", - "value": 41.68357086181641 + "value": 41.683570861816406 }, "Y": { "type": "float", @@ -7314,7 +7314,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7533,7 +7533,7 @@ }, "X": { "type": "float", - "value": 11.10035133361816 + "value": 11.100351333618164 }, "Y": { "type": "float", @@ -7541,7 +7541,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7760,15 +7760,15 @@ }, "X": { "type": "float", - "value": 27.83743286132813 + "value": 27.837432861328125 }, "Y": { "type": "float", - "value": 105.2389526367188 + "value": 105.23895263671875 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7987,15 +7987,15 @@ }, "X": { "type": "float", - "value": 65.87625122070313 + "value": 65.87625122070312 }, "Y": { "type": "float", - "value": 123.1932830810547 + "value": 123.19328308105469 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8218,11 +8218,11 @@ }, "Y": { "type": "float", - "value": 112.5707397460938 + "value": 112.57073974609375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8445,11 +8445,11 @@ }, "Y": { "type": "float", - "value": 139.1981506347656 + "value": 139.19815063476562 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8672,11 +8672,11 @@ }, "Y": { "type": "float", - "value": 105.5716094970703 + "value": 105.57160949707031 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8895,7 +8895,7 @@ }, "X": { "type": "float", - "value": 118.0540390014648 + "value": 118.05403900146484 }, "Y": { "type": "float", @@ -8903,7 +8903,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9122,7 +9122,7 @@ }, "X": { "type": "float", - "value": 111.3591995239258 + "value": 111.35919952392578 }, "Y": { "type": "float", @@ -9130,7 +9130,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9349,15 +9349,15 @@ }, "X": { "type": "float", - "value": 92.03562164306641 + "value": 92.0356216430664 }, "Y": { "type": "float", - "value": 32.06337738037109 + "value": 32.063377380371094 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9584,7 +9584,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9803,15 +9803,15 @@ }, "X": { "type": "float", - "value": 17.33163452148438 + "value": 17.331634521484375 }, "Y": { "type": "float", - "value": 131.2716674804688 + "value": 131.27166748046875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10030,15 +10030,15 @@ }, "X": { "type": "float", - "value": 60.54373168945313 + "value": 60.543731689453125 }, "Y": { "type": "float", - "value": 141.4660949707031 + "value": 141.46609497070312 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10257,7 +10257,7 @@ }, "X": { "type": "float", - "value": 14.39840221405029 + "value": 14.398402214050293 }, "Y": { "type": "float", @@ -10265,7 +10265,7 @@ }, "Z": { "type": "float", - "value": 0.01000004075467587 + "value": 0.010000040754675865 } } ] @@ -10323,7 +10323,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -10684,7 +10684,7 @@ }, "XPosition": { "type": "float", - "value": 84.90134429931641 + "value": 84.9013442993164 }, "YPosition": { "type": "float", @@ -10805,11 +10805,11 @@ }, "XPosition": { "type": "float", - "value": 9.502273559570313 + "value": 9.502273559570312 }, "YPosition": { "type": "float", - "value": 13.3116044998169 + "value": 13.311604499816895 }, "ZPosition": { "type": "float", @@ -10884,7 +10884,7 @@ }, "PointY": { "type": "float", - "value": 2.496219158172607 + "value": 2.4962191581726074 }, "PointZ": { "type": "float", @@ -10899,7 +10899,7 @@ }, "PointY": { "type": "float", - "value": 2.495749473571777 + "value": 2.4957494735717773 }, "PointZ": { "type": "float", @@ -11086,7 +11086,7 @@ }, "PointY": { "type": "float", - "value": -3.034011840820313 + "value": -3.0340118408203125 }, "PointZ": { "type": "float", @@ -11218,7 +11218,7 @@ }, "YPosition": { "type": "float", - "value": 149.7994232177734 + "value": 149.79942321777344 }, "ZOrientation": { "type": "float", @@ -11258,11 +11258,11 @@ }, "PointY": { "type": "float", - "value": -10.01457214355469 + "value": -10.014572143554688 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -11273,11 +11273,11 @@ }, "PointY": { "type": "float", - "value": -10.01457214355469 + "value": -10.014572143554688 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -11299,11 +11299,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.692581176757813 + "value": -2.6925811767578125 }, "PointY": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 }, "PointZ": { "type": "float", @@ -11413,7 +11413,7 @@ }, "XPosition": { "type": "float", - "value": 149.9380493164063 + "value": 149.93804931640625 }, "YOrientation": { "type": "float", @@ -11421,7 +11421,7 @@ }, "YPosition": { "type": "float", - "value": 110.0278167724609 + "value": 110.02781677246094 }, "ZOrientation": { "type": "float", @@ -11506,7 +11506,7 @@ }, "PointY": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointZ": { "type": "float", @@ -11615,7 +11615,7 @@ }, "XPosition": { "type": "float", - "value": 149.8906555175781 + "value": 149.89065551757812 }, "YOrientation": { "type": "float", @@ -11623,7 +11623,7 @@ }, "YPosition": { "type": "float", - "value": 59.94271087646484 + "value": 59.942710876464844 }, "ZOrientation": { "type": "float", @@ -11667,7 +11667,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -11693,7 +11693,7 @@ }, "PointY": { "type": "float", - "value": -2.665282249450684 + "value": -2.6652822494506836 }, "PointZ": { "type": "float", @@ -11826,7 +11826,7 @@ }, "YPosition": { "type": "float", - "value": 14.77591419219971 + "value": 14.775914192199707 }, "ZOrientation": { "type": "float", @@ -12000,7 +12000,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12077,11 +12077,11 @@ }, "YPosition": { "type": "float", - "value": 9.371109008789063 + "value": 9.371109008789062 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12138,11 +12138,11 @@ }, "YPosition": { "type": "float", - "value": 50.03411483764648 + "value": 50.034114837646484 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12199,11 +12199,11 @@ }, "YPosition": { "type": "float", - "value": 28.54952239990234 + "value": 28.549522399902344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12252,7 +12252,7 @@ }, "XPosition": { "type": "float", - "value": 45.37927627563477 + "value": 45.379276275634766 }, "YOrientation": { "type": "float", @@ -12260,11 +12260,11 @@ }, "YPosition": { "type": "float", - "value": 42.59399032592773 + "value": 42.593990325927734 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12313,7 +12313,7 @@ }, "XPosition": { "type": "float", - "value": 52.40151977539063 + "value": 52.401519775390625 }, "YOrientation": { "type": "float", @@ -12325,7 +12325,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12386,7 +12386,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12467,7 +12467,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12516,7 +12516,7 @@ }, "XPosition": { "type": "float", - "value": 10.36922264099121 + "value": 10.369222640991211 }, "YOrientation": { "type": "float", @@ -12524,11 +12524,11 @@ }, "YPosition": { "type": "float", - "value": 111.2152404785156 + "value": 111.21524047851562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12589,7 +12589,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12646,11 +12646,11 @@ }, "YPosition": { "type": "float", - "value": 107.9423980712891 + "value": 107.94239807128906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12699,7 +12699,7 @@ }, "XPosition": { "type": "float", - "value": 23.58810997009277 + "value": 23.588109970092773 }, "YOrientation": { "type": "float", @@ -12711,7 +12711,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12780,7 +12780,7 @@ }, "XPosition": { "type": "float", - "value": 70.01552581787109 + "value": 70.0155258178711 }, "YOrientation": { "type": "float", @@ -12792,7 +12792,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12853,7 +12853,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12902,7 +12902,7 @@ }, "XPosition": { "type": "float", - "value": 6.554613590240479 + "value": 6.5546135902404785 }, "YOrientation": { "type": "float", @@ -12914,7 +12914,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12983,7 +12983,7 @@ }, "XPosition": { "type": "float", - "value": 11.74096870422363 + "value": 11.740968704223633 }, "YOrientation": { "type": "float", @@ -12991,11 +12991,11 @@ }, "YPosition": { "type": "float", - "value": 6.891830444335938 + "value": 6.8918304443359375 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13052,11 +13052,11 @@ }, "YPosition": { "type": "float", - "value": 1.324898481369019 + "value": 1.3248984813690186 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13125,11 +13125,11 @@ }, "XPosition": { "type": "float", - "value": 148.5681457519531 + "value": 148.56814575195312 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -13137,7 +13137,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13190,7 +13190,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -13198,7 +13198,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13251,7 +13251,7 @@ }, "YOrientation": { "type": "float", - "value": -0.3598910570144653 + "value": -0.35989105701446533 }, "YPosition": { "type": "float", @@ -13259,7 +13259,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13328,7 +13328,7 @@ }, "XPosition": { "type": "float", - "value": 139.9914245605469 + "value": 139.99142456054688 }, "YOrientation": { "type": "float", @@ -13336,11 +13336,11 @@ }, "YPosition": { "type": "float", - "value": 11.70267677307129 + "value": 11.702676773071289 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13409,7 +13409,7 @@ }, "XPosition": { "type": "float", - "value": 119.0358047485352 + "value": 119.03580474853516 }, "YOrientation": { "type": "float", @@ -13417,11 +13417,11 @@ }, "YPosition": { "type": "float", - "value": 39.53684234619141 + "value": 39.536842346191406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13490,11 +13490,11 @@ }, "XPosition": { "type": "float", - "value": 131.0332946777344 + "value": 131.03329467773438 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -13502,7 +13502,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13568,11 +13568,11 @@ }, "XOrientation": { "type": "float", - "value": 8.25722781883087e-006 + "value": 0.00000825722781883087 }, "XPosition": { "type": "float", - "value": 119.1957855224609 + "value": 119.19578552246094 }, "YOrientation": { "type": "float", @@ -13584,7 +13584,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13654,7 +13654,7 @@ }, "XPosition": { "type": "float", - "value": 125.5944366455078 + "value": 125.59443664550781 }, "YOrientation": { "type": "float", @@ -13666,7 +13666,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13711,11 +13711,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04907510802149773 + "value": 0.049075108021497726 }, "XPosition": { "type": "float", - "value": 90.69130706787109 + "value": 90.6913070678711 }, "YOrientation": { "type": "float", @@ -13723,11 +13723,11 @@ }, "YPosition": { "type": "float", - "value": 145.0311584472656 + "value": 145.03115844726562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13772,7 +13772,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04907510802149773 + "value": 0.049075108021497726 }, "XPosition": { "type": "float", @@ -13784,11 +13784,11 @@ }, "YPosition": { "type": "float", - "value": 144.8139038085938 + "value": 144.81390380859375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13833,11 +13833,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04907510802149773 + "value": 0.049075108021497726 }, "XPosition": { "type": "float", - "value": 103.2191009521484 + "value": 103.21910095214844 }, "YOrientation": { "type": "float", @@ -13845,11 +13845,11 @@ }, "YPosition": { "type": "float", - "value": 58.22751617431641 + "value": 58.227516174316406 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13894,7 +13894,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04907510802149773 + "value": 0.049075108021497726 }, "XPosition": { "type": "float", @@ -13910,7 +13910,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13955,7 +13955,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04907510802149773 + "value": 0.049075108021497726 }, "XPosition": { "type": "float", @@ -13971,7 +13971,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14016,7 +14016,7 @@ }, "XOrientation": { "type": "float", - "value": 6.588297310372582e-006 + "value": 0.000006588297310372582 }, "XPosition": { "type": "float", @@ -14028,11 +14028,11 @@ }, "YPosition": { "type": "float", - "value": 148.3021087646484 + "value": 148.30210876464844 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14079,7 +14079,7 @@ }, "XPosition": { "type": "float", - "value": 148.6059417724609 + "value": 148.60594177246094 }, "YOrientation": { "type": "float", @@ -14087,11 +14087,11 @@ }, "YPosition": { "type": "float", - "value": 104.1269836425781 + "value": 104.12698364257812 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14164,15 +14164,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 66.30789184570313 + "value": 66.30789184570312 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14241,7 +14241,7 @@ }, "XPosition": { "type": "float", - "value": 89.91116333007813 + "value": 89.91116333007812 }, "YOrientation": { "type": "float", @@ -14253,7 +14253,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14322,7 +14322,7 @@ }, "XPosition": { "type": "float", - "value": 100.3240203857422 + "value": 100.32402038574219 }, "YOrientation": { "type": "float", @@ -14330,11 +14330,11 @@ }, "YPosition": { "type": "float", - "value": 119.3401336669922 + "value": 119.34013366699219 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14399,7 +14399,7 @@ }, "XOrientation": { "type": "float", - "value": 0.4714010357856751 + "value": 0.47140103578567505 }, "XPosition": { "type": "float", @@ -14415,7 +14415,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14484,19 +14484,19 @@ }, "XPosition": { "type": "float", - "value": 104.7522888183594 + "value": 104.75228881835938 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 10.94763374328613 + "value": 10.947633743286133 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14545,7 +14545,7 @@ }, "XPosition": { "type": "float", - "value": 148.8007659912109 + "value": 148.80076599121094 }, "YOrientation": { "type": "float", @@ -14557,7 +14557,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14614,11 +14614,11 @@ }, "YPosition": { "type": "float", - "value": 11.7968225479126 + "value": 11.796822547912598 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14675,11 +14675,11 @@ }, "YPosition": { "type": "float", - "value": 48.22919082641602 + "value": 48.229190826416016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14736,11 +14736,11 @@ }, "YPosition": { "type": "float", - "value": 110.6714553833008 + "value": 110.67145538330078 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14801,7 +14801,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/morathvillage.git.json b/_module/git/morathvillage.git.json index 5c97dfc..0dd618e 100644 --- a/_module/git/morathvillage.git.json +++ b/_module/git/morathvillage.git.json @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -477,7 +477,7 @@ }, "X": { "type": "float", - "value": 117.6999969482422 + "value": 117.69999694824219 }, "Y": { "type": "float", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -915,7 +915,7 @@ }, "X": { "type": "float", - "value": 132.6000061035156 + "value": 132.60000610351562 }, "Y": { "type": "float", @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1591,11 +1591,11 @@ }, "X": { "type": "float", - "value": 125.3025741577148 + "value": 125.30257415771484 }, "Y": { "type": "float", - "value": 91.88368988037109 + "value": 91.8836898803711 }, "Z": { "type": "float", @@ -1618,7 +1618,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "BodyBag": { "type": "byte", @@ -1818,15 +1818,15 @@ }, "X": { "type": "float", - "value": 132.2599182128906 + "value": 132.25991821289062 }, "Y": { "type": "float", - "value": 82.81777954101563 + "value": 82.81777954101562 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] @@ -1884,7 +1884,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -2245,15 +2245,15 @@ }, "XPosition": { "type": "float", - "value": 77.20510864257813 + "value": 77.20510864257812 }, "YPosition": { "type": "float", - "value": 72.44899749755859 + "value": 72.4489974975586 }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } }, { @@ -2370,7 +2370,7 @@ }, "YPosition": { "type": "float", - "value": 23.65408515930176 + "value": 23.654085159301758 }, "ZPosition": { "type": "float", @@ -2487,11 +2487,11 @@ }, "XPosition": { "type": "float", - "value": 133.2336730957031 + "value": 133.23367309570312 }, "YPosition": { "type": "float", - "value": 34.35195922851563 + "value": 34.351959228515625 }, "ZPosition": { "type": "float", @@ -2612,7 +2612,7 @@ }, "YPosition": { "type": "float", - "value": 34.90621948242188 + "value": 34.906219482421875 }, "ZPosition": { "type": "float", @@ -2669,7 +2669,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2747,7 +2747,7 @@ }, "YPosition": { "type": "float", - "value": 27.90727043151856 + "value": 27.907270431518555 }, "ZPosition": { "type": "float", @@ -2804,7 +2804,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -2878,7 +2878,7 @@ }, "XPosition": { "type": "float", - "value": 107.5986404418945 + "value": 107.59864044189453 }, "YPosition": { "type": "float", @@ -2939,7 +2939,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -3013,11 +3013,11 @@ }, "XPosition": { "type": "float", - "value": 130.2699584960938 + "value": 130.26995849609375 }, "YPosition": { "type": "float", - "value": 62.39514541625977 + "value": 62.395145416259766 }, "ZPosition": { "type": "float", @@ -3077,7 +3077,7 @@ }, "PointY": { "type": "float", - "value": -0.03355026245117188 + "value": -0.033550262451171875 }, "PointZ": { "type": "float", @@ -3092,7 +3092,7 @@ }, "PointY": { "type": "float", - "value": 1.945855140686035 + "value": 1.9458551406860352 }, "PointZ": { "type": "float", @@ -3107,11 +3107,11 @@ }, "PointY": { "type": "float", - "value": 1.979403734207153 + "value": 1.9794037342071533 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } } ] @@ -3224,7 +3224,7 @@ }, "YPosition": { "type": "float", - "value": 0.1104946136474609 + "value": 0.11049461364746094 }, "ZOrientation": { "type": "float", @@ -3330,15 +3330,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 134.9577789306641 + "value": 134.95777893066406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3387,7 +3387,7 @@ }, "XPosition": { "type": "float", - "value": 69.70729827880859 + "value": 69.7072982788086 }, "YOrientation": { "type": "float", @@ -3399,7 +3399,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3452,15 +3452,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 141.1986389160156 + "value": 141.19863891601562 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3509,7 +3509,7 @@ }, "XPosition": { "type": "float", - "value": 10.02546119689941 + "value": 10.025461196899414 }, "YOrientation": { "type": "float", @@ -3517,11 +3517,11 @@ }, "YPosition": { "type": "float", - "value": 121.5113220214844 + "value": 121.51132202148438 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3570,7 +3570,7 @@ }, "XPosition": { "type": "float", - "value": 38.07269668579102 + "value": 38.072696685791016 }, "YOrientation": { "type": "float", @@ -3578,11 +3578,11 @@ }, "YPosition": { "type": "float", - "value": 119.2966842651367 + "value": 119.29668426513672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3647,7 +3647,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1224163770675659 + "value": 0.12241637706756592 }, "XPosition": { "type": "float", @@ -3663,7 +3663,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3712,7 +3712,7 @@ }, "XPosition": { "type": "float", - "value": 18.46536064147949 + "value": 18.465360641479492 }, "YOrientation": { "type": "float", @@ -3720,11 +3720,11 @@ }, "YPosition": { "type": "float", - "value": 50.49582672119141 + "value": 50.495826721191406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3785,7 +3785,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3846,7 +3846,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3895,7 +3895,7 @@ }, "XPosition": { "type": "float", - "value": 29.81731033325195 + "value": 29.817310333251953 }, "YOrientation": { "type": "float", @@ -3907,7 +3907,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3960,7 +3960,7 @@ }, "YOrientation": { "type": "float", - "value": -0.4713962078094482 + "value": -0.47139620780944824 }, "YPosition": { "type": "float", @@ -3968,7 +3968,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4017,19 +4017,19 @@ }, "XPosition": { "type": "float", - "value": 92.41220855712891 + "value": 92.4122085571289 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 140.2293395996094 + "value": 140.22933959960938 }, "ZPosition": { "type": "float", - "value": 0.003126144409179688 + "value": 0.0031261444091796875 } }, { @@ -4078,7 +4078,7 @@ }, "XPosition": { "type": "float", - "value": 10.62393188476563 + "value": 10.623931884765625 }, "YOrientation": { "type": "float", @@ -4090,7 +4090,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4174,19 +4174,19 @@ }, "XPosition": { "type": "float", - "value": 139.2711029052734 + "value": 139.27110290527344 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 35.14817047119141 + "value": 35.148170471191406 }, "ZPosition": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 } }, { @@ -4270,19 +4270,19 @@ }, "XPosition": { "type": "float", - "value": 120.842170715332 + "value": 120.84217071533203 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 11.29168128967285 + "value": 11.291681289672852 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4331,7 +4331,7 @@ }, "XPosition": { "type": "float", - "value": 120.5671997070313 + "value": 120.56719970703125 }, "YOrientation": { "type": "float", @@ -4339,11 +4339,11 @@ }, "YPosition": { "type": "float", - "value": 127.9232940673828 + "value": 127.92329406738281 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4453,7 +4453,7 @@ }, "XPosition": { "type": "float", - "value": 74.36868286132813 + "value": 74.36868286132812 }, "YOrientation": { "type": "float", @@ -4461,11 +4461,11 @@ }, "YPosition": { "type": "float", - "value": 49.36087036132813 + "value": 49.360870361328125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4526,7 +4526,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4585,7 +4585,7 @@ }, "YPosition": { "type": "float", - "value": 24.46481132507324 + "value": 24.464811325073242 }, "ZPosition": { "type": "float", @@ -4650,7 +4650,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/morathvillagecry.git.json b/_module/git/morathvillagecry.git.json index d115eb8..619dcf1 100644 --- a/_module/git/morathvillagecry.git.json +++ b/_module/git/morathvillagecry.git.json @@ -266,7 +266,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -485,7 +485,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.57079553604126 + "value": 1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -704,7 +704,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -923,7 +923,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1142,7 +1142,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1361,7 +1361,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1380,7 +1380,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1580,7 +1580,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1799,7 +1799,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1818,7 +1818,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2018,7 +2018,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2237,7 +2237,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -2256,7 +2256,7 @@ }, "Bearing": { "type": "float", - "value": -3.141590356826782 + "value": -3.1415903568267822 }, "CloseLockDC": { "type": "byte", @@ -2456,7 +2456,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } } ] @@ -2688,11 +2688,11 @@ }, "X": { "type": "float", - "value": 91.75632476806641 + "value": 91.7563247680664 }, "Y": { "type": "float", - "value": 63.68917083740234 + "value": 63.689170837402344 }, "Z": { "type": "float", @@ -2915,7 +2915,7 @@ }, "X": { "type": "float", - "value": 89.04885101318359 + "value": 89.0488510131836 }, "Y": { "type": "float", @@ -2923,7 +2923,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3142,7 +3142,7 @@ }, "X": { "type": "float", - "value": 86.60793304443359 + "value": 86.6079330444336 }, "Y": { "type": "float", @@ -3150,7 +3150,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3369,7 +3369,7 @@ }, "X": { "type": "float", - "value": 84.11111450195313 + "value": 84.11111450195312 }, "Y": { "type": "float", @@ -3377,7 +3377,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3604,7 +3604,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3831,7 +3831,7 @@ }, "Z": { "type": "float", - "value": -7.171183824539185e-006 + "value": -0.0000071711838245391846 } }, { @@ -4050,15 +4050,15 @@ }, "X": { "type": "float", - "value": 69.34934234619141 + "value": 69.3493423461914 }, "Y": { "type": "float", - "value": 63.98470306396484 + "value": 63.984703063964844 }, "Z": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -4077,7 +4077,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -4277,7 +4277,7 @@ }, "X": { "type": "float", - "value": 66.19326019287109 + "value": 66.1932601928711 }, "Y": { "type": "float", @@ -4285,7 +4285,7 @@ }, "Z": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -4304,7 +4304,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -4508,11 +4508,11 @@ }, "Y": { "type": "float", - "value": 57.73441314697266 + "value": 57.734413146972656 }, "Z": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -4735,7 +4735,7 @@ }, "Y": { "type": "float", - "value": 12.3228702545166 + "value": 12.322870254516602 }, "Z": { "type": "float", @@ -5185,15 +5185,15 @@ }, "X": { "type": "float", - "value": 52.59833145141602 + "value": 52.598331451416016 }, "Y": { "type": "float", - "value": 52.56756973266602 + "value": 52.567569732666016 }, "Z": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -5412,7 +5412,7 @@ }, "X": { "type": "float", - "value": 50.09334564208984 + "value": 50.093345642089844 }, "Y": { "type": "float", @@ -5420,7 +5420,7 @@ }, "Z": { "type": "float", - "value": 1.937150955200195e-007 + "value": 0.00000019371509552001953 } }, { @@ -5643,11 +5643,11 @@ }, "Y": { "type": "float", - "value": 13.36837768554688 + "value": 13.368377685546875 }, "Z": { "type": "float", - "value": 5.587935447692871e-007 + "value": 0.0000005587935447692871 } }, { @@ -5866,15 +5866,15 @@ }, "X": { "type": "float", - "value": 36.66574096679688 + "value": 36.665740966796875 }, "Y": { "type": "float", - "value": 11.02536296844482 + "value": 11.025362968444824 }, "Z": { "type": "float", - "value": -3.05473804473877e-007 + "value": -0.00000030547380447387695 } } ] @@ -5932,7 +5932,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -6020,7 +6020,7 @@ }, "XPosition": { "type": "float", - "value": 52.37805557250977 + "value": 52.378055572509766 }, "YPosition": { "type": "float", @@ -6145,7 +6145,7 @@ }, "YPosition": { "type": "float", - "value": 12.32176113128662 + "value": 12.321761131286621 }, "ZPosition": { "type": "float", @@ -6266,19 +6266,19 @@ }, "XPosition": { "type": "float", - "value": 32.19909286499023 + "value": 32.199092864990234 }, "YOrientation": { "type": "float", - "value": 1.029172267408285e-006 + "value": 0.0000010291722674082848 }, "YPosition": { "type": "float", - "value": 54.91546249389648 + "value": 54.915462493896484 }, "ZPosition": { "type": "float", - "value": -7.171183824539185e-006 + "value": -0.0000071711838245391846 } }, { @@ -6327,7 +6327,7 @@ }, "XPosition": { "type": "float", - "value": 33.20038223266602 + "value": 33.200382232666016 }, "YOrientation": { "type": "float", @@ -6339,7 +6339,7 @@ }, "ZPosition": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -6384,11 +6384,11 @@ }, "XOrientation": { "type": "float", - "value": 0.3598968088626862 + "value": 0.35989680886268616 }, "XPosition": { "type": "float", - "value": 50.23406600952148 + "value": 50.234066009521484 }, "YOrientation": { "type": "float", @@ -6396,11 +6396,11 @@ }, "YPosition": { "type": "float", - "value": 19.70444869995117 + "value": 19.704448699951172 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6453,11 +6453,11 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 36.70925903320313 + "value": 36.709259033203125 }, "ZPosition": { "type": "float", @@ -6506,7 +6506,7 @@ }, "XOrientation": { "type": "float", - "value": 2.296763113918132e-006 + "value": 0.000002296763113918132 }, "XPosition": { "type": "float", @@ -6522,7 +6522,7 @@ }, "ZPosition": { "type": "float", - "value": -8.162111043930054e-006 + "value": -0.000008162111043930054 } }, { @@ -6567,11 +6567,11 @@ }, "XOrientation": { "type": "float", - "value": 2.296763113918132e-006 + "value": 0.000002296763113918132 }, "XPosition": { "type": "float", - "value": 14.39517688751221 + "value": 14.395176887512207 }, "YOrientation": { "type": "float", @@ -6628,11 +6628,11 @@ }, "XOrientation": { "type": "float", - "value": 2.296763113918132e-006 + "value": 0.000002296763113918132 }, "XPosition": { "type": "float", - "value": 84.84889984130859 + "value": 84.8488998413086 }, "YOrientation": { "type": "float", @@ -6644,7 +6644,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000002264976502 + "value": 0.20000022649765015 } }, { @@ -6693,7 +6693,7 @@ }, "XPosition": { "type": "float", - "value": 15.00622653961182 + "value": 15.006226539611816 }, "YOrientation": { "type": "float", @@ -6701,11 +6701,11 @@ }, "YPosition": { "type": "float", - "value": 30.67063903808594 + "value": 30.670639038085938 }, "ZPosition": { "type": "float", - "value": 0.2000002264976502 + "value": 0.20000022649765015 } }, { @@ -6762,7 +6762,7 @@ }, "YPosition": { "type": "float", - "value": 45.68566513061523 + "value": 45.685665130615234 }, "ZPosition": { "type": "float", @@ -6823,7 +6823,7 @@ }, "YPosition": { "type": "float", - "value": 25.03985977172852 + "value": 25.039859771728516 }, "ZPosition": { "type": "float", @@ -6937,7 +6937,7 @@ }, "XPosition": { "type": "float", - "value": 33.84316253662109 + "value": 33.843162536621094 }, "YOrientation": { "type": "float", @@ -6949,7 +6949,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000002264976502 + "value": 0.20000022649765015 } }, { @@ -7006,11 +7006,11 @@ }, "YPosition": { "type": "float", - "value": 15.96973323822022 + "value": 15.969733238220215 }, "ZPosition": { "type": "float", - "value": 6.109476089477539e-007 + "value": 0.0000006109476089477539 } } ] diff --git a/_module/git/morathvillagesho.git.json b/_module/git/morathvillagesho.git.json index 78078ae..1f7d598 100644 --- a/_module/git/morathvillagesho.git.json +++ b/_module/git/morathvillagesho.git.json @@ -877,11 +877,11 @@ }, "YPosition": { "type": "float", - "value": 13.15390777587891 + "value": 13.153907775878906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1700,7 +1700,7 @@ }, "XPosition": { "type": "float", - "value": 17.2840747833252 + "value": 17.284074783325195 }, "YOrientation": { "type": "float", @@ -1708,11 +1708,11 @@ }, "YPosition": { "type": "float", - "value": 21.57852745056152 + "value": 21.578527450561523 }, "ZPosition": { "type": "float", - "value": 0.002589821815490723 + "value": 0.0025898218154907227 } } ] @@ -5360,7 +5360,7 @@ }, "XPosition": { "type": "float", - "value": 17.40674018859863 + "value": 17.406740188598633 }, "YOrientation": { "type": "float", @@ -5368,11 +5368,11 @@ }, "YPosition": { "type": "float", - "value": 21.28012084960938 + "value": 21.280120849609375 }, "ZPosition": { "type": "float", - "value": 0.002589821815490723 + "value": 0.0025898218154907227 } }, { @@ -13597,7 +13597,7 @@ }, "XPosition": { "type": "float", - "value": 14.94308471679688 + "value": 14.943084716796875 }, "YOrientation": { "type": "float", @@ -13605,11 +13605,11 @@ }, "YPosition": { "type": "float", - "value": 13.23893165588379 + "value": 13.238931655883789 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } } ] diff --git a/_module/git/morrahills.git.json b/_module/git/morrahills.git.json index ffa7ea9..d58de6a 100644 --- a/_module/git/morrahills.git.json +++ b/_module/git/morrahills.git.json @@ -256,11 +256,11 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", - "value": 144.5099945068359 + "value": 144.50999450683594 }, "Z": { "type": "float", @@ -479,7 +479,7 @@ }, "Y": { "type": "float", - "value": 107.6999969482422 + "value": 107.69999694824219 }, "Z": { "type": "float", @@ -938,7 +938,7 @@ }, "Y": { "type": "float", - "value": 12.74576950073242 + "value": 12.745769500732422 }, "Z": { "type": "float", @@ -1161,11 +1161,11 @@ }, "X": { "type": "float", - "value": 102.4824523925781 + "value": 102.48245239257812 }, "Y": { "type": "float", - "value": 21.34880638122559 + "value": 21.348806381225586 }, "Z": { "type": "float", @@ -1392,7 +1392,7 @@ }, "Y": { "type": "float", - "value": 10.95346832275391 + "value": 10.953468322753906 }, "Z": { "type": "float", @@ -2296,7 +2296,7 @@ }, "X": { "type": "float", - "value": 100.6905212402344 + "value": 100.69052124023438 }, "Y": { "type": "float", @@ -2527,11 +2527,11 @@ }, "Y": { "type": "float", - "value": 64.65640258789063 + "value": 64.65640258789062 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3212,7 +3212,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3658,7 +3658,7 @@ }, "X": { "type": "float", - "value": 121.5339508056641 + "value": 121.53395080566406 }, "Y": { "type": "float", @@ -3666,7 +3666,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3893,7 +3893,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4120,7 +4120,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4339,7 +4339,7 @@ }, "X": { "type": "float", - "value": 121.161003112793 + "value": 121.16100311279297 }, "Y": { "type": "float", @@ -4347,7 +4347,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4566,7 +4566,7 @@ }, "X": { "type": "float", - "value": 131.2475280761719 + "value": 131.24752807617188 }, "Y": { "type": "float", @@ -4574,7 +4574,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4793,7 +4793,7 @@ }, "X": { "type": "float", - "value": 141.8760681152344 + "value": 141.87606811523438 }, "Y": { "type": "float", @@ -4801,7 +4801,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5028,7 +5028,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5255,7 +5255,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5478,7 +5478,7 @@ }, "Y": { "type": "float", - "value": 22.07307052612305 + "value": 22.073070526123047 }, "Z": { "type": "float", @@ -5701,7 +5701,7 @@ }, "X": { "type": "float", - "value": 34.03482818603516 + "value": 34.034828186035156 }, "Y": { "type": "float", @@ -5709,7 +5709,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5936,7 +5936,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6159,11 +6159,11 @@ }, "Y": { "type": "float", - "value": 107.8293838500977 + "value": 107.82938385009766 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6382,11 +6382,11 @@ }, "X": { "type": "float", - "value": 30.63868713378906 + "value": 30.638687133789062 }, "Y": { "type": "float", - "value": 117.3554382324219 + "value": 117.35543823242188 }, "Z": { "type": "float", @@ -6840,11 +6840,11 @@ }, "Y": { "type": "float", - "value": 134.9791870117188 + "value": 134.97918701171875 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7063,15 +7063,15 @@ }, "X": { "type": "float", - "value": 103.8680953979492 + "value": 103.86809539794922 }, "Y": { "type": "float", - "value": 126.8270568847656 + "value": 126.82705688476562 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7290,15 +7290,15 @@ }, "X": { "type": "float", - "value": 118.9282379150391 + "value": 118.92823791503906 }, "Y": { "type": "float", - "value": 120.5464477539063 + "value": 120.54644775390625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7517,11 +7517,11 @@ }, "X": { "type": "float", - "value": 127.1330947875977 + "value": 127.13309478759766 }, "Y": { "type": "float", - "value": 102.3000030517578 + "value": 102.30000305175781 }, "Z": { "type": "float", @@ -7583,7 +7583,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -7948,7 +7948,7 @@ }, "YPosition": { "type": "float", - "value": 106.282096862793 + "value": 106.28209686279297 }, "ZPosition": { "type": "float", @@ -8004,11 +8004,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointY": { "type": "float", - "value": -2.736679077148438 + "value": -2.7366790771484375 }, "PointZ": { "type": "float", @@ -8019,7 +8019,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.01371002197266 + "value": 10.013710021972656 }, "PointY": { "type": "float", @@ -8034,7 +8034,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.01370239257813 + "value": 10.013702392578125 }, "PointY": { "type": "float", @@ -8042,7 +8042,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -8192,15 +8192,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.334213256835938 + "value": -3.3342132568359375 }, "PointY": { "type": "float", - "value": 10.00212860107422 + "value": 10.002128601074219 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -8211,7 +8211,7 @@ }, "PointY": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointZ": { "type": "float", @@ -8241,11 +8241,11 @@ }, "PointY": { "type": "float", - "value": 10.00212860107422 + "value": 10.002128601074219 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -8350,7 +8350,7 @@ }, "XPosition": { "type": "float", - "value": 149.7176361083984 + "value": 149.71763610839844 }, "YOrientation": { "type": "float", @@ -8358,7 +8358,7 @@ }, "YPosition": { "type": "float", - "value": 89.68703460693359 + "value": 89.6870346069336 }, "ZOrientation": { "type": "float", @@ -8402,7 +8402,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -8447,7 +8447,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150025404989719 + "value": 0.021500254049897194 } } ] @@ -8552,7 +8552,7 @@ }, "XPosition": { "type": "float", - "value": 129.9437103271484 + "value": 129.94371032714844 }, "YOrientation": { "type": "float", @@ -8611,7 +8611,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1587619781494141 + "value": 0.15876197814941406 }, "PointY": { "type": "float", @@ -8619,7 +8619,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -8630,7 +8630,7 @@ }, "PointY": { "type": "float", - "value": -12.70092010498047 + "value": -12.700920104980469 }, "PointZ": { "type": "float", @@ -8641,7 +8641,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 3.969037055969238 + "value": 3.9690370559692383 }, "PointY": { "type": "float", @@ -8754,7 +8754,7 @@ }, "XPosition": { "type": "float", - "value": 0.2200407981872559 + "value": 0.22004079818725586 }, "YOrientation": { "type": "float", @@ -8762,7 +8762,7 @@ }, "YPosition": { "type": "float", - "value": 102.8518676757813 + "value": 102.85186767578125 }, "ZOrientation": { "type": "float", @@ -8798,7 +8798,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.3917007446289063 + "value": -0.39170074462890625 }, "PointY": { "type": "float", @@ -8806,29 +8806,29 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 2.740455627441406 + "value": 2.7404556274414062 }, "PointY": { "type": "float", - "value": -10.88451385498047 + "value": -10.884513854980469 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 2.818733215332031 + "value": 2.8187332153320312 }, "PointY": { "type": "float", @@ -8965,7 +8965,7 @@ }, "YPosition": { "type": "float", - "value": 129.9689788818359 + "value": 129.96897888183594 }, "ZOrientation": { "type": "float", @@ -9067,7 +9067,7 @@ }, "XPosition": { "type": "float", - "value": 70.37509918212891 + "value": 70.3750991821289 }, "YOrientation": { "type": "float", @@ -9132,11 +9132,11 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 20.89753341674805 + "value": 20.897533416748047 }, "ZPosition": { "type": "float", @@ -9193,11 +9193,11 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 29.75187492370606 + "value": 29.751874923706055 }, "ZPosition": { "type": "float", @@ -9246,7 +9246,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2429798692464829 + "value": -0.24297986924648285 }, "XPosition": { "type": "float", @@ -9258,7 +9258,7 @@ }, "YPosition": { "type": "float", - "value": 42.53259658813477 + "value": 42.532596588134766 }, "ZPosition": { "type": "float", @@ -9311,11 +9311,11 @@ }, "XPosition": { "type": "float", - "value": 64.83725738525391 + "value": 64.8372573852539 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -9400,11 +9400,11 @@ }, "YPosition": { "type": "float", - "value": 27.3087272644043 + "value": 27.308727264404297 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9449,7 +9449,7 @@ }, "XOrientation": { "type": "float", - "value": 0.9807849526405335 + "value": 0.9807849526405334 }, "XPosition": { "type": "float", @@ -9465,7 +9465,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9510,7 +9510,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906757548451424 + "value": -0.049067575484514236 }, "XPosition": { "type": "float", @@ -9526,7 +9526,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9575,11 +9575,11 @@ }, "XPosition": { "type": "float", - "value": 29.66765975952148 + "value": 29.667659759521484 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -9587,7 +9587,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9632,7 +9632,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906757548451424 + "value": -0.049067575484514236 }, "XPosition": { "type": "float", @@ -9648,7 +9648,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9713,7 +9713,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906757548451424 + "value": -0.049067575484514236 }, "XPosition": { "type": "float", @@ -9725,11 +9725,11 @@ }, "YPosition": { "type": "float", - "value": 121.0752639770508 + "value": 121.07526397705078 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9794,11 +9794,11 @@ }, "XOrientation": { "type": "float", - "value": -0.04906757548451424 + "value": -0.049067575484514236 }, "XPosition": { "type": "float", - "value": 141.3615570068359 + "value": 141.36155700683594 }, "YOrientation": { "type": "float", @@ -9806,11 +9806,11 @@ }, "YPosition": { "type": "float", - "value": 133.6316986083984 + "value": 133.63169860839844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9875,7 +9875,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906757548451424 + "value": -0.049067575484514236 }, "XPosition": { "type": "float", @@ -9891,7 +9891,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9956,7 +9956,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906757548451424 + "value": -0.049067575484514236 }, "XPosition": { "type": "float", @@ -9972,7 +9972,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10053,7 +10053,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10118,11 +10118,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", - "value": 75.54367828369141 + "value": 75.5436782836914 }, "YOrientation": { "type": "float", @@ -10130,11 +10130,11 @@ }, "YPosition": { "type": "float", - "value": 148.3424987792969 + "value": 148.34249877929688 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10187,15 +10187,15 @@ }, "YOrientation": { "type": "float", - "value": -0.4713962078094482 + "value": -0.47139620780944824 }, "YPosition": { "type": "float", - "value": 121.4942092895508 + "value": 121.49420928955078 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10246,7 +10246,7 @@ }, "XPosition": { "type": "float", - "value": 134.6152496337891 + "value": 134.61524963378906 }, "YOrientation": { "type": "float", @@ -10254,11 +10254,11 @@ }, "YPosition": { "type": "float", - "value": 1.314165353775024 + "value": 1.3141653537750244 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10309,7 +10309,7 @@ }, "XPosition": { "type": "float", - "value": 2.808080673217773 + "value": 2.8080806732177734 }, "YOrientation": { "type": "float", @@ -10321,7 +10321,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10368,19 +10368,19 @@ }, "XPosition": { "type": "float", - "value": 2.276985883712769 + "value": 2.2769858837127686 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 95.77725219726563 + "value": 95.77725219726562 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10427,7 +10427,7 @@ }, "XPosition": { "type": "float", - "value": 134.9451751708984 + "value": 134.94517517089844 }, "YOrientation": { "type": "float", @@ -10435,7 +10435,7 @@ }, "YPosition": { "type": "float", - "value": 1.4629807472229 + "value": 1.4629807472229004 }, "ZPosition": { "type": "float", @@ -10496,11 +10496,11 @@ }, "YPosition": { "type": "float", - "value": 95.38638305664063 + "value": 95.38638305664062 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10581,7 +10581,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10650,7 +10650,7 @@ }, "XPosition": { "type": "float", - "value": 108.4305801391602 + "value": 108.43058013916016 }, "YOrientation": { "type": "float", @@ -10658,11 +10658,11 @@ }, "YPosition": { "type": "float", - "value": 101.5190353393555 + "value": 101.51903533935547 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10731,7 +10731,7 @@ }, "XPosition": { "type": "float", - "value": 59.06460571289063 + "value": 59.064605712890625 }, "YOrientation": { "type": "float", @@ -10739,11 +10739,11 @@ }, "YPosition": { "type": "float", - "value": 109.9116363525391 + "value": 109.91163635253906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10824,7 +10824,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10873,7 +10873,7 @@ }, "XPosition": { "type": "float", - "value": 119.2742233276367 + "value": 119.27422332763672 }, "YOrientation": { "type": "float", @@ -10881,11 +10881,11 @@ }, "YPosition": { "type": "float", - "value": 10.77704429626465 + "value": 10.777044296264648 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10930,7 +10930,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3598999381065369 + "value": -0.35989993810653687 }, "XPosition": { "type": "float", @@ -10946,7 +10946,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10995,7 +10995,7 @@ }, "XPosition": { "type": "float", - "value": 39.45265960693359 + "value": 39.452659606933594 }, "YOrientation": { "type": "float", @@ -11003,11 +11003,11 @@ }, "YPosition": { "type": "float", - "value": 138.9985656738281 + "value": 138.99856567382812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11050,7 +11050,7 @@ }, "XOrientation": { "type": "float", - "value": -4.204111519356957e-006 + "value": -0.000004204111519356957 }, "XPosition": { "type": "float", @@ -11062,11 +11062,11 @@ }, "YPosition": { "type": "float", - "value": 148.5086364746094 + "value": 148.50863647460938 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11207,7 +11207,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11256,7 +11256,7 @@ }, "XPosition": { "type": "float", - "value": 134.9907073974609 + "value": 134.99070739746094 }, "YOrientation": { "type": "float", @@ -11264,11 +11264,11 @@ }, "YPosition": { "type": "float", - "value": 100.6079635620117 + "value": 100.60796356201172 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11317,7 +11317,7 @@ }, "XPosition": { "type": "float", - "value": 124.3738861083984 + "value": 124.37388610839844 }, "YOrientation": { "type": "float", @@ -11325,11 +11325,11 @@ }, "YPosition": { "type": "float", - "value": 114.6648864746094 + "value": 114.66488647460938 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11394,11 +11394,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0490705817937851 + "value": 0.049070581793785095 }, "XPosition": { "type": "float", - "value": 69.88632965087891 + "value": 69.8863296508789 }, "YOrientation": { "type": "float", @@ -11487,11 +11487,11 @@ }, "YPosition": { "type": "float", - "value": 32.73950576782227 + "value": 32.739505767822266 }, "ZPosition": { "type": "float", - "value": 0.003126144409179688 + "value": 0.0031261444091796875 } }, { @@ -11538,7 +11538,7 @@ }, "XPosition": { "type": "float", - "value": 134.9503021240234 + "value": 134.95030212402344 }, "YOrientation": { "type": "float", @@ -11550,7 +11550,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11611,7 +11611,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11658,19 +11658,19 @@ }, "XPosition": { "type": "float", - "value": 114.6252593994141 + "value": 114.62525939941406 }, "YOrientation": { "type": "float", - "value": 1.029172267408285e-006 + "value": 0.0000010291722674082848 }, "YPosition": { "type": "float", - "value": 115.3178329467773 + "value": 115.31783294677734 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11725,11 +11725,11 @@ }, "YPosition": { "type": "float", - "value": 114.2212753295898 + "value": 114.22127532958984 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11780,15 +11780,15 @@ }, "YOrientation": { "type": "float", - "value": 0.1709629148244858 + "value": 0.17096291482448578 }, "YPosition": { "type": "float", - "value": 94.23891448974609 + "value": 94.2389144897461 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11849,7 +11849,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11910,7 +11910,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/mv_inn.git.json b/_module/git/mv_inn.git.json index 75a20a4..a941b36 100644 --- a/_module/git/mv_inn.git.json +++ b/_module/git/mv_inn.git.json @@ -770,7 +770,7 @@ }, "XPosition": { "type": "float", - "value": 44.46039199829102 + "value": 44.460391998291016 }, "YOrientation": { "type": "float", @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -1509,7 +1509,7 @@ }, "XPosition": { "type": "float", - "value": 44.43020629882813 + "value": 44.430206298828125 }, "YOrientation": { "type": "float", @@ -1517,11 +1517,11 @@ }, "YPosition": { "type": "float", - "value": 21.83237838745117 + "value": 21.832378387451172 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2248,7 +2248,7 @@ }, "XPosition": { "type": "float", - "value": 29.01973724365234 + "value": 29.019737243652344 }, "YOrientation": { "type": "float", @@ -2260,7 +2260,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2995,7 +2995,7 @@ }, "YPosition": { "type": "float", - "value": 19.35297775268555 + "value": 19.352977752685547 }, "ZPosition": { "type": "float", @@ -3726,7 +3726,7 @@ }, "XPosition": { "type": "float", - "value": 27.33772659301758 + "value": 27.337726593017578 }, "YOrientation": { "type": "float", @@ -3734,11 +3734,11 @@ }, "YPosition": { "type": "float", - "value": 19.34080314636231 + "value": 19.340803146362305 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4465,7 +4465,7 @@ }, "XPosition": { "type": "float", - "value": 31.72592735290527 + "value": 31.725927352905273 }, "YOrientation": { "type": "float", @@ -5208,7 +5208,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -5216,7 +5216,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6044,7 +6044,7 @@ }, "XPosition": { "type": "float", - "value": 31.35613632202148 + "value": 31.356136322021484 }, "YOrientation": { "type": "float", @@ -6056,7 +6056,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -6080,7 +6080,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -6299,7 +6299,7 @@ }, "Bearing": { "type": "float", - "value": -3.141582012176514 + "value": -3.1415820121765137 }, "CloseLockDC": { "type": "byte", @@ -6532,7 +6532,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -6732,15 +6732,15 @@ }, "X": { "type": "float", - "value": 28.76835441589356 + "value": 28.768354415893555 }, "Y": { "type": "float", - "value": 3.898037672042847 + "value": 3.8980376720428467 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6759,7 +6759,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -6959,7 +6959,7 @@ }, "X": { "type": "float", - "value": 28.72013854980469 + "value": 28.720138549804688 }, "Y": { "type": "float", @@ -6967,7 +6967,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6986,7 +6986,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -7194,7 +7194,7 @@ }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -7213,7 +7213,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -7413,15 +7413,15 @@ }, "X": { "type": "float", - "value": 31.75425720214844 + "value": 31.754257202148438 }, "Y": { "type": "float", - "value": 3.945630550384522 + "value": 3.9456305503845215 }, "Z": { "type": "float", - "value": 0.002740859985351563 + "value": 0.0027408599853515625 } }, { @@ -7440,7 +7440,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -7644,11 +7644,11 @@ }, "Y": { "type": "float", - "value": 3.006785154342651 + "value": 3.0067851543426514 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7667,7 +7667,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -7867,15 +7867,15 @@ }, "X": { "type": "float", - "value": 23.19804763793945 + "value": 23.198047637939453 }, "Y": { "type": "float", - "value": 10.34163188934326 + "value": 10.341631889343262 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -7894,7 +7894,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -8094,7 +8094,7 @@ }, "X": { "type": "float", - "value": 23.14983177185059 + "value": 23.149831771850586 }, "Y": { "type": "float", @@ -8102,7 +8102,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8121,7 +8121,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -8325,11 +8325,11 @@ }, "Y": { "type": "float", - "value": 9.925295829772949 + "value": 9.92529582977295 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8348,7 +8348,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -8548,15 +8548,15 @@ }, "X": { "type": "float", - "value": 26.18395042419434 + "value": 26.183950424194336 }, "Y": { "type": "float", - "value": 10.38922500610352 + "value": 10.389225006103516 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -8575,7 +8575,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -8783,7 +8783,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8802,7 +8802,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9002,15 +9002,15 @@ }, "X": { "type": "float", - "value": 41.31311416625977 + "value": 41.313114166259766 }, "Y": { "type": "float", - "value": 8.629856109619141 + "value": 8.62985610961914 }, "Z": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -9029,7 +9029,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9229,7 +9229,7 @@ }, "X": { "type": "float", - "value": 41.26489639282227 + "value": 41.264896392822266 }, "Y": { "type": "float", @@ -9237,7 +9237,7 @@ }, "Z": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -9256,7 +9256,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -9464,7 +9464,7 @@ }, "Z": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -9483,7 +9483,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9683,7 +9683,7 @@ }, "X": { "type": "float", - "value": 44.29901504516602 + "value": 44.299015045166016 }, "Y": { "type": "float", @@ -9691,7 +9691,7 @@ }, "Z": { "type": "float", - "value": 7.778406143188477e-006 + "value": 0.000007778406143188477 } }, { @@ -9710,7 +9710,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9910,7 +9910,7 @@ }, "X": { "type": "float", - "value": 44.25079727172852 + "value": 44.250797271728516 }, "Y": { "type": "float", @@ -9918,7 +9918,7 @@ }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -9937,7 +9937,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10137,7 +10137,7 @@ }, "X": { "type": "float", - "value": 27.14083290100098 + "value": 27.140832901000977 }, "Y": { "type": "float", @@ -10145,7 +10145,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10164,7 +10164,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10368,11 +10368,11 @@ }, "Y": { "type": "float", - "value": 21.42771911621094 + "value": 21.427719116210938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10391,7 +10391,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -10591,15 +10591,15 @@ }, "X": { "type": "float", - "value": 28.5463752746582 + "value": 28.546375274658203 }, "Y": { "type": "float", - "value": 21.95023345947266 + "value": 21.950233459472656 }, "Z": { "type": "float", - "value": 0.009990841150283814 + "value": 0.009990841150283813 } }, { @@ -10618,7 +10618,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10818,11 +10818,11 @@ }, "X": { "type": "float", - "value": 30.12673759460449 + "value": 30.126737594604492 }, "Y": { "type": "float", - "value": 22.41416168212891 + "value": 22.414161682128906 }, "Z": { "type": "float", @@ -10845,7 +10845,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11049,11 +11049,11 @@ }, "Y": { "type": "float", - "value": 21.47531700134277 + "value": 21.475317001342773 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11072,7 +11072,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11276,11 +11276,11 @@ }, "Y": { "type": "float", - "value": 30.57774353027344 + "value": 30.577743530273438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11299,7 +11299,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11503,11 +11503,11 @@ }, "Y": { "type": "float", - "value": 20.51373100280762 + "value": 20.513731002807617 }, "Z": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -11526,7 +11526,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11730,11 +11730,11 @@ }, "Y": { "type": "float", - "value": 19.57487869262695 + "value": 19.574878692626953 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11753,7 +11753,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -11957,11 +11957,11 @@ }, "Y": { "type": "float", - "value": 20.09739303588867 + "value": 20.097393035888672 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -11980,7 +11980,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12184,11 +12184,11 @@ }, "Y": { "type": "float", - "value": 20.56132125854492 + "value": 20.561321258544922 }, "Z": { "type": "float", - "value": 7.778406143188477e-006 + "value": 0.000007778406143188477 } }, { @@ -12207,7 +12207,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12415,7 +12415,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12434,7 +12434,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12638,11 +12638,11 @@ }, "Y": { "type": "float", - "value": 42.03622436523438 + "value": 42.036224365234375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12661,7 +12661,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12865,11 +12865,11 @@ }, "Y": { "type": "float", - "value": 38.74337005615234 + "value": 38.743370056152344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13096,7 +13096,7 @@ }, "Z": { "type": "float", - "value": 0.002181768417358398 + "value": 0.0021817684173583984 } }, { @@ -13323,7 +13323,7 @@ }, "Z": { "type": "float", - "value": 0.002181768417358398 + "value": 0.0021817684173583984 } } ] @@ -13445,11 +13445,11 @@ }, "YPosition": { "type": "float", - "value": 38.82553100585938 + "value": 38.825531005859375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13504,11 +13504,11 @@ }, "YPosition": { "type": "float", - "value": 18.10598945617676 + "value": 18.105989456176758 }, "ZPosition": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -13559,15 +13559,15 @@ }, "YOrientation": { "type": "float", - "value": -0.7572054266929627 + "value": -0.7572054266929626 }, "YPosition": { "type": "float", - "value": 22.35422325134277 + "value": 22.354223251342773 }, "ZPosition": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -13622,11 +13622,11 @@ }, "YPosition": { "type": "float", - "value": 10.39221858978272 + "value": 10.392218589782715 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13673,7 +13673,7 @@ }, "XPosition": { "type": "float", - "value": 30.14590644836426 + "value": 30.145906448364258 }, "YOrientation": { "type": "float", @@ -13685,7 +13685,7 @@ }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -13732,7 +13732,7 @@ }, "XPosition": { "type": "float", - "value": 26.55114364624023 + "value": 26.551143646240234 }, "YOrientation": { "type": "float", @@ -13740,11 +13740,11 @@ }, "YPosition": { "type": "float", - "value": 11.59792518615723 + "value": 11.597925186157227 }, "ZPosition": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -13791,7 +13791,7 @@ }, "XPosition": { "type": "float", - "value": 27.18252372741699 + "value": 27.182523727416992 }, "YOrientation": { "type": "float", @@ -13862,7 +13862,7 @@ }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -13970,7 +13970,7 @@ }, "XPosition": { "type": "float", - "value": 25.05792617797852 + "value": 25.057926177978516 }, "YOrientation": { "type": "float", @@ -13978,11 +13978,11 @@ }, "YPosition": { "type": "float", - "value": 11.46881198883057 + "value": 11.468811988830566 }, "ZPosition": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -14059,7 +14059,7 @@ }, "YPosition": { "type": "float", - "value": 11.07956504821777 + "value": 11.079565048217773 }, "ZPosition": { "type": "float", @@ -14140,7 +14140,7 @@ }, "YPosition": { "type": "float", - "value": 18.36349487304688 + "value": 18.363494873046875 }, "ZPosition": { "type": "float", @@ -14213,7 +14213,7 @@ }, "XPosition": { "type": "float", - "value": 27.93220710754395 + "value": 27.932207107543945 }, "YOrientation": { "type": "float", @@ -14225,7 +14225,7 @@ }, "ZPosition": { "type": "float", - "value": 0.009990841150283814 + "value": 0.009990841150283813 } } ] diff --git a/_module/git/ncinn.git.json b/_module/git/ncinn.git.json index d9a8518..2976cc7 100644 --- a/_module/git/ncinn.git.json +++ b/_module/git/ncinn.git.json @@ -770,7 +770,7 @@ }, "XPosition": { "type": "float", - "value": 22.66834449768066 + "value": 22.668344497680664 }, "YOrientation": { "type": "float", @@ -778,11 +778,11 @@ }, "YPosition": { "type": "float", - "value": 11.34389019012451 + "value": 11.343890190124512 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2256,11 +2256,11 @@ }, "YPosition": { "type": "float", - "value": 21.47579193115234 + "value": 21.475791931152344 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -2995,11 +2995,11 @@ }, "YPosition": { "type": "float", - "value": 32.68481826782227 + "value": 32.684818267822266 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3726,7 +3726,7 @@ }, "XPosition": { "type": "float", - "value": 34.54799652099609 + "value": 34.547996520996094 }, "YOrientation": { "type": "float", @@ -3734,11 +3734,11 @@ }, "YPosition": { "type": "float", - "value": 31.87556457519531 + "value": 31.875564575195312 }, "ZPosition": { "type": "float", - "value": 0.01196670532226563 + "value": 0.011966705322265625 } }, { @@ -4477,7 +4477,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5216,7 +5216,7 @@ }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -5943,11 +5943,11 @@ }, "XPosition": { "type": "float", - "value": 11.05860996246338 + "value": 11.058609962463379 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -5955,7 +5955,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6796,7 +6796,7 @@ }, "ZPosition": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -7527,15 +7527,15 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 21.39504241943359 + "value": 21.395042419433594 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -9511,7 +9511,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -9519,7 +9519,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002738118171691895 + "value": 0.0027381181716918945 } } ] @@ -9543,7 +9543,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -9760,7 +9760,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -9992,7 +9992,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10192,15 +10192,15 @@ }, "X": { "type": "float", - "value": 28.76835441589356 + "value": 28.768354415893555 }, "Y": { "type": "float", - "value": 3.898037672042847 + "value": 3.8980376720428467 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10219,7 +10219,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10419,7 +10419,7 @@ }, "X": { "type": "float", - "value": 28.72013854980469 + "value": 28.720138549804688 }, "Y": { "type": "float", @@ -10427,7 +10427,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10446,7 +10446,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -10654,7 +10654,7 @@ }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -10673,7 +10673,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10873,15 +10873,15 @@ }, "X": { "type": "float", - "value": 31.75425720214844 + "value": 31.754257202148438 }, "Y": { "type": "float", - "value": 3.945630550384522 + "value": 3.9456305503845215 }, "Z": { "type": "float", - "value": 0.002740859985351563 + "value": 0.0027408599853515625 } }, { @@ -10900,7 +10900,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11104,11 +11104,11 @@ }, "Y": { "type": "float", - "value": 3.006784915924072 + "value": 3.0067849159240723 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11127,7 +11127,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11327,15 +11327,15 @@ }, "X": { "type": "float", - "value": 34.81316757202148 + "value": 34.813167572021484 }, "Y": { "type": "float", - "value": 11.72741603851318 + "value": 11.727416038513184 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11354,7 +11354,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11558,11 +11558,11 @@ }, "Y": { "type": "float", - "value": 10.78855609893799 + "value": 10.788556098937988 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11581,7 +11581,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -11785,11 +11785,11 @@ }, "Y": { "type": "float", - "value": 11.31107711791992 + "value": 11.311077117919922 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -11808,7 +11808,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12008,15 +12008,15 @@ }, "X": { "type": "float", - "value": 37.79907608032227 + "value": 37.799076080322266 }, "Y": { "type": "float", - "value": 11.77501010894775 + "value": 11.775010108947754 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12035,7 +12035,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12235,15 +12235,15 @@ }, "X": { "type": "float", - "value": 37.75085830688477 + "value": 37.750858306884766 }, "Y": { "type": "float", - "value": 10.83616256713867 + "value": 10.836162567138672 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12262,7 +12262,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12462,7 +12462,7 @@ }, "X": { "type": "float", - "value": 22.32448577880859 + "value": 22.324485778808594 }, "Y": { "type": "float", @@ -12470,7 +12470,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12489,7 +12489,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12689,7 +12689,7 @@ }, "X": { "type": "float", - "value": 22.27626991271973 + "value": 22.276269912719727 }, "Y": { "type": "float", @@ -12697,7 +12697,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12716,7 +12716,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -12924,7 +12924,7 @@ }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -12943,7 +12943,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13143,7 +13143,7 @@ }, "X": { "type": "float", - "value": 25.31038856506348 + "value": 25.310388565063477 }, "Y": { "type": "float", @@ -13151,7 +13151,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13170,7 +13170,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13378,7 +13378,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13397,7 +13397,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13597,7 +13597,7 @@ }, "X": { "type": "float", - "value": 28.30370140075684 + "value": 28.303701400756836 }, "Y": { "type": "float", @@ -13624,7 +13624,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13851,7 +13851,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -14051,7 +14051,7 @@ }, "X": { "type": "float", - "value": 29.70924377441406 + "value": 29.709243774414062 }, "Y": { "type": "float", @@ -14078,7 +14078,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14286,7 +14286,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14305,7 +14305,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14513,7 +14513,7 @@ }, "Z": { "type": "float", - "value": 0.001409530639648438 + "value": 0.0014095306396484375 } }, { @@ -14532,7 +14532,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14732,7 +14732,7 @@ }, "X": { "type": "float", - "value": 33.88803863525391 + "value": 33.888038635253906 }, "Y": { "type": "float", @@ -14740,7 +14740,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14759,7 +14759,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14967,7 +14967,7 @@ }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -14986,7 +14986,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -15186,15 +15186,15 @@ }, "X": { "type": "float", - "value": 35.29358291625977 + "value": 35.293582916259766 }, "Y": { "type": "float", - "value": 30.11381530761719 + "value": 30.113815307617188 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15213,7 +15213,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15417,11 +15417,11 @@ }, "Y": { "type": "float", - "value": 30.57774353027344 + "value": 30.577743530273438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15440,7 +15440,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15644,11 +15644,11 @@ }, "Y": { "type": "float", - "value": 29.63889884948731 + "value": 29.638898849487305 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -15667,7 +15667,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15871,11 +15871,11 @@ }, "Y": { "type": "float", - "value": 20.15714263916016 + "value": 20.157142639160156 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -15894,7 +15894,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16094,15 +16094,15 @@ }, "X": { "type": "float", - "value": 33.46474456787109 + "value": 33.464744567871094 }, "Y": { "type": "float", - "value": 19.21829223632813 + "value": 19.218292236328125 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -16121,7 +16121,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -16325,11 +16325,11 @@ }, "Y": { "type": "float", - "value": 19.74080657958984 + "value": 19.740806579589844 }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -16348,7 +16348,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16548,15 +16548,15 @@ }, "X": { "type": "float", - "value": 36.49886322021484 + "value": 36.498863220214844 }, "Y": { "type": "float", - "value": 20.20473480224609 + "value": 20.204734802246094 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -16575,7 +16575,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16783,7 +16783,7 @@ }, "Z": { "type": "float", - "value": 0.002911925315856934 + "value": 0.0029119253158569336 } }, { @@ -17002,7 +17002,7 @@ }, "X": { "type": "float", - "value": 13.14835548400879 + "value": 13.148355484008789 }, "Y": { "type": "float", @@ -17010,7 +17010,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -17233,11 +17233,11 @@ }, "Y": { "type": "float", - "value": 48.01586532592773 + "value": 48.015865325927734 }, "Z": { "type": "float", - "value": -1.788139343261719e-007 + "value": -0.00000017881393432617188 } }, { @@ -17464,7 +17464,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -17683,15 +17683,15 @@ }, "X": { "type": "float", - "value": 7.449534416198731 + "value": 7.4495344161987305 }, "Y": { "type": "float", - "value": 42.15585327148438 + "value": 42.155853271484375 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -17710,7 +17710,7 @@ }, "Bearing": { "type": "float", - "value": -3.141583442687988 + "value": -3.1415834426879883 }, "BodyBag": { "type": "byte", @@ -17910,15 +17910,15 @@ }, "X": { "type": "float", - "value": 22.87751388549805 + "value": 22.877513885498047 }, "Y": { "type": "float", - "value": 19.66556549072266 + "value": 19.665565490722656 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -17937,7 +17937,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -18137,15 +18137,15 @@ }, "X": { "type": "float", - "value": 23.25467681884766 + "value": 23.254676818847656 }, "Y": { "type": "float", - "value": 21.59333229064941 + "value": 21.593332290649414 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -18164,7 +18164,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -18368,11 +18368,11 @@ }, "Y": { "type": "float", - "value": 23.45196723937988 + "value": 23.451967239379883 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -18591,7 +18591,7 @@ }, "X": { "type": "float", - "value": 23.48056602478027 + "value": 23.480566024780273 }, "Y": { "type": "float", @@ -18599,7 +18599,7 @@ }, "Z": { "type": "float", - "value": 1.125457644462585 + "value": 1.1254576444625854 } }, { @@ -18818,11 +18818,11 @@ }, "X": { "type": "float", - "value": 22.91465759277344 + "value": 22.914657592773438 }, "Y": { "type": "float", - "value": 22.07082939147949 + "value": 22.070829391479492 }, "Z": { "type": "float", @@ -19053,7 +19053,7 @@ }, "Z": { "type": "float", - "value": 1.125444531440735 + "value": 1.1254445314407349 } } ] @@ -19111,7 +19111,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19186,7 +19186,7 @@ }, "ZPosition": { "type": "float", - "value": 1.50000011920929 + "value": 1.5000001192092896 } }, { @@ -19239,7 +19239,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19310,7 +19310,7 @@ }, "YPosition": { "type": "float", - "value": 17.90507125854492 + "value": 17.905071258544922 }, "ZPosition": { "type": "float", @@ -19434,15 +19434,15 @@ }, "XPosition": { "type": "float", - "value": 29.6567268371582 + "value": 29.656726837158203 }, "YPosition": { "type": "float", - "value": 27.37514495849609 + "value": 27.375144958496094 }, "ZPosition": { "type": "float", - "value": 1.509998917579651 + "value": 1.5099989175796509 } } ] @@ -23943,7 +23943,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002738118171691895 + "value": 0.0027381181716918945 } } ] @@ -24061,7 +24061,7 @@ }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -24108,7 +24108,7 @@ }, "XPosition": { "type": "float", - "value": 28.94677925109863 + "value": 28.946779251098633 }, "YOrientation": { "type": "float", @@ -24116,7 +24116,7 @@ }, "YPosition": { "type": "float", - "value": 30.96930313110352 + "value": 30.969303131103516 }, "ZPosition": { "type": "float", @@ -24175,11 +24175,11 @@ }, "YPosition": { "type": "float", - "value": 30.57675361633301 + "value": 30.576753616333008 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -24234,11 +24234,11 @@ }, "YPosition": { "type": "float", - "value": 21.85267066955566 + "value": 21.852670669555664 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -24297,7 +24297,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -24340,11 +24340,11 @@ }, "XOrientation": { "type": "float", - "value": -0.09802635014057159 + "value": -0.0980263501405716 }, "XPosition": { "type": "float", - "value": 23.13722229003906 + "value": 23.137222290039062 }, "YOrientation": { "type": "float", @@ -24352,11 +24352,11 @@ }, "YPosition": { "type": "float", - "value": 11.88369846343994 + "value": 11.883698463439941 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -24403,7 +24403,7 @@ }, "XPosition": { "type": "float", - "value": 10.20824241638184 + "value": 10.208242416381836 }, "YOrientation": { "type": "float", @@ -24415,7 +24415,7 @@ }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -24531,11 +24531,11 @@ }, "YPosition": { "type": "float", - "value": 11.09632968902588 + "value": 11.096329689025879 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/nirragrasslands.git.json b/_module/git/nirragrasslands.git.json index 37e9606..d543dec 100644 --- a/_module/git/nirragrasslands.git.json +++ b/_module/git/nirragrasslands.git.json @@ -962,7 +962,7 @@ }, "X": { "type": "float", - "value": 94.47060394287109 + "value": 94.4706039428711 }, "Y": { "type": "float", @@ -1190,7 +1190,7 @@ }, "X": { "type": "float", - "value": 94.04434204101563 + "value": 94.04434204101562 }, "Y": { "type": "float", @@ -1198,7 +1198,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1422,11 +1422,11 @@ }, "Y": { "type": "float", - "value": 95.39809417724609 + "value": 95.3980941772461 }, "Z": { "type": "float", - "value": 0.01000007707625628 + "value": 0.010000077076256275 } }, { @@ -2108,7 +2108,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2331,7 +2331,7 @@ }, "Y": { "type": "float", - "value": 94.47397613525391 + "value": 94.4739761352539 }, "Z": { "type": "float", @@ -2622,37 +2622,37 @@ }, "PointY": { "type": "float", - "value": 0.1714668273925781 + "value": 0.17146682739257812 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.515072345733643 + "value": 3.5150723457336426 }, "PointY": { "type": "float", - "value": 10.03081321716309 + "value": 10.030813217163086 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointY": { "type": "float", - "value": 10.03081321716309 + "value": 10.030813217163086 }, "PointZ": { "type": "float", @@ -2761,7 +2761,7 @@ }, "XPosition": { "type": "float", - "value": 0.1405057907104492 + "value": 0.14050579071044922 }, "YOrientation": { "type": "float", @@ -2769,7 +2769,7 @@ }, "YPosition": { "type": "float", - "value": 19.91470527648926 + "value": 19.914705276489258 }, "ZOrientation": { "type": "float", @@ -2928,7 +2928,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2989,7 +2989,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3050,7 +3050,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3099,7 +3099,7 @@ }, "XPosition": { "type": "float", - "value": 44.60927581787109 + "value": 44.609275817871094 }, "YOrientation": { "type": "float", @@ -3111,7 +3111,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3172,7 +3172,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3221,7 +3221,7 @@ }, "XPosition": { "type": "float", - "value": 14.84982299804688 + "value": 14.849822998046875 }, "YOrientation": { "type": "float", @@ -3229,11 +3229,11 @@ }, "YPosition": { "type": "float", - "value": 86.22377777099609 + "value": 86.2237777709961 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3286,15 +3286,15 @@ }, "YOrientation": { "type": "float", - "value": -0.2190995663404465 + "value": -0.21909956634044647 }, "YPosition": { "type": "float", - "value": 26.81876373291016 + "value": 26.818763732910156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3351,11 +3351,11 @@ }, "YPosition": { "type": "float", - "value": 12.94317150115967 + "value": 12.943171501159668 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3416,7 +3416,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3477,7 +3477,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3532,7 +3532,7 @@ }, "YOrientation": { "type": "float", - "value": 1.029172267408285e-006 + "value": 0.0000010291722674082848 }, "YPosition": { "type": "float", @@ -3540,7 +3540,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/nirrahamlett.git.json b/_module/git/nirrahamlett.git.json index 4839029..a904512 100644 --- a/_module/git/nirrahamlett.git.json +++ b/_module/git/nirrahamlett.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -258,7 +258,7 @@ }, "X": { "type": "float", - "value": 137.3999938964844 + "value": 137.39999389648438 }, "Y": { "type": "float", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1135,7 +1135,7 @@ }, "X": { "type": "float", - "value": 117.6999969482422 + "value": 117.69999694824219 }, "Y": { "type": "float", @@ -1379,11 +1379,11 @@ }, "Y": { "type": "float", - "value": 127.5534820556641 + "value": 127.55348205566406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1610,7 +1610,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1833,11 +1833,11 @@ }, "Y": { "type": "float", - "value": 138.4538421630859 + "value": 138.45384216308594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2064,7 +2064,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2283,15 +2283,15 @@ }, "X": { "type": "float", - "value": 86.80264282226563 + "value": 86.80264282226562 }, "Y": { "type": "float", - "value": 107.3348922729492 + "value": 107.33489227294922 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2518,7 +2518,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2741,11 +2741,11 @@ }, "Y": { "type": "float", - "value": 87.86411285400391 + "value": 87.8641128540039 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2972,7 +2972,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3195,11 +3195,11 @@ }, "Y": { "type": "float", - "value": 98.14919281005859 + "value": 98.1491928100586 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3422,11 +3422,11 @@ }, "Y": { "type": "float", - "value": 66.83401489257813 + "value": 66.83401489257812 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3645,15 +3645,15 @@ }, "X": { "type": "float", - "value": 91.94980621337891 + "value": 91.9498062133789 }, "Y": { "type": "float", - "value": 72.19631958007813 + "value": 72.19631958007812 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3872,7 +3872,7 @@ }, "X": { "type": "float", - "value": 72.08291625976563 + "value": 72.08291625976562 }, "Y": { "type": "float", @@ -3880,7 +3880,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4103,11 +4103,11 @@ }, "Y": { "type": "float", - "value": 15.55584526062012 + "value": 15.555845260620117 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4334,7 +4334,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4557,11 +4557,11 @@ }, "Y": { "type": "float", - "value": 22.50046920776367 + "value": 22.500469207763672 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4780,15 +4780,15 @@ }, "X": { "type": "float", - "value": 19.18461227416992 + "value": 19.184612274169922 }, "Y": { "type": "float", - "value": 17.3139762878418 + "value": 17.313976287841797 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5007,7 +5007,7 @@ }, "X": { "type": "float", - "value": 36.76592636108398 + "value": 36.765926361083984 }, "Y": { "type": "float", @@ -5015,7 +5015,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5234,7 +5234,7 @@ }, "X": { "type": "float", - "value": 12.16281127929688 + "value": 12.162811279296875 }, "Y": { "type": "float", @@ -5242,7 +5242,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5461,15 +5461,15 @@ }, "X": { "type": "float", - "value": 17.87664413452148 + "value": 17.876644134521484 }, "Y": { "type": "float", - "value": 52.84875106811523 + "value": 52.848751068115234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5688,7 +5688,7 @@ }, "X": { "type": "float", - "value": 18.05255508422852 + "value": 18.052555084228516 }, "Y": { "type": "float", @@ -5696,7 +5696,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5923,7 +5923,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6146,11 +6146,11 @@ }, "Y": { "type": "float", - "value": 48.18964004516602 + "value": 48.189640045166016 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6373,11 +6373,11 @@ }, "Y": { "type": "float", - "value": 27.95068168640137 + "value": 27.950681686401367 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6604,7 +6604,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6823,7 +6823,7 @@ }, "X": { "type": "float", - "value": 120.0193634033203 + "value": 120.01936340332031 }, "Y": { "type": "float", @@ -7050,7 +7050,7 @@ }, "X": { "type": "float", - "value": 110.9848709106445 + "value": 110.98487091064453 }, "Y": { "type": "float", @@ -7277,11 +7277,11 @@ }, "X": { "type": "float", - "value": 119.1320419311523 + "value": 119.13204193115234 }, "Y": { "type": "float", - "value": 22.2232780456543 + "value": 22.223278045654297 }, "Z": { "type": "float", @@ -7504,15 +7504,15 @@ }, "X": { "type": "float", - "value": 142.2042388916016 + "value": 142.20423889160156 }, "Y": { "type": "float", - "value": 15.73165893554688 + "value": 15.731658935546875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7731,7 +7731,7 @@ }, "X": { "type": "float", - "value": 141.2372741699219 + "value": 141.23727416992188 }, "Y": { "type": "float", @@ -7739,7 +7739,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7958,7 +7958,7 @@ }, "X": { "type": "float", - "value": 122.1615371704102 + "value": 122.16153717041016 }, "Y": { "type": "float", @@ -7966,7 +7966,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8185,11 +8185,11 @@ }, "X": { "type": "float", - "value": 112.0859527587891 + "value": 112.08595275878906 }, "Y": { "type": "float", - "value": 88.61403656005859 + "value": 88.6140365600586 }, "Z": { "type": "float", @@ -8412,15 +8412,15 @@ }, "X": { "type": "float", - "value": 131.6024475097656 + "value": 131.60244750976562 }, "Y": { "type": "float", - "value": 91.95352172851563 + "value": 91.95352172851562 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8639,15 +8639,15 @@ }, "X": { "type": "float", - "value": 11.98699760437012 + "value": 11.986997604370117 }, "Y": { "type": "float", - "value": 79.90244293212891 + "value": 79.9024429321289 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8874,7 +8874,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9101,7 +9101,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9324,11 +9324,11 @@ }, "Y": { "type": "float", - "value": 78.14430999755859 + "value": 78.1443099975586 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9547,7 +9547,7 @@ }, "X": { "type": "float", - "value": 18.06482124328613 + "value": 18.064821243286133 }, "Y": { "type": "float", @@ -9555,7 +9555,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9778,7 +9778,7 @@ }, "Y": { "type": "float", - "value": 143.2136535644531 + "value": 143.21365356445312 }, "Z": { "type": "float", @@ -9801,7 +9801,7 @@ }, "Bearing": { "type": "float", - "value": 1.030834794044495 + "value": 1.0308347940444946 }, "BodyBag": { "type": "byte", @@ -10005,11 +10005,11 @@ }, "Y": { "type": "float", - "value": 143.5173950195313 + "value": 143.51739501953125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10228,7 +10228,7 @@ }, "X": { "type": "float", - "value": 115.3784866333008 + "value": 115.37848663330078 }, "Y": { "type": "float", @@ -10255,7 +10255,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10455,15 +10455,15 @@ }, "X": { "type": "float", - "value": 118.0030899047852 + "value": 118.00308990478516 }, "Y": { "type": "float", - "value": 113.6725997924805 + "value": 113.67259979248047 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -10482,7 +10482,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -10682,11 +10682,11 @@ }, "X": { "type": "float", - "value": 131.9779663085938 + "value": 131.97796630859375 }, "Y": { "type": "float", - "value": 114.1254959106445 + "value": 114.12549591064453 }, "Z": { "type": "float", @@ -10748,7 +10748,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -11109,7 +11109,7 @@ }, "XPosition": { "type": "float", - "value": 72.88137054443359 + "value": 72.8813705444336 }, "YPosition": { "type": "float", @@ -11173,11 +11173,11 @@ }, "PointY": { "type": "float", - "value": 0.1092958450317383 + "value": 0.10929584503173828 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -11312,7 +11312,7 @@ }, "XPosition": { "type": "float", - "value": 129.9180755615234 + "value": 129.91807556152344 }, "YOrientation": { "type": "float", @@ -11320,7 +11320,7 @@ }, "YPosition": { "type": "float", - "value": 0.03759670257568359 + "value": 0.037596702575683594 }, "ZOrientation": { "type": "float", @@ -11360,7 +11360,7 @@ }, "PointY": { "type": "float", - "value": -10.05522155761719 + "value": -10.055221557617188 }, "PointZ": { "type": "float", @@ -11375,7 +11375,7 @@ }, "PointY": { "type": "float", - "value": -10.05522155761719 + "value": -10.055221557617188 }, "PointZ": { "type": "float", @@ -11394,7 +11394,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -11566,7 +11566,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -11581,18 +11581,18 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.00147247314453 + "value": 10.001472473144531 }, "PointY": { "type": "float", - "value": -2.678237915039063 + "value": -2.6782379150390625 }, "PointZ": { "type": "float", @@ -11603,7 +11603,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.00148010253906 + "value": 10.001480102539062 }, "PointY": { "type": "float", @@ -11611,7 +11611,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -11724,7 +11724,7 @@ }, "YPosition": { "type": "float", - "value": 149.7654113769531 + "value": 149.76541137695312 }, "ZOrientation": { "type": "float", @@ -11760,7 +11760,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.628189086914063 + "value": -3.6281890869140625 }, "PointY": { "type": "float", @@ -11768,14 +11768,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -3.628189086914063 + "value": -3.6281890869140625 }, "PointY": { "type": "float", @@ -11828,7 +11828,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -11978,7 +11978,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.7823562622070313 + "value": -0.7823562622070312 }, "PointY": { "type": "float", @@ -11986,33 +11986,33 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 12.59648132324219 + "value": 12.596481323242188 }, "PointY": { "type": "float", - "value": -10.32650756835938 + "value": -10.326507568359375 }, "PointZ": { "type": "float", - "value": 0.02988394536077976 + "value": 0.029883945360779762 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 14.63007354736328 + "value": 14.630073547363281 }, "PointY": { "type": "float", - "value": -8.292984008789063 + "value": -8.292984008789062 }, "PointZ": { "type": "float", @@ -12023,15 +12023,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.173530578613281 + "value": 1.1735305786132812 }, "PointY": { "type": "float", - "value": 0.9388198852539063 + "value": 0.9388198852539062 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -12159,7 +12159,7 @@ }, "YPosition": { "type": "float", - "value": 117.2332611083984 + "value": 117.23326110839844 }, "ZOrientation": { "type": "float", @@ -12265,15 +12265,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 10.18533325195313 + "value": 10.185333251953125 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12326,15 +12326,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 21.99620056152344 + "value": 21.996200561523438 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12383,7 +12383,7 @@ }, "XPosition": { "type": "float", - "value": 16.95280456542969 + "value": 16.952804565429688 }, "YOrientation": { "type": "float", @@ -12395,7 +12395,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12452,11 +12452,11 @@ }, "YPosition": { "type": "float", - "value": 31.70458030700684 + "value": 31.704580307006836 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12505,7 +12505,7 @@ }, "XPosition": { "type": "float", - "value": 17.98808288574219 + "value": 17.988082885742188 }, "YOrientation": { "type": "float", @@ -12517,7 +12517,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12586,11 +12586,11 @@ }, "XPosition": { "type": "float", - "value": 30.14521217346191 + "value": 30.145212173461914 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -12598,7 +12598,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12647,7 +12647,7 @@ }, "XPosition": { "type": "float", - "value": 8.386196136474609 + "value": 8.38619613647461 }, "YOrientation": { "type": "float", @@ -12655,11 +12655,11 @@ }, "YPosition": { "type": "float", - "value": 130.2185363769531 + "value": 130.21853637695312 }, "ZPosition": { "type": "float", - "value": 0.003126144409179688 + "value": 0.0031261444091796875 } }, { @@ -12716,11 +12716,11 @@ }, "YPosition": { "type": "float", - "value": 140.3059234619141 + "value": 140.30592346191406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12777,11 +12777,11 @@ }, "YPosition": { "type": "float", - "value": 109.797233581543 + "value": 109.79723358154297 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12830,19 +12830,19 @@ }, "XPosition": { "type": "float", - "value": 27.17341613769531 + "value": 27.173416137695312 }, "YOrientation": { "type": "float", - "value": -0.3368732035160065 + "value": -0.33687320351600647 }, "YPosition": { "type": "float", - "value": 117.944450378418 + "value": 117.94445037841797 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12923,7 +12923,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12996,7 +12996,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -13004,7 +13004,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13073,7 +13073,7 @@ }, "XPosition": { "type": "float", - "value": 119.7374114990234 + "value": 119.73741149902344 }, "YOrientation": { "type": "float", @@ -13085,7 +13085,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13166,7 +13166,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13247,7 +13247,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13308,7 +13308,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13365,11 +13365,11 @@ }, "YPosition": { "type": "float", - "value": 104.4891815185547 + "value": 104.48918151855469 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13498,7 +13498,7 @@ }, "XPosition": { "type": "float", - "value": 122.2243041992188 + "value": 122.22430419921875 }, "YOrientation": { "type": "float", @@ -13506,11 +13506,11 @@ }, "YPosition": { "type": "float", - "value": 114.8654708862305 + "value": 114.86547088623047 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13559,7 +13559,7 @@ }, "XPosition": { "type": "float", - "value": 133.7857818603516 + "value": 133.78578186035156 }, "YOrientation": { "type": "float", @@ -13571,7 +13571,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13628,11 +13628,11 @@ }, "YPosition": { "type": "float", - "value": 56.09881973266602 + "value": 56.098819732666016 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13693,7 +13693,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13789,7 +13789,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13838,11 +13838,11 @@ }, "XPosition": { "type": "float", - "value": 2.108787536621094 + "value": 2.1087875366210938 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -13850,7 +13850,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13899,7 +13899,7 @@ }, "XPosition": { "type": "float", - "value": 70.39810180664063 + "value": 70.39810180664062 }, "YOrientation": { "type": "float", @@ -13911,7 +13911,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13960,7 +13960,7 @@ }, "XPosition": { "type": "float", - "value": 110.2102203369141 + "value": 110.21022033691406 }, "YOrientation": { "type": "float", @@ -13968,11 +13968,11 @@ }, "YPosition": { "type": "float", - "value": 51.17853164672852 + "value": 51.178531646728516 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14053,7 +14053,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14122,11 +14122,11 @@ }, "XPosition": { "type": "float", - "value": 147.8827819824219 + "value": 147.88278198242188 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -14134,7 +14134,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14179,7 +14179,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04909630119800568 + "value": 0.049096301198005676 }, "XPosition": { "type": "float", @@ -14195,7 +14195,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14252,11 +14252,11 @@ }, "YPosition": { "type": "float", - "value": 1.622387886047363 + "value": 1.6223878860473633 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14303,7 +14303,7 @@ }, "XPosition": { "type": "float", - "value": 147.7611389160156 + "value": 147.76113891601562 }, "YOrientation": { "type": "float", @@ -14315,7 +14315,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14372,11 +14372,11 @@ }, "YPosition": { "type": "float", - "value": 19.53169250488281 + "value": 19.531692504882812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14435,7 +14435,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14482,7 +14482,7 @@ }, "XPosition": { "type": "float", - "value": 107.9594650268555 + "value": 107.95946502685547 }, "YOrientation": { "type": "float", @@ -14490,11 +14490,11 @@ }, "YPosition": { "type": "float", - "value": 84.66299438476563 + "value": 84.66299438476562 }, "ZPosition": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -14549,11 +14549,11 @@ }, "YPosition": { "type": "float", - "value": 114.6159515380859 + "value": 114.61595153808594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14612,7 +14612,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14685,15 +14685,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 7.795639038085938 + "value": 7.7956390380859375 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14766,15 +14766,15 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 139.6483459472656 + "value": 139.64834594726562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14819,11 +14819,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04908915609121323 + "value": 0.049089156091213226 }, "XPosition": { "type": "float", - "value": 89.77976226806641 + "value": 89.7797622680664 }, "YOrientation": { "type": "float", @@ -14831,11 +14831,11 @@ }, "YPosition": { "type": "float", - "value": 56.03690338134766 + "value": 56.036903381347656 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14884,7 +14884,7 @@ }, "XPosition": { "type": "float", - "value": 81.05934906005859 + "value": 81.0593490600586 }, "YOrientation": { "type": "float", @@ -14892,11 +14892,11 @@ }, "YPosition": { "type": "float", - "value": 138.1581878662109 + "value": 138.15818786621094 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14953,11 +14953,11 @@ }, "YPosition": { "type": "float", - "value": 121.637825012207 + "value": 121.63782501220703 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15002,11 +15002,11 @@ }, "XOrientation": { "type": "float", - "value": 0.1950900852680206 + "value": 0.19509008526802063 }, "XPosition": { "type": "float", - "value": 118.2743759155273 + "value": 118.27437591552734 }, "YOrientation": { "type": "float", @@ -15014,11 +15014,11 @@ }, "YPosition": { "type": "float", - "value": 102.1605987548828 + "value": 102.16059875488281 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15063,11 +15063,11 @@ }, "XOrientation": { "type": "float", - "value": 0.1950900852680206 + "value": 0.19509008526802063 }, "XPosition": { "type": "float", - "value": 122.6332702636719 + "value": 122.63327026367188 }, "YOrientation": { "type": "float", @@ -15079,7 +15079,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15136,11 +15136,11 @@ }, "YPosition": { "type": "float", - "value": 118.6050491333008 + "value": 118.60504913330078 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15193,15 +15193,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 31.64962768554688 + "value": 31.649627685546875 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15262,7 +15262,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15323,7 +15323,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15400,11 +15400,11 @@ }, "YPosition": { "type": "float", - "value": 112.1493606567383 + "value": 112.14936065673828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15453,7 +15453,7 @@ }, "XPosition": { "type": "float", - "value": 21.90513229370117 + "value": 21.905132293701172 }, "YOrientation": { "type": "float", @@ -15465,7 +15465,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000040676444769 + "value": 0.010000406764447689 } } ] diff --git a/_module/git/nirrahamlettfine.git.json b/_module/git/nirrahamlettfine.git.json index de2230e..5cad0cc 100644 --- a/_module/git/nirrahamlettfine.git.json +++ b/_module/git/nirrahamlettfine.git.json @@ -524,11 +524,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454693056643009 + "value": -0.024546930566430092 }, "XPosition": { "type": "float", - "value": 15.42220497131348 + "value": 15.422204971313477 }, "YOrientation": { "type": "float", @@ -536,11 +536,11 @@ }, "YPosition": { "type": "float", - "value": 12.56017303466797 + "value": 12.560173034667969 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -759,7 +759,7 @@ }, "Y": { "type": "float", - "value": 3.650000095367432 + "value": 3.6500000953674316 }, "Z": { "type": "float", @@ -997,7 +997,7 @@ }, "X": { "type": "float", - "value": 23.57610893249512 + "value": 23.576108932495117 }, "Y": { "type": "float", @@ -1005,7 +1005,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1226,15 +1226,15 @@ }, "X": { "type": "float", - "value": 23.63620185852051 + "value": 23.636201858520508 }, "Y": { "type": "float", - "value": 11.70401287078857 + "value": 11.704012870788574 }, "Z": { "type": "float", - "value": 9.775161743164063e-006 + "value": 0.000009775161743164062 } }, { @@ -1457,11 +1457,11 @@ }, "Y": { "type": "float", - "value": 16.57749938964844 + "value": 16.577499389648438 }, "Z": { "type": "float", - "value": 8.940696716308594e-008 + "value": 8.940696716308594e-8 } }, { @@ -1684,11 +1684,11 @@ }, "Y": { "type": "float", - "value": 16.69738388061523 + "value": 16.697383880615234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1915,7 +1915,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2134,15 +2134,15 @@ }, "X": { "type": "float", - "value": 3.936623811721802 + "value": 3.9366238117218018 }, "Y": { "type": "float", - "value": 14.97601985931397 + "value": 14.976019859313965 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2369,7 +2369,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2592,11 +2592,11 @@ }, "Y": { "type": "float", - "value": 15.09701728820801 + "value": 15.097017288208008 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2815,15 +2815,15 @@ }, "X": { "type": "float", - "value": 2.644341707229614 + "value": 2.6443417072296143 }, "Y": { "type": "float", - "value": 10.76173973083496 + "value": 10.761739730834961 }, "Z": { "type": "float", - "value": -2.980232238769531e-008 + "value": -2.9802322387695312e-8 } }, { @@ -3046,11 +3046,11 @@ }, "Y": { "type": "float", - "value": 16.94738388061523 + "value": 16.947383880615234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3520,11 +3520,11 @@ }, "Y": { "type": "float", - "value": 9.332675933837891 + "value": 9.33267593383789 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -3543,7 +3543,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -3743,15 +3743,15 @@ }, "X": { "type": "float", - "value": 23.65922546386719 + "value": 23.659225463867188 }, "Y": { "type": "float", - "value": 16.93544769287109 + "value": 16.935447692871094 }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -3970,7 +3970,7 @@ }, "X": { "type": "float", - "value": 23.33093643188477 + "value": 23.330936431884766 }, "Y": { "type": "float", @@ -4201,7 +4201,7 @@ }, "Y": { "type": "float", - "value": 17.42730522155762 + "value": 17.427305221557617 }, "Z": { "type": "float", @@ -4432,7 +4432,7 @@ }, "Z": { "type": "float", - "value": -2.980232238769531e-008 + "value": -2.9802322387695312e-8 } }, { @@ -4651,15 +4651,15 @@ }, "X": { "type": "float", - "value": 19.96086120605469 + "value": 19.960861206054688 }, "Y": { "type": "float", - "value": 17.75706481933594 + "value": 17.757064819335938 }, "Z": { "type": "float", - "value": -4.842877388000488e-008 + "value": -4.842877388000488e-8 } }, { @@ -4878,15 +4878,15 @@ }, "X": { "type": "float", - "value": 19.0185661315918 + "value": 19.018566131591797 }, "Y": { "type": "float", - "value": 17.69085311889648 + "value": 17.690853118896484 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5109,11 +5109,11 @@ }, "Y": { "type": "float", - "value": 14.27371025085449 + "value": 14.273710250854492 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } } ] @@ -9952,11 +9952,11 @@ }, "YPosition": { "type": "float", - "value": 12.39642906188965 + "value": 12.396429061889648 }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -27993,7 +27993,7 @@ }, "XPosition": { "type": "float", - "value": 21.01380920410156 + "value": 21.013809204101562 }, "YOrientation": { "type": "float", @@ -28005,7 +28005,7 @@ }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -31559,11 +31559,11 @@ }, "YPosition": { "type": "float", - "value": 16.62330627441406 + "value": 16.623306274414062 }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -36118,7 +36118,7 @@ }, "XPosition": { "type": "float", - "value": 11.10766983032227 + "value": 11.107669830322266 }, "YOrientation": { "type": "float", @@ -36126,11 +36126,11 @@ }, "YPosition": { "type": "float", - "value": 16.78873825073242 + "value": 16.788738250732422 }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -54003,7 +54003,7 @@ }, "XPosition": { "type": "float", - "value": 19.64580345153809 + "value": 19.645803451538086 }, "YOrientation": { "type": "float", @@ -54011,11 +54011,11 @@ }, "YPosition": { "type": "float", - "value": 16.73193550109863 + "value": 16.731935501098633 }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -62066,7 +62066,7 @@ }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -74872,7 +74872,7 @@ }, "ZPosition": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -92234,7 +92234,7 @@ }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -107814,7 +107814,7 @@ }, "XPosition": { "type": "float", - "value": 14.19665718078613 + "value": 14.196657180786133 }, "YOrientation": { "type": "float", @@ -122295,7 +122295,7 @@ }, "XPosition": { "type": "float", - "value": 15.57495307922363 + "value": 15.574953079223633 }, "YOrientation": { "type": "float", @@ -122307,7 +122307,7 @@ }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -136303,7 +136303,7 @@ }, "XPosition": { "type": "float", - "value": 17.17086982727051 + "value": 17.170869827270508 }, "YOrientation": { "type": "float", @@ -171067,7 +171067,7 @@ }, "XPosition": { "type": "float", - "value": 13.03598880767822 + "value": 13.035988807678223 }, "YOrientation": { "type": "float", @@ -190937,7 +190937,7 @@ }, "XPosition": { "type": "float", - "value": 14.70445060729981 + "value": 14.704450607299805 }, "YOrientation": { "type": "float", @@ -207388,11 +207388,11 @@ }, "YPosition": { "type": "float", - "value": 13.72513580322266 + "value": 13.725135803222656 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -231398,11 +231398,11 @@ }, "YPosition": { "type": "float", - "value": 13.79767799377441 + "value": 13.797677993774414 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -252413,11 +252413,11 @@ }, "YPosition": { "type": "float", - "value": 13.87022018432617 + "value": 13.870220184326172 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -270853,7 +270853,7 @@ }, "YPosition": { "type": "float", - "value": 13.94276142120361 + "value": 13.942761421203613 }, "ZPosition": { "type": "float", @@ -301697,7 +301697,7 @@ }, "XPosition": { "type": "float", - "value": 10.06177616119385 + "value": 10.061776161193848 }, "YOrientation": { "type": "float", @@ -301705,11 +301705,11 @@ }, "YPosition": { "type": "float", - "value": 13.58005237579346 + "value": 13.580052375793457 }, "ZPosition": { "type": "float", - "value": -1.072883605957031e-006 + "value": -0.0000010728836059570312 } }, { @@ -328175,7 +328175,7 @@ }, "XPosition": { "type": "float", - "value": 11.51261138916016 + "value": 11.512611389160156 }, "YOrientation": { "type": "float", @@ -328183,11 +328183,11 @@ }, "YPosition": { "type": "float", - "value": 13.50750923156738 + "value": 13.507509231567383 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -352530,7 +352530,7 @@ }, "XPosition": { "type": "float", - "value": 12.96344757080078 + "value": 12.963447570800781 }, "YOrientation": { "type": "float", @@ -352538,11 +352538,11 @@ }, "YPosition": { "type": "float", - "value": 13.43496894836426 + "value": 13.434968948364258 }, "ZPosition": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -359863,7 +359863,7 @@ }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -370416,7 +370416,7 @@ }, "XPosition": { "type": "float", - "value": 10.92625236511231 + "value": 10.926252365112305 }, "YOrientation": { "type": "float", @@ -370428,7 +370428,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -383124,7 +383124,7 @@ }, "XPosition": { "type": "float", - "value": 12.37708950042725 + "value": 12.377089500427246 }, "YOrientation": { "type": "float", @@ -383136,7 +383136,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -393139,7 +393139,7 @@ }, "XPosition": { "type": "float", - "value": 13.6102991104126 + "value": 13.610299110412598 }, "YOrientation": { "type": "float", @@ -393151,7 +393151,7 @@ }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -404772,7 +404772,7 @@ }, "XPosition": { "type": "float", - "value": 15.13367652893066 + "value": 15.133676528930664 }, "YOrientation": { "type": "float", @@ -416439,7 +416439,7 @@ }, "YPosition": { "type": "float", - "value": 12.12921619415283 + "value": 12.129216194152832 }, "ZPosition": { "type": "float", @@ -433584,11 +433584,11 @@ }, "YPosition": { "type": "float", - "value": 12.12921905517578 + "value": 12.129219055175781 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -451048,11 +451048,11 @@ }, "YPosition": { "type": "float", - "value": 12.12921810150147 + "value": 12.129218101501465 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -467172,7 +467172,7 @@ }, "XPosition": { "type": "float", - "value": 8.967624664306641 + "value": 8.96762466430664 }, "YOrientation": { "type": "float", @@ -467180,11 +467180,11 @@ }, "YPosition": { "type": "float", - "value": 12.20176029205322 + "value": 12.201760292053223 }, "ZPosition": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -489784,7 +489784,7 @@ }, "XPosition": { "type": "float", - "value": 10.56354522705078 + "value": 10.563545227050781 }, "YOrientation": { "type": "float", @@ -489792,11 +489792,11 @@ }, "YPosition": { "type": "float", - "value": 12.34684276580811 + "value": 12.346842765808105 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -510756,11 +510756,11 @@ }, "YPosition": { "type": "float", - "value": 12.05667686462402 + "value": 12.056676864624023 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -522487,11 +522487,11 @@ }, "YPosition": { "type": "float", - "value": 10.75092506408691 + "value": 10.750925064086914 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -543708,7 +543708,7 @@ }, "XPosition": { "type": "float", - "value": 6.573745727539063 + "value": 6.5737457275390625 }, "YOrientation": { "type": "float", @@ -543716,11 +543716,11 @@ }, "YPosition": { "type": "float", - "value": 10.67838287353516 + "value": 10.678382873535156 }, "ZPosition": { "type": "float", - "value": 1.192092895507813e-006 + "value": 0.0000011920928955078125 } }, { @@ -575942,11 +575942,11 @@ }, "YPosition": { "type": "float", - "value": 10.67838096618652 + "value": 10.678380966186523 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -598276,11 +598276,11 @@ }, "YPosition": { "type": "float", - "value": 11.11363124847412 + "value": 11.113631248474121 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -630468,7 +630468,7 @@ }, "XPosition": { "type": "float", - "value": 10.9987964630127 + "value": 10.998796463012695 }, "YOrientation": { "type": "float", @@ -630476,11 +630476,11 @@ }, "YPosition": { "type": "float", - "value": 10.67838287353516 + "value": 10.678382873535156 }, "ZPosition": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -652999,7 +652999,7 @@ }, "XPosition": { "type": "float", - "value": 12.52217388153076 + "value": 12.522173881530762 }, "YOrientation": { "type": "float", @@ -653007,11 +653007,11 @@ }, "YPosition": { "type": "float", - "value": 10.75092315673828 + "value": 10.750923156738281 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -675268,7 +675268,7 @@ }, "XPosition": { "type": "float", - "value": 14.04555130004883 + "value": 14.045551300048828 }, "YOrientation": { "type": "float", @@ -675276,7 +675276,7 @@ }, "YPosition": { "type": "float", - "value": 10.75092315673828 + "value": 10.750923156738281 }, "ZPosition": { "type": "float", diff --git a/_module/git/nirrahamlettgene.git.json b/_module/git/nirrahamlettgene.git.json index 7a7732f..3cd6e75 100644 --- a/_module/git/nirrahamlettgene.git.json +++ b/_module/git/nirrahamlettgene.git.json @@ -766,7 +766,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4052468836307526 + "value": -0.40524688363075256 }, "XPosition": { "type": "float", @@ -778,11 +778,11 @@ }, "YPosition": { "type": "float", - "value": 17.60016822814941 + "value": 17.600168228149414 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1505,11 +1505,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 10.85471725463867 + "value": 10.854717254638672 }, "YOrientation": { "type": "float", @@ -1521,7 +1521,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1545,7 +1545,7 @@ }, "Bearing": { "type": "float", - "value": -3.141586065292358 + "value": -3.1415860652923584 }, "CloseLockDC": { "type": "byte", @@ -1979,11 +1979,11 @@ }, "Y": { "type": "float", - "value": 24.52641296386719 + "value": 24.526412963867188 }, "Z": { "type": "float", - "value": -4.842877388000488e-008 + "value": -4.842877388000488e-8 } }, { @@ -2433,7 +2433,7 @@ }, "Y": { "type": "float", - "value": 20.9792366027832 + "value": 20.979236602783203 }, "Z": { "type": "float", @@ -2660,7 +2660,7 @@ }, "Y": { "type": "float", - "value": 20.82444572448731 + "value": 20.824445724487305 }, "Z": { "type": "float", @@ -2887,11 +2887,11 @@ }, "Y": { "type": "float", - "value": 11.75013065338135 + "value": 11.750130653381348 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3110,15 +3110,15 @@ }, "X": { "type": "float", - "value": 19.86972618103027 + "value": 19.869726181030273 }, "Y": { "type": "float", - "value": 11.68997669219971 + "value": 11.689976692199707 }, "Z": { "type": "float", - "value": 2.980232238769531e-008 + "value": 2.9802322387695312e-8 } } ] @@ -11352,7 +11352,7 @@ }, "XPosition": { "type": "float", - "value": 20.79497146606445 + "value": 20.794971466064453 }, "YOrientation": { "type": "float", @@ -14779,7 +14779,7 @@ }, "ZPosition": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } } ] diff --git a/_module/git/nirrahamlettinn.git.json b/_module/git/nirrahamlettinn.git.json index a3deb5f..cc06a14 100644 --- a/_module/git/nirrahamlettinn.git.json +++ b/_module/git/nirrahamlettinn.git.json @@ -770,7 +770,7 @@ }, "XPosition": { "type": "float", - "value": 29.61154365539551 + "value": 29.611543655395508 }, "YOrientation": { "type": "float", @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -1521,7 +1521,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2260,7 +2260,7 @@ }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -2987,7 +2987,7 @@ }, "XPosition": { "type": "float", - "value": 34.54799652099609 + "value": 34.547996520996094 }, "YOrientation": { "type": "float", @@ -2995,11 +2995,11 @@ }, "YPosition": { "type": "float", - "value": 31.87556457519531 + "value": 31.875564575195312 }, "ZPosition": { "type": "float", - "value": 0.01196670532226563 + "value": 0.011966705322265625 } }, { @@ -3738,7 +3738,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4477,7 +4477,7 @@ }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -5208,7 +5208,7 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -5216,7 +5216,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6056,7 +6056,7 @@ }, "ZPosition": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -6854,19 +6854,19 @@ }, "XPosition": { "type": "float", - "value": 22.50920104980469 + "value": 22.509201049804688 }, "YOrientation": { "type": "float", - "value": -0.2429769635200501 + "value": -0.24297696352005005 }, "YPosition": { "type": "float", - "value": 20.36852836608887 + "value": 20.368528366088867 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -8268,7 +8268,7 @@ }, "XOrientation": { "type": "float", - "value": -0.8175849318504334 + "value": -0.8175849318504333 }, "XPosition": { "type": "float", @@ -8280,11 +8280,11 @@ }, "YPosition": { "type": "float", - "value": 18.81730651855469 + "value": 18.817306518554688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9145,7 +9145,7 @@ }, "XPosition": { "type": "float", - "value": 35.19058990478516 + "value": 35.190589904785156 }, "YOrientation": { "type": "float", @@ -9157,7 +9157,7 @@ }, "ZPosition": { "type": "float", - "value": 0.02087020874023438 + "value": 0.020870208740234375 } }, { @@ -10416,7 +10416,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -10440,7 +10440,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -10672,7 +10672,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -10872,15 +10872,15 @@ }, "X": { "type": "float", - "value": 28.76835441589356 + "value": 28.768354415893555 }, "Y": { "type": "float", - "value": 3.898037672042847 + "value": 3.8980376720428467 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10899,7 +10899,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11099,7 +11099,7 @@ }, "X": { "type": "float", - "value": 28.72013854980469 + "value": 28.720138549804688 }, "Y": { "type": "float", @@ -11107,7 +11107,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11126,7 +11126,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -11334,7 +11334,7 @@ }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -11353,7 +11353,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11553,15 +11553,15 @@ }, "X": { "type": "float", - "value": 31.75425720214844 + "value": 31.754257202148438 }, "Y": { "type": "float", - "value": 3.945630550384522 + "value": 3.9456305503845215 }, "Z": { "type": "float", - "value": 0.002740859985351563 + "value": 0.0027408599853515625 } }, { @@ -11580,7 +11580,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -11784,11 +11784,11 @@ }, "Y": { "type": "float", - "value": 3.006784915924072 + "value": 3.0067849159240723 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11807,7 +11807,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12007,15 +12007,15 @@ }, "X": { "type": "float", - "value": 23.19804763793945 + "value": 23.198047637939453 }, "Y": { "type": "float", - "value": 10.34163188934326 + "value": 10.341631889343262 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -12034,7 +12034,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12234,7 +12234,7 @@ }, "X": { "type": "float", - "value": 23.14983177185059 + "value": 23.149831771850586 }, "Y": { "type": "float", @@ -12242,7 +12242,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12261,7 +12261,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -12465,11 +12465,11 @@ }, "Y": { "type": "float", - "value": 9.925295829772949 + "value": 9.92529582977295 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12488,7 +12488,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12688,15 +12688,15 @@ }, "X": { "type": "float", - "value": 26.18395042419434 + "value": 26.183950424194336 }, "Y": { "type": "float", - "value": 10.38922500610352 + "value": 10.389225006103516 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -12715,7 +12715,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -12923,7 +12923,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12942,7 +12942,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13142,11 +13142,11 @@ }, "X": { "type": "float", - "value": 23.00696754455566 + "value": 23.006967544555664 }, "Y": { "type": "float", - "value": 30.99413871765137 + "value": 30.994138717651367 }, "Z": { "type": "float", @@ -13169,7 +13169,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13369,11 +13369,11 @@ }, "X": { "type": "float", - "value": 22.9587516784668 + "value": 22.958751678466797 }, "Y": { "type": "float", - "value": 30.05528831481934 + "value": 30.055288314819336 }, "Z": { "type": "float", @@ -13396,7 +13396,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -13600,7 +13600,7 @@ }, "Y": { "type": "float", - "value": 30.57780265808106 + "value": 30.577802658081055 }, "Z": { "type": "float", @@ -13623,7 +13623,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -13823,11 +13823,11 @@ }, "X": { "type": "float", - "value": 25.99287033081055 + "value": 25.992870330810547 }, "Y": { "type": "float", - "value": 31.04173088073731 + "value": 31.041730880737305 }, "Z": { "type": "float", @@ -13850,7 +13850,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14054,7 +14054,7 @@ }, "Y": { "type": "float", - "value": 30.10288619995117 + "value": 30.102886199951172 }, "Z": { "type": "float", @@ -14077,7 +14077,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14277,7 +14277,7 @@ }, "X": { "type": "float", - "value": 33.88803863525391 + "value": 33.888038635253906 }, "Y": { "type": "float", @@ -14285,7 +14285,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14304,7 +14304,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14512,7 +14512,7 @@ }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -14531,7 +14531,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -14731,15 +14731,15 @@ }, "X": { "type": "float", - "value": 35.29358291625977 + "value": 35.293582916259766 }, "Y": { "type": "float", - "value": 30.11381530761719 + "value": 30.113815307617188 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14758,7 +14758,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -14962,11 +14962,11 @@ }, "Y": { "type": "float", - "value": 30.57774353027344 + "value": 30.577743530273438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14985,7 +14985,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15189,11 +15189,11 @@ }, "Y": { "type": "float", - "value": 29.63889884948731 + "value": 29.638898849487305 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -15212,7 +15212,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15412,15 +15412,15 @@ }, "X": { "type": "float", - "value": 33.97900009155273 + "value": 33.979000091552734 }, "Y": { "type": "float", - "value": 21.08513259887695 + "value": 21.085132598876953 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -15439,7 +15439,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -15643,11 +15643,11 @@ }, "Y": { "type": "float", - "value": 20.14628219604492 + "value": 20.146282196044922 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -15666,7 +15666,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -15866,7 +15866,7 @@ }, "X": { "type": "float", - "value": 35.38454437255859 + "value": 35.384544372558594 }, "Y": { "type": "float", @@ -15874,7 +15874,7 @@ }, "Z": { "type": "float", - "value": 7.778406143188477e-006 + "value": 0.000007778406143188477 } }, { @@ -15893,7 +15893,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16101,7 +16101,7 @@ }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -16120,7 +16120,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16320,15 +16320,15 @@ }, "X": { "type": "float", - "value": 36.91669082641602 + "value": 36.916690826416016 }, "Y": { "type": "float", - "value": 20.19388008117676 + "value": 20.193880081176758 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -16347,7 +16347,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16574,7 +16574,7 @@ }, "Bearing": { "type": "float", - "value": -1.521707773208618 + "value": -1.5217077732086182 }, "BodyBag": { "type": "byte", @@ -16778,11 +16778,11 @@ }, "Y": { "type": "float", - "value": 51.21405410766602 + "value": 51.214054107666016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17009,7 +17009,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17236,7 +17236,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17255,7 +17255,7 @@ }, "Bearing": { "type": "float", - "value": 3.117043256759644 + "value": 3.1170432567596436 }, "BodyBag": { "type": "byte", @@ -17455,7 +17455,7 @@ }, "X": { "type": "float", - "value": 23.64253425598145 + "value": 23.642534255981445 }, "Y": { "type": "float", @@ -17463,7 +17463,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17482,7 +17482,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -17682,15 +17682,15 @@ }, "X": { "type": "float", - "value": 21.96352958679199 + "value": 21.963529586791992 }, "Y": { "type": "float", - "value": 22.36609268188477 + "value": 22.366092681884766 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } } ] @@ -17748,7 +17748,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17976,15 +17976,15 @@ }, "XPosition": { "type": "float", - "value": 29.73881149291992 + "value": 29.738811492919922 }, "YPosition": { "type": "float", - "value": 27.1606559753418 + "value": 27.160655975341797 }, "ZPosition": { "type": "float", - "value": 1.510006189346314 + "value": 1.5100061893463135 } }, { @@ -18037,7 +18037,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -18265,7 +18265,7 @@ }, "XPosition": { "type": "float", - "value": 30.00383567810059 + "value": 30.003835678100586 }, "YPosition": { "type": "float", @@ -18273,7 +18273,7 @@ }, "ZPosition": { "type": "float", - "value": 1.510000109672546 + "value": 1.5100001096725464 } } ] @@ -18413,11 +18413,11 @@ }, "YPosition": { "type": "float", - "value": 10.59438037872315 + "value": 10.594380378723145 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18486,7 +18486,7 @@ }, "XPosition": { "type": "float", - "value": 32.78063583374023 + "value": 32.780635833740234 }, "YOrientation": { "type": "float", @@ -18498,7 +18498,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -18567,7 +18567,7 @@ }, "XPosition": { "type": "float", - "value": 26.59490776062012 + "value": 26.594907760620117 }, "YOrientation": { "type": "float", @@ -18575,11 +18575,11 @@ }, "YPosition": { "type": "float", - "value": 5.492991447448731 + "value": 5.4929914474487305 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -18656,11 +18656,11 @@ }, "YPosition": { "type": "float", - "value": 19.92979240417481 + "value": 19.929792404174805 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18778,7 +18778,7 @@ }, "ZPosition": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -18825,7 +18825,7 @@ }, "XPosition": { "type": "float", - "value": 24.35077857971191 + "value": 24.350778579711914 }, "YOrientation": { "type": "float", @@ -18837,7 +18837,7 @@ }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -18884,7 +18884,7 @@ }, "XPosition": { "type": "float", - "value": 31.5396614074707 + "value": 31.539661407470703 }, "YOrientation": { "type": "float", @@ -18892,11 +18892,11 @@ }, "YPosition": { "type": "float", - "value": 31.54615783691406 + "value": 31.546157836914062 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18943,19 +18943,19 @@ }, "XPosition": { "type": "float", - "value": 26.2165699005127 + "value": 26.216569900512695 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 28.41808891296387 + "value": 28.418088912963867 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -19002,19 +19002,19 @@ }, "XPosition": { "type": "float", - "value": 30.93592834472656 + "value": 30.935928344726562 }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", - "value": 23.04691123962402 + "value": 23.046911239624023 }, "ZPosition": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -19061,7 +19061,7 @@ }, "XPosition": { "type": "float", - "value": 29.01525497436523 + "value": 29.015254974365234 }, "YOrientation": { "type": "float", @@ -19073,7 +19073,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01001372933387756 + "value": 0.010013729333877563 } }, { @@ -19132,7 +19132,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19187,11 +19187,11 @@ }, "YPosition": { "type": "float", - "value": 21.79372024536133 + "value": 21.793720245361328 }, "ZPosition": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -19240,7 +19240,7 @@ }, "XPosition": { "type": "float", - "value": 22.68777275085449 + "value": 22.687772750854492 }, "YOrientation": { "type": "float", @@ -19248,11 +19248,11 @@ }, "YPosition": { "type": "float", - "value": 10.86013793945313 + "value": 10.860137939453125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19313,7 +19313,7 @@ }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } } ] diff --git a/_module/git/nirrahamlettmagi.git.json b/_module/git/nirrahamlettmagi.git.json index bd99df2..30d786b 100644 --- a/_module/git/nirrahamlettmagi.git.json +++ b/_module/git/nirrahamlettmagi.git.json @@ -1705,7 +1705,7 @@ }, "XPosition": { "type": "float", - "value": 11.49411582946777 + "value": 11.494115829467773 }, "YOrientation": { "type": "float", @@ -1717,7 +1717,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1741,7 +1741,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1931,7 +1931,7 @@ }, "X": { "type": "float", - "value": 3.650000095367432 + "value": 3.6500000953674316 }, "Y": { "type": "float", @@ -2171,15 +2171,15 @@ }, "X": { "type": "float", - "value": 13.13732719421387 + "value": 13.137327194213867 }, "Y": { "type": "float", - "value": 26.96165084838867 + "value": 26.961650848388672 }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -2398,7 +2398,7 @@ }, "X": { "type": "float", - "value": 13.97896480560303 + "value": 13.978964805603027 }, "Y": { "type": "float", @@ -2406,7 +2406,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -2425,7 +2425,7 @@ }, "Bearing": { "type": "float", - "value": 2.797974586486816 + "value": 2.7979745864868164 }, "BodyBag": { "type": "byte", @@ -2625,7 +2625,7 @@ }, "X": { "type": "float", - "value": 3.538406848907471 + "value": 3.5384068489074707 }, "Y": { "type": "float", @@ -2633,7 +2633,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -2860,7 +2860,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3306,15 +3306,15 @@ }, "X": { "type": "float", - "value": 3.70681643486023 + "value": 3.7068164348602295 }, "Y": { "type": "float", - "value": 11.2576208114624 + "value": 11.257620811462402 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3541,7 +3541,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -3760,7 +3760,7 @@ }, "X": { "type": "float", - "value": 15.20442867279053 + "value": 15.204428672790527 }, "Y": { "type": "float", @@ -3768,7 +3768,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -3987,7 +3987,7 @@ }, "X": { "type": "float", - "value": 15.06232261657715 + "value": 15.062322616577148 }, "Y": { "type": "float", @@ -3995,7 +3995,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4214,15 +4214,15 @@ }, "X": { "type": "float", - "value": 14.93712615966797 + "value": 14.937126159667969 }, "Y": { "type": "float", - "value": 11.65160751342773 + "value": 11.651607513427734 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4441,7 +4441,7 @@ }, "X": { "type": "float", - "value": 15.12227058410645 + "value": 15.122270584106445 }, "Y": { "type": "float", @@ -4449,7 +4449,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -4668,7 +4668,7 @@ }, "X": { "type": "float", - "value": 14.98016452789307 + "value": 14.980164527893066 }, "Y": { "type": "float", @@ -4676,7 +4676,7 @@ }, "Z": { "type": "float", - "value": -5.483627319335938e-006 + "value": -0.0000054836273193359375 } }, { @@ -4895,15 +4895,15 @@ }, "X": { "type": "float", - "value": 11.45928764343262 + "value": 11.459287643432617 }, "Y": { "type": "float", - "value": 13.61480236053467 + "value": 13.614802360534668 }, "Z": { "type": "float", - "value": 4.470348358154297e-008 + "value": 4.470348358154297e-8 } }, { @@ -4922,7 +4922,7 @@ }, "Bearing": { "type": "float", - "value": -1.546251058578491 + "value": -1.5462510585784912 }, "BodyBag": { "type": "byte", @@ -5126,7 +5126,7 @@ }, "Y": { "type": "float", - "value": 13.61354637145996 + "value": 13.613546371459961 }, "Z": { "type": "float", @@ -9756,7 +9756,7 @@ }, "XPosition": { "type": "float", - "value": 11.44941711425781 + "value": 11.449417114257812 }, "YOrientation": { "type": "float", @@ -9764,7 +9764,7 @@ }, "YPosition": { "type": "float", - "value": 11.31454658508301 + "value": 11.314546585083008 }, "ZPosition": { "type": "float", diff --git a/_module/git/nirrawoods.git.json b/_module/git/nirrawoods.git.json index d0c7646..1dfe44d 100644 --- a/_module/git/nirrawoods.git.json +++ b/_module/git/nirrawoods.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 117.6999969482422 + "value": 117.69999694824219 }, "Z": { "type": "float", @@ -486,7 +486,7 @@ }, "Z": { "type": "float", - "value": -0.1000000014901161 + "value": -0.10000000149011612 } } ] @@ -726,7 +726,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -953,7 +953,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1180,7 +1180,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1634,7 +1634,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1861,7 +1861,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2080,7 +2080,7 @@ }, "X": { "type": "float", - "value": 31.12434005737305 + "value": 31.124340057373047 }, "Y": { "type": "float", @@ -2088,7 +2088,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2315,7 +2315,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2538,11 +2538,11 @@ }, "Y": { "type": "float", - "value": 19.1124439239502 + "value": 19.112443923950195 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2761,15 +2761,15 @@ }, "X": { "type": "float", - "value": 107.2206573486328 + "value": 107.22065734863281 }, "Y": { "type": "float", - "value": 25.98995208740234 + "value": 25.989952087402344 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2988,7 +2988,7 @@ }, "X": { "type": "float", - "value": 103.6709747314453 + "value": 103.67097473144531 }, "Y": { "type": "float", @@ -2996,7 +2996,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3219,11 +3219,11 @@ }, "Y": { "type": "float", - "value": 52.61257171630859 + "value": 52.612571716308594 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3450,7 +3450,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3677,7 +3677,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3896,7 +3896,7 @@ }, "X": { "type": "float", - "value": 110.9921951293945 + "value": 110.99219512939453 }, "Y": { "type": "float", @@ -3904,7 +3904,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4127,11 +4127,11 @@ }, "Y": { "type": "float", - "value": 57.93747711181641 + "value": 57.937477111816406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4350,7 +4350,7 @@ }, "X": { "type": "float", - "value": 60.63108062744141 + "value": 60.631080627441406 }, "Y": { "type": "float", @@ -4358,7 +4358,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4585,7 +4585,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4812,7 +4812,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5039,7 +5039,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5258,7 +5258,7 @@ }, "X": { "type": "float", - "value": 16.70375061035156 + "value": 16.703750610351562 }, "Y": { "type": "float", @@ -5266,7 +5266,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5485,15 +5485,15 @@ }, "X": { "type": "float", - "value": 16.92497062683106 + "value": 16.924970626831055 }, "Y": { "type": "float", - "value": 104.1723175048828 + "value": 104.17231750488281 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5716,11 +5716,11 @@ }, "Y": { "type": "float", - "value": 106.3908996582031 + "value": 106.39089965820312 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5939,15 +5939,15 @@ }, "X": { "type": "float", - "value": 54.64098739624023 + "value": 54.640987396240234 }, "Y": { "type": "float", - "value": 101.7315826416016 + "value": 101.73158264160156 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6170,11 +6170,11 @@ }, "Y": { "type": "float", - "value": 27.70678329467773 + "value": 27.706783294677734 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6397,11 +6397,11 @@ }, "Y": { "type": "float", - "value": 46.79413223266602 + "value": 46.794132232666016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6624,11 +6624,11 @@ }, "Y": { "type": "float", - "value": 102.0722045898438 + "value": 102.07220458984375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6855,7 +6855,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7078,11 +7078,11 @@ }, "Y": { "type": "float", - "value": 122.0410308837891 + "value": 122.04103088378906 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7309,7 +7309,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7536,7 +7536,7 @@ }, "Z": { "type": "float", - "value": 0.003253668546676636 + "value": 0.0032536685466766357 } }, { @@ -7759,11 +7759,11 @@ }, "Y": { "type": "float", - "value": 105.4491577148438 + "value": 105.44915771484375 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7990,7 +7990,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -8209,15 +8209,15 @@ }, "X": { "type": "float", - "value": 109.2654190063477 + "value": 109.26541900634766 }, "Y": { "type": "float", - "value": 137.3303833007813 + "value": 137.33038330078125 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -8436,15 +8436,15 @@ }, "X": { "type": "float", - "value": 113.8169555664063 + "value": 113.81695556640625 }, "Y": { "type": "float", - "value": 144.0842895507813 + "value": 144.08428955078125 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -8663,7 +8663,7 @@ }, "X": { "type": "float", - "value": 112.3489456176758 + "value": 112.34894561767578 }, "Y": { "type": "float", @@ -8671,7 +8671,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8898,7 +8898,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9117,15 +9117,15 @@ }, "X": { "type": "float", - "value": 137.0424499511719 + "value": 137.04244995117188 }, "Y": { "type": "float", - "value": 105.6164245605469 + "value": 105.61642456054688 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9344,15 +9344,15 @@ }, "X": { "type": "float", - "value": 138.5106811523438 + "value": 138.51068115234375 }, "Y": { "type": "float", - "value": 112.3703231811523 + "value": 112.37032318115234 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9571,15 +9571,15 @@ }, "X": { "type": "float", - "value": 147.4669494628906 + "value": 147.46694946289062 }, "Y": { "type": "float", - "value": 122.7948150634766 + "value": 122.79481506347656 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9798,7 +9798,7 @@ }, "X": { "type": "float", - "value": 135.4273986816406 + "value": 135.42739868164062 }, "Y": { "type": "float", @@ -9806,7 +9806,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10025,7 +10025,7 @@ }, "X": { "type": "float", - "value": 117.6617050170898 + "value": 117.66170501708984 }, "Y": { "type": "float", @@ -10033,7 +10033,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10260,7 +10260,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10479,15 +10479,15 @@ }, "X": { "type": "float", - "value": 117.6617050170898 + "value": 117.66170501708984 }, "Y": { "type": "float", - "value": 42.99695205688477 + "value": 42.996952056884766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10706,15 +10706,15 @@ }, "X": { "type": "float", - "value": 137.3360900878906 + "value": 137.33609008789062 }, "Y": { "type": "float", - "value": 24.63456726074219 + "value": 24.634567260742188 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10937,11 +10937,11 @@ }, "Y": { "type": "float", - "value": 12.44818305969238 + "value": 12.448183059692383 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11164,11 +11164,11 @@ }, "Y": { "type": "float", - "value": 132.7791595458984 + "value": 132.77915954589844 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11387,15 +11387,15 @@ }, "X": { "type": "float", - "value": 22.50790596008301 + "value": 22.507905960083008 }, "Y": { "type": "float", - "value": 142.9096832275391 + "value": 142.90968322753906 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11622,7 +11622,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11841,15 +11841,15 @@ }, "X": { "type": "float", - "value": 42.03548431396484 + "value": 42.035484313964844 }, "Y": { "type": "float", - "value": 113.3980865478516 + "value": 113.39808654785156 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12076,7 +12076,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12295,7 +12295,7 @@ }, "X": { "type": "float", - "value": 31.31725883483887 + "value": 31.317258834838867 }, "Y": { "type": "float", @@ -12303,7 +12303,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12522,15 +12522,15 @@ }, "X": { "type": "float", - "value": 21.92061233520508 + "value": 21.920612335205078 }, "Y": { "type": "float", - "value": 102.826774597168 + "value": 102.82677459716797 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12749,15 +12749,15 @@ }, "X": { "type": "float", - "value": 21.48013877868652 + "value": 21.480138778686523 }, "Y": { "type": "float", - "value": 108.9933776855469 + "value": 108.99337768554688 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12984,7 +12984,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13211,7 +13211,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13438,7 +13438,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13657,15 +13657,15 @@ }, "X": { "type": "float", - "value": 53.65506744384766 + "value": 53.655067443847656 }, "Y": { "type": "float", - "value": 74.30886077880859 + "value": 74.3088607788086 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13884,7 +13884,7 @@ }, "X": { "type": "float", - "value": 52.92108535766602 + "value": 52.921085357666016 }, "Y": { "type": "float", @@ -13892,7 +13892,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14119,7 +14119,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14346,7 +14346,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14569,11 +14569,11 @@ }, "Y": { "type": "float", - "value": 32.17465972900391 + "value": 32.174659729003906 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14800,7 +14800,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15019,11 +15019,11 @@ }, "X": { "type": "float", - "value": 31.2787971496582 + "value": 31.278797149658203 }, "Y": { "type": "float", - "value": 20.06069183349609 + "value": 20.060691833496094 }, "Z": { "type": "float", @@ -15246,7 +15246,7 @@ }, "X": { "type": "float", - "value": 14.59912586212158 + "value": 14.599125862121582 }, "Y": { "type": "float", @@ -15254,7 +15254,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15473,11 +15473,11 @@ }, "X": { "type": "float", - "value": 21.64761543273926 + "value": 21.647615432739258 }, "Y": { "type": "float", - "value": 10.70867156982422 + "value": 10.708671569824219 }, "Z": { "type": "float", @@ -15700,15 +15700,15 @@ }, "X": { "type": "float", - "value": 12.47026062011719 + "value": 12.470260620117188 }, "Y": { "type": "float", - "value": 139.6889038085938 + "value": 139.68890380859375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15931,7 +15931,7 @@ }, "Y": { "type": "float", - "value": 144.7608947753906 + "value": 144.76089477539062 }, "Z": { "type": "float", @@ -16219,7 +16219,7 @@ }, "X": { "type": "float", - "value": 10.07501029968262 + "value": 10.075010299682617 }, "Y": { "type": "float", @@ -16446,11 +16446,11 @@ }, "X": { "type": "float", - "value": 12.19299983978272 + "value": 12.192999839782715 }, "Y": { "type": "float", - "value": 52.05271148681641 + "value": 52.052711486816406 }, "Z": { "type": "float", @@ -16739,7 +16739,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -17221,7 +17221,7 @@ }, "XPosition": { "type": "float", - "value": 12.29329681396484 + "value": 12.293296813964844 }, "YPosition": { "type": "float", @@ -17229,7 +17229,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -17342,7 +17342,7 @@ }, "XPosition": { "type": "float", - "value": 10.01723098754883 + "value": 10.017230987548828 }, "YPosition": { "type": "float", @@ -17350,7 +17350,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -17403,7 +17403,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17481,7 +17481,7 @@ }, "YPosition": { "type": "float", - "value": 101.5148315429688 + "value": 101.51483154296875 }, "ZPosition": { "type": "float", @@ -17538,7 +17538,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17616,7 +17616,7 @@ }, "YPosition": { "type": "float", - "value": 130.7525939941406 + "value": 130.75259399414062 }, "ZPosition": { "type": "float", @@ -17673,7 +17673,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17747,11 +17747,11 @@ }, "XPosition": { "type": "float", - "value": 106.6760787963867 + "value": 106.67607879638672 }, "YPosition": { "type": "float", - "value": 116.5925979614258 + "value": 116.59259796142578 }, "ZPosition": { "type": "float", @@ -17808,7 +17808,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17985,7 +17985,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -18059,7 +18059,7 @@ }, "XPosition": { "type": "float", - "value": 133.1907653808594 + "value": 133.19076538085938 }, "YPosition": { "type": "float", @@ -18120,7 +18120,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -18198,11 +18198,11 @@ }, "YPosition": { "type": "float", - "value": 116.1992568969727 + "value": 116.19925689697266 }, "ZPosition": { "type": "float", - "value": 0.4999996423721314 + "value": 0.49999964237213135 } } ] @@ -18239,7 +18239,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointY": { "type": "float", @@ -18247,7 +18247,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -18262,7 +18262,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -18273,7 +18273,7 @@ }, "PointY": { "type": "float", - "value": 0.0003042221069335938 + "value": 0.00030422210693359375 }, "PointZ": { "type": "float", @@ -18288,7 +18288,7 @@ }, "PointY": { "type": "float", - "value": 2.882888793945313 + "value": 2.8828887939453125 }, "PointZ": { "type": "float", @@ -18499,7 +18499,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18572,15 +18572,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 139.5578765869141 + "value": 139.55787658691406 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18645,11 +18645,11 @@ }, "XOrientation": { "type": "float", - "value": -0.3598994910717011 + "value": -0.35989949107170105 }, "XPosition": { "type": "float", - "value": 146.5310363769531 + "value": 146.53103637695312 }, "YOrientation": { "type": "float", @@ -18657,11 +18657,11 @@ }, "YPosition": { "type": "float", - "value": 111.0301055908203 + "value": 111.03010559082031 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18726,7 +18726,7 @@ }, "XOrientation": { "type": "float", - "value": 0.2902867496013641 + "value": 0.29028674960136414 }, "XPosition": { "type": "float", @@ -18738,11 +18738,11 @@ }, "YPosition": { "type": "float", - "value": 51.85201263427734 + "value": 51.852012634277344 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18799,11 +18799,11 @@ }, "YPosition": { "type": "float", - "value": 127.8028411865234 + "value": 127.80284118652344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18852,7 +18852,7 @@ }, "XPosition": { "type": "float", - "value": 10.66003608703613 + "value": 10.660036087036133 }, "YOrientation": { "type": "float", @@ -18864,7 +18864,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18913,7 +18913,7 @@ }, "XPosition": { "type": "float", - "value": 21.68770027160645 + "value": 21.687700271606445 }, "YOrientation": { "type": "float", @@ -18925,7 +18925,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18974,7 +18974,7 @@ }, "XPosition": { "type": "float", - "value": 27.20848083496094 + "value": 27.208480834960938 }, "YOrientation": { "type": "float", @@ -18986,7 +18986,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19035,7 +19035,7 @@ }, "XPosition": { "type": "float", - "value": 28.33189010620117 + "value": 28.331890106201172 }, "YOrientation": { "type": "float", @@ -19047,7 +19047,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -19096,7 +19096,7 @@ }, "XPosition": { "type": "float", - "value": 23.34537887573242 + "value": 23.345378875732422 }, "YOrientation": { "type": "float", @@ -19104,7 +19104,7 @@ }, "YPosition": { "type": "float", - "value": 24.76328659057617 + "value": 24.763286590576172 }, "ZPosition": { "type": "float", @@ -19169,7 +19169,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19226,11 +19226,11 @@ }, "YPosition": { "type": "float", - "value": 15.85880279541016 + "value": 15.858802795410156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19279,7 +19279,7 @@ }, "XPosition": { "type": "float", - "value": 142.1849212646484 + "value": 142.18492126464844 }, "YOrientation": { "type": "float", @@ -19287,11 +19287,11 @@ }, "YPosition": { "type": "float", - "value": 68.39821624755859 + "value": 68.3982162475586 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -19336,11 +19336,11 @@ }, "XOrientation": { "type": "float", - "value": 5.157785835763207e-006 + "value": 0.000005157785835763207 }, "XPosition": { "type": "float", - "value": 111.869026184082 + "value": 111.86902618408203 }, "YOrientation": { "type": "float", @@ -19348,11 +19348,11 @@ }, "YPosition": { "type": "float", - "value": 88.09726715087891 + "value": 88.0972671508789 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19401,19 +19401,19 @@ }, "XPosition": { "type": "float", - "value": 98.82705688476563 + "value": 98.82705688476562 }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", - "value": 38.53290176391602 + "value": 38.532901763916016 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -19458,11 +19458,11 @@ }, "XOrientation": { "type": "float", - "value": 5.157785835763207e-006 + "value": 0.000005157785835763207 }, "XPosition": { "type": "float", - "value": 131.9732818603516 + "value": 131.97328186035156 }, "YOrientation": { "type": "float", @@ -19474,7 +19474,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -19539,7 +19539,7 @@ }, "XOrientation": { "type": "float", - "value": 5.157785835763207e-006 + "value": 0.000005157785835763207 }, "XPosition": { "type": "float", @@ -19555,7 +19555,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -19636,7 +19636,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19705,7 +19705,7 @@ }, "XPosition": { "type": "float", - "value": 48.57454681396484 + "value": 48.574546813964844 }, "YOrientation": { "type": "float", @@ -19713,11 +19713,11 @@ }, "YPosition": { "type": "float", - "value": 140.7452545166016 + "value": 140.74525451660156 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -19774,11 +19774,11 @@ }, "YPosition": { "type": "float", - "value": 17.83844375610352 + "value": 17.838443756103516 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19823,11 +19823,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4929004311561585 + "value": 0.49290043115615845 }, "XPosition": { "type": "float", - "value": 55.21109008789063 + "value": 55.211090087890625 }, "YOrientation": { "type": "float", @@ -19839,7 +19839,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -19888,7 +19888,7 @@ }, "XPosition": { "type": "float", - "value": 77.03354644775391 + "value": 77.0335464477539 }, "YOrientation": { "type": "float", @@ -19896,11 +19896,11 @@ }, "YPosition": { "type": "float", - "value": 63.59557723999023 + "value": 63.595577239990234 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19961,7 +19961,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20022,7 +20022,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20079,11 +20079,11 @@ }, "YPosition": { "type": "float", - "value": 31.17788696289063 + "value": 31.177886962890625 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20132,7 +20132,7 @@ }, "XPosition": { "type": "float", - "value": 111.7351684570313 + "value": 111.73516845703125 }, "YOrientation": { "type": "float", @@ -20144,7 +20144,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20225,7 +20225,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20282,11 +20282,11 @@ }, "YPosition": { "type": "float", - "value": 38.87703704833984 + "value": 38.877037048339844 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -20345,7 +20345,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20400,7 +20400,7 @@ }, "YPosition": { "type": "float", - "value": 118.1555252075195 + "value": 118.15552520751953 }, "ZPosition": { "type": "float", @@ -20477,15 +20477,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 142.0199890136719 + "value": 142.01998901367188 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20554,19 +20554,19 @@ }, "XPosition": { "type": "float", - "value": 148.6459808349609 + "value": 148.64598083496094 }, "YOrientation": { "type": "float", - "value": 1.029172267408285e-006 + "value": 0.0000010291722674082848 }, "YPosition": { "type": "float", - "value": 113.3952102661133 + "value": 113.39521026611328 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20635,11 +20635,11 @@ }, "XPosition": { "type": "float", - "value": 5.841049194335938 + "value": 5.8410491943359375 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -20647,7 +20647,7 @@ }, "ZPosition": { "type": "float", - "value": 0.009999793022871018 + "value": 0.009999793022871017 } }, { @@ -20700,7 +20700,7 @@ }, "YOrientation": { "type": "float", - "value": 0.1467304974794388 + "value": 0.14673049747943878 }, "YPosition": { "type": "float", @@ -20708,7 +20708,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/nirrawoodslakeho.git.json b/_module/git/nirrawoodslakeho.git.json index 9060879..5460b9b 100644 --- a/_module/git/nirrawoodslakeho.git.json +++ b/_module/git/nirrawoodslakeho.git.json @@ -540,7 +540,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1025,7 +1025,7 @@ }, "XPosition": { "type": "float", - "value": 12.81530284881592 + "value": 12.815302848815918 }, "YOrientation": { "type": "float", @@ -1037,7 +1037,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1501,7 +1501,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1728,7 +1728,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -1842,11 +1842,11 @@ }, "YPosition": { "type": "float", - "value": 18.07120323181152 + "value": 18.071203231811523 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1923,11 +1923,11 @@ }, "YPosition": { "type": "float", - "value": 20.77166938781738 + "value": 20.771669387817383 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/northernborde001.git.json b/_module/git/northernborde001.git.json index 73e5f22..14d48fd 100644 --- a/_module/git/northernborde001.git.json +++ b/_module/git/northernborde001.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 3.990000247955322 + "value": 3.9900002479553223 }, "Y": { "type": "float", @@ -335,7 +335,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -675,7 +675,7 @@ }, "XPosition": { "type": "float", - "value": 61.71731567382813 + "value": 61.717315673828125 }, "YPosition": { "type": "float", @@ -796,7 +796,7 @@ }, "XPosition": { "type": "float", - "value": 15.90020847320557 + "value": 15.900208473205566 }, "YPosition": { "type": "float", @@ -857,7 +857,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -931,7 +931,7 @@ }, "XPosition": { "type": "float", - "value": 29.71480178833008 + "value": 29.714801788330078 }, "YPosition": { "type": "float", @@ -992,7 +992,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1059,7 +1059,7 @@ }, "XPosition": { "type": "float", - "value": 19.76694488525391 + "value": 19.766944885253906 }, "YPosition": { "type": "float", @@ -1120,7 +1120,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1309,7 +1309,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1370,7 +1370,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1415,7 +1415,7 @@ }, "XOrientation": { "type": "float", - "value": 0.195092186331749 + "value": 0.19509218633174896 }, "XPosition": { "type": "float", @@ -1431,7 +1431,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1492,7 +1492,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1537,7 +1537,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2667147815227509 + "value": -0.26671478152275085 }, "XPosition": { "type": "float", @@ -1545,15 +1545,15 @@ }, "YOrientation": { "type": "float", - "value": -0.9637755155563355 + "value": -0.9637755155563354 }, "YPosition": { "type": "float", - "value": 57.60189819335938 + "value": 57.601898193359375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1598,7 +1598,7 @@ }, "XOrientation": { "type": "float", - "value": -0.2667147815227509 + "value": -0.26671478152275085 }, "XPosition": { "type": "float", @@ -1606,7 +1606,7 @@ }, "YOrientation": { "type": "float", - "value": -0.9637755155563355 + "value": -0.9637755155563354 }, "YPosition": { "type": "float", @@ -1614,7 +1614,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1667,15 +1667,15 @@ }, "YOrientation": { "type": "float", - "value": 0.02454220689833164 + "value": 0.024542206898331642 }, "YPosition": { "type": "float", - "value": 100.0368347167969 + "value": 100.03683471679688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/northernborderhi.git.json b/_module/git/northernborderhi.git.json index c85e6da..1ad5fa2 100644 --- a/_module/git/northernborderhi.git.json +++ b/_module/git/northernborderhi.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794463157654 + "value": -1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -477,7 +477,7 @@ }, "Y": { "type": "float", - "value": 144.5099945068359 + "value": 144.50999450683594 }, "Z": { "type": "float", @@ -513,7 +513,7 @@ }, "Bearing": { "type": "float", - "value": -1.079922437667847 + "value": -1.0799224376678467 }, "BodyBag": { "type": "byte", @@ -713,7 +713,7 @@ }, "X": { "type": "float", - "value": 46.75229644775391 + "value": 46.752296447753906 }, "Y": { "type": "float", @@ -1167,7 +1167,7 @@ }, "X": { "type": "float", - "value": 44.61283111572266 + "value": 44.612831115722656 }, "Y": { "type": "float", @@ -1394,7 +1394,7 @@ }, "X": { "type": "float", - "value": 44.78613662719727 + "value": 44.786136627197266 }, "Y": { "type": "float", @@ -1629,7 +1629,7 @@ }, "Z": { "type": "float", - "value": 10.00402736663818 + "value": 10.004027366638184 } }, { @@ -1848,7 +1848,7 @@ }, "X": { "type": "float", - "value": 19.6777229309082 + "value": 19.677722930908203 }, "Y": { "type": "float", @@ -2083,7 +2083,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2310,7 +2310,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2756,11 +2756,11 @@ }, "X": { "type": "float", - "value": 100.3284454345703 + "value": 100.32844543457031 }, "Y": { "type": "float", - "value": 63.68837738037109 + "value": 63.688377380371094 }, "Z": { "type": "float", @@ -2983,15 +2983,15 @@ }, "X": { "type": "float", - "value": 49.61813354492188 + "value": 49.618133544921875 }, "Y": { "type": "float", - "value": 48.96151733398438 + "value": 48.961517333984375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3210,11 +3210,11 @@ }, "X": { "type": "float", - "value": 18.76696395874023 + "value": 18.766963958740234 }, "Y": { "type": "float", - "value": 50.96935653686523 + "value": 50.969356536865234 }, "Z": { "type": "float", @@ -3437,7 +3437,7 @@ }, "X": { "type": "float", - "value": 27.54488372802734 + "value": 27.544883728027344 }, "Y": { "type": "float", @@ -3891,11 +3891,11 @@ }, "X": { "type": "float", - "value": 30.55919456481934 + "value": 30.559194564819336 }, "Y": { "type": "float", - "value": 111.3318634033203 + "value": 111.33186340332031 }, "Z": { "type": "float", @@ -4118,11 +4118,11 @@ }, "X": { "type": "float", - "value": 59.34828948974609 + "value": 59.348289489746094 }, "Y": { "type": "float", - "value": 107.4129257202148 + "value": 107.41292572021484 }, "Z": { "type": "float", @@ -4345,7 +4345,7 @@ }, "X": { "type": "float", - "value": 68.74734497070313 + "value": 68.74734497070312 }, "Y": { "type": "float", @@ -5257,7 +5257,7 @@ }, "Y": { "type": "float", - "value": 57.34316253662109 + "value": 57.343162536621094 }, "Z": { "type": "float", @@ -5484,7 +5484,7 @@ }, "Y": { "type": "float", - "value": 102.1291046142578 + "value": 102.12910461425781 }, "Z": { "type": "float", @@ -5707,11 +5707,11 @@ }, "X": { "type": "float", - "value": 82.56589508056641 + "value": 82.5658950805664 }, "Y": { "type": "float", - "value": 123.6150588989258 + "value": 123.61505889892578 }, "Z": { "type": "float", @@ -6161,15 +6161,15 @@ }, "X": { "type": "float", - "value": 115.165901184082 + "value": 115.16590118408203 }, "Y": { "type": "float", - "value": 130.5223999023438 + "value": 130.52239990234375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6392,11 +6392,11 @@ }, "Y": { "type": "float", - "value": 139.9191589355469 + "value": 139.91915893554688 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6623,7 +6623,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6842,7 +6842,7 @@ }, "X": { "type": "float", - "value": 136.4026031494141 + "value": 136.40260314941406 }, "Y": { "type": "float", @@ -6850,7 +6850,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7069,7 +7069,7 @@ }, "X": { "type": "float", - "value": 122.3074417114258 + "value": 122.30744171142578 }, "Y": { "type": "float", @@ -7077,7 +7077,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7300,11 +7300,11 @@ }, "Y": { "type": "float", - "value": 43.02789688110352 + "value": 43.027896881103516 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7523,15 +7523,15 @@ }, "X": { "type": "float", - "value": 115.5417633056641 + "value": 115.54176330566406 }, "Y": { "type": "float", - "value": 28.93273544311523 + "value": 28.932735443115234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7750,7 +7750,7 @@ }, "X": { "type": "float", - "value": 148.9100646972656 + "value": 148.91006469726562 }, "Y": { "type": "float", @@ -7977,11 +7977,11 @@ }, "X": { "type": "float", - "value": 148.8716125488281 + "value": 148.87161254882812 }, "Y": { "type": "float", - "value": 46.25347518920898 + "value": 46.253475189208984 }, "Z": { "type": "float", @@ -8208,7 +8208,7 @@ }, "Y": { "type": "float", - "value": 4.111711978912354 + "value": 4.1117119789123535 }, "Z": { "type": "float", @@ -8231,7 +8231,7 @@ }, "Bearing": { "type": "float", - "value": -0.4417861104011536 + "value": -0.44178611040115356 }, "BodyBag": { "type": "byte", @@ -8435,7 +8435,7 @@ }, "Y": { "type": "float", - "value": 1.363287687301636 + "value": 1.3632876873016357 }, "Z": { "type": "float", @@ -8658,15 +8658,15 @@ }, "X": { "type": "float", - "value": 105.5165100097656 + "value": 105.51651000976562 }, "Y": { "type": "float", - "value": 3.025359153747559 + "value": 3.0253591537475586 }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -8885,7 +8885,7 @@ }, "X": { "type": "float", - "value": 1.999519109725952 + "value": 1.9995191097259521 }, "Y": { "type": "float", @@ -9112,7 +9112,7 @@ }, "X": { "type": "float", - "value": 2.66539478302002 + "value": 2.6653947830200195 }, "Y": { "type": "float", @@ -9139,7 +9139,7 @@ }, "Bearing": { "type": "float", - "value": -1.300815582275391 + "value": -1.3008155822753906 }, "BodyBag": { "type": "byte", @@ -9343,7 +9343,7 @@ }, "Y": { "type": "float", - "value": 147.2871398925781 + "value": 147.28713989257812 }, "Z": { "type": "float", @@ -9793,15 +9793,15 @@ }, "X": { "type": "float", - "value": 75.88613128662109 + "value": 75.8861312866211 }, "Y": { "type": "float", - "value": 146.8109741210938 + "value": 146.81097412109375 }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } } ] @@ -9859,7 +9859,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -10224,7 +10224,7 @@ }, "YPosition": { "type": "float", - "value": 82.09091949462891 + "value": 82.0909194946289 }, "ZPosition": { "type": "float", @@ -10284,7 +10284,7 @@ }, "PointY": { "type": "float", - "value": -3.329574584960938 + "value": -3.3295745849609375 }, "PointZ": { "type": "float", @@ -10299,7 +10299,7 @@ }, "PointY": { "type": "float", - "value": -3.262985229492188 + "value": -3.2629852294921875 }, "PointZ": { "type": "float", @@ -10318,7 +10318,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -10333,7 +10333,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -10348,7 +10348,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -10363,7 +10363,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -10468,7 +10468,7 @@ }, "XPosition": { "type": "float", - "value": 130.0057678222656 + "value": 130.00576782226562 }, "YOrientation": { "type": "float", @@ -10476,7 +10476,7 @@ }, "YPosition": { "type": "float", - "value": 149.6714477539063 + "value": 149.67144775390625 }, "ZOrientation": { "type": "float", @@ -10542,7 +10542,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.20584106445313 + "value": 10.205841064453125 }, "PointY": { "type": "float", @@ -10557,11 +10557,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.20584106445313 + "value": 10.205841064453125 }, "PointY": { "type": "float", - "value": 3.277483940124512 + "value": 3.2774839401245117 }, "PointZ": { "type": "float", @@ -10572,7 +10572,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.52587890625e-005 + "value": 0.0000152587890625 }, "PointY": { "type": "float", @@ -10685,7 +10685,7 @@ }, "XPosition": { "type": "float", - "value": 129.7063903808594 + "value": 129.70639038085938 }, "YOrientation": { "type": "float", @@ -10693,7 +10693,7 @@ }, "YPosition": { "type": "float", - "value": 0.1434979438781738 + "value": 0.14349794387817383 }, "ZOrientation": { "type": "float", @@ -10729,7 +10729,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.1005725860595703 + "value": -0.10057258605957031 }, "PointY": { "type": "float", @@ -10737,33 +10737,33 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.05694389343262 + "value": 10.056943893432617 }, "PointY": { "type": "float", - "value": -0.1502876281738281 + "value": -0.15028762817382812 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.05694389343262 + "value": 10.056943893432617 }, "PointY": { "type": "float", - "value": 2.514630794525147 + "value": 2.5146307945251465 }, "PointZ": { "type": "float", @@ -10782,7 +10782,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -10797,7 +10797,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } } ] @@ -10902,7 +10902,7 @@ }, "XPosition": { "type": "float", - "value": 29.92585182189941 + "value": 29.925851821899414 }, "YOrientation": { "type": "float", @@ -10910,7 +10910,7 @@ }, "YPosition": { "type": "float", - "value": 0.2182836532592773 + "value": 0.21828365325927734 }, "ZOrientation": { "type": "float", @@ -10946,11 +10946,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.4323654174804688 + "value": -0.43236541748046875 }, "PointY": { "type": "float", - "value": -1.556541442871094 + "value": -1.5565414428710938 }, "PointZ": { "type": "float", @@ -10961,11 +10961,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 17.12198638916016 + "value": 17.121986389160156 }, "PointY": { "type": "float", - "value": -6.139694213867188 + "value": -6.1396942138671875 }, "PointZ": { "type": "float", @@ -11105,7 +11105,7 @@ }, "XPosition": { "type": "float", - "value": 123.4517440795898 + "value": 123.45174407958984 }, "YOrientation": { "type": "float", @@ -11284,7 +11284,7 @@ }, "YPosition": { "type": "float", - "value": 101.8604583740234 + "value": 101.86045837402344 }, "ZPosition": { "type": "float", @@ -11345,7 +11345,7 @@ }, "YPosition": { "type": "float", - "value": 111.5520935058594 + "value": 111.55209350585938 }, "ZPosition": { "type": "float", @@ -11398,7 +11398,7 @@ }, "XPosition": { "type": "float", - "value": 29.77077674865723 + "value": 29.770776748657227 }, "YOrientation": { "type": "float", @@ -11459,7 +11459,7 @@ }, "XPosition": { "type": "float", - "value": 19.1450080871582 + "value": 19.145008087158203 }, "YOrientation": { "type": "float", @@ -11467,7 +11467,7 @@ }, "YPosition": { "type": "float", - "value": 66.06789398193359 + "value": 66.0678939819336 }, "ZPosition": { "type": "float", @@ -11532,7 +11532,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11605,11 +11605,11 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 139.9765930175781 + "value": 139.97659301757812 }, "ZPosition": { "type": "float", @@ -11658,7 +11658,7 @@ }, "XOrientation": { "type": "float", - "value": 0.9807849526405335 + "value": 0.9807849526405334 }, "XPosition": { "type": "float", @@ -11670,7 +11670,7 @@ }, "YPosition": { "type": "float", - "value": 121.0904235839844 + "value": 121.09042358398438 }, "ZPosition": { "type": "float", @@ -11723,7 +11723,7 @@ }, "XPosition": { "type": "float", - "value": 97.49709320068359 + "value": 97.4970932006836 }, "YOrientation": { "type": "float", @@ -11731,7 +11731,7 @@ }, "YPosition": { "type": "float", - "value": 115.1623077392578 + "value": 115.16230773925781 }, "ZPosition": { "type": "float", @@ -11784,7 +11784,7 @@ }, "XPosition": { "type": "float", - "value": 110.2927780151367 + "value": 110.29277801513672 }, "YOrientation": { "type": "float", @@ -11906,7 +11906,7 @@ }, "XPosition": { "type": "float", - "value": 59.45797729492188 + "value": 59.457977294921875 }, "YOrientation": { "type": "float", @@ -12068,7 +12068,7 @@ }, "XPosition": { "type": "float", - "value": 37.25559234619141 + "value": 37.255592346191406 }, "YOrientation": { "type": "float", @@ -12076,7 +12076,7 @@ }, "YPosition": { "type": "float", - "value": 141.0117797851563 + "value": 141.01177978515625 }, "ZPosition": { "type": "float", @@ -12149,7 +12149,7 @@ }, "XPosition": { "type": "float", - "value": 13.52820777893066 + "value": 13.528207778930664 }, "YOrientation": { "type": "float", @@ -12157,11 +12157,11 @@ }, "YPosition": { "type": "float", - "value": 16.42736434936523 + "value": 16.427364349365234 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12242,7 +12242,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12311,7 +12311,7 @@ }, "XPosition": { "type": "float", - "value": 96.23569488525391 + "value": 96.2356948852539 }, "YOrientation": { "type": "float", @@ -12323,7 +12323,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12392,7 +12392,7 @@ }, "XPosition": { "type": "float", - "value": 121.2575607299805 + "value": 121.25756072998047 }, "YOrientation": { "type": "float", @@ -12404,7 +12404,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12473,7 +12473,7 @@ }, "XPosition": { "type": "float", - "value": 108.2544708251953 + "value": 108.25447082519531 }, "YOrientation": { "type": "float", @@ -12481,11 +12481,11 @@ }, "YPosition": { "type": "float", - "value": 139.0635070800781 + "value": 139.06350708007812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12534,7 +12534,7 @@ }, "XPosition": { "type": "float", - "value": 134.8093109130859 + "value": 134.80931091308594 }, "YOrientation": { "type": "float", @@ -12542,7 +12542,7 @@ }, "YPosition": { "type": "float", - "value": 1.782240152359009 + "value": 1.7822401523590088 }, "ZPosition": { "type": "float", @@ -12603,7 +12603,7 @@ }, "YPosition": { "type": "float", - "value": 1.425186634063721 + "value": 1.4251866340637207 }, "ZPosition": { "type": "float", @@ -12652,11 +12652,11 @@ }, "XOrientation": { "type": "float", - "value": -0.336893618106842 + "value": -0.33689361810684204 }, "XPosition": { "type": "float", - "value": 138.4314117431641 + "value": 138.43141174316406 }, "YOrientation": { "type": "float", @@ -12664,7 +12664,7 @@ }, "YPosition": { "type": "float", - "value": 21.37467765808106 + "value": 21.374677658081055 }, "ZPosition": { "type": "float", @@ -12717,7 +12717,7 @@ }, "XPosition": { "type": "float", - "value": 129.7833557128906 + "value": 129.78335571289062 }, "YOrientation": { "type": "float", @@ -12774,11 +12774,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2191008627414703 + "value": -0.21910086274147034 }, "XPosition": { "type": "float", - "value": 130.9061889648438 + "value": 130.90618896484375 }, "YOrientation": { "type": "float", @@ -12851,7 +12851,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12900,7 +12900,7 @@ }, "XPosition": { "type": "float", - "value": 135.0001373291016 + "value": 135.00013732910156 }, "YOrientation": { "type": "float", @@ -12908,11 +12908,11 @@ }, "YPosition": { "type": "float", - "value": 148.0066528320313 + "value": 148.00665283203125 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12957,11 +12957,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4052423238754273 + "value": 0.40524232387542725 }, "XPosition": { "type": "float", - "value": 124.6623992919922 + "value": 124.66239929199219 }, "YOrientation": { "type": "float", @@ -12973,7 +12973,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13022,7 +13022,7 @@ }, "XPosition": { "type": "float", - "value": 140.9505462646484 + "value": 140.95054626464844 }, "YOrientation": { "type": "float", @@ -13034,7 +13034,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/northernevarifor.git.json b/_module/git/northernevarifor.git.json index 1d7b641..526926b 100644 --- a/_module/git/northernevarifor.git.json +++ b/_module/git/northernevarifor.git.json @@ -258,11 +258,11 @@ }, "X": { "type": "float", - "value": 136.2599945068359 + "value": 136.25999450683594 }, "Y": { "type": "float", - "value": 52.34999847412109 + "value": 52.349998474121094 }, "Z": { "type": "float", @@ -477,7 +477,7 @@ }, "X": { "type": "float", - "value": 14.89999961853027 + "value": 14.899999618530273 }, "Y": { "type": "float", @@ -717,15 +717,15 @@ }, "X": { "type": "float", - "value": 121.4603805541992 + "value": 121.46038055419922 }, "Y": { "type": "float", - "value": 139.6350250244141 + "value": 139.63502502441406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -944,15 +944,15 @@ }, "X": { "type": "float", - "value": 116.7255554199219 + "value": 116.72555541992188 }, "Y": { "type": "float", - "value": 136.7332611083984 + "value": 136.73326110839844 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1171,15 +1171,15 @@ }, "X": { "type": "float", - "value": 126.118522644043 + "value": 126.11852264404297 }, "Y": { "type": "float", - "value": 137.0117340087891 + "value": 137.01173400878906 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1398,15 +1398,15 @@ }, "X": { "type": "float", - "value": 116.8604125976563 + "value": 116.86041259765625 }, "Y": { "type": "float", - "value": 132.5501403808594 + "value": 132.55014038085938 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1425,7 +1425,7 @@ }, "Bearing": { "type": "float", - "value": 1.079922437667847 + "value": 1.0799224376678467 }, "BodyBag": { "type": "byte", @@ -1633,7 +1633,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1852,15 +1852,15 @@ }, "X": { "type": "float", - "value": 121.2434921264648 + "value": 121.24349212646484 }, "Y": { "type": "float", - "value": 130.1054534912109 + "value": 130.10545349121094 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] @@ -1918,7 +1918,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -2287,7 +2287,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000001907348633 + "value": 1.0000019073486328 } }, { @@ -2404,7 +2404,7 @@ }, "YPosition": { "type": "float", - "value": 124.3622512817383 + "value": 124.36225128173828 }, "ZPosition": { "type": "float", @@ -2646,11 +2646,11 @@ }, "YPosition": { "type": "float", - "value": 114.0482864379883 + "value": 114.04828643798828 }, "ZPosition": { "type": "float", - "value": 0.6956253051757813 + "value": 0.6956253051757812 } }, { @@ -2767,7 +2767,7 @@ }, "YPosition": { "type": "float", - "value": 100.2789688110352 + "value": 100.27896881103516 }, "ZPosition": { "type": "float", @@ -3005,11 +3005,11 @@ }, "XPosition": { "type": "float", - "value": 94.20204925537109 + "value": 94.2020492553711 }, "YPosition": { "type": "float", - "value": 75.32387542724609 + "value": 75.3238754272461 }, "ZPosition": { "type": "float", @@ -3126,7 +3126,7 @@ }, "XPosition": { "type": "float", - "value": 105.895881652832 + "value": 105.89588165283203 }, "YPosition": { "type": "float", @@ -3134,7 +3134,7 @@ }, "ZPosition": { "type": "float", - "value": 0.4983272552490234 + "value": 0.49832725524902344 } }, { @@ -3247,7 +3247,7 @@ }, "XPosition": { "type": "float", - "value": 124.7818222045898 + "value": 124.78182220458984 }, "YPosition": { "type": "float", @@ -3376,7 +3376,7 @@ }, "ZPosition": { "type": "float", - "value": 1.276035308837891 + "value": 1.2760353088378906 } } ] @@ -3421,7 +3421,7 @@ }, "PointZ": { "type": "float", - "value": 0.02032932452857494 + "value": 0.020329324528574944 } }, { @@ -3447,11 +3447,11 @@ }, "PointY": { "type": "float", - "value": 3.675287246704102 + "value": 3.6752872467041016 }, "PointZ": { "type": "float", - "value": 0.02100065164268017 + "value": 0.021000651642680168 } }, { @@ -3466,7 +3466,7 @@ }, "PointZ": { "type": "float", - "value": 0.0211805384606123 + "value": 0.021180538460612297 } } ] @@ -3571,7 +3571,7 @@ }, "XPosition": { "type": "float", - "value": 130.1059875488281 + "value": 130.10598754882812 }, "YOrientation": { "type": "float", @@ -3615,7 +3615,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.112032413482666 + "value": -0.11203241348266602 }, "PointY": { "type": "float", @@ -3645,7 +3645,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.580438613891602 + "value": 2.5804386138916016 }, "PointY": { "type": "float", @@ -3668,7 +3668,7 @@ }, "PointZ": { "type": "float", - "value": 0.02059051208198071 + "value": 0.020590512081980705 } } ] @@ -3781,7 +3781,7 @@ }, "YPosition": { "type": "float", - "value": 39.98395156860352 + "value": 39.983951568603516 }, "ZOrientation": { "type": "float", @@ -3825,7 +3825,7 @@ }, "PointZ": { "type": "float", - "value": 0.02224251441657543 + "value": 0.022242514416575432 } }, { @@ -3840,14 +3840,14 @@ }, "PointZ": { "type": "float", - "value": 0.02397796325385571 + "value": 0.023977963253855705 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 2.414688110351563 + "value": 2.4146881103515625 }, "PointY": { "type": "float", @@ -3855,7 +3855,7 @@ }, "PointZ": { "type": "float", - "value": 0.02181562595069408 + "value": 0.021815625950694084 } }, { @@ -3866,11 +3866,11 @@ }, "PointY": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 }, "PointZ": { "type": "float", - "value": 0.02224251441657543 + "value": 0.022242514416575432 } } ] @@ -3984,7 +3984,7 @@ }, "YPosition": { "type": "float", - "value": 19.8071403503418 + "value": 19.807140350341797 }, "ZOrientation": { "type": "float", @@ -4082,7 +4082,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", @@ -4094,11 +4094,11 @@ }, "YPosition": { "type": "float", - "value": 138.1988677978516 + "value": 138.19886779785156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4147,19 +4147,19 @@ }, "XPosition": { "type": "float", - "value": 30.09509658813477 + "value": 30.095096588134766 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 105.6616287231445 + "value": 105.66162872314453 }, "ZPosition": { "type": "float", - "value": 0.001664400100708008 + "value": 0.0016644001007080078 } }, { @@ -4216,11 +4216,11 @@ }, "YPosition": { "type": "float", - "value": 108.8590698242188 + "value": 108.85906982421875 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4281,7 +4281,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4338,11 +4338,11 @@ }, "YPosition": { "type": "float", - "value": 86.80422973632813 + "value": 86.80422973632812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4403,7 +4403,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4452,7 +4452,7 @@ }, "XPosition": { "type": "float", - "value": 15.67496681213379 + "value": 15.674966812133789 }, "YOrientation": { "type": "float", @@ -4460,11 +4460,11 @@ }, "YPosition": { "type": "float", - "value": 140.4152679443359 + "value": 140.41526794433594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4529,11 +4529,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 121.4039154052734 + "value": 121.40391540527344 }, "YOrientation": { "type": "float", @@ -4541,11 +4541,11 @@ }, "YPosition": { "type": "float", - "value": 134.5636138916016 + "value": 134.56361389160156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4590,11 +4590,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 139.8139343261719 + "value": 139.81393432617188 }, "YOrientation": { "type": "float", @@ -4602,11 +4602,11 @@ }, "YPosition": { "type": "float", - "value": 127.5594329833984 + "value": 127.55943298339844 }, "ZPosition": { "type": "float", - "value": 0.1278800964355469 + "value": 0.12788009643554688 } }, { @@ -4651,11 +4651,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 103.5947723388672 + "value": 103.59477233886719 }, "YOrientation": { "type": "float", @@ -4667,7 +4667,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01122558116912842 + "value": 0.011225581169128418 } }, { @@ -4712,7 +4712,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", @@ -4773,11 +4773,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 122.824348449707 + "value": 122.82434844970703 }, "YOrientation": { "type": "float", @@ -4789,7 +4789,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4834,11 +4834,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 146.6516418457031 + "value": 146.65164184570312 }, "YOrientation": { "type": "float", @@ -4850,7 +4850,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4895,11 +4895,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 99.95468902587891 + "value": 99.9546890258789 }, "YOrientation": { "type": "float", @@ -4907,7 +4907,7 @@ }, "YPosition": { "type": "float", - "value": 144.6849975585938 + "value": 144.68499755859375 }, "ZPosition": { "type": "float", @@ -4968,11 +4968,11 @@ }, "YPosition": { "type": "float", - "value": 144.9741058349609 + "value": 144.97410583496094 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5041,11 +5041,11 @@ }, "XPosition": { "type": "float", - "value": 13.56178379058838 + "value": 13.561783790588379 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -5053,7 +5053,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5122,19 +5122,19 @@ }, "XPosition": { "type": "float", - "value": 20.73042678833008 + "value": 20.730426788330078 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 10.98300933837891 + "value": 10.983009338378906 }, "ZPosition": { "type": "float", - "value": 0.0299903154373169 + "value": 0.029990315437316895 } }, { @@ -5207,7 +5207,7 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -5215,7 +5215,7 @@ }, "ZPosition": { "type": "float", - "value": 0.008104324340820313 + "value": 0.008104324340820312 } }, { @@ -5284,7 +5284,7 @@ }, "XPosition": { "type": "float", - "value": 105.9318084716797 + "value": 105.93180847167969 }, "YOrientation": { "type": "float", @@ -5292,11 +5292,11 @@ }, "YPosition": { "type": "float", - "value": 2.104816913604736 + "value": 2.1048169136047363 }, "ZPosition": { "type": "float", - "value": 0.01922035217285156 + "value": 0.019220352172851562 } }, { @@ -5357,7 +5357,7 @@ }, "ZPosition": { "type": "float", - "value": -8.58306884765625e-006 + "value": -0.00000858306884765625 } }, { @@ -5402,11 +5402,11 @@ }, "XOrientation": { "type": "float", - "value": 0.8175849318504334 + "value": 0.8175849318504333 }, "XPosition": { "type": "float", - "value": 109.1720352172852 + "value": 109.17203521728516 }, "YOrientation": { "type": "float", @@ -5463,7 +5463,7 @@ }, "XOrientation": { "type": "float", - "value": 0.8175849318504334 + "value": 0.8175849318504333 }, "XPosition": { "type": "float", @@ -5524,11 +5524,11 @@ }, "XOrientation": { "type": "float", - "value": 0.1224154308438301 + "value": 0.12241543084383011 }, "XPosition": { "type": "float", - "value": 135.7089691162109 + "value": 135.70896911621094 }, "YOrientation": { "type": "float", @@ -5540,7 +5540,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5597,11 +5597,11 @@ }, "YPosition": { "type": "float", - "value": 10.88219738006592 + "value": 10.882197380065918 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5650,7 +5650,7 @@ }, "XPosition": { "type": "float", - "value": 134.9734954833984 + "value": 134.97349548339844 }, "YOrientation": { "type": "float", @@ -5662,7 +5662,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5715,7 +5715,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -5723,7 +5723,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5768,7 +5768,7 @@ }, "XOrientation": { "type": "float", - "value": 0.3368906974792481 + "value": 0.33689069747924805 }, "XPosition": { "type": "float", @@ -5784,7 +5784,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5841,11 +5841,11 @@ }, "YPosition": { "type": "float", - "value": 80.96775054931641 + "value": 80.9677505493164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/northernmorrahil.git.json b/_module/git/northernmorrahil.git.json index 06dc813..77a7dd2 100644 --- a/_module/git/northernmorrahil.git.json +++ b/_module/git/northernmorrahil.git.json @@ -278,11 +278,11 @@ }, "X": { "type": "float", - "value": 17.10555839538574 + "value": 17.105558395385742 }, "Y": { "type": "float", - "value": 73.41103363037109 + "value": 73.4110336303711 }, "Z": { "type": "float", @@ -505,7 +505,7 @@ }, "X": { "type": "float", - "value": 10.3013505935669 + "value": 10.301350593566895 }, "Y": { "type": "float", @@ -732,15 +732,15 @@ }, "X": { "type": "float", - "value": 7.137797355651856 + "value": 7.1377973556518555 }, "Y": { "type": "float", - "value": 70.54514312744141 + "value": 70.5451431274414 }, "Z": { "type": "float", - "value": 10.00313186645508 + "value": 10.003131866455078 } }, { @@ -963,7 +963,7 @@ }, "Y": { "type": "float", - "value": 72.26808929443359 + "value": 72.2680892944336 }, "Z": { "type": "float", @@ -1186,7 +1186,7 @@ }, "X": { "type": "float", - "value": 13.95528888702393 + "value": 13.955288887023926 }, "Y": { "type": "float", @@ -1440,7 +1440,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795655250549 + "value": -1.5707956552505493 }, "BodyBag": { "type": "byte", @@ -1640,7 +1640,7 @@ }, "X": { "type": "float", - "value": 20.50121879577637 + "value": 20.501218795776367 }, "Y": { "type": "float", @@ -1667,7 +1667,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -1867,7 +1867,7 @@ }, "X": { "type": "float", - "value": 22.09251022338867 + "value": 22.092510223388672 }, "Y": { "type": "float", @@ -1894,7 +1894,7 @@ }, "Bearing": { "type": "float", - "value": 1.472621083259583 + "value": 1.4726210832595825 }, "BodyBag": { "type": "byte", @@ -2102,7 +2102,7 @@ }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -2329,7 +2329,7 @@ }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -2556,7 +2556,7 @@ }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -2802,7 +2802,7 @@ }, "Bearing": { "type": "float", - "value": -1.497164487838745 + "value": -1.4971644878387451 }, "BodyBag": { "type": "byte", @@ -3002,15 +3002,15 @@ }, "X": { "type": "float", - "value": 30.30644226074219 + "value": 30.306442260742188 }, "Y": { "type": "float", - "value": 59.97625350952148 + "value": 59.976253509521484 }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -3229,11 +3229,11 @@ }, "X": { "type": "float", - "value": 11.81047439575195 + "value": 11.810474395751953 }, "Y": { "type": "float", - "value": 53.88694000244141 + "value": 53.886940002441406 }, "Z": { "type": "float", @@ -3456,7 +3456,7 @@ }, "X": { "type": "float", - "value": 21.02378082275391 + "value": 21.023780822753906 }, "Y": { "type": "float", @@ -3687,11 +3687,11 @@ }, "Y": { "type": "float", - "value": 48.19100952148438 + "value": 48.191009521484375 }, "Z": { "type": "float", - "value": 10.00402736663818 + "value": 10.004027366638184 } }, { @@ -4141,11 +4141,11 @@ }, "Y": { "type": "float", - "value": 49.47891998291016 + "value": 49.478919982910156 }, "Z": { "type": "float", - "value": 9.999997138977051 + "value": 9.99999713897705 } }, { @@ -4368,11 +4368,11 @@ }, "Y": { "type": "float", - "value": 44.07985687255859 + "value": 44.079856872558594 }, "Z": { "type": "float", - "value": 10.00313186645508 + "value": 10.003131866455078 } }, { @@ -4818,7 +4818,7 @@ }, "X": { "type": "float", - "value": 63.74459838867188 + "value": 63.744598388671875 }, "Y": { "type": "float", @@ -5049,7 +5049,7 @@ }, "Y": { "type": "float", - "value": 24.26662635803223 + "value": 24.266626358032227 }, "Z": { "type": "float", @@ -5276,7 +5276,7 @@ }, "Y": { "type": "float", - "value": 19.3089485168457 + "value": 19.308948516845703 }, "Z": { "type": "float", @@ -5503,7 +5503,7 @@ }, "Y": { "type": "float", - "value": 28.26428413391113 + "value": 28.264284133911133 }, "Z": { "type": "float", @@ -5726,7 +5726,7 @@ }, "X": { "type": "float", - "value": 11.18257331848145 + "value": 11.182573318481445 }, "Y": { "type": "float", @@ -5792,7 +5792,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -6153,7 +6153,7 @@ }, "XPosition": { "type": "float", - "value": 42.59424209594727 + "value": 42.594242095947266 }, "YPosition": { "type": "float", @@ -6161,7 +6161,7 @@ }, "ZPosition": { "type": "float", - "value": 10.99999809265137 + "value": 10.999998092651367 } }, { @@ -6274,7 +6274,7 @@ }, "XPosition": { "type": "float", - "value": 13.85829639434815 + "value": 13.858296394348145 }, "YPosition": { "type": "float", @@ -6357,7 +6357,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -6372,7 +6372,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } } ] @@ -6485,7 +6485,7 @@ }, "YPosition": { "type": "float", - "value": 0.1282572746276856 + "value": 0.12825727462768555 }, "ZOrientation": { "type": "float", @@ -6577,11 +6577,11 @@ }, "YPosition": { "type": "float", - "value": 1.045392751693726 + "value": 1.0453927516937256 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6696,7 +6696,7 @@ }, "XPosition": { "type": "float", - "value": 38.50835800170898 + "value": 38.508358001708984 }, "YOrientation": { "type": "float", @@ -6704,11 +6704,11 @@ }, "YPosition": { "type": "float", - "value": 3.15327262878418 + "value": 3.1532726287841797 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6757,7 +6757,7 @@ }, "XPosition": { "type": "float", - "value": 14.27684020996094 + "value": 14.276840209960938 }, "YOrientation": { "type": "float", @@ -6818,11 +6818,11 @@ }, "XPosition": { "type": "float", - "value": 18.04279518127441 + "value": 18.042795181274414 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -6879,7 +6879,7 @@ }, "XPosition": { "type": "float", - "value": 59.45691299438477 + "value": 59.456912994384766 }, "YOrientation": { "type": "float", @@ -7001,7 +7001,7 @@ }, "XPosition": { "type": "float", - "value": 18.89420700073242 + "value": 18.894207000732422 }, "YOrientation": { "type": "float", @@ -7070,11 +7070,11 @@ }, "YPosition": { "type": "float", - "value": 12.00223541259766 + "value": 12.002235412597656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7123,7 +7123,7 @@ }, "XPosition": { "type": "float", - "value": 10.03310966491699 + "value": 10.033109664916992 }, "YOrientation": { "type": "float", @@ -7131,11 +7131,11 @@ }, "YPosition": { "type": "float", - "value": 18.8978157043457 + "value": 18.897815704345703 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/novacitadel.git.json b/_module/git/novacitadel.git.json index c002b4f..3d7bb6b 100644 --- a/_module/git/novacitadel.git.json +++ b/_module/git/novacitadel.git.json @@ -537,11 +537,11 @@ }, "XOrientation": { "type": "float", - "value": 0.2429837733507156 + "value": 0.24298377335071564 }, "XPosition": { "type": "float", - "value": 44.43521118164063 + "value": 44.435211181640625 }, "YOrientation": { "type": "float", @@ -553,7 +553,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1063,7 +1063,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2244,7 +2244,7 @@ }, "XPosition": { "type": "float", - "value": 13.39873600006104 + "value": 13.398736000061035 }, "YOrientation": { "type": "float", @@ -2256,7 +2256,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3437,7 +3437,7 @@ }, "XPosition": { "type": "float", - "value": 11.0294361114502 + "value": 11.029436111450195 }, "YOrientation": { "type": "float", @@ -3449,7 +3449,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4630,7 +4630,7 @@ }, "XPosition": { "type": "float", - "value": 23.89040374755859 + "value": 23.890403747558594 }, "YOrientation": { "type": "float", @@ -4642,7 +4642,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5823,7 +5823,7 @@ }, "XPosition": { "type": "float", - "value": 23.98130798339844 + "value": 23.981307983398438 }, "YOrientation": { "type": "float", @@ -5835,7 +5835,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7028,7 +7028,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8221,7 +8221,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9414,7 +9414,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10607,7 +10607,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12298,11 +12298,11 @@ }, "XPosition": { "type": "float", - "value": 18.57015228271484 + "value": 18.570152282714844 }, "YOrientation": { "type": "float", - "value": 1.50600942561141e-006 + "value": 0.0000015060094256114098 }, "YPosition": { "type": "float", @@ -12310,7 +12310,7 @@ }, "ZPosition": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -15025,11 +15025,11 @@ }, "XOrientation": { "type": "float", - "value": 0.3368897140026093 + "value": 0.33688971400260925 }, "XPosition": { "type": "float", - "value": 12.25149059295654 + "value": 12.251490592956543 }, "YOrientation": { "type": "float", @@ -15037,11 +15037,11 @@ }, "YPosition": { "type": "float", - "value": 15.39336013793945 + "value": 15.393360137939453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16146,11 +16146,11 @@ }, "YPosition": { "type": "float", - "value": 22.53338241577148 + "value": 22.533382415771484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -16174,7 +16174,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -16393,7 +16393,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -17050,7 +17050,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -17926,7 +17926,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -18145,7 +18145,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -18802,7 +18802,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -18994,7 +18994,7 @@ }, "X": { "type": "float", - "value": 24.96999931335449 + "value": 24.969999313354492 }, "Y": { "type": "float", @@ -19021,7 +19021,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -19214,7 +19214,7 @@ }, "X": { "type": "float", - "value": 1.900000095367432 + "value": 1.9000000953674316 }, "Y": { "type": "float", @@ -19454,7 +19454,7 @@ }, "X": { "type": "float", - "value": 11.03438377380371 + "value": 11.034383773803711 }, "Y": { "type": "float", @@ -19462,7 +19462,7 @@ }, "Z": { "type": "float", - "value": -7.171183824539185e-008 + "value": -7.171183824539185e-8 } }, { @@ -19689,7 +19689,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19908,7 +19908,7 @@ }, "X": { "type": "float", - "value": 11.96443271636963 + "value": 11.964432716369629 }, "Y": { "type": "float", @@ -19916,7 +19916,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19935,7 +19935,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -20135,7 +20135,7 @@ }, "X": { "type": "float", - "value": 11.93344211578369 + "value": 11.933442115783691 }, "Y": { "type": "float", @@ -20143,7 +20143,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20162,7 +20162,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "BodyBag": { "type": "byte", @@ -20370,7 +20370,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20389,7 +20389,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794820785523 + "value": -1.5707948207855225 }, "BodyBag": { "type": "byte", @@ -20597,7 +20597,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -20683,7 +20683,7 @@ }, "XPosition": { "type": "float", - "value": 69.81711578369141 + "value": 69.8171157836914 }, "YOrientation": { "type": "float", @@ -20691,11 +20691,11 @@ }, "YPosition": { "type": "float", - "value": 43.74905395507813 + "value": 43.749053955078125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/novacity.git.json b/_module/git/novacity.git.json index 8218f7c..f2a252e 100644 --- a/_module/git/novacity.git.json +++ b/_module/git/novacity.git.json @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -1509,7 +1509,7 @@ }, "XPosition": { "type": "float", - "value": 62.50411987304688 + "value": 62.504119873046875 }, "YOrientation": { "type": "float", @@ -1521,7 +1521,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -2260,7 +2260,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -2987,19 +2987,19 @@ }, "XPosition": { "type": "float", - "value": 37.77272796630859 + "value": 37.772727966308594 }, "YOrientation": { "type": "float", - "value": 0.266712874174118 + "value": 0.26671287417411804 }, "YPosition": { "type": "float", - "value": 54.72006225585938 + "value": 54.720062255859375 }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -4240,7 +4240,7 @@ }, "YOrientation": { "type": "float", - "value": -0.9996981024742127 + "value": -0.9996981024742126 }, "YPosition": { "type": "float", @@ -4248,7 +4248,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5493,11 +5493,11 @@ }, "YPosition": { "type": "float", - "value": 18.0638313293457 + "value": 18.063831329345703 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6261,7 +6261,7 @@ }, "XPosition": { "type": "float", - "value": 62.24933242797852 + "value": 62.249332427978516 }, "YOrientation": { "type": "float", @@ -6273,7 +6273,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -7621,7 +7621,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8965,11 +8965,11 @@ }, "YPosition": { "type": "float", - "value": 19.49424362182617 + "value": 19.494243621826172 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9704,11 +9704,11 @@ }, "YPosition": { "type": "float", - "value": 45.87905883789063 + "value": 45.879058837890625 }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -10447,7 +10447,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -11344,7 +11344,7 @@ }, "Bearing": { "type": "float", - "value": 3.141560316085815 + "value": 3.1415603160858154 }, "CloseLockDC": { "type": "byte", @@ -11538,7 +11538,7 @@ }, "Y": { "type": "float", - "value": 86.09999847412109 + "value": 86.0999984741211 }, "Z": { "type": "float", @@ -11755,7 +11755,7 @@ }, "Y": { "type": "float", - "value": 13.89999961853027 + "value": 13.899999618530273 }, "Z": { "type": "float", @@ -11778,7 +11778,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -11995,7 +11995,7 @@ }, "Bearing": { "type": "float", - "value": 1.748436773141293e-007 + "value": 0.0000001748436773141293 }, "CloseLockDC": { "type": "byte", @@ -12214,7 +12214,7 @@ }, "Bearing": { "type": "float", - "value": 1.748436773141293e-007 + "value": 0.0000001748436773141293 }, "CloseLockDC": { "type": "byte", @@ -12433,7 +12433,7 @@ }, "Bearing": { "type": "float", - "value": 1.748436773141293e-007 + "value": 0.0000001748436773141293 }, "CloseLockDC": { "type": "byte", @@ -12652,7 +12652,7 @@ }, "Bearing": { "type": "float", - "value": 1.748436773141293e-007 + "value": 0.0000001748436773141293 }, "CloseLockDC": { "type": "byte", @@ -12848,7 +12848,7 @@ }, "Y": { "type": "float", - "value": 11.39999961853027 + "value": 11.399999618530273 }, "Z": { "type": "float", @@ -12871,7 +12871,7 @@ }, "Bearing": { "type": "float", - "value": -3.141560316085815 + "value": -3.1415603160858154 }, "CloseLockDC": { "type": "byte", @@ -13067,7 +13067,7 @@ }, "Y": { "type": "float", - "value": 88.59999847412109 + "value": 88.5999984741211 }, "Z": { "type": "float", @@ -13090,7 +13090,7 @@ }, "Bearing": { "type": "float", - "value": -3.141560316085815 + "value": -3.1415603160858154 }, "CloseLockDC": { "type": "byte", @@ -13286,7 +13286,7 @@ }, "Y": { "type": "float", - "value": 88.59999847412109 + "value": 88.5999984741211 }, "Z": { "type": "float", @@ -13309,7 +13309,7 @@ }, "Bearing": { "type": "float", - "value": -3.141560316085815 + "value": -3.1415603160858154 }, "CloseLockDC": { "type": "byte", @@ -13528,7 +13528,7 @@ }, "Bearing": { "type": "float", - "value": -3.141560316085815 + "value": -3.1415603160858154 }, "CloseLockDC": { "type": "byte", @@ -13747,7 +13747,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -13966,7 +13966,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -14159,7 +14159,7 @@ }, "X": { "type": "float", - "value": 15.57999992370606 + "value": 15.579999923706055 }, "Y": { "type": "float", @@ -14167,7 +14167,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -14186,7 +14186,7 @@ }, "Bearing": { "type": "float", - "value": -3.141563177108765 + "value": -3.1415631771087646 }, "CloseLockDC": { "type": "byte", @@ -14607,7 +14607,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -14626,7 +14626,7 @@ }, "Bearing": { "type": "float", - "value": -3.141563177108765 + "value": -3.1415631771087646 }, "CloseLockDC": { "type": "byte", @@ -14827,7 +14827,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -14846,7 +14846,7 @@ }, "Bearing": { "type": "float", - "value": -3.141563177108765 + "value": -3.1415631771087646 }, "CloseLockDC": { "type": "byte", @@ -15047,7 +15047,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -15066,7 +15066,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -15283,7 +15283,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -15502,7 +15502,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -15721,7 +15721,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -15940,7 +15940,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -16160,7 +16160,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -16352,7 +16352,7 @@ }, "X": { "type": "float", - "value": 26.29999923706055 + "value": 26.299999237060547 }, "Y": { "type": "float", @@ -16392,7 +16392,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -16600,7 +16600,7 @@ }, "Z": { "type": "float", - "value": 0.003317356109619141 + "value": 0.0033173561096191406 } }, { @@ -16619,7 +16619,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -16819,7 +16819,7 @@ }, "X": { "type": "float", - "value": 38.23730087280273 + "value": 38.237300872802734 }, "Y": { "type": "float", @@ -16846,7 +16846,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -17050,7 +17050,7 @@ }, "Y": { "type": "float", - "value": 64.82558441162109 + "value": 64.8255844116211 }, "Z": { "type": "float", @@ -17112,7 +17112,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17253,7 +17253,7 @@ }, "YPosition": { "type": "float", - "value": 49.47682952880859 + "value": 49.476829528808594 }, "ZPosition": { "type": "float", @@ -17310,7 +17310,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17399,7 +17399,7 @@ }, "ZPosition": { "type": "float", - "value": 1.503211617469788 + "value": 1.5032116174697876 } }, { @@ -17452,7 +17452,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -17583,7 +17583,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499999165534973 + "value": 1.4999991655349731 } } ] @@ -25825,7 +25825,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -29236,11 +29236,11 @@ }, "YPosition": { "type": "float", - "value": 45.15322875976563 + "value": 45.153228759765625 }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -30652,7 +30652,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -40215,7 +40215,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -41580,7 +41580,7 @@ }, "ZPosition": { "type": "float", - "value": 2.615814196360589e-007 + "value": 0.00000026158141963605885 } }, { @@ -43887,7 +43887,7 @@ }, "XPosition": { "type": "float", - "value": 41.67227935791016 + "value": 41.672279357910156 }, "YOrientation": { "type": "float", @@ -43899,7 +43899,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -44299,11 +44299,11 @@ }, "XOrientation": { "type": "float", - "value": -0.5956986546516419 + "value": -0.5956986546516418 }, "XPosition": { "type": "float", - "value": 62.44946670532227 + "value": 62.449466705322266 }, "YOrientation": { "type": "float", @@ -44315,7 +44315,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -47980,7 +47980,7 @@ }, "XPosition": { "type": "float", - "value": 47.62552642822266 + "value": 47.625526428222656 }, "YOrientation": { "type": "float", @@ -47992,7 +47992,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -51561,7 +51561,7 @@ }, "XPosition": { "type": "float", - "value": 49.38439559936523 + "value": 49.384395599365234 }, "YOrientation": { "type": "float", @@ -51573,7 +51573,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -55032,7 +55032,7 @@ }, "XPosition": { "type": "float", - "value": 51.93475723266602 + "value": 51.934757232666016 }, "YOrientation": { "type": "float", @@ -55044,7 +55044,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -60586,7 +60586,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -70855,7 +70855,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -75158,7 +75158,7 @@ }, "XPosition": { "type": "float", - "value": 58.44256973266602 + "value": 58.442569732666016 }, "YOrientation": { "type": "float", @@ -75166,11 +75166,11 @@ }, "YPosition": { "type": "float", - "value": 72.38687133789063 + "value": 72.38687133789062 }, "ZPosition": { "type": "float", - "value": 9.768371000973275e-007 + "value": 0.0000009768371000973275 } }, { @@ -76985,7 +76985,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -78796,11 +78796,11 @@ }, "YPosition": { "type": "float", - "value": 70.54006195068359 + "value": 70.5400619506836 }, "ZPosition": { "type": "float", - "value": 2.407348574706703e-006 + "value": 0.0000024073485747067025 } }, { @@ -80611,11 +80611,11 @@ }, "YPosition": { "type": "float", - "value": 70.54006958007813 + "value": 70.54006958007812 }, "ZPosition": { "type": "float", - "value": 9.768371000973275e-007 + "value": 0.0000009768371000973275 } } ] @@ -80682,7 +80682,7 @@ }, "PointY": { "type": "float", - "value": 2.185859680175781 + "value": 2.1858596801757812 }, "PointZ": { "type": "float", @@ -80693,11 +80693,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 3.814697265625e-006 + "value": 0.000003814697265625 }, "PointY": { "type": "float", - "value": 2.185859680175781 + "value": 2.1858596801757812 }, "PointZ": { "type": "float", @@ -80806,7 +80806,7 @@ }, "XPosition": { "type": "float", - "value": 46.98593139648438 + "value": 46.985931396484375 }, "YOrientation": { "type": "float", @@ -80854,7 +80854,7 @@ }, "PointY": { "type": "float", - "value": 2.109150171279907 + "value": 2.1091501712799072 }, "PointZ": { "type": "float", @@ -80884,7 +80884,7 @@ }, "PointY": { "type": "float", - "value": 0.04017400741577148 + "value": 0.040174007415771484 }, "PointZ": { "type": "float", @@ -80899,7 +80899,7 @@ }, "PointY": { "type": "float", - "value": 2.109150409698486 + "value": 2.1091504096984863 }, "PointZ": { "type": "float", @@ -81016,7 +81016,7 @@ }, "YPosition": { "type": "float", - "value": 0.0292811393737793 + "value": 0.029281139373779297 }, "ZOrientation": { "type": "float", @@ -81060,14 +81060,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.337196350097656 + "value": 3.3371963500976562 }, "PointY": { "type": "float", @@ -81075,7 +81075,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -81097,7 +81097,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 7.129470825195313 + "value": 7.1294708251953125 }, "PointY": { "type": "float", @@ -81112,15 +81112,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.199516296386719 + "value": 2.1995162963867188 }, "PointY": { "type": "float", - "value": 0.4550724029541016 + "value": 0.45507240295410156 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -81226,7 +81226,7 @@ }, "XPosition": { "type": "float", - "value": 30.89973068237305 + "value": 30.899730682373047 }, "YOrientation": { "type": "float", @@ -81234,7 +81234,7 @@ }, "YPosition": { "type": "float", - "value": 25.00144958496094 + "value": 25.001449584960938 }, "ZOrientation": { "type": "float", @@ -81357,11 +81357,11 @@ }, "YPosition": { "type": "float", - "value": 33.15352630615234 + "value": 33.153526306152344 }, "ZPosition": { "type": "float", - "value": 0.0100000873208046 + "value": 0.010000087320804596 } }, { @@ -81425,7 +81425,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -81482,11 +81482,11 @@ }, "YPosition": { "type": "float", - "value": 49.82064819335938 + "value": 49.820648193359375 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -81547,7 +81547,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -81596,7 +81596,7 @@ }, "XPosition": { "type": "float", - "value": 61.58095550537109 + "value": 61.580955505371094 }, "YOrientation": { "type": "float", @@ -81608,7 +81608,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -81667,7 +81667,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -81714,7 +81714,7 @@ }, "XPosition": { "type": "float", - "value": 54.87924957275391 + "value": 54.879249572753906 }, "YOrientation": { "type": "float", @@ -81726,7 +81726,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -81785,7 +81785,7 @@ }, "ZPosition": { "type": "float", - "value": 4.999999987376214e-007 + "value": 0.0000004999999987376214 } }, { @@ -81840,7 +81840,7 @@ }, "YPosition": { "type": "float", - "value": 17.98941230773926 + "value": 17.989412307739258 }, "ZPosition": { "type": "float", @@ -81899,11 +81899,11 @@ }, "YPosition": { "type": "float", - "value": 50.05202484130859 + "value": 50.052024841308594 }, "ZPosition": { "type": "float", - "value": 3.658895479929925e-007 + "value": 0.00000036588954799299245 } }, { @@ -81962,7 +81962,7 @@ }, "ZPosition": { "type": "float", - "value": -2.682209014892578e-007 + "value": -0.0000002682209014892578 } }, { @@ -82021,7 +82021,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82068,11 +82068,11 @@ }, "XPosition": { "type": "float", - "value": 69.93789672851563 + "value": 69.93789672851562 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -82080,7 +82080,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82131,7 +82131,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -82139,7 +82139,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -82182,11 +82182,11 @@ }, "XOrientation": { "type": "float", - "value": 2.375443546043243e-005 + "value": 0.000023754435460432433 }, "XPosition": { "type": "float", - "value": 29.93019866943359 + "value": 29.930198669433594 }, "YOrientation": { "type": "float", @@ -82198,7 +82198,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82245,19 +82245,19 @@ }, "XPosition": { "type": "float", - "value": 30.5702018737793 + "value": 30.570201873779297 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 18.75338172912598 + "value": 18.753381729125977 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82306,7 +82306,7 @@ }, "XPosition": { "type": "float", - "value": 37.61761856079102 + "value": 37.617618560791016 }, "YOrientation": { "type": "float", @@ -82314,11 +82314,11 @@ }, "YPosition": { "type": "float", - "value": 40.80554580688477 + "value": 40.805545806884766 }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -82375,11 +82375,11 @@ }, "YPosition": { "type": "float", - "value": 1.083856344223023 + "value": 1.0838563442230225 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82444,7 +82444,7 @@ }, "XOrientation": { "type": "float", - "value": -0.1467449516057968 + "value": -0.14674495160579681 }, "XPosition": { "type": "float", @@ -82460,7 +82460,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -82537,11 +82537,11 @@ }, "YPosition": { "type": "float", - "value": 76.43589019775391 + "value": 76.4358901977539 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82622,7 +82622,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -82665,7 +82665,7 @@ }, "XOrientation": { "type": "float", - "value": 1.350243655906525e-005 + "value": 0.000013502436559065245 }, "XPosition": { "type": "float", @@ -82681,7 +82681,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -82742,7 +82742,7 @@ }, "ZPosition": { "type": "float", - "value": 0.003211617469787598 + "value": 0.0032116174697875977 } }, { @@ -82815,7 +82815,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -82823,7 +82823,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -82915,11 +82915,11 @@ }, "YPosition": { "type": "float", - "value": 28.78795433044434 + "value": 28.787954330444336 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -83015,7 +83015,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -83096,7 +83096,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -83165,19 +83165,19 @@ }, "XPosition": { "type": "float", - "value": 30.29606628417969 + "value": 30.296066284179688 }, "YOrientation": { "type": "float", - "value": 0.4496119320392609 + "value": 0.44961193203926086 }, "YPosition": { "type": "float", - "value": 20.17410850524902 + "value": 20.174108505249023 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/novacityenchantm.git.json b/_module/git/novacityenchantm.git.json index 777949c..1dedcfe 100644 --- a/_module/git/novacityenchantm.git.json +++ b/_module/git/novacityenchantm.git.json @@ -3058,7 +3058,7 @@ }, "XPosition": { "type": "float", - "value": 10.05998229980469 + "value": 10.059982299804688 }, "YOrientation": { "type": "float", @@ -3066,11 +3066,11 @@ }, "YPosition": { "type": "float", - "value": 14.84102058410645 + "value": 14.841020584106445 }, "ZPosition": { "type": "float", - "value": 0.120003953576088 + "value": 0.12000395357608795 } }, { @@ -6436,11 +6436,11 @@ }, "YPosition": { "type": "float", - "value": 9.614695549011231 + "value": 9.61469554901123 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -6464,7 +6464,7 @@ }, "Bearing": { "type": "float", - "value": -3.141586542129517 + "value": -3.1415865421295166 }, "CloseLockDC": { "type": "byte", @@ -6774,7 +6774,7 @@ }, "XPosition": { "type": "float", - "value": 13.06524467468262 + "value": 13.065244674682617 }, "YOrientation": { "type": "float", @@ -6786,7 +6786,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/novacitymagetowe.git.json b/_module/git/novacitymagetowe.git.json index 5634870..2c4c3ba 100644 --- a/_module/git/novacitymagetowe.git.json +++ b/_module/git/novacitymagetowe.git.json @@ -2870,7 +2870,7 @@ }, "XPosition": { "type": "float", - "value": 23.19141578674316 + "value": 23.191415786743164 }, "YOrientation": { "type": "float", @@ -2882,7 +2882,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6356,7 +6356,7 @@ }, "XPosition": { "type": "float", - "value": 31.23456192016602 + "value": 31.234561920166016 }, "YOrientation": { "type": "float", @@ -6368,7 +6368,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8046,7 +8046,7 @@ }, "XOrientation": { "type": "float", - "value": 0.3826909959316254 + "value": 0.38269099593162537 }, "XPosition": { "type": "float", @@ -8062,7 +8062,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -8086,7 +8086,7 @@ }, "Bearing": { "type": "float", - "value": -3.141581535339356 + "value": -3.1415815353393555 }, "CloseLockDC": { "type": "byte", @@ -8745,7 +8745,7 @@ }, "X": { "type": "float", - "value": 24.96600532531738 + "value": 24.966005325317383 }, "Y": { "type": "float", @@ -8772,7 +8772,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -8976,11 +8976,11 @@ }, "Y": { "type": "float", - "value": 44.31490325927734 + "value": 44.314903259277344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8999,7 +8999,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9207,7 +9207,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9226,7 +9226,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9434,7 +9434,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9653,15 +9653,15 @@ }, "X": { "type": "float", - "value": 24.97195434570313 + "value": 24.971954345703125 }, "Y": { "type": "float", - "value": 34.88613128662109 + "value": 34.886131286621094 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9680,7 +9680,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -9880,7 +9880,7 @@ }, "X": { "type": "float", - "value": 14.44556331634522 + "value": 14.445563316345215 }, "Y": { "type": "float", @@ -9888,7 +9888,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10111,11 +10111,11 @@ }, "Y": { "type": "float", - "value": 34.60201263427734 + "value": 34.602012634277344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10334,15 +10334,15 @@ }, "X": { "type": "float", - "value": 13.08280658721924 + "value": 13.082806587219238 }, "Y": { "type": "float", - "value": 22.78611755371094 + "value": 22.786117553710938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10585,11 +10585,11 @@ }, "Y": { "type": "float", - "value": 22.4893913269043 + "value": 22.489391326904297 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10816,7 +10816,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } } ] @@ -30230,11 +30230,11 @@ }, "YPosition": { "type": "float", - "value": 40.80764770507813 + "value": 40.807647705078125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -30350,11 +30350,11 @@ }, "YPosition": { "type": "float", - "value": 27.56020355224609 + "value": 27.560203552246094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/novacitysewers.git.json b/_module/git/novacitysewers.git.json index 7024839..40c6944 100644 --- a/_module/git/novacitysewers.git.json +++ b/_module/git/novacitysewers.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -553,7 +553,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -666,11 +666,11 @@ }, "YPosition": { "type": "float", - "value": 42.00109481811523 + "value": 42.001094818115234 }, "ZPosition": { "type": "float", - "value": 1.499999046325684 + "value": 1.4999990463256836 } }, { @@ -904,7 +904,7 @@ }, "XPosition": { "type": "float", - "value": 54.91785049438477 + "value": 54.917850494384766 }, "YPosition": { "type": "float", @@ -1127,7 +1127,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-008 + "value": -5.960464477539063e-8 } }, { @@ -1226,7 +1226,7 @@ }, "XPosition": { "type": "float", - "value": 24.27676963806152 + "value": 24.276769638061523 }, "YOrientation": { "type": "float", @@ -1238,7 +1238,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1337,7 +1337,7 @@ }, "XPosition": { "type": "float", - "value": 23.00997924804688 + "value": 23.009979248046875 }, "YOrientation": { "type": "float", @@ -1345,11 +1345,11 @@ }, "YPosition": { "type": "float", - "value": 12.95010662078857 + "value": 12.950106620788574 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1433,11 +1433,11 @@ }, "XPosition": { "type": "float", - "value": 13.37359428405762 + "value": 13.373594284057617 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -1445,7 +1445,7 @@ }, "ZPosition": { "type": "float", - "value": 1.999998092651367 + "value": 1.9999980926513672 } }, { @@ -1544,7 +1544,7 @@ }, "XPosition": { "type": "float", - "value": 16.0571174621582 + "value": 16.057117462158203 }, "YOrientation": { "type": "float", @@ -1556,7 +1556,7 @@ }, "ZPosition": { "type": "float", - "value": 1.000005006790161 + "value": 1.0000050067901611 } }, { @@ -1659,15 +1659,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 85.20193481445313 + "value": 85.20193481445312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1766,19 +1766,19 @@ }, "XPosition": { "type": "float", - "value": 70.22085571289063 + "value": 70.22085571289062 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 57.81137084960938 + "value": 57.811370849609375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1873,7 +1873,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -1889,7 +1889,7 @@ }, "ZPosition": { "type": "float", - "value": 0.00374823808670044 + "value": 0.0037482380867004395 } }, { @@ -1984,7 +1984,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -2000,7 +2000,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2095,7 +2095,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -2111,7 +2111,7 @@ }, "ZPosition": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 } }, { @@ -2206,7 +2206,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", @@ -2218,11 +2218,11 @@ }, "YPosition": { "type": "float", - "value": 53.47408294677734 + "value": 53.474082946777344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2321,7 +2321,7 @@ }, "XPosition": { "type": "float", - "value": 38.99420547485352 + "value": 38.994205474853516 }, "YOrientation": { "type": "float", @@ -2329,11 +2329,11 @@ }, "YPosition": { "type": "float", - "value": 28.69006729125977 + "value": 28.690067291259766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2547,7 +2547,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2555,7 +2555,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2654,11 +2654,11 @@ }, "XPosition": { "type": "float", - "value": 24.36665534973145 + "value": 24.366655349731445 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2666,7 +2666,7 @@ }, "ZPosition": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 } }, { @@ -2765,11 +2765,11 @@ }, "XPosition": { "type": "float", - "value": 54.04048919677734 + "value": 54.040489196777344 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", diff --git a/_module/git/oldfortbarracks.git.json b/_module/git/oldfortbarracks.git.json index e6d84f9..4e788e8 100644 --- a/_module/git/oldfortbarracks.git.json +++ b/_module/git/oldfortbarracks.git.json @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795655250549 + "value": -1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159083366394 + "value": -3.1415908336639404 }, "CloseLockDC": { "type": "byte", @@ -700,7 +700,7 @@ }, "Y": { "type": "float", - "value": 27.79000091552734 + "value": 27.790000915527344 }, "Z": { "type": "float", @@ -830,11 +830,11 @@ }, "YPosition": { "type": "float", - "value": 29.69973182678223 + "value": 29.699731826782227 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -899,11 +899,11 @@ }, "XOrientation": { "type": "float", - "value": -0.04906764999032021 + "value": -0.049067649990320206 }, "XPosition": { "type": "float", - "value": 34.31302642822266 + "value": 34.313026428222656 }, "YOrientation": { "type": "float", @@ -915,7 +915,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/oldruinedtower.git.json b/_module/git/oldruinedtower.git.json index 0de33b1..926b404 100644 --- a/_module/git/oldruinedtower.git.json +++ b/_module/git/oldruinedtower.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795893669128 + "value": 1.5707958936691284 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795655250549 + "value": -1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -723,7 +723,7 @@ }, "Bearing": { "type": "float", - "value": -3.14159107208252 + "value": -3.1415910720825195 }, "CloseLockDC": { "type": "byte", @@ -919,7 +919,7 @@ }, "Y": { "type": "float", - "value": 1.900000333786011 + "value": 1.9000003337860107 }, "Z": { "type": "float", @@ -1159,7 +1159,7 @@ }, "Y": { "type": "float", - "value": 47.48175430297852 + "value": 47.481754302978516 }, "Z": { "type": "float", @@ -1609,7 +1609,7 @@ }, "X": { "type": "float", - "value": 11.43651103973389 + "value": 11.436511039733887 }, "Y": { "type": "float", @@ -1617,7 +1617,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1836,7 +1836,7 @@ }, "X": { "type": "float", - "value": 12.9464864730835 + "value": 12.946486473083496 }, "Y": { "type": "float", @@ -1844,7 +1844,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2067,11 +2067,11 @@ }, "Y": { "type": "float", - "value": 45.33599472045898 + "value": 45.335994720458984 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2090,7 +2090,7 @@ }, "Bearing": { "type": "float", - "value": -1.914407253265381 + "value": -1.9144072532653809 }, "BodyBag": { "type": "byte", @@ -2298,7 +2298,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2525,7 +2525,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2748,11 +2748,11 @@ }, "Y": { "type": "float", - "value": 26.35400199890137 + "value": 26.354001998901367 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2771,7 +2771,7 @@ }, "Bearing": { "type": "float", - "value": -1.153552889823914 + "value": -1.1535528898239136 }, "BodyBag": { "type": "byte", @@ -2979,7 +2979,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3429,11 +3429,11 @@ }, "Y": { "type": "float", - "value": 21.12427139282227 + "value": 21.124271392822266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3656,11 +3656,11 @@ }, "Y": { "type": "float", - "value": 24.02837753295898 + "value": 24.028377532958984 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -3879,7 +3879,7 @@ }, "X": { "type": "float", - "value": 26.58615875244141 + "value": 26.586158752441406 }, "Y": { "type": "float", @@ -3887,7 +3887,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4106,15 +4106,15 @@ }, "X": { "type": "float", - "value": 22.55039978027344 + "value": 22.550399780273438 }, "Y": { "type": "float", - "value": 2.952377319335938 + "value": 2.9523773193359375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4341,7 +4341,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4560,7 +4560,7 @@ }, "X": { "type": "float", - "value": 8.423892021179199 + "value": 8.4238920211792 }, "Y": { "type": "float", @@ -4626,7 +4626,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -4931,7 +4931,7 @@ }, "XPosition": { "type": "float", - "value": 20.24538612365723 + "value": 20.245386123657227 }, "YPosition": { "type": "float", @@ -4939,7 +4939,7 @@ }, "ZPosition": { "type": "float", - "value": 0.9999998807907105 + "value": 0.9999998807907104 } } ] @@ -5017,11 +5017,11 @@ }, "XOrientation": { "type": "float", - "value": 0.2191026955842972 + "value": 0.21910269558429718 }, "XPosition": { "type": "float", - "value": 15.38844013214111 + "value": 15.388440132141113 }, "YOrientation": { "type": "float", @@ -5029,11 +5029,11 @@ }, "YPosition": { "type": "float", - "value": 15.46006488800049 + "value": 15.460064888000488 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5078,7 +5078,7 @@ }, "XOrientation": { "type": "float", - "value": 0.2191026955842972 + "value": 0.21910269558429718 }, "XPosition": { "type": "float", @@ -5094,7 +5094,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5139,7 +5139,7 @@ }, "XOrientation": { "type": "float", - "value": 0.2191026955842972 + "value": 0.21910269558429718 }, "XPosition": { "type": "float", @@ -5155,7 +5155,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5208,7 +5208,7 @@ }, "YOrientation": { "type": "float", - "value": -0.8032068014144898 + "value": -0.8032068014144897 }, "YPosition": { "type": "float", @@ -5216,7 +5216,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/oldruins.git.json b/_module/git/oldruins.git.json index 08a8a2d..510e78b 100644 --- a/_module/git/oldruins.git.json +++ b/_module/git/oldruins.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.57079553604126 + "value": -1.5707955360412598 }, "CloseLockDC": { "type": "byte", @@ -327,14 +327,14 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.143262386322022 + "value": 3.1432623863220215 }, "PointY": { "type": "float", @@ -342,14 +342,14 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.224319696426392 + "value": 3.2243196964263916 }, "PointY": { "type": "float", @@ -567,19 +567,19 @@ }, "XPosition": { "type": "float", - "value": 1.738628387451172 + "value": 1.7386283874511719 }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 29.51625442504883 + "value": 29.516254425048828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -693,19 +693,19 @@ }, "XPosition": { "type": "float", - "value": 7.945445060729981 + "value": 7.9454450607299805 }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", - "value": 36.69037246704102 + "value": 36.690372467041016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -758,7 +758,7 @@ }, "YOrientation": { "type": "float", - "value": 0.1224114522337914 + "value": 0.12241145223379135 }, "YPosition": { "type": "float", @@ -766,7 +766,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -815,7 +815,7 @@ }, "XPosition": { "type": "float", - "value": 31.78682899475098 + "value": 31.786828994750977 }, "YOrientation": { "type": "float", @@ -823,11 +823,11 @@ }, "YPosition": { "type": "float", - "value": 46.84698104858398 + "value": 46.846981048583984 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -876,7 +876,7 @@ }, "XPosition": { "type": "float", - "value": 20.96872520446777 + "value": 20.968725204467773 }, "YOrientation": { "type": "float", @@ -884,11 +884,11 @@ }, "YPosition": { "type": "float", - "value": 11.41416740417481 + "value": 11.414167404174805 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/orcencampment.git.json b/_module/git/orcencampment.git.json index 497369f..b4aa687 100644 --- a/_module/git/orcencampment.git.json +++ b/_module/git/orcencampment.git.json @@ -279,15 +279,15 @@ }, "X": { "type": "float", - "value": 56.85013580322266 + "value": 56.850135803222656 }, "Y": { "type": "float", - "value": 115.9893493652344 + "value": 115.98934936523438 }, "Z": { "type": "float", - "value": 0.6100002527236939 + "value": 0.6100002527236938 } } ] @@ -450,11 +450,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointY": { "type": "float", - "value": 2.948198795318604 + "value": 2.9481987953186035 }, "PointZ": { "type": "float", @@ -480,15 +480,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1254539489746094 + "value": 0.12545394897460938 }, "PointY": { "type": "float", - "value": 0.06272983551025391 + "value": 0.0627298355102539 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -514,11 +514,11 @@ }, "PointY": { "type": "float", - "value": 2.948198318481445 + "value": 2.9481983184814453 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -631,7 +631,7 @@ }, "YPosition": { "type": "float", - "value": 0.199429988861084 + "value": 0.19942998886108398 }, "ZOrientation": { "type": "float", @@ -709,7 +709,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -721,11 +721,11 @@ }, "YPosition": { "type": "float", - "value": 114.8011932373047 + "value": 114.80119323730469 }, "ZPosition": { "type": "float", - "value": 0.6100000143051148 + "value": 0.6100000143051147 } }, { @@ -770,11 +770,11 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", - "value": 49.09570693969727 + "value": 49.095706939697266 }, "YOrientation": { "type": "float", @@ -786,7 +786,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -831,7 +831,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -843,11 +843,11 @@ }, "YPosition": { "type": "float", - "value": 38.60437393188477 + "value": 38.604373931884766 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -896,7 +896,7 @@ }, "XPosition": { "type": "float", - "value": 16.3351001739502 + "value": 16.335100173950195 }, "YOrientation": { "type": "float", @@ -904,11 +904,11 @@ }, "YPosition": { "type": "float", - "value": 34.61230087280273 + "value": 34.612300872802734 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -953,7 +953,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -969,7 +969,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1014,11 +1014,11 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", - "value": 16.65205574035645 + "value": 16.652055740356445 }, "YOrientation": { "type": "float", @@ -1030,7 +1030,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1075,11 +1075,11 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", - "value": 61.65927124023438 + "value": 61.659271240234375 }, "YOrientation": { "type": "float", @@ -1091,7 +1091,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1136,11 +1136,11 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", - "value": 26.16061973571777 + "value": 26.160619735717773 }, "YOrientation": { "type": "float", @@ -1148,11 +1148,11 @@ }, "YPosition": { "type": "float", - "value": 102.9141693115234 + "value": 102.91416931152344 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1197,7 +1197,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -1209,11 +1209,11 @@ }, "YPosition": { "type": "float", - "value": 105.7667388916016 + "value": 105.76673889160156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1258,7 +1258,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -1274,7 +1274,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1319,7 +1319,7 @@ }, "XOrientation": { "type": "float", - "value": 2.05834453481657e-006 + "value": 0.0000020583445348165696 }, "XPosition": { "type": "float", @@ -1335,7 +1335,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1384,7 +1384,7 @@ }, "XPosition": { "type": "float", - "value": 59.70801162719727 + "value": 59.708011627197266 }, "YOrientation": { "type": "float", @@ -1396,7 +1396,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/prc_maze_01.git.json b/_module/git/prc_maze_01.git.json index 999380a..9b921fd 100644 --- a/_module/git/prc_maze_01.git.json +++ b/_module/git/prc_maze_01.git.json @@ -114,7 +114,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -133,11 +133,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.2707840502262116 + "value": 0.27078405022621155 } }, { @@ -278,7 +278,7 @@ }, "XPosition": { "type": "float", - "value": 22.81622695922852 + "value": 22.816226959228516 }, "YOrientation": { "type": "float", @@ -286,7 +286,7 @@ }, "YPosition": { "type": "float", - "value": 51.43787002563477 + "value": 51.437870025634766 }, "ZOrientation": { "type": "float", @@ -294,7 +294,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -330,14 +330,14 @@ }, "PointZ": { "type": "float", - "value": 0.2349531948566437 + "value": 0.23495319485664368 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -356,7 +356,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -501,7 +501,7 @@ }, "XPosition": { "type": "float", - "value": 153.1847076416016 + "value": 153.18470764160156 }, "YOrientation": { "type": "float", @@ -517,7 +517,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -560,7 +560,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -579,11 +579,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.3958608210086823 + "value": 0.39586082100868225 } }, { @@ -740,7 +740,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -783,7 +783,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -802,7 +802,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -947,7 +947,7 @@ }, "XPosition": { "type": "float", - "value": 7.382128238677979 + "value": 7.3821282386779785 }, "YOrientation": { "type": "float", @@ -963,7 +963,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -1006,7 +1006,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -1025,7 +1025,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -1170,7 +1170,7 @@ }, "XPosition": { "type": "float", - "value": 3.01154375076294 + "value": 3.0115437507629395 }, "YOrientation": { "type": "float", @@ -1186,7 +1186,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -1214,11 +1214,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -1229,11 +1229,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -1244,11 +1244,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -1259,11 +1259,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -1274,7 +1274,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -1293,7 +1293,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -1304,11 +1304,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -1323,7 +1323,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -1334,11 +1334,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -1349,11 +1349,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -1368,7 +1368,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -1383,7 +1383,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -1394,7 +1394,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -1409,11 +1409,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -1424,11 +1424,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -1439,11 +1439,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -1454,7 +1454,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -1469,7 +1469,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -1484,11 +1484,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -1499,11 +1499,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -1641,7 +1641,7 @@ }, "YPosition": { "type": "float", - "value": 45.98467636108398 + "value": 45.984676361083984 }, "ZOrientation": { "type": "float", @@ -1692,7 +1692,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -1711,7 +1711,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -1872,7 +1872,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999995708465576 + "value": 0.19999957084655762 } }, { @@ -1900,11 +1900,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -1915,11 +1915,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -1930,11 +1930,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -1945,11 +1945,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -1960,7 +1960,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -1979,7 +1979,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -1990,11 +1990,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -2009,7 +2009,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -2020,11 +2020,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -2035,11 +2035,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -2054,7 +2054,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -2069,7 +2069,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -2080,7 +2080,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -2095,11 +2095,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -2110,11 +2110,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -2125,11 +2125,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -2140,7 +2140,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -2155,7 +2155,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -2170,11 +2170,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -2185,11 +2185,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -2319,7 +2319,7 @@ }, "XPosition": { "type": "float", - "value": 35.50896835327148 + "value": 35.508968353271484 }, "YOrientation": { "type": "float", @@ -2327,7 +2327,7 @@ }, "YPosition": { "type": "float", - "value": 46.12579727172852 + "value": 46.125797271728516 }, "ZOrientation": { "type": "float", @@ -2335,7 +2335,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -2363,11 +2363,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -2378,11 +2378,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -2393,11 +2393,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -2408,11 +2408,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -2423,7 +2423,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -2442,7 +2442,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -2453,11 +2453,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -2472,7 +2472,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -2483,11 +2483,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -2498,11 +2498,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -2517,7 +2517,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -2532,7 +2532,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -2543,7 +2543,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -2558,11 +2558,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -2573,11 +2573,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -2588,11 +2588,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -2603,7 +2603,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -2618,7 +2618,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -2633,11 +2633,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -2648,11 +2648,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -2790,7 +2790,7 @@ }, "YPosition": { "type": "float", - "value": 35.94875335693359 + "value": 35.948753356933594 }, "ZOrientation": { "type": "float", @@ -2798,7 +2798,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -2826,11 +2826,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -2841,11 +2841,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -2856,11 +2856,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -2871,11 +2871,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -2886,7 +2886,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -2905,7 +2905,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -2916,11 +2916,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -2935,7 +2935,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -2946,11 +2946,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -2961,11 +2961,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -2980,7 +2980,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -2995,7 +2995,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -3006,7 +3006,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -3021,11 +3021,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -3036,11 +3036,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -3051,11 +3051,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -3066,7 +3066,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -3081,7 +3081,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -3096,11 +3096,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -3111,11 +3111,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -3245,7 +3245,7 @@ }, "XPosition": { "type": "float", - "value": 15.46780109405518 + "value": 15.467801094055176 }, "YOrientation": { "type": "float", @@ -3261,7 +3261,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -3289,11 +3289,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -3304,11 +3304,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -3319,11 +3319,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -3334,11 +3334,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -3349,7 +3349,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -3368,7 +3368,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -3379,11 +3379,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -3398,7 +3398,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -3409,11 +3409,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -3424,11 +3424,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -3443,7 +3443,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -3458,7 +3458,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -3469,7 +3469,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -3484,11 +3484,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -3499,11 +3499,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -3514,11 +3514,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -3529,7 +3529,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -3544,7 +3544,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -3559,11 +3559,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -3574,11 +3574,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -3724,7 +3724,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -3752,11 +3752,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -3767,11 +3767,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -3782,11 +3782,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -3797,11 +3797,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -3812,7 +3812,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -3831,7 +3831,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -3842,11 +3842,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -3861,7 +3861,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -3872,11 +3872,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -3887,11 +3887,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -3906,7 +3906,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -3921,7 +3921,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -3932,7 +3932,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -3947,11 +3947,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -3962,11 +3962,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -3977,11 +3977,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -3992,7 +3992,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -4007,7 +4007,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -4022,11 +4022,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -4037,11 +4037,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -4179,7 +4179,7 @@ }, "YPosition": { "type": "float", - "value": 86.00540161132813 + "value": 86.00540161132812 }, "ZOrientation": { "type": "float", @@ -4215,11 +4215,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -4230,11 +4230,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -4245,11 +4245,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -4260,11 +4260,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -4275,7 +4275,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -4294,7 +4294,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -4305,11 +4305,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -4324,7 +4324,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -4335,11 +4335,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -4350,11 +4350,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -4369,7 +4369,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -4384,7 +4384,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -4395,7 +4395,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -4410,11 +4410,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -4425,11 +4425,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -4440,11 +4440,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -4455,7 +4455,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -4470,7 +4470,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -4485,11 +4485,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -4500,11 +4500,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -4650,7 +4650,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -4678,11 +4678,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -4693,11 +4693,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -4708,11 +4708,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -4723,11 +4723,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -4738,7 +4738,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -4757,7 +4757,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -4768,11 +4768,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -4787,7 +4787,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -4798,11 +4798,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -4813,11 +4813,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -4832,7 +4832,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -4847,7 +4847,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -4858,7 +4858,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -4873,11 +4873,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -4888,11 +4888,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -4903,11 +4903,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -4918,7 +4918,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -4933,7 +4933,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -4948,11 +4948,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -4963,11 +4963,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -5097,7 +5097,7 @@ }, "XPosition": { "type": "float", - "value": 15.55816268920898 + "value": 15.558162689208984 }, "YOrientation": { "type": "float", @@ -5105,7 +5105,7 @@ }, "YPosition": { "type": "float", - "value": 55.93521881103516 + "value": 55.935218811035156 }, "ZOrientation": { "type": "float", @@ -5113,7 +5113,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -5141,11 +5141,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -5156,11 +5156,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -5171,11 +5171,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -5186,11 +5186,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -5201,7 +5201,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -5220,7 +5220,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -5231,11 +5231,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -5250,7 +5250,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -5261,11 +5261,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -5276,11 +5276,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -5295,7 +5295,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -5310,7 +5310,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -5321,7 +5321,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -5336,11 +5336,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -5351,11 +5351,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -5366,11 +5366,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -5381,7 +5381,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -5396,7 +5396,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -5411,11 +5411,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -5426,11 +5426,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -5604,11 +5604,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -5619,11 +5619,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -5634,11 +5634,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -5649,11 +5649,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -5664,7 +5664,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -5683,7 +5683,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -5694,11 +5694,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -5713,7 +5713,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -5724,11 +5724,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -5739,11 +5739,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -5758,7 +5758,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -5773,7 +5773,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -5784,7 +5784,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -5799,11 +5799,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -5814,11 +5814,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -5829,11 +5829,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -5844,7 +5844,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -5859,7 +5859,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -5874,11 +5874,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -5889,11 +5889,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -6023,7 +6023,7 @@ }, "XPosition": { "type": "float", - "value": 25.40461921691895 + "value": 25.404619216918945 }, "YOrientation": { "type": "float", @@ -6039,7 +6039,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -6067,11 +6067,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -6082,11 +6082,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -6097,11 +6097,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -6112,11 +6112,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -6127,7 +6127,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -6146,7 +6146,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -6157,11 +6157,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -6176,7 +6176,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -6187,11 +6187,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -6202,11 +6202,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -6221,7 +6221,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -6236,7 +6236,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -6247,7 +6247,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -6262,11 +6262,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -6277,11 +6277,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -6292,11 +6292,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -6307,7 +6307,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -6322,7 +6322,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -6337,11 +6337,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -6352,11 +6352,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -6502,7 +6502,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -6530,11 +6530,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -6545,11 +6545,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -6560,11 +6560,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -6575,11 +6575,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -6590,7 +6590,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -6609,7 +6609,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -6620,11 +6620,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -6639,7 +6639,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -6650,11 +6650,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -6665,11 +6665,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -6684,7 +6684,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -6699,7 +6699,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -6710,7 +6710,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -6725,11 +6725,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -6740,11 +6740,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -6755,11 +6755,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -6770,7 +6770,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -6785,7 +6785,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -6800,11 +6800,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -6815,11 +6815,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -6965,7 +6965,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -6993,11 +6993,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -7008,11 +7008,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -7023,11 +7023,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -7038,11 +7038,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -7053,7 +7053,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -7072,7 +7072,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -7083,11 +7083,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -7102,7 +7102,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -7113,11 +7113,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -7128,11 +7128,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -7147,7 +7147,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -7162,7 +7162,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -7173,7 +7173,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -7188,11 +7188,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -7203,11 +7203,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -7218,11 +7218,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -7233,7 +7233,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -7248,7 +7248,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -7263,11 +7263,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -7278,11 +7278,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -7412,7 +7412,7 @@ }, "XPosition": { "type": "float", - "value": 15.53039169311523 + "value": 15.530391693115234 }, "YOrientation": { "type": "float", @@ -7420,7 +7420,7 @@ }, "YPosition": { "type": "float", - "value": 15.92131328582764 + "value": 15.921313285827637 }, "ZOrientation": { "type": "float", @@ -7428,7 +7428,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -7456,11 +7456,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -7471,11 +7471,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -7486,11 +7486,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -7501,11 +7501,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -7516,7 +7516,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -7535,7 +7535,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -7546,11 +7546,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -7565,7 +7565,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -7576,11 +7576,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -7591,11 +7591,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -7610,7 +7610,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -7625,7 +7625,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -7636,7 +7636,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -7651,11 +7651,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -7666,11 +7666,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -7681,11 +7681,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -7696,7 +7696,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -7711,7 +7711,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -7726,11 +7726,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -7741,11 +7741,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -7919,11 +7919,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -7934,11 +7934,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -7949,11 +7949,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -7964,11 +7964,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -7979,7 +7979,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -7998,7 +7998,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -8009,11 +8009,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -8028,7 +8028,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -8039,11 +8039,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -8054,11 +8054,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -8073,7 +8073,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -8088,7 +8088,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -8099,7 +8099,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -8114,11 +8114,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -8129,11 +8129,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -8144,11 +8144,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -8159,7 +8159,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -8174,7 +8174,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -8189,11 +8189,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -8204,11 +8204,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -8346,7 +8346,7 @@ }, "YPosition": { "type": "float", - "value": 25.82070922851563 + "value": 25.820709228515625 }, "ZOrientation": { "type": "float", @@ -8354,7 +8354,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -8382,11 +8382,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -8397,11 +8397,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -8412,11 +8412,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -8427,11 +8427,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -8442,7 +8442,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -8461,7 +8461,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -8472,11 +8472,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -8491,7 +8491,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -8502,11 +8502,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -8517,11 +8517,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -8536,7 +8536,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -8551,7 +8551,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -8562,7 +8562,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -8577,11 +8577,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -8592,11 +8592,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -8607,11 +8607,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -8622,7 +8622,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -8637,7 +8637,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -8652,11 +8652,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -8667,11 +8667,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -8809,7 +8809,7 @@ }, "YPosition": { "type": "float", - "value": 16.04148483276367 + "value": 16.041484832763672 }, "ZOrientation": { "type": "float", @@ -8845,11 +8845,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -8860,11 +8860,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -8875,11 +8875,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -8890,11 +8890,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -8905,7 +8905,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -8924,7 +8924,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -8935,11 +8935,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -8954,7 +8954,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -8965,11 +8965,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -8980,11 +8980,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -8999,7 +8999,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -9014,7 +9014,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -9025,7 +9025,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -9040,11 +9040,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -9055,11 +9055,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -9070,11 +9070,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -9085,7 +9085,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -9100,7 +9100,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -9115,11 +9115,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -9130,11 +9130,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -9264,7 +9264,7 @@ }, "XPosition": { "type": "float", - "value": 35.52972793579102 + "value": 35.529727935791016 }, "YOrientation": { "type": "float", @@ -9280,7 +9280,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -9308,11 +9308,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -9323,11 +9323,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -9338,11 +9338,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -9353,11 +9353,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -9368,7 +9368,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -9387,7 +9387,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -9398,11 +9398,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -9417,7 +9417,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -9428,11 +9428,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -9443,11 +9443,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -9462,7 +9462,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -9477,7 +9477,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -9488,7 +9488,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -9503,11 +9503,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -9518,11 +9518,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -9533,11 +9533,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -9548,7 +9548,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -9563,7 +9563,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -9578,11 +9578,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -9593,11 +9593,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -9735,7 +9735,7 @@ }, "YPosition": { "type": "float", - "value": 25.62842750549316 + "value": 25.628427505493164 }, "ZOrientation": { "type": "float", @@ -9743,7 +9743,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -9771,11 +9771,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -9786,11 +9786,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -9801,11 +9801,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -9816,11 +9816,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -9831,7 +9831,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -9839,7 +9839,7 @@ }, "PointZ": { "type": "float", - "value": 1.119182229042053 + "value": 1.1191822290420532 } }, { @@ -9850,7 +9850,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -9861,11 +9861,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -9880,7 +9880,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -9891,11 +9891,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -9906,11 +9906,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -9925,7 +9925,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -9940,7 +9940,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -9951,7 +9951,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -9966,11 +9966,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -9981,11 +9981,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -9996,11 +9996,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -10011,7 +10011,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -10026,7 +10026,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -10041,11 +10041,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -10056,11 +10056,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -10190,7 +10190,7 @@ }, "XPosition": { "type": "float", - "value": 35.29354095458984 + "value": 35.293540954589844 }, "YOrientation": { "type": "float", @@ -10198,7 +10198,7 @@ }, "YPosition": { "type": "float", - "value": 6.037699699401856 + "value": 6.0376996994018555 }, "ZOrientation": { "type": "float", @@ -10206,7 +10206,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -10234,11 +10234,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -10249,11 +10249,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -10264,11 +10264,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -10279,11 +10279,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -10294,7 +10294,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -10313,7 +10313,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -10324,11 +10324,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -10343,7 +10343,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -10354,11 +10354,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -10369,11 +10369,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -10388,7 +10388,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -10403,7 +10403,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -10414,7 +10414,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -10429,11 +10429,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -10444,11 +10444,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -10459,11 +10459,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -10474,7 +10474,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -10489,7 +10489,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -10504,11 +10504,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -10519,11 +10519,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -10653,7 +10653,7 @@ }, "XPosition": { "type": "float", - "value": 55.39041137695313 + "value": 55.390411376953125 }, "YOrientation": { "type": "float", @@ -10661,7 +10661,7 @@ }, "YPosition": { "type": "float", - "value": 6.118979930877686 + "value": 6.1189799308776855 }, "ZOrientation": { "type": "float", @@ -10697,11 +10697,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -10712,11 +10712,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -10727,11 +10727,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -10742,11 +10742,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -10757,7 +10757,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -10776,7 +10776,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -10787,11 +10787,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -10806,7 +10806,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -10817,11 +10817,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -10832,11 +10832,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -10851,7 +10851,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -10866,7 +10866,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -10877,7 +10877,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -10892,11 +10892,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -10907,11 +10907,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -10922,11 +10922,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -10937,7 +10937,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -10952,7 +10952,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -10967,11 +10967,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -10982,11 +10982,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -11132,7 +11132,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -11160,11 +11160,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -11175,11 +11175,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -11190,11 +11190,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -11205,11 +11205,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -11220,7 +11220,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -11239,7 +11239,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -11250,11 +11250,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -11269,7 +11269,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -11280,11 +11280,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -11295,11 +11295,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -11314,7 +11314,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -11329,7 +11329,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -11340,7 +11340,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -11355,11 +11355,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -11370,11 +11370,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -11385,11 +11385,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -11400,7 +11400,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -11415,7 +11415,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -11430,11 +11430,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -11445,11 +11445,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -11579,7 +11579,7 @@ }, "XPosition": { "type": "float", - "value": 55.68396377563477 + "value": 55.683963775634766 }, "YOrientation": { "type": "float", @@ -11587,7 +11587,7 @@ }, "YPosition": { "type": "float", - "value": 25.84547805786133 + "value": 25.845478057861328 }, "ZOrientation": { "type": "float", @@ -11595,7 +11595,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999995708465576 + "value": 0.19999957084655762 } }, { @@ -11623,11 +11623,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -11638,11 +11638,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -11653,11 +11653,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -11668,11 +11668,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -11683,7 +11683,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -11702,7 +11702,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -11713,11 +11713,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -11732,7 +11732,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -11743,11 +11743,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -11758,11 +11758,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -11777,7 +11777,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -11792,7 +11792,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -11803,7 +11803,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -11818,11 +11818,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -11833,11 +11833,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -11848,11 +11848,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -11863,7 +11863,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -11878,7 +11878,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -11893,11 +11893,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -11908,11 +11908,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -12050,7 +12050,7 @@ }, "YPosition": { "type": "float", - "value": 15.86480903625488 + "value": 15.864809036254883 }, "ZOrientation": { "type": "float", @@ -12086,11 +12086,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -12101,11 +12101,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -12116,11 +12116,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -12131,11 +12131,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -12146,7 +12146,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -12165,7 +12165,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -12176,11 +12176,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -12195,7 +12195,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -12206,11 +12206,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -12221,11 +12221,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -12240,7 +12240,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -12255,7 +12255,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -12266,7 +12266,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -12281,11 +12281,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -12296,11 +12296,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -12311,11 +12311,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -12326,7 +12326,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -12341,7 +12341,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -12356,11 +12356,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -12371,11 +12371,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -12521,7 +12521,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -12549,11 +12549,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -12564,11 +12564,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -12579,11 +12579,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -12594,11 +12594,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -12609,7 +12609,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -12628,7 +12628,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -12639,11 +12639,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -12658,7 +12658,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -12669,11 +12669,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -12684,11 +12684,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -12703,7 +12703,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -12718,7 +12718,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -12729,7 +12729,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -12744,11 +12744,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -12759,11 +12759,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -12774,11 +12774,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -12789,7 +12789,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -12804,7 +12804,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -12819,11 +12819,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -12834,11 +12834,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -12968,7 +12968,7 @@ }, "XPosition": { "type": "float", - "value": 115.4062576293945 + "value": 115.40625762939453 }, "YOrientation": { "type": "float", @@ -12976,7 +12976,7 @@ }, "YPosition": { "type": "float", - "value": 16.0639820098877 + "value": 16.063982009887695 }, "ZOrientation": { "type": "float", @@ -12984,7 +12984,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999995708465576 + "value": 0.19999957084655762 } }, { @@ -13012,11 +13012,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -13027,11 +13027,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -13042,11 +13042,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -13057,11 +13057,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -13072,7 +13072,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -13091,7 +13091,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -13102,11 +13102,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -13121,7 +13121,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -13132,11 +13132,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -13147,11 +13147,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -13166,7 +13166,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -13181,7 +13181,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -13192,7 +13192,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -13207,11 +13207,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -13222,11 +13222,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -13237,11 +13237,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -13252,7 +13252,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -13267,7 +13267,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -13282,11 +13282,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -13297,11 +13297,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -13431,7 +13431,7 @@ }, "XPosition": { "type": "float", - "value": 105.6359558105469 + "value": 105.63595581054688 }, "YOrientation": { "type": "float", @@ -13439,7 +13439,7 @@ }, "YPosition": { "type": "float", - "value": 15.77871704101563 + "value": 15.778717041015625 }, "ZOrientation": { "type": "float", @@ -13447,7 +13447,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -13475,11 +13475,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -13490,11 +13490,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -13505,11 +13505,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -13520,11 +13520,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -13535,7 +13535,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -13554,7 +13554,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -13565,11 +13565,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -13584,7 +13584,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -13595,11 +13595,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -13610,11 +13610,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -13629,7 +13629,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -13644,7 +13644,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -13655,7 +13655,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -13670,11 +13670,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -13685,11 +13685,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -13700,11 +13700,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -13715,7 +13715,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -13730,7 +13730,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -13745,11 +13745,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -13760,11 +13760,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -13894,7 +13894,7 @@ }, "XPosition": { "type": "float", - "value": 115.3349533081055 + "value": 115.33495330810547 }, "YOrientation": { "type": "float", @@ -13902,7 +13902,7 @@ }, "YPosition": { "type": "float", - "value": 25.76296997070313 + "value": 25.762969970703125 }, "ZOrientation": { "type": "float", @@ -13910,7 +13910,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -13938,11 +13938,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -13953,11 +13953,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -13968,11 +13968,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -13983,11 +13983,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -13998,7 +13998,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -14017,7 +14017,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -14028,11 +14028,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -14047,7 +14047,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -14058,11 +14058,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -14073,11 +14073,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -14092,7 +14092,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -14107,7 +14107,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -14118,7 +14118,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -14133,11 +14133,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -14148,11 +14148,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -14163,11 +14163,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -14178,7 +14178,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -14193,7 +14193,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -14208,11 +14208,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -14223,11 +14223,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -14373,7 +14373,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -14401,11 +14401,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -14416,11 +14416,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -14431,11 +14431,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -14446,11 +14446,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -14461,7 +14461,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -14480,7 +14480,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -14491,11 +14491,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -14510,7 +14510,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -14521,11 +14521,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -14536,11 +14536,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -14555,7 +14555,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -14570,7 +14570,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -14581,7 +14581,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -14596,11 +14596,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -14611,11 +14611,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -14626,11 +14626,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -14641,7 +14641,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -14656,7 +14656,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -14671,11 +14671,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -14686,11 +14686,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -14820,7 +14820,7 @@ }, "XPosition": { "type": "float", - "value": 105.5646362304688 + "value": 105.56463623046875 }, "YOrientation": { "type": "float", @@ -14836,7 +14836,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -14864,11 +14864,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -14879,11 +14879,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -14894,11 +14894,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -14909,11 +14909,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -14924,7 +14924,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -14943,7 +14943,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -14954,11 +14954,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -14973,7 +14973,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -14984,11 +14984,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -14999,11 +14999,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -15018,7 +15018,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -15033,7 +15033,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -15044,7 +15044,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -15059,11 +15059,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -15074,11 +15074,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -15089,11 +15089,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -15104,7 +15104,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -15119,7 +15119,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -15134,11 +15134,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -15149,11 +15149,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -15291,7 +15291,7 @@ }, "YPosition": { "type": "float", - "value": 25.76297187805176 + "value": 25.762971878051758 }, "ZOrientation": { "type": "float", @@ -15299,7 +15299,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -15327,11 +15327,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -15342,11 +15342,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -15357,11 +15357,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -15372,11 +15372,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -15387,7 +15387,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -15406,7 +15406,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -15417,11 +15417,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -15436,7 +15436,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -15447,11 +15447,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -15462,11 +15462,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -15481,7 +15481,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -15496,7 +15496,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -15507,7 +15507,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -15522,11 +15522,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -15537,11 +15537,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -15552,11 +15552,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -15567,7 +15567,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -15582,7 +15582,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -15597,11 +15597,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -15612,11 +15612,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -15754,7 +15754,7 @@ }, "YPosition": { "type": "float", - "value": 16.0639820098877 + "value": 16.063982009887695 }, "ZOrientation": { "type": "float", @@ -15790,11 +15790,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -15805,11 +15805,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -15820,11 +15820,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -15835,11 +15835,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -15850,7 +15850,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -15869,7 +15869,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -15880,11 +15880,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -15899,7 +15899,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -15910,11 +15910,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -15925,11 +15925,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -15944,7 +15944,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -15959,7 +15959,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -15970,7 +15970,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -15985,11 +15985,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -16000,11 +16000,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -16015,11 +16015,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -16030,7 +16030,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -16045,7 +16045,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -16060,11 +16060,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -16075,11 +16075,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -16217,7 +16217,7 @@ }, "YPosition": { "type": "float", - "value": 15.99711036682129 + "value": 15.997110366821289 }, "ZOrientation": { "type": "float", @@ -16225,7 +16225,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -16253,11 +16253,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -16268,11 +16268,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -16283,11 +16283,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -16298,11 +16298,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -16313,7 +16313,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -16332,7 +16332,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -16343,11 +16343,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -16362,7 +16362,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -16373,11 +16373,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -16388,11 +16388,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -16407,7 +16407,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -16422,7 +16422,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -16433,7 +16433,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -16448,11 +16448,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -16463,11 +16463,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -16478,11 +16478,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -16493,7 +16493,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -16508,7 +16508,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -16523,11 +16523,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -16538,11 +16538,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -16672,7 +16672,7 @@ }, "XPosition": { "type": "float", - "value": 65.47592926025391 + "value": 65.4759292602539 }, "YOrientation": { "type": "float", @@ -16680,7 +16680,7 @@ }, "YPosition": { "type": "float", - "value": 26.08666801452637 + "value": 26.086668014526367 }, "ZOrientation": { "type": "float", @@ -16688,7 +16688,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -16716,11 +16716,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -16731,11 +16731,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -16746,11 +16746,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -16761,11 +16761,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -16776,7 +16776,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -16795,7 +16795,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -16806,11 +16806,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -16825,7 +16825,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -16836,11 +16836,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -16851,11 +16851,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -16870,7 +16870,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -16885,7 +16885,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -16896,7 +16896,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -16911,11 +16911,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -16926,11 +16926,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -16941,11 +16941,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -16956,7 +16956,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -16971,7 +16971,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -16986,11 +16986,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -17001,11 +17001,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -17151,7 +17151,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -17179,11 +17179,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -17194,11 +17194,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -17209,11 +17209,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -17224,11 +17224,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -17239,7 +17239,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -17258,7 +17258,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -17269,11 +17269,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -17288,7 +17288,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -17299,11 +17299,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -17314,11 +17314,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -17333,7 +17333,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -17348,7 +17348,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -17359,7 +17359,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -17374,11 +17374,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -17389,11 +17389,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -17404,11 +17404,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -17419,7 +17419,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -17434,7 +17434,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -17449,11 +17449,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -17464,11 +17464,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -17614,7 +17614,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -17642,11 +17642,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -17657,11 +17657,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -17672,11 +17672,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -17687,11 +17687,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -17702,7 +17702,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -17721,7 +17721,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -17732,11 +17732,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -17751,7 +17751,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -17762,11 +17762,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -17777,11 +17777,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -17796,7 +17796,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -17811,7 +17811,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -17822,7 +17822,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -17837,11 +17837,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -17852,11 +17852,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -17867,11 +17867,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -17882,7 +17882,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -17897,7 +17897,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -17912,11 +17912,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -17927,11 +17927,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -18061,7 +18061,7 @@ }, "XPosition": { "type": "float", - "value": 55.49167633056641 + "value": 55.491676330566406 }, "YOrientation": { "type": "float", @@ -18069,7 +18069,7 @@ }, "YPosition": { "type": "float", - "value": 46.01627349853516 + "value": 46.016273498535156 }, "ZOrientation": { "type": "float", @@ -18105,11 +18105,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -18120,11 +18120,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -18135,11 +18135,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -18150,11 +18150,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -18165,7 +18165,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -18184,7 +18184,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -18195,11 +18195,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -18214,7 +18214,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -18225,11 +18225,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -18240,11 +18240,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -18259,7 +18259,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -18274,7 +18274,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -18285,7 +18285,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -18300,11 +18300,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -18315,11 +18315,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -18330,11 +18330,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -18345,7 +18345,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -18360,7 +18360,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -18375,11 +18375,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -18390,11 +18390,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -18540,7 +18540,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -18568,11 +18568,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -18583,11 +18583,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -18598,11 +18598,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -18613,11 +18613,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -18628,7 +18628,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -18647,7 +18647,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -18658,11 +18658,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -18677,7 +18677,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -18688,11 +18688,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -18703,11 +18703,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -18722,7 +18722,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -18737,7 +18737,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -18748,7 +18748,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -18763,11 +18763,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -18778,11 +18778,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -18793,11 +18793,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -18808,7 +18808,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -18823,7 +18823,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -18838,11 +18838,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -18853,11 +18853,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -19003,7 +19003,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -19031,11 +19031,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -19046,11 +19046,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -19061,11 +19061,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -19076,11 +19076,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -19091,7 +19091,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -19110,7 +19110,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -19121,11 +19121,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -19140,7 +19140,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -19151,11 +19151,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -19166,11 +19166,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -19185,7 +19185,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -19200,7 +19200,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -19211,7 +19211,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -19226,11 +19226,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -19241,11 +19241,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -19256,11 +19256,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -19271,7 +19271,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -19286,7 +19286,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -19301,11 +19301,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -19316,11 +19316,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -19466,7 +19466,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -19494,11 +19494,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -19509,11 +19509,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -19524,11 +19524,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -19539,11 +19539,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -19554,7 +19554,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -19573,7 +19573,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -19584,11 +19584,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -19603,7 +19603,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -19614,11 +19614,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -19629,11 +19629,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -19648,7 +19648,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -19663,7 +19663,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -19674,7 +19674,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -19689,11 +19689,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -19704,11 +19704,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -19719,11 +19719,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -19734,7 +19734,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -19749,7 +19749,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -19764,11 +19764,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -19779,11 +19779,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -19913,7 +19913,7 @@ }, "XPosition": { "type": "float", - "value": 125.5948867797852 + "value": 125.59488677978516 }, "YOrientation": { "type": "float", @@ -19929,7 +19929,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -19957,11 +19957,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -19972,11 +19972,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -19987,11 +19987,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -20002,11 +20002,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -20017,7 +20017,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -20036,7 +20036,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -20047,11 +20047,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -20066,7 +20066,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -20077,11 +20077,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -20092,11 +20092,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -20111,7 +20111,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -20126,7 +20126,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -20137,7 +20137,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -20152,11 +20152,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -20167,11 +20167,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -20182,11 +20182,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -20197,7 +20197,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -20212,7 +20212,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -20227,11 +20227,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -20242,11 +20242,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -20376,7 +20376,7 @@ }, "XPosition": { "type": "float", - "value": 125.674674987793 + "value": 125.67467498779297 }, "YOrientation": { "type": "float", @@ -20392,7 +20392,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -20420,11 +20420,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -20435,11 +20435,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -20450,11 +20450,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -20465,11 +20465,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -20480,7 +20480,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -20499,7 +20499,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -20510,11 +20510,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -20529,7 +20529,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -20540,11 +20540,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -20555,11 +20555,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -20574,7 +20574,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -20589,7 +20589,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -20600,7 +20600,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -20615,11 +20615,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -20630,11 +20630,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -20645,11 +20645,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -20660,7 +20660,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -20675,7 +20675,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -20690,11 +20690,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -20705,11 +20705,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -20839,7 +20839,7 @@ }, "XPosition": { "type": "float", - "value": 145.5045013427734 + "value": 145.50450134277344 }, "YOrientation": { "type": "float", @@ -20855,7 +20855,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -20883,11 +20883,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -20898,11 +20898,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -20913,11 +20913,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -20928,11 +20928,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -20943,7 +20943,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -20962,7 +20962,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -20973,11 +20973,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -20992,7 +20992,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -21003,11 +21003,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -21018,11 +21018,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -21037,7 +21037,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -21052,7 +21052,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -21063,7 +21063,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -21078,11 +21078,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -21093,11 +21093,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -21108,11 +21108,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -21123,7 +21123,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -21138,7 +21138,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -21153,11 +21153,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -21168,11 +21168,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -21302,7 +21302,7 @@ }, "XPosition": { "type": "float", - "value": 125.6210250854492 + "value": 125.62102508544922 }, "YOrientation": { "type": "float", @@ -21318,7 +21318,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -21346,11 +21346,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -21361,11 +21361,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -21376,11 +21376,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -21391,11 +21391,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -21406,7 +21406,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -21425,7 +21425,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -21436,11 +21436,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -21455,7 +21455,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -21466,11 +21466,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -21481,11 +21481,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -21500,7 +21500,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -21515,7 +21515,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -21526,7 +21526,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -21541,11 +21541,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -21556,11 +21556,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -21571,11 +21571,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -21586,7 +21586,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -21601,7 +21601,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -21616,11 +21616,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -21631,11 +21631,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -21773,7 +21773,7 @@ }, "YPosition": { "type": "float", - "value": 25.76592636108398 + "value": 25.765926361083984 }, "ZOrientation": { "type": "float", @@ -21781,7 +21781,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -21809,11 +21809,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -21824,11 +21824,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -21839,11 +21839,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -21854,11 +21854,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -21869,7 +21869,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -21888,7 +21888,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -21899,11 +21899,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -21918,7 +21918,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -21929,11 +21929,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -21944,11 +21944,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -21963,7 +21963,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -21978,7 +21978,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -21989,7 +21989,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -22004,11 +22004,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -22019,11 +22019,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -22034,11 +22034,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -22049,7 +22049,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -22064,7 +22064,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -22079,11 +22079,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -22094,11 +22094,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -22228,7 +22228,7 @@ }, "XPosition": { "type": "float", - "value": 155.5576019287109 + "value": 155.55760192871094 }, "YOrientation": { "type": "float", @@ -22244,7 +22244,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -22272,11 +22272,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -22287,11 +22287,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -22302,11 +22302,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -22317,11 +22317,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -22332,7 +22332,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -22351,7 +22351,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -22362,11 +22362,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -22381,7 +22381,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -22392,11 +22392,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -22407,11 +22407,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -22426,7 +22426,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -22441,7 +22441,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -22452,7 +22452,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -22467,11 +22467,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -22482,11 +22482,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -22497,11 +22497,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -22512,7 +22512,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -22527,7 +22527,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -22542,11 +22542,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -22557,11 +22557,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -22699,7 +22699,7 @@ }, "YPosition": { "type": "float", - "value": 45.88912963867188 + "value": 45.889129638671875 }, "ZOrientation": { "type": "float", @@ -22707,7 +22707,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -22735,11 +22735,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -22750,11 +22750,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -22765,11 +22765,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -22780,11 +22780,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -22795,7 +22795,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -22814,7 +22814,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -22825,11 +22825,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -22844,7 +22844,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -22855,11 +22855,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -22870,11 +22870,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -22889,7 +22889,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -22904,7 +22904,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -22915,7 +22915,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -22930,11 +22930,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -22945,11 +22945,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -22960,11 +22960,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -22975,7 +22975,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -22990,7 +22990,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -23005,11 +23005,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -23020,11 +23020,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -23154,7 +23154,7 @@ }, "XPosition": { "type": "float", - "value": 135.6738433837891 + "value": 135.67384338378906 }, "YOrientation": { "type": "float", @@ -23162,7 +23162,7 @@ }, "YPosition": { "type": "float", - "value": 46.12174224853516 + "value": 46.121742248535156 }, "ZOrientation": { "type": "float", @@ -23170,7 +23170,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -23198,11 +23198,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -23213,11 +23213,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -23228,11 +23228,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -23243,11 +23243,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -23258,7 +23258,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -23277,7 +23277,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -23288,11 +23288,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -23307,7 +23307,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -23318,11 +23318,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -23333,11 +23333,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -23352,7 +23352,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -23367,7 +23367,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -23378,7 +23378,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -23393,11 +23393,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -23408,11 +23408,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -23423,11 +23423,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -23438,7 +23438,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -23453,7 +23453,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -23468,11 +23468,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -23483,11 +23483,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -23617,7 +23617,7 @@ }, "XPosition": { "type": "float", - "value": 155.4341125488281 + "value": 155.43411254882812 }, "YOrientation": { "type": "float", @@ -23633,7 +23633,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -23661,11 +23661,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -23676,11 +23676,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -23691,11 +23691,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -23706,11 +23706,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -23721,7 +23721,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -23740,7 +23740,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -23751,11 +23751,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -23770,7 +23770,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -23781,11 +23781,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -23796,11 +23796,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -23815,7 +23815,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -23830,7 +23830,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -23841,7 +23841,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -23856,11 +23856,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -23871,11 +23871,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -23886,11 +23886,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -23901,7 +23901,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -23916,7 +23916,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -23931,11 +23931,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -23946,11 +23946,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -24080,7 +24080,7 @@ }, "XPosition": { "type": "float", - "value": 145.4229125976563 + "value": 145.42291259765625 }, "YOrientation": { "type": "float", @@ -24096,7 +24096,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999995708465576 + "value": 0.19999957084655762 } }, { @@ -24124,11 +24124,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -24139,11 +24139,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -24154,11 +24154,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -24169,11 +24169,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -24184,7 +24184,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -24203,7 +24203,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -24214,11 +24214,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -24233,7 +24233,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -24244,11 +24244,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -24259,11 +24259,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -24278,7 +24278,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -24293,7 +24293,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -24304,7 +24304,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -24319,11 +24319,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -24334,11 +24334,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -24349,11 +24349,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -24364,7 +24364,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -24379,7 +24379,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -24394,11 +24394,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -24409,11 +24409,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -24543,7 +24543,7 @@ }, "XPosition": { "type": "float", - "value": 135.6766510009766 + "value": 135.67665100097656 }, "YOrientation": { "type": "float", @@ -24551,7 +24551,7 @@ }, "YPosition": { "type": "float", - "value": 65.80300903320313 + "value": 65.80300903320312 }, "ZOrientation": { "type": "float", @@ -24559,7 +24559,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -24587,11 +24587,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -24602,11 +24602,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -24617,11 +24617,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -24632,11 +24632,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -24647,7 +24647,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -24666,7 +24666,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -24677,11 +24677,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -24696,7 +24696,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -24707,11 +24707,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -24722,11 +24722,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -24741,7 +24741,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -24756,7 +24756,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -24767,7 +24767,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -24782,11 +24782,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -24797,11 +24797,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -24812,11 +24812,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -24827,7 +24827,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -24842,7 +24842,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -24857,11 +24857,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -24872,11 +24872,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -25014,7 +25014,7 @@ }, "YPosition": { "type": "float", - "value": 36.04873657226563 + "value": 36.048736572265625 }, "ZOrientation": { "type": "float", @@ -25022,7 +25022,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -25050,11 +25050,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -25065,11 +25065,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -25080,11 +25080,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -25095,11 +25095,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -25110,7 +25110,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -25129,7 +25129,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -25140,11 +25140,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -25159,7 +25159,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -25170,11 +25170,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -25185,11 +25185,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -25204,7 +25204,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -25219,7 +25219,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -25230,7 +25230,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -25245,11 +25245,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -25260,11 +25260,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -25275,11 +25275,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -25290,7 +25290,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -25305,7 +25305,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -25320,11 +25320,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -25335,11 +25335,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -25469,7 +25469,7 @@ }, "XPosition": { "type": "float", - "value": 125.4893264770508 + "value": 125.48932647705078 }, "YOrientation": { "type": "float", @@ -25485,7 +25485,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -25513,11 +25513,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -25528,11 +25528,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -25543,11 +25543,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -25558,11 +25558,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -25573,7 +25573,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -25592,7 +25592,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -25603,11 +25603,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -25622,7 +25622,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -25633,11 +25633,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -25648,11 +25648,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -25667,7 +25667,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -25682,7 +25682,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -25693,7 +25693,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -25708,11 +25708,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -25723,11 +25723,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -25738,11 +25738,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -25753,7 +25753,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -25768,7 +25768,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -25783,11 +25783,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -25798,11 +25798,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -25932,7 +25932,7 @@ }, "XPosition": { "type": "float", - "value": 105.3950347900391 + "value": 105.39503479003906 }, "YOrientation": { "type": "float", @@ -25948,7 +25948,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -25976,11 +25976,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -25991,11 +25991,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -26006,11 +26006,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -26021,11 +26021,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -26036,7 +26036,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -26055,7 +26055,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -26066,11 +26066,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -26085,7 +26085,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -26096,11 +26096,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -26111,11 +26111,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -26130,7 +26130,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -26145,7 +26145,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -26156,7 +26156,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -26171,11 +26171,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -26186,11 +26186,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -26201,11 +26201,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -26216,7 +26216,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -26231,7 +26231,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -26246,11 +26246,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -26261,11 +26261,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -26395,7 +26395,7 @@ }, "XPosition": { "type": "float", - "value": 95.43727874755859 + "value": 95.4372787475586 }, "YOrientation": { "type": "float", @@ -26411,7 +26411,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -26439,11 +26439,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -26454,11 +26454,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -26469,11 +26469,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -26484,11 +26484,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -26499,7 +26499,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -26518,7 +26518,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -26529,11 +26529,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -26548,7 +26548,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -26559,11 +26559,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -26574,11 +26574,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -26593,7 +26593,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -26608,7 +26608,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -26619,7 +26619,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -26634,11 +26634,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -26649,11 +26649,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -26664,11 +26664,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -26679,7 +26679,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -26694,7 +26694,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -26709,11 +26709,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -26724,11 +26724,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -26858,7 +26858,7 @@ }, "XPosition": { "type": "float", - "value": 105.6618270874023 + "value": 105.66182708740234 }, "YOrientation": { "type": "float", @@ -26866,7 +26866,7 @@ }, "YPosition": { "type": "float", - "value": 36.08975982666016 + "value": 36.089759826660156 }, "ZOrientation": { "type": "float", @@ -26902,11 +26902,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -26917,11 +26917,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -26932,11 +26932,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -26947,11 +26947,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -26962,7 +26962,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -26981,7 +26981,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -26992,11 +26992,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -27011,7 +27011,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -27022,11 +27022,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -27037,11 +27037,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -27056,7 +27056,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -27071,7 +27071,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -27082,7 +27082,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -27097,11 +27097,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -27112,11 +27112,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -27127,11 +27127,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -27142,7 +27142,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -27157,7 +27157,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -27172,11 +27172,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -27187,11 +27187,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -27329,7 +27329,7 @@ }, "YPosition": { "type": "float", - "value": 55.82796478271484 + "value": 55.827964782714844 }, "ZOrientation": { "type": "float", @@ -27337,7 +27337,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -27365,11 +27365,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -27380,11 +27380,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -27395,11 +27395,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -27410,11 +27410,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -27425,7 +27425,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -27444,7 +27444,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -27455,11 +27455,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -27474,7 +27474,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -27485,11 +27485,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -27500,11 +27500,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -27519,7 +27519,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -27534,7 +27534,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -27545,7 +27545,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -27560,11 +27560,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -27575,11 +27575,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -27590,11 +27590,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -27605,7 +27605,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -27620,7 +27620,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -27635,11 +27635,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -27650,11 +27650,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -27800,7 +27800,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -27828,11 +27828,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -27843,11 +27843,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -27858,11 +27858,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -27873,11 +27873,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -27888,7 +27888,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -27907,7 +27907,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -27918,11 +27918,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -27937,7 +27937,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -27948,11 +27948,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -27963,11 +27963,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -27982,7 +27982,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -27997,7 +27997,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -28008,7 +28008,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -28023,11 +28023,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -28038,11 +28038,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -28053,11 +28053,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -28068,7 +28068,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -28083,7 +28083,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -28098,11 +28098,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -28113,11 +28113,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -28255,7 +28255,7 @@ }, "YPosition": { "type": "float", - "value": 55.98964691162109 + "value": 55.989646911621094 }, "ZOrientation": { "type": "float", @@ -28263,7 +28263,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -28291,11 +28291,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -28306,11 +28306,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -28321,11 +28321,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -28336,11 +28336,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -28351,7 +28351,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -28370,7 +28370,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -28381,11 +28381,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -28400,7 +28400,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -28411,11 +28411,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -28426,11 +28426,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -28445,7 +28445,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -28460,7 +28460,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -28471,7 +28471,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -28486,11 +28486,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -28501,11 +28501,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -28516,11 +28516,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -28531,7 +28531,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -28546,7 +28546,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -28561,11 +28561,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -28576,11 +28576,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -28710,7 +28710,7 @@ }, "XPosition": { "type": "float", - "value": 65.68112945556641 + "value": 65.6811294555664 }, "YOrientation": { "type": "float", @@ -28718,7 +28718,7 @@ }, "YPosition": { "type": "float", - "value": 46.04421997070313 + "value": 46.044219970703125 }, "ZOrientation": { "type": "float", @@ -28726,7 +28726,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -28754,11 +28754,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -28769,11 +28769,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -28784,11 +28784,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -28799,11 +28799,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -28814,7 +28814,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -28833,7 +28833,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -28844,11 +28844,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -28863,7 +28863,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -28874,11 +28874,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -28889,11 +28889,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -28908,7 +28908,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -28923,7 +28923,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -28934,7 +28934,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -28949,11 +28949,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -28964,11 +28964,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -28979,11 +28979,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -28994,7 +28994,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -29009,7 +29009,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -29024,11 +29024,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -29039,11 +29039,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -29181,7 +29181,7 @@ }, "YPosition": { "type": "float", - "value": 46.16550445556641 + "value": 46.165504455566406 }, "ZOrientation": { "type": "float", @@ -29189,7 +29189,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -29217,11 +29217,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -29232,11 +29232,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -29247,11 +29247,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -29262,11 +29262,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -29277,7 +29277,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -29296,7 +29296,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -29307,11 +29307,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -29326,7 +29326,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -29337,11 +29337,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -29352,11 +29352,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -29371,7 +29371,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -29386,7 +29386,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -29397,7 +29397,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -29412,11 +29412,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -29427,11 +29427,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -29442,11 +29442,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -29457,7 +29457,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -29472,7 +29472,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -29487,11 +29487,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -29502,11 +29502,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -29652,7 +29652,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -29680,11 +29680,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -29695,11 +29695,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -29710,11 +29710,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -29725,11 +29725,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -29740,7 +29740,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -29759,7 +29759,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -29770,11 +29770,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -29789,7 +29789,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -29800,11 +29800,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -29815,11 +29815,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -29834,7 +29834,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -29849,7 +29849,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -29860,7 +29860,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -29875,11 +29875,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -29890,11 +29890,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -29905,11 +29905,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -29920,7 +29920,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -29935,7 +29935,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -29950,11 +29950,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -29965,11 +29965,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -30115,7 +30115,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -30143,11 +30143,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -30158,11 +30158,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -30173,11 +30173,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -30188,11 +30188,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -30203,7 +30203,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -30222,7 +30222,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -30233,11 +30233,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -30252,7 +30252,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -30263,11 +30263,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -30278,11 +30278,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -30297,7 +30297,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -30312,7 +30312,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -30323,7 +30323,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -30338,11 +30338,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -30353,11 +30353,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -30368,11 +30368,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -30383,7 +30383,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -30398,7 +30398,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -30413,11 +30413,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -30428,11 +30428,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -30606,11 +30606,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -30621,11 +30621,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -30636,11 +30636,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -30651,11 +30651,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -30666,7 +30666,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -30685,7 +30685,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -30696,11 +30696,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -30715,7 +30715,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -30726,11 +30726,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -30741,11 +30741,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -30760,7 +30760,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -30775,7 +30775,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -30786,7 +30786,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -30801,11 +30801,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -30816,11 +30816,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -30831,11 +30831,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -30846,7 +30846,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -30861,7 +30861,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -30876,11 +30876,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -30891,11 +30891,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -31041,7 +31041,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -31069,11 +31069,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -31084,11 +31084,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -31099,11 +31099,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -31114,11 +31114,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -31129,7 +31129,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -31148,7 +31148,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -31159,11 +31159,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -31178,7 +31178,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -31189,11 +31189,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -31204,11 +31204,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -31223,7 +31223,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -31238,7 +31238,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -31249,7 +31249,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -31264,11 +31264,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -31279,11 +31279,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -31294,11 +31294,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -31309,7 +31309,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -31324,7 +31324,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -31339,11 +31339,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -31354,11 +31354,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -31504,7 +31504,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -31532,11 +31532,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -31547,11 +31547,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -31562,11 +31562,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -31577,11 +31577,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -31592,7 +31592,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -31611,7 +31611,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -31622,11 +31622,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -31641,7 +31641,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -31652,11 +31652,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -31667,11 +31667,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -31686,7 +31686,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -31701,7 +31701,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -31712,7 +31712,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -31727,11 +31727,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -31742,11 +31742,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -31757,11 +31757,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -31772,7 +31772,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -31787,7 +31787,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -31802,11 +31802,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -31817,11 +31817,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -31951,7 +31951,7 @@ }, "XPosition": { "type": "float", - "value": 115.7093963623047 + "value": 115.70939636230469 }, "YOrientation": { "type": "float", @@ -31959,7 +31959,7 @@ }, "YPosition": { "type": "float", - "value": 56.12046051025391 + "value": 56.120460510253906 }, "ZOrientation": { "type": "float", @@ -31967,7 +31967,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -31995,11 +31995,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -32010,11 +32010,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -32025,11 +32025,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -32040,11 +32040,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -32055,7 +32055,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -32074,7 +32074,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -32085,11 +32085,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -32104,7 +32104,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -32115,11 +32115,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -32130,11 +32130,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -32149,7 +32149,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -32164,7 +32164,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -32175,7 +32175,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -32190,11 +32190,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -32205,11 +32205,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -32220,11 +32220,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -32235,7 +32235,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -32250,7 +32250,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -32265,11 +32265,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -32280,11 +32280,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -32414,7 +32414,7 @@ }, "XPosition": { "type": "float", - "value": 105.553352355957 + "value": 105.55335235595703 }, "YOrientation": { "type": "float", @@ -32430,7 +32430,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -32458,11 +32458,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -32473,11 +32473,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -32488,11 +32488,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -32503,11 +32503,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -32518,7 +32518,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -32537,7 +32537,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -32548,11 +32548,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -32567,7 +32567,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -32578,11 +32578,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -32593,11 +32593,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -32612,7 +32612,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -32627,7 +32627,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -32638,7 +32638,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -32653,11 +32653,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -32668,11 +32668,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -32683,11 +32683,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -32698,7 +32698,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -32713,7 +32713,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -32728,11 +32728,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -32743,11 +32743,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -32877,7 +32877,7 @@ }, "XPosition": { "type": "float", - "value": 55.61870956420898 + "value": 55.618709564208984 }, "YOrientation": { "type": "float", @@ -32893,7 +32893,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -32921,11 +32921,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -32936,11 +32936,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -32951,11 +32951,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -32966,11 +32966,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -32981,7 +32981,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -33000,7 +33000,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -33011,11 +33011,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -33030,7 +33030,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -33041,11 +33041,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -33056,11 +33056,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -33075,7 +33075,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -33090,7 +33090,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -33101,7 +33101,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -33116,11 +33116,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -33131,11 +33131,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -33146,11 +33146,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -33161,7 +33161,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -33176,7 +33176,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -33191,11 +33191,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -33206,11 +33206,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -33340,7 +33340,7 @@ }, "XPosition": { "type": "float", - "value": 105.5792541503906 + "value": 105.57925415039062 }, "YOrientation": { "type": "float", @@ -33348,7 +33348,7 @@ }, "YPosition": { "type": "float", - "value": 116.0735321044922 + "value": 116.07353210449219 }, "ZOrientation": { "type": "float", @@ -33356,7 +33356,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -33384,11 +33384,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -33399,11 +33399,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -33414,11 +33414,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -33429,11 +33429,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -33444,7 +33444,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -33463,7 +33463,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -33474,11 +33474,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -33493,7 +33493,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -33504,11 +33504,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -33519,11 +33519,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -33538,7 +33538,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -33553,7 +33553,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -33564,7 +33564,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -33579,11 +33579,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -33594,11 +33594,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -33609,11 +33609,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -33624,7 +33624,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -33639,7 +33639,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -33654,11 +33654,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -33669,11 +33669,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -33803,7 +33803,7 @@ }, "XPosition": { "type": "float", - "value": 115.6219635009766 + "value": 115.62196350097656 }, "YOrientation": { "type": "float", @@ -33811,7 +33811,7 @@ }, "YPosition": { "type": "float", - "value": 126.1162414550781 + "value": 126.11624145507812 }, "ZOrientation": { "type": "float", @@ -33819,7 +33819,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -33847,11 +33847,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -33862,11 +33862,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -33877,11 +33877,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -33892,11 +33892,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -33907,7 +33907,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -33926,7 +33926,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -33937,11 +33937,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -33956,7 +33956,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -33967,11 +33967,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -33982,11 +33982,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -34001,7 +34001,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -34016,7 +34016,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -34027,7 +34027,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -34042,11 +34042,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -34057,11 +34057,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -34072,11 +34072,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -34087,7 +34087,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -34102,7 +34102,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -34117,11 +34117,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -34132,11 +34132,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -34266,7 +34266,7 @@ }, "XPosition": { "type": "float", - "value": 135.4682769775391 + "value": 135.46827697753906 }, "YOrientation": { "type": "float", @@ -34282,7 +34282,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -34310,11 +34310,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -34325,11 +34325,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -34340,11 +34340,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -34355,11 +34355,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -34370,7 +34370,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -34389,7 +34389,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -34400,11 +34400,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -34419,7 +34419,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -34430,11 +34430,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -34445,11 +34445,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -34464,7 +34464,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -34479,7 +34479,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -34490,7 +34490,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -34505,11 +34505,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -34520,11 +34520,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -34535,11 +34535,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -34550,7 +34550,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -34565,7 +34565,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -34580,11 +34580,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -34595,11 +34595,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -34729,7 +34729,7 @@ }, "XPosition": { "type": "float", - "value": 145.3515777587891 + "value": 145.35157775878906 }, "YOrientation": { "type": "float", @@ -34737,7 +34737,7 @@ }, "YPosition": { "type": "float", - "value": 116.1532287597656 + "value": 116.15322875976562 }, "ZOrientation": { "type": "float", @@ -34745,7 +34745,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -34773,11 +34773,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -34788,11 +34788,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -34803,11 +34803,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -34818,11 +34818,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -34833,7 +34833,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -34852,7 +34852,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -34863,11 +34863,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -34882,7 +34882,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -34893,11 +34893,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -34908,11 +34908,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -34927,7 +34927,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -34942,7 +34942,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -34953,7 +34953,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -34968,11 +34968,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -34983,11 +34983,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -34998,11 +34998,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -35013,7 +35013,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -35028,7 +35028,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -35043,11 +35043,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -35058,11 +35058,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -35192,7 +35192,7 @@ }, "XPosition": { "type": "float", - "value": 105.8183670043945 + "value": 105.81836700439453 }, "YOrientation": { "type": "float", @@ -35200,7 +35200,7 @@ }, "YPosition": { "type": "float", - "value": 155.6688079833984 + "value": 155.66880798339844 }, "ZOrientation": { "type": "float", @@ -35208,7 +35208,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999995708465576 + "value": 0.19999957084655762 } }, { @@ -35236,11 +35236,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -35251,11 +35251,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -35266,11 +35266,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -35281,11 +35281,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -35296,7 +35296,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -35315,7 +35315,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -35326,11 +35326,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -35345,7 +35345,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -35356,11 +35356,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -35371,11 +35371,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -35390,7 +35390,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -35405,7 +35405,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -35416,7 +35416,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -35431,11 +35431,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -35446,11 +35446,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -35461,11 +35461,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -35476,7 +35476,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -35491,7 +35491,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -35506,11 +35506,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -35521,11 +35521,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -35699,11 +35699,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -35714,11 +35714,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -35729,11 +35729,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -35744,11 +35744,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -35759,7 +35759,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -35778,7 +35778,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -35789,11 +35789,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -35808,7 +35808,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -35819,11 +35819,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -35834,11 +35834,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -35853,7 +35853,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -35868,7 +35868,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -35879,7 +35879,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -35894,11 +35894,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -35909,11 +35909,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -35924,11 +35924,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -35939,7 +35939,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -35954,7 +35954,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -35969,11 +35969,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -35984,11 +35984,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -36134,7 +36134,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -36162,11 +36162,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -36177,11 +36177,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -36192,11 +36192,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -36207,11 +36207,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -36222,7 +36222,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -36241,7 +36241,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -36252,11 +36252,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -36271,7 +36271,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -36282,11 +36282,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -36297,11 +36297,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -36316,7 +36316,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -36331,7 +36331,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -36342,7 +36342,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -36357,11 +36357,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -36372,11 +36372,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -36387,11 +36387,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -36402,7 +36402,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -36417,7 +36417,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -36432,11 +36432,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -36447,11 +36447,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -36581,7 +36581,7 @@ }, "XPosition": { "type": "float", - "value": 115.6367721557617 + "value": 115.63677215576172 }, "YOrientation": { "type": "float", @@ -36597,7 +36597,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -36625,11 +36625,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -36640,11 +36640,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -36655,11 +36655,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -36670,11 +36670,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -36685,7 +36685,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -36704,7 +36704,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -36715,11 +36715,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -36734,7 +36734,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -36745,11 +36745,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -36760,11 +36760,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -36779,7 +36779,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -36794,7 +36794,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -36805,7 +36805,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -36820,11 +36820,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -36835,11 +36835,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -36850,11 +36850,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -36865,7 +36865,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -36880,7 +36880,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -36895,11 +36895,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -36910,11 +36910,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -37044,7 +37044,7 @@ }, "XPosition": { "type": "float", - "value": 135.3796081542969 + "value": 135.37960815429688 }, "YOrientation": { "type": "float", @@ -37052,7 +37052,7 @@ }, "YPosition": { "type": "float", - "value": 135.7371520996094 + "value": 135.73715209960938 }, "ZOrientation": { "type": "float", @@ -37060,7 +37060,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -37088,11 +37088,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -37103,11 +37103,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -37118,11 +37118,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -37133,11 +37133,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -37148,7 +37148,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -37167,7 +37167,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -37178,11 +37178,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -37197,7 +37197,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -37208,11 +37208,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -37223,11 +37223,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -37242,7 +37242,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -37257,7 +37257,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -37268,7 +37268,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -37283,11 +37283,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -37298,11 +37298,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -37313,11 +37313,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -37328,7 +37328,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -37343,7 +37343,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -37358,11 +37358,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -37373,11 +37373,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -37515,7 +37515,7 @@ }, "YPosition": { "type": "float", - "value": 66.09665679931641 + "value": 66.0966567993164 }, "ZOrientation": { "type": "float", @@ -37523,7 +37523,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000038623809815 + "value": 0.20000386238098145 } }, { @@ -37551,11 +37551,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -37566,11 +37566,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -37581,11 +37581,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -37596,11 +37596,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -37611,7 +37611,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -37630,7 +37630,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -37641,11 +37641,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -37660,7 +37660,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -37671,11 +37671,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -37686,11 +37686,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -37705,7 +37705,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -37720,7 +37720,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -37731,7 +37731,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -37746,11 +37746,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -37761,11 +37761,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -37776,11 +37776,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -37791,7 +37791,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -37806,7 +37806,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -37821,11 +37821,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -37836,11 +37836,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -37970,7 +37970,7 @@ }, "XPosition": { "type": "float", - "value": 35.32824325561523 + "value": 35.328243255615234 }, "YOrientation": { "type": "float", @@ -37986,7 +37986,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -38014,11 +38014,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -38029,11 +38029,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -38044,11 +38044,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -38059,11 +38059,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -38074,7 +38074,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -38093,7 +38093,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -38104,11 +38104,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -38123,7 +38123,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -38134,11 +38134,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -38149,11 +38149,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -38168,7 +38168,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -38183,7 +38183,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -38194,7 +38194,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -38209,11 +38209,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -38224,11 +38224,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -38239,11 +38239,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -38254,7 +38254,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -38269,7 +38269,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -38284,11 +38284,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -38299,11 +38299,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -38433,7 +38433,7 @@ }, "XPosition": { "type": "float", - "value": 65.45547485351563 + "value": 65.45547485351562 }, "YOrientation": { "type": "float", @@ -38477,11 +38477,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -38492,11 +38492,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -38507,11 +38507,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -38522,11 +38522,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -38537,7 +38537,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -38556,7 +38556,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -38567,11 +38567,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -38586,7 +38586,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -38597,11 +38597,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -38612,11 +38612,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -38631,7 +38631,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -38646,7 +38646,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -38657,7 +38657,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -38672,11 +38672,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -38687,11 +38687,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -38702,11 +38702,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -38717,7 +38717,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -38732,7 +38732,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -38747,11 +38747,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -38762,11 +38762,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -38912,7 +38912,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -38940,11 +38940,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -38955,11 +38955,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -38970,11 +38970,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -38985,11 +38985,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -39000,7 +39000,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -39019,7 +39019,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -39030,11 +39030,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -39049,7 +39049,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -39060,11 +39060,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -39075,11 +39075,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -39094,7 +39094,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -39109,7 +39109,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -39120,7 +39120,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -39135,11 +39135,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -39150,11 +39150,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -39165,11 +39165,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -39180,7 +39180,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -39195,7 +39195,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -39210,11 +39210,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -39225,11 +39225,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -39375,7 +39375,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -39403,11 +39403,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -39418,11 +39418,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -39433,11 +39433,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -39448,11 +39448,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -39463,7 +39463,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -39482,7 +39482,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -39493,11 +39493,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -39512,7 +39512,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -39523,11 +39523,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -39538,11 +39538,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -39557,7 +39557,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -39572,7 +39572,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -39583,7 +39583,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -39598,11 +39598,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -39613,11 +39613,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -39628,11 +39628,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -39643,7 +39643,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -39658,7 +39658,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -39673,11 +39673,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -39688,11 +39688,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -39822,7 +39822,7 @@ }, "XPosition": { "type": "float", - "value": 15.62148475646973 + "value": 15.621484756469727 }, "YOrientation": { "type": "float", @@ -39838,7 +39838,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -39866,11 +39866,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -39881,11 +39881,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -39896,11 +39896,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -39911,11 +39911,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -39926,7 +39926,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -39945,7 +39945,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -39956,11 +39956,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -39975,7 +39975,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -39986,11 +39986,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -40001,11 +40001,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -40020,7 +40020,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -40035,7 +40035,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -40046,7 +40046,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -40061,11 +40061,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -40076,11 +40076,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -40091,11 +40091,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -40106,7 +40106,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -40121,7 +40121,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -40136,11 +40136,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -40151,11 +40151,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -40301,7 +40301,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -40329,11 +40329,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -40344,11 +40344,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -40359,11 +40359,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -40374,11 +40374,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -40389,7 +40389,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -40408,7 +40408,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -40419,11 +40419,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -40438,7 +40438,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -40449,11 +40449,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -40464,11 +40464,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -40483,7 +40483,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -40498,7 +40498,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -40509,7 +40509,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -40524,11 +40524,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -40539,11 +40539,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -40554,11 +40554,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -40569,7 +40569,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -40584,7 +40584,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -40599,11 +40599,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -40614,11 +40614,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -40748,7 +40748,7 @@ }, "XPosition": { "type": "float", - "value": 15.62148475646973 + "value": 15.621484756469727 }, "YOrientation": { "type": "float", @@ -40764,7 +40764,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -40792,11 +40792,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -40807,11 +40807,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -40822,11 +40822,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -40837,11 +40837,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -40852,7 +40852,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -40871,7 +40871,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -40882,11 +40882,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -40901,7 +40901,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -40912,11 +40912,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -40927,11 +40927,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -40946,7 +40946,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -40961,7 +40961,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -40972,7 +40972,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -40987,11 +40987,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -41002,11 +41002,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -41017,11 +41017,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -41032,7 +41032,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -41047,7 +41047,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -41062,11 +41062,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -41077,11 +41077,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -41219,7 +41219,7 @@ }, "YPosition": { "type": "float", - "value": 105.7316741943359 + "value": 105.73167419433594 }, "ZOrientation": { "type": "float", @@ -41227,7 +41227,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -41255,11 +41255,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -41270,11 +41270,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -41285,11 +41285,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -41300,11 +41300,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -41315,7 +41315,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -41334,7 +41334,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -41345,11 +41345,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -41364,7 +41364,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -41375,11 +41375,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -41390,11 +41390,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -41409,7 +41409,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -41424,7 +41424,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -41435,7 +41435,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -41450,11 +41450,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -41465,11 +41465,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -41480,11 +41480,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -41495,7 +41495,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -41510,7 +41510,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -41525,11 +41525,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -41540,11 +41540,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -41690,7 +41690,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -41718,11 +41718,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -41733,11 +41733,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -41748,11 +41748,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -41763,11 +41763,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -41778,7 +41778,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -41797,7 +41797,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -41808,11 +41808,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -41827,7 +41827,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -41838,11 +41838,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -41853,11 +41853,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -41872,7 +41872,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -41887,7 +41887,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -41898,7 +41898,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -41913,11 +41913,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -41928,11 +41928,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -41943,11 +41943,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -41958,7 +41958,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -41973,7 +41973,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -41988,11 +41988,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -42003,11 +42003,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -42145,7 +42145,7 @@ }, "YPosition": { "type": "float", - "value": 145.6945190429688 + "value": 145.69451904296875 }, "ZOrientation": { "type": "float", @@ -42153,7 +42153,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -42181,11 +42181,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -42196,11 +42196,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -42211,11 +42211,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -42226,11 +42226,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -42241,7 +42241,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -42260,7 +42260,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -42271,11 +42271,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -42290,7 +42290,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -42301,11 +42301,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -42316,11 +42316,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -42335,7 +42335,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -42350,7 +42350,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -42361,7 +42361,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -42376,11 +42376,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -42391,11 +42391,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -42406,11 +42406,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -42421,7 +42421,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -42436,7 +42436,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -42451,11 +42451,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -42466,11 +42466,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -42600,7 +42600,7 @@ }, "XPosition": { "type": "float", - "value": 15.30326843261719 + "value": 15.303268432617188 }, "YOrientation": { "type": "float", @@ -42608,7 +42608,7 @@ }, "YPosition": { "type": "float", - "value": 155.7801361083984 + "value": 155.78013610839844 }, "ZOrientation": { "type": "float", @@ -42616,7 +42616,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -42644,11 +42644,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -42659,11 +42659,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -42674,11 +42674,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -42689,11 +42689,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -42704,7 +42704,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -42723,7 +42723,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -42734,11 +42734,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -42753,7 +42753,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -42764,11 +42764,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -42779,11 +42779,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -42798,7 +42798,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -42813,7 +42813,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -42824,7 +42824,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -42839,11 +42839,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -42854,11 +42854,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -42869,11 +42869,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -42884,7 +42884,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -42899,7 +42899,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -42914,11 +42914,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -42929,11 +42929,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -43063,7 +43063,7 @@ }, "XPosition": { "type": "float", - "value": 25.65903282165527 + "value": 25.659032821655273 }, "YOrientation": { "type": "float", @@ -43071,7 +43071,7 @@ }, "YPosition": { "type": "float", - "value": 136.1492004394531 + "value": 136.14920043945312 }, "ZOrientation": { "type": "float", @@ -43079,7 +43079,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -43107,11 +43107,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -43122,11 +43122,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -43137,11 +43137,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -43152,11 +43152,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -43167,7 +43167,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -43186,7 +43186,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -43197,11 +43197,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -43216,7 +43216,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -43227,11 +43227,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -43242,11 +43242,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -43261,7 +43261,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -43276,7 +43276,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -43287,7 +43287,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -43302,11 +43302,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -43317,11 +43317,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -43332,11 +43332,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -43347,7 +43347,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -43362,7 +43362,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -43377,11 +43377,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -43392,11 +43392,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -43526,7 +43526,7 @@ }, "XPosition": { "type": "float", - "value": 25.5689811706543 + "value": 25.568981170654297 }, "YOrientation": { "type": "float", @@ -43534,7 +43534,7 @@ }, "YPosition": { "type": "float", - "value": 106.0724792480469 + "value": 106.07247924804688 }, "ZOrientation": { "type": "float", @@ -43542,7 +43542,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -43570,11 +43570,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -43585,11 +43585,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -43600,11 +43600,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -43615,11 +43615,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -43630,7 +43630,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -43649,7 +43649,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -43660,11 +43660,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -43679,7 +43679,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -43690,11 +43690,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -43705,11 +43705,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -43724,7 +43724,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -43739,7 +43739,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -43750,7 +43750,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -43765,11 +43765,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -43780,11 +43780,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -43795,11 +43795,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -43810,7 +43810,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -43825,7 +43825,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -43840,11 +43840,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -43855,11 +43855,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -43989,7 +43989,7 @@ }, "XPosition": { "type": "float", - "value": 15.66346836090088 + "value": 15.663468360900879 }, "YOrientation": { "type": "float", @@ -44005,7 +44005,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -44033,11 +44033,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -44048,11 +44048,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -44063,11 +44063,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -44078,11 +44078,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -44093,7 +44093,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -44112,7 +44112,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -44123,11 +44123,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -44142,7 +44142,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -44153,11 +44153,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -44168,11 +44168,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -44187,7 +44187,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -44202,7 +44202,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -44213,7 +44213,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -44228,11 +44228,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -44243,11 +44243,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -44258,11 +44258,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -44273,7 +44273,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -44288,7 +44288,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -44303,11 +44303,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -44318,11 +44318,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -44452,7 +44452,7 @@ }, "XPosition": { "type": "float", - "value": 15.48336887359619 + "value": 15.483368873596191 }, "YOrientation": { "type": "float", @@ -44460,7 +44460,7 @@ }, "YPosition": { "type": "float", - "value": 125.7934494018555 + "value": 125.79344940185547 }, "ZOrientation": { "type": "float", @@ -44496,11 +44496,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -44511,11 +44511,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -44526,11 +44526,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -44541,11 +44541,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -44556,7 +44556,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -44575,7 +44575,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -44586,11 +44586,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -44605,7 +44605,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -44616,11 +44616,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -44631,11 +44631,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -44650,7 +44650,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -44665,7 +44665,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -44676,7 +44676,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -44691,11 +44691,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -44706,11 +44706,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -44721,11 +44721,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -44736,7 +44736,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -44751,7 +44751,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -44766,11 +44766,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -44781,11 +44781,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -44923,7 +44923,7 @@ }, "YPosition": { "type": "float", - "value": 125.8834991455078 + "value": 125.88349914550781 }, "ZOrientation": { "type": "float", @@ -44931,7 +44931,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -44959,11 +44959,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -44974,11 +44974,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -44989,11 +44989,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -45004,11 +45004,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -45019,7 +45019,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -45038,7 +45038,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -45049,11 +45049,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -45068,7 +45068,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -45079,11 +45079,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -45094,11 +45094,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -45113,7 +45113,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -45128,7 +45128,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -45139,7 +45139,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -45154,11 +45154,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -45169,11 +45169,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -45184,11 +45184,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -45199,7 +45199,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -45214,7 +45214,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -45229,11 +45229,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -45244,11 +45244,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -45386,7 +45386,7 @@ }, "YPosition": { "type": "float", - "value": 105.7380676269531 + "value": 105.73806762695312 }, "ZOrientation": { "type": "float", @@ -45394,7 +45394,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -45422,11 +45422,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -45437,11 +45437,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -45452,11 +45452,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -45467,11 +45467,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -45482,7 +45482,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -45501,7 +45501,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -45512,11 +45512,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -45531,7 +45531,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -45542,11 +45542,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -45557,11 +45557,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -45576,7 +45576,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -45591,7 +45591,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -45602,7 +45602,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -45617,11 +45617,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -45632,11 +45632,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -45647,11 +45647,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -45662,7 +45662,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -45677,7 +45677,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -45692,11 +45692,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -45707,11 +45707,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -45841,7 +45841,7 @@ }, "XPosition": { "type": "float", - "value": 25.38888549804688 + "value": 25.388885498046875 }, "YOrientation": { "type": "float", @@ -45857,7 +45857,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -45885,11 +45885,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -45900,11 +45900,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -45915,11 +45915,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -45930,11 +45930,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -45945,7 +45945,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -45964,7 +45964,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -45975,11 +45975,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -45994,7 +45994,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -46005,11 +46005,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -46020,11 +46020,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -46039,7 +46039,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -46054,7 +46054,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -46065,7 +46065,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -46080,11 +46080,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -46095,11 +46095,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -46110,11 +46110,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -46125,7 +46125,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -46140,7 +46140,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -46155,11 +46155,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -46170,11 +46170,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -46304,7 +46304,7 @@ }, "XPosition": { "type": "float", - "value": 15.48336791992188 + "value": 15.483367919921875 }, "YOrientation": { "type": "float", @@ -46312,7 +46312,7 @@ }, "YPosition": { "type": "float", - "value": 105.9890594482422 + "value": 105.98905944824219 }, "ZOrientation": { "type": "float", @@ -46320,7 +46320,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -46348,11 +46348,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -46363,11 +46363,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -46378,11 +46378,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -46393,11 +46393,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -46408,7 +46408,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -46427,7 +46427,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -46438,11 +46438,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -46457,7 +46457,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -46468,11 +46468,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -46483,11 +46483,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -46502,7 +46502,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -46517,7 +46517,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -46528,7 +46528,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -46543,11 +46543,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -46558,11 +46558,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -46573,11 +46573,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -46588,7 +46588,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -46603,7 +46603,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -46618,11 +46618,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -46633,11 +46633,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -46767,7 +46767,7 @@ }, "XPosition": { "type": "float", - "value": 25.74908065795898 + "value": 25.749080657958984 }, "YOrientation": { "type": "float", @@ -46783,7 +46783,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -46811,11 +46811,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -46826,11 +46826,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -46841,11 +46841,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -46856,11 +46856,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -46871,7 +46871,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -46890,7 +46890,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -46901,11 +46901,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -46920,7 +46920,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -46931,11 +46931,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -46946,11 +46946,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -46965,7 +46965,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -46980,7 +46980,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -46991,7 +46991,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -47006,11 +47006,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -47021,11 +47021,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -47036,11 +47036,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -47051,7 +47051,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -47066,7 +47066,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -47081,11 +47081,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -47096,11 +47096,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -47246,7 +47246,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -47274,11 +47274,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -47289,11 +47289,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -47304,11 +47304,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -47319,11 +47319,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -47334,7 +47334,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -47353,7 +47353,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -47364,11 +47364,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -47383,7 +47383,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -47394,11 +47394,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -47409,11 +47409,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -47428,7 +47428,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -47443,7 +47443,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -47454,7 +47454,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -47469,11 +47469,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -47484,11 +47484,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -47499,11 +47499,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -47514,7 +47514,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -47529,7 +47529,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -47544,11 +47544,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -47559,11 +47559,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -47693,7 +47693,7 @@ }, "XPosition": { "type": "float", - "value": 115.4202728271484 + "value": 115.42027282714844 }, "YOrientation": { "type": "float", @@ -47709,7 +47709,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -47737,11 +47737,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -47752,11 +47752,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -47767,11 +47767,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -47782,11 +47782,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -47797,7 +47797,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -47816,7 +47816,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -47827,11 +47827,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -47846,7 +47846,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -47857,11 +47857,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -47872,11 +47872,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -47891,7 +47891,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -47906,7 +47906,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -47917,7 +47917,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -47932,11 +47932,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -47947,11 +47947,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -47962,11 +47962,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -47977,7 +47977,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -47992,7 +47992,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -48007,11 +48007,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -48022,11 +48022,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -48172,7 +48172,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -48200,11 +48200,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -48215,11 +48215,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -48230,11 +48230,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -48245,11 +48245,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -48260,7 +48260,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -48279,7 +48279,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -48290,11 +48290,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -48309,7 +48309,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -48320,11 +48320,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -48335,11 +48335,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -48354,7 +48354,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -48369,7 +48369,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -48380,7 +48380,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -48395,11 +48395,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -48410,11 +48410,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -48425,11 +48425,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -48440,7 +48440,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -48455,7 +48455,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -48470,11 +48470,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -48485,11 +48485,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -48619,7 +48619,7 @@ }, "XPosition": { "type": "float", - "value": 155.5028686523438 + "value": 155.50286865234375 }, "YOrientation": { "type": "float", @@ -48627,7 +48627,7 @@ }, "YPosition": { "type": "float", - "value": 106.1397247314453 + "value": 106.13972473144531 }, "ZOrientation": { "type": "float", @@ -48635,7 +48635,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -48663,11 +48663,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -48678,11 +48678,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -48693,11 +48693,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -48708,11 +48708,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -48723,7 +48723,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -48742,7 +48742,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -48753,11 +48753,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -48772,7 +48772,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -48783,11 +48783,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -48798,11 +48798,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -48817,7 +48817,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -48832,7 +48832,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -48843,7 +48843,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -48858,11 +48858,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -48873,11 +48873,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -48888,11 +48888,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -48903,7 +48903,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -48918,7 +48918,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -48933,11 +48933,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -48948,11 +48948,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -49082,7 +49082,7 @@ }, "XPosition": { "type": "float", - "value": 155.4319000244141 + "value": 155.43190002441406 }, "YOrientation": { "type": "float", @@ -49098,7 +49098,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -49126,11 +49126,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -49141,11 +49141,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -49156,11 +49156,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -49171,11 +49171,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -49186,7 +49186,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -49205,7 +49205,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -49216,11 +49216,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -49235,7 +49235,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -49246,11 +49246,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -49261,11 +49261,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -49280,7 +49280,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -49295,7 +49295,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -49306,7 +49306,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -49321,11 +49321,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -49336,11 +49336,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -49351,11 +49351,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -49366,7 +49366,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -49381,7 +49381,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -49396,11 +49396,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -49411,11 +49411,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -49545,7 +49545,7 @@ }, "XPosition": { "type": "float", - "value": 145.4556732177734 + "value": 145.45567321777344 }, "YOrientation": { "type": "float", @@ -49589,11 +49589,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -49604,11 +49604,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -49619,11 +49619,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -49634,11 +49634,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -49649,7 +49649,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -49668,7 +49668,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -49679,11 +49679,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -49698,7 +49698,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -49709,11 +49709,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -49724,11 +49724,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -49743,7 +49743,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -49758,7 +49758,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -49769,7 +49769,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -49784,11 +49784,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -49799,11 +49799,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -49814,11 +49814,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -49829,7 +49829,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -49844,7 +49844,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -49859,11 +49859,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -49874,11 +49874,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -50024,7 +50024,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -50052,11 +50052,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -50067,11 +50067,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -50082,11 +50082,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -50097,11 +50097,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -50112,7 +50112,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -50131,7 +50131,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -50142,11 +50142,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -50161,7 +50161,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -50172,11 +50172,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -50187,11 +50187,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -50206,7 +50206,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -50221,7 +50221,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -50232,7 +50232,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -50247,11 +50247,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -50262,11 +50262,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -50277,11 +50277,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -50292,7 +50292,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -50307,7 +50307,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -50322,11 +50322,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -50337,11 +50337,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -50471,7 +50471,7 @@ }, "XPosition": { "type": "float", - "value": 125.4735717773438 + "value": 125.47357177734375 }, "YOrientation": { "type": "float", @@ -50487,7 +50487,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -50515,11 +50515,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -50530,11 +50530,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -50545,11 +50545,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -50560,11 +50560,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -50575,7 +50575,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -50594,7 +50594,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -50605,11 +50605,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -50624,7 +50624,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -50635,11 +50635,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -50650,11 +50650,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -50669,7 +50669,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -50684,7 +50684,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -50695,7 +50695,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -50710,11 +50710,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -50725,11 +50725,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -50740,11 +50740,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -50755,7 +50755,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -50770,7 +50770,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -50785,11 +50785,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -50800,11 +50800,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -50934,7 +50934,7 @@ }, "XPosition": { "type": "float", - "value": 135.7204742431641 + "value": 135.72047424316406 }, "YOrientation": { "type": "float", @@ -50950,7 +50950,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -50978,11 +50978,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -50993,11 +50993,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -51008,11 +51008,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -51023,11 +51023,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -51038,7 +51038,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -51057,7 +51057,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -51068,11 +51068,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -51087,7 +51087,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -51098,11 +51098,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -51113,11 +51113,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -51132,7 +51132,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -51147,7 +51147,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -51158,7 +51158,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -51173,11 +51173,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -51188,11 +51188,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -51203,11 +51203,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -51218,7 +51218,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -51233,7 +51233,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -51248,11 +51248,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -51263,11 +51263,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -51413,7 +51413,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -51441,11 +51441,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -51456,11 +51456,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -51471,11 +51471,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -51486,11 +51486,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -51501,7 +51501,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -51520,7 +51520,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -51531,11 +51531,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -51550,7 +51550,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -51561,11 +51561,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -51576,11 +51576,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -51595,7 +51595,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -51610,7 +51610,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -51621,7 +51621,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -51636,11 +51636,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -51651,11 +51651,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -51666,11 +51666,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -51681,7 +51681,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -51696,7 +51696,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -51711,11 +51711,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -51726,11 +51726,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -51876,7 +51876,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -51904,11 +51904,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -51919,11 +51919,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -51934,11 +51934,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -51949,11 +51949,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -51964,7 +51964,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -51983,7 +51983,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -51994,11 +51994,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -52013,7 +52013,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -52024,11 +52024,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -52039,11 +52039,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -52058,7 +52058,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -52073,7 +52073,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -52084,7 +52084,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -52099,11 +52099,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -52114,11 +52114,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -52129,11 +52129,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -52144,7 +52144,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -52159,7 +52159,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -52174,11 +52174,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -52189,11 +52189,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -52323,7 +52323,7 @@ }, "XPosition": { "type": "float", - "value": 95.31057739257813 + "value": 95.31057739257812 }, "YOrientation": { "type": "float", @@ -52339,7 +52339,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -52367,11 +52367,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -52382,11 +52382,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -52397,11 +52397,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -52412,11 +52412,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -52427,7 +52427,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -52446,7 +52446,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -52457,11 +52457,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -52476,7 +52476,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -52487,11 +52487,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -52502,11 +52502,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -52521,7 +52521,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -52536,7 +52536,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -52547,7 +52547,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -52562,11 +52562,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -52577,11 +52577,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -52592,11 +52592,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -52607,7 +52607,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -52622,7 +52622,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -52637,11 +52637,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -52652,11 +52652,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -52802,7 +52802,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -52830,11 +52830,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -52845,11 +52845,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -52860,11 +52860,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -52875,11 +52875,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -52890,7 +52890,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -52909,7 +52909,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -52920,11 +52920,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -52939,7 +52939,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -52950,11 +52950,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -52965,11 +52965,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -52984,7 +52984,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -52999,7 +52999,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -53010,7 +53010,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -53025,11 +53025,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -53040,11 +53040,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -53055,11 +53055,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -53070,7 +53070,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -53085,7 +53085,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -53100,11 +53100,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -53115,11 +53115,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -53265,7 +53265,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -53293,11 +53293,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -53308,11 +53308,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -53323,11 +53323,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -53338,11 +53338,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -53353,7 +53353,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -53372,7 +53372,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -53383,11 +53383,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -53402,7 +53402,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -53413,11 +53413,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -53428,11 +53428,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -53447,7 +53447,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -53462,7 +53462,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -53473,7 +53473,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -53488,11 +53488,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -53503,11 +53503,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -53518,11 +53518,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -53533,7 +53533,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -53548,7 +53548,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -53563,11 +53563,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -53578,11 +53578,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -53728,7 +53728,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -53756,11 +53756,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -53771,11 +53771,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -53786,11 +53786,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -53801,11 +53801,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -53816,7 +53816,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -53835,7 +53835,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -53846,11 +53846,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -53865,7 +53865,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -53876,11 +53876,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -53891,11 +53891,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -53910,7 +53910,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -53925,7 +53925,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -53936,7 +53936,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -53951,11 +53951,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -53966,11 +53966,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -53981,11 +53981,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -53996,7 +53996,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -54011,7 +54011,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -54026,11 +54026,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -54041,11 +54041,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -54175,7 +54175,7 @@ }, "XPosition": { "type": "float", - "value": 55.41921234130859 + "value": 55.419212341308594 }, "YOrientation": { "type": "float", @@ -54191,7 +54191,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999995708465576 + "value": 0.19999957084655762 } }, { @@ -54219,11 +54219,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -54234,11 +54234,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -54249,11 +54249,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -54264,11 +54264,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -54279,7 +54279,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -54298,7 +54298,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -54309,11 +54309,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -54328,7 +54328,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -54339,11 +54339,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -54354,11 +54354,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -54373,7 +54373,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -54388,7 +54388,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -54399,7 +54399,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -54414,11 +54414,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -54429,11 +54429,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -54444,11 +54444,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -54459,7 +54459,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -54474,7 +54474,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -54489,11 +54489,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -54504,11 +54504,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -54654,7 +54654,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200002908706665 + "value": 0.20000290870666504 } }, { @@ -54682,11 +54682,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -54697,11 +54697,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -54712,11 +54712,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -54727,11 +54727,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -54742,7 +54742,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -54761,7 +54761,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -54772,11 +54772,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -54791,7 +54791,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -54802,11 +54802,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -54817,11 +54817,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -54836,7 +54836,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -54851,7 +54851,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -54862,7 +54862,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -54877,11 +54877,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -54892,11 +54892,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -54907,11 +54907,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -54922,7 +54922,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -54937,7 +54937,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -54952,11 +54952,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -54967,11 +54967,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -55145,11 +55145,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -55160,11 +55160,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -55175,11 +55175,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -55190,11 +55190,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -55205,7 +55205,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -55224,7 +55224,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -55235,11 +55235,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -55254,7 +55254,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -55265,11 +55265,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -55280,11 +55280,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -55299,7 +55299,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -55314,7 +55314,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -55325,7 +55325,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -55340,11 +55340,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -55355,11 +55355,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -55370,11 +55370,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -55385,7 +55385,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -55400,7 +55400,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -55415,11 +55415,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -55430,11 +55430,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -55564,7 +55564,7 @@ }, "XPosition": { "type": "float", - "value": 115.8500442504883 + "value": 115.85004425048828 }, "YOrientation": { "type": "float", @@ -55608,11 +55608,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -55623,11 +55623,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -55638,11 +55638,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -55653,11 +55653,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -55668,7 +55668,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -55687,7 +55687,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -55698,11 +55698,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -55717,7 +55717,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -55728,11 +55728,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -55743,11 +55743,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -55762,7 +55762,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -55777,7 +55777,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -55788,7 +55788,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -55803,11 +55803,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -55818,11 +55818,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -55833,11 +55833,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -55848,7 +55848,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -55863,7 +55863,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -55878,11 +55878,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -55893,11 +55893,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -56027,7 +56027,7 @@ }, "XPosition": { "type": "float", - "value": 45.49661254882813 + "value": 45.496612548828125 }, "YOrientation": { "type": "float", @@ -56035,7 +56035,7 @@ }, "YPosition": { "type": "float", - "value": 105.8790969848633 + "value": 105.87909698486328 }, "ZOrientation": { "type": "float", @@ -56043,7 +56043,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -56071,11 +56071,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -56086,11 +56086,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -56101,11 +56101,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -56116,11 +56116,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -56131,7 +56131,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -56150,7 +56150,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -56161,11 +56161,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -56180,7 +56180,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -56191,11 +56191,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -56206,11 +56206,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -56225,7 +56225,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -56240,7 +56240,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -56251,7 +56251,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -56266,11 +56266,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -56281,11 +56281,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -56296,11 +56296,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -56311,7 +56311,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -56326,7 +56326,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -56341,11 +56341,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -56356,11 +56356,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -56506,7 +56506,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -56534,11 +56534,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -56549,11 +56549,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -56564,11 +56564,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -56579,11 +56579,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -56594,7 +56594,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -56613,7 +56613,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -56624,11 +56624,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -56643,7 +56643,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -56654,11 +56654,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -56669,11 +56669,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -56688,7 +56688,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -56703,7 +56703,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -56714,7 +56714,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -56729,11 +56729,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -56744,11 +56744,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -56759,11 +56759,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -56774,7 +56774,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -56789,7 +56789,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -56804,11 +56804,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -56819,11 +56819,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -56997,11 +56997,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -57012,11 +57012,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -57027,11 +57027,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -57042,11 +57042,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -57057,7 +57057,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -57076,7 +57076,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -57087,11 +57087,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -57106,7 +57106,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -57117,11 +57117,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -57132,11 +57132,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -57151,7 +57151,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -57166,7 +57166,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -57177,7 +57177,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -57192,11 +57192,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -57207,11 +57207,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -57222,11 +57222,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -57237,7 +57237,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -57252,7 +57252,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -57267,11 +57267,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -57282,11 +57282,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -57424,7 +57424,7 @@ }, "YPosition": { "type": "float", - "value": 105.7379302978516 + "value": 105.73793029785156 }, "ZOrientation": { "type": "float", @@ -57460,11 +57460,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -57475,11 +57475,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -57490,11 +57490,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -57505,11 +57505,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -57520,7 +57520,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -57539,7 +57539,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -57550,11 +57550,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -57569,7 +57569,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -57580,11 +57580,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -57595,11 +57595,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -57614,7 +57614,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -57629,7 +57629,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -57640,7 +57640,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -57655,11 +57655,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -57670,11 +57670,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -57685,11 +57685,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -57700,7 +57700,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -57715,7 +57715,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -57730,11 +57730,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -57745,11 +57745,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -57879,7 +57879,7 @@ }, "XPosition": { "type": "float", - "value": 75.32766723632813 + "value": 75.32766723632812 }, "YOrientation": { "type": "float", @@ -57887,7 +57887,7 @@ }, "YPosition": { "type": "float", - "value": 115.6619567871094 + "value": 115.66195678710938 }, "ZOrientation": { "type": "float", @@ -57895,7 +57895,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -57923,11 +57923,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -57938,11 +57938,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -57953,11 +57953,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -57968,11 +57968,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -57983,7 +57983,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -58002,7 +58002,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -58013,11 +58013,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -58032,7 +58032,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -58043,11 +58043,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -58058,11 +58058,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -58077,7 +58077,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -58092,7 +58092,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -58103,7 +58103,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -58118,11 +58118,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -58133,11 +58133,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -58148,11 +58148,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -58163,7 +58163,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -58178,7 +58178,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -58193,11 +58193,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -58208,11 +58208,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -58358,7 +58358,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -58386,11 +58386,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -58401,11 +58401,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -58416,11 +58416,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -58431,11 +58431,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -58446,7 +58446,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -58465,7 +58465,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -58476,11 +58476,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -58495,7 +58495,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -58506,11 +58506,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -58521,11 +58521,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -58540,7 +58540,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -58555,7 +58555,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -58566,7 +58566,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -58581,11 +58581,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -58596,11 +58596,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -58611,11 +58611,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -58626,7 +58626,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -58641,7 +58641,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -58656,11 +58656,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -58671,11 +58671,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -58821,7 +58821,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -58849,11 +58849,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -58864,11 +58864,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -58879,11 +58879,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -58894,11 +58894,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -58909,7 +58909,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -58928,7 +58928,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -58939,11 +58939,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -58958,7 +58958,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -58969,11 +58969,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -58984,11 +58984,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -59003,7 +59003,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -59018,7 +59018,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -59029,7 +59029,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -59044,11 +59044,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -59059,11 +59059,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -59074,11 +59074,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -59089,7 +59089,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -59104,7 +59104,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -59119,11 +59119,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -59134,11 +59134,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -59276,7 +59276,7 @@ }, "YPosition": { "type": "float", - "value": 115.885368347168 + "value": 115.88536834716797 }, "ZOrientation": { "type": "float", @@ -59312,11 +59312,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -59327,11 +59327,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -59342,11 +59342,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -59357,11 +59357,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -59372,7 +59372,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -59391,7 +59391,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -59402,11 +59402,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -59421,7 +59421,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -59432,11 +59432,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -59447,11 +59447,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -59466,7 +59466,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -59481,7 +59481,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -59492,7 +59492,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -59507,11 +59507,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -59522,11 +59522,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -59537,11 +59537,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -59552,7 +59552,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -59567,7 +59567,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -59582,11 +59582,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -59597,11 +59597,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -59731,7 +59731,7 @@ }, "XPosition": { "type": "float", - "value": 25.69202041625977 + "value": 25.692020416259766 }, "YOrientation": { "type": "float", @@ -59747,7 +59747,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -59775,11 +59775,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -59790,11 +59790,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -59805,11 +59805,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -59820,11 +59820,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -59835,7 +59835,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -59854,7 +59854,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -59865,11 +59865,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -59884,7 +59884,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -59895,11 +59895,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -59910,11 +59910,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -59929,7 +59929,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -59944,7 +59944,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -59955,7 +59955,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -59970,11 +59970,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -59985,11 +59985,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -60000,11 +60000,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -60015,7 +60015,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -60030,7 +60030,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -60045,11 +60045,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -60060,11 +60060,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -60194,7 +60194,7 @@ }, "XPosition": { "type": "float", - "value": 35.42366790771484 + "value": 35.423667907714844 }, "YOrientation": { "type": "float", @@ -60202,7 +60202,7 @@ }, "YPosition": { "type": "float", - "value": 116.1967849731445 + "value": 116.19678497314453 }, "ZOrientation": { "type": "float", @@ -60210,7 +60210,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -60238,11 +60238,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -60253,11 +60253,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -60268,11 +60268,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -60283,11 +60283,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -60298,7 +60298,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -60317,7 +60317,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -60328,11 +60328,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -60347,7 +60347,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -60358,11 +60358,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -60373,11 +60373,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -60392,7 +60392,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -60407,7 +60407,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -60418,7 +60418,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -60433,11 +60433,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -60448,11 +60448,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -60463,11 +60463,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -60478,7 +60478,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -60493,7 +60493,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -60508,11 +60508,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -60523,11 +60523,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -60673,7 +60673,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -60701,11 +60701,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -60716,11 +60716,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -60731,11 +60731,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -60746,11 +60746,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -60761,7 +60761,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -60780,7 +60780,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -60791,11 +60791,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -60810,7 +60810,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -60821,11 +60821,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -60836,11 +60836,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -60855,7 +60855,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -60870,7 +60870,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -60881,7 +60881,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -60896,11 +60896,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -60911,11 +60911,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -60926,11 +60926,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -60941,7 +60941,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -60956,7 +60956,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -60971,11 +60971,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -60986,11 +60986,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -61120,7 +61120,7 @@ }, "XPosition": { "type": "float", - "value": 125.3302383422852 + "value": 125.33023834228516 }, "YOrientation": { "type": "float", @@ -61136,7 +61136,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000038623809815 + "value": 0.20000386238098145 } }, { @@ -61164,11 +61164,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -61179,11 +61179,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -61194,11 +61194,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -61209,11 +61209,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -61224,7 +61224,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -61243,7 +61243,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -61254,11 +61254,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -61273,7 +61273,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -61284,11 +61284,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -61299,11 +61299,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -61318,7 +61318,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -61333,7 +61333,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -61344,7 +61344,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -61359,11 +61359,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -61374,11 +61374,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -61389,11 +61389,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -61404,7 +61404,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -61419,7 +61419,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -61434,11 +61434,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -61449,11 +61449,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -61583,7 +61583,7 @@ }, "XPosition": { "type": "float", - "value": 145.4843902587891 + "value": 145.48439025878906 }, "YOrientation": { "type": "float", @@ -61591,7 +61591,7 @@ }, "YPosition": { "type": "float", - "value": 105.801155090332 + "value": 105.80115509033203 }, "ZOrientation": { "type": "float", @@ -61599,7 +61599,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000038623809815 + "value": 0.20000386238098145 } }, { @@ -61627,11 +61627,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -61642,11 +61642,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -61657,11 +61657,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -61672,11 +61672,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -61687,7 +61687,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -61706,7 +61706,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -61717,11 +61717,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -61736,7 +61736,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -61747,11 +61747,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -61762,11 +61762,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -61781,7 +61781,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -61796,7 +61796,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -61807,7 +61807,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -61822,11 +61822,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -61837,11 +61837,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -61852,11 +61852,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -61867,7 +61867,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -61882,7 +61882,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -61897,11 +61897,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -61912,11 +61912,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -62054,7 +62054,7 @@ }, "YPosition": { "type": "float", - "value": 105.801155090332 + "value": 105.80115509033203 }, "ZOrientation": { "type": "float", @@ -62062,7 +62062,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -62090,11 +62090,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -62105,11 +62105,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -62120,11 +62120,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -62135,11 +62135,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -62150,7 +62150,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -62169,7 +62169,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -62180,11 +62180,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -62199,7 +62199,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -62210,11 +62210,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -62225,11 +62225,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -62244,7 +62244,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -62259,7 +62259,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -62270,7 +62270,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -62285,11 +62285,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -62300,11 +62300,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -62315,11 +62315,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -62330,7 +62330,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -62345,7 +62345,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -62360,11 +62360,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -62375,11 +62375,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -62517,7 +62517,7 @@ }, "YPosition": { "type": "float", - "value": 105.9706726074219 + "value": 105.97067260742188 }, "ZOrientation": { "type": "float", @@ -62525,7 +62525,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -62553,11 +62553,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -62568,11 +62568,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -62583,11 +62583,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -62598,11 +62598,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -62613,7 +62613,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -62632,7 +62632,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -62643,11 +62643,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -62662,7 +62662,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -62673,11 +62673,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -62688,11 +62688,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -62707,7 +62707,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -62722,7 +62722,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -62733,7 +62733,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -62748,11 +62748,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -62763,11 +62763,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -62778,11 +62778,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -62793,7 +62793,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -62808,7 +62808,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -62823,11 +62823,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -62838,11 +62838,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -62972,7 +62972,7 @@ }, "XPosition": { "type": "float", - "value": 45.49099731445313 + "value": 45.490997314453125 }, "YOrientation": { "type": "float", @@ -62988,7 +62988,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -63016,11 +63016,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -63031,11 +63031,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -63046,11 +63046,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -63061,11 +63061,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -63076,7 +63076,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -63095,7 +63095,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -63106,11 +63106,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -63125,7 +63125,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -63136,11 +63136,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -63151,11 +63151,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -63170,7 +63170,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -63185,7 +63185,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -63196,7 +63196,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -63211,11 +63211,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -63226,11 +63226,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -63241,11 +63241,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -63256,7 +63256,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -63271,7 +63271,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -63286,11 +63286,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -63301,11 +63301,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -63443,7 +63443,7 @@ }, "YPosition": { "type": "float", - "value": 126.0774993896484 + "value": 126.07749938964844 }, "ZOrientation": { "type": "float", @@ -63479,11 +63479,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -63494,11 +63494,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -63509,11 +63509,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -63524,11 +63524,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -63539,7 +63539,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -63558,7 +63558,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -63569,11 +63569,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -63588,7 +63588,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -63599,11 +63599,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -63614,11 +63614,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -63633,7 +63633,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -63648,7 +63648,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -63659,7 +63659,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -63674,11 +63674,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -63689,11 +63689,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -63704,11 +63704,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -63719,7 +63719,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -63734,7 +63734,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -63749,11 +63749,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -63764,11 +63764,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -63914,7 +63914,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -63942,11 +63942,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -63957,11 +63957,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -63972,11 +63972,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -63987,11 +63987,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -64002,7 +64002,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -64021,7 +64021,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -64032,11 +64032,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -64051,7 +64051,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -64062,11 +64062,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -64077,11 +64077,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -64096,7 +64096,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -64111,7 +64111,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -64122,7 +64122,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -64137,11 +64137,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -64152,11 +64152,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -64167,11 +64167,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -64182,7 +64182,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -64197,7 +64197,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -64212,11 +64212,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -64227,11 +64227,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -64369,7 +64369,7 @@ }, "YPosition": { "type": "float", - "value": 135.7021789550781 + "value": 135.70217895507812 }, "ZOrientation": { "type": "float", @@ -64377,7 +64377,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -64405,11 +64405,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -64420,11 +64420,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -64435,11 +64435,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -64450,11 +64450,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -64465,7 +64465,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -64484,7 +64484,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -64495,11 +64495,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -64514,7 +64514,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -64525,11 +64525,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -64540,11 +64540,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -64559,7 +64559,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -64574,7 +64574,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -64585,7 +64585,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -64600,11 +64600,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -64615,11 +64615,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -64630,11 +64630,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -64645,7 +64645,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -64660,7 +64660,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -64675,11 +64675,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -64690,11 +64690,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -64840,7 +64840,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -64868,11 +64868,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -64883,11 +64883,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -64898,11 +64898,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -64913,11 +64913,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -64928,7 +64928,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -64947,7 +64947,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -64958,11 +64958,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -64977,7 +64977,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -64988,11 +64988,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -65003,11 +65003,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -65022,7 +65022,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -65037,7 +65037,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -65048,7 +65048,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -65063,11 +65063,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -65078,11 +65078,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -65093,11 +65093,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -65108,7 +65108,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -65123,7 +65123,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -65138,11 +65138,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -65153,11 +65153,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -65303,7 +65303,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -65331,11 +65331,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -65346,11 +65346,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -65361,11 +65361,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -65376,11 +65376,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -65391,7 +65391,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -65410,7 +65410,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -65421,11 +65421,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -65440,7 +65440,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -65451,11 +65451,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -65466,11 +65466,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -65485,7 +65485,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -65500,7 +65500,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -65511,7 +65511,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -65526,11 +65526,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -65541,11 +65541,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -65556,11 +65556,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -65571,7 +65571,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -65586,7 +65586,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -65601,11 +65601,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -65616,11 +65616,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -65794,11 +65794,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -65809,11 +65809,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -65824,11 +65824,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -65839,11 +65839,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -65854,7 +65854,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -65873,7 +65873,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -65884,11 +65884,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -65903,7 +65903,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -65914,11 +65914,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -65929,11 +65929,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -65948,7 +65948,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -65963,7 +65963,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -65974,7 +65974,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -65989,11 +65989,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -66004,11 +66004,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -66019,11 +66019,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -66034,7 +66034,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -66049,7 +66049,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -66064,11 +66064,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -66079,11 +66079,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -66221,7 +66221,7 @@ }, "YPosition": { "type": "float", - "value": 145.8047485351563 + "value": 145.80474853515625 }, "ZOrientation": { "type": "float", @@ -66229,7 +66229,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -66257,11 +66257,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -66272,11 +66272,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -66287,11 +66287,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -66302,11 +66302,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -66317,7 +66317,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -66336,7 +66336,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -66347,11 +66347,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -66366,7 +66366,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -66377,11 +66377,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -66392,11 +66392,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -66411,7 +66411,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -66426,7 +66426,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -66437,7 +66437,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -66452,11 +66452,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -66467,11 +66467,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -66482,11 +66482,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -66497,7 +66497,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -66512,7 +66512,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -66527,11 +66527,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -66542,11 +66542,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -66684,7 +66684,7 @@ }, "YPosition": { "type": "float", - "value": 155.8001403808594 + "value": 155.80014038085938 }, "ZOrientation": { "type": "float", @@ -66692,7 +66692,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -66720,11 +66720,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -66735,11 +66735,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -66750,11 +66750,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -66765,11 +66765,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -66780,7 +66780,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -66799,7 +66799,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -66810,11 +66810,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -66829,7 +66829,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -66840,11 +66840,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -66855,11 +66855,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -66874,7 +66874,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -66889,7 +66889,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -66900,7 +66900,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -66915,11 +66915,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -66930,11 +66930,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -66945,11 +66945,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -66960,7 +66960,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -66975,7 +66975,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -66990,11 +66990,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -67005,11 +67005,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -67139,7 +67139,7 @@ }, "XPosition": { "type": "float", - "value": 25.75152397155762 + "value": 25.751523971557617 }, "YOrientation": { "type": "float", @@ -67147,7 +67147,7 @@ }, "YPosition": { "type": "float", - "value": 155.7629089355469 + "value": 155.76290893554688 }, "ZOrientation": { "type": "float", @@ -67155,7 +67155,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000010013580322 + "value": 0.20000100135803223 } }, { @@ -67183,11 +67183,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -67198,11 +67198,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -67213,11 +67213,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -67228,11 +67228,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -67243,7 +67243,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -67262,7 +67262,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -67273,11 +67273,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -67292,7 +67292,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -67303,11 +67303,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -67318,11 +67318,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -67337,7 +67337,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -67352,7 +67352,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -67363,7 +67363,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -67378,11 +67378,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -67393,11 +67393,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -67408,11 +67408,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -67423,7 +67423,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -67438,7 +67438,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -67453,11 +67453,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -67468,11 +67468,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -67610,7 +67610,7 @@ }, "YPosition": { "type": "float", - "value": 135.7196350097656 + "value": 135.71963500976562 }, "ZOrientation": { "type": "float", @@ -67618,7 +67618,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -67646,11 +67646,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -67661,11 +67661,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -67676,11 +67676,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -67691,11 +67691,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -67706,7 +67706,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -67725,7 +67725,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -67736,11 +67736,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -67755,7 +67755,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -67766,11 +67766,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -67781,11 +67781,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -67800,7 +67800,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -67815,7 +67815,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -67826,7 +67826,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -67841,11 +67841,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -67856,11 +67856,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -67871,11 +67871,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -67886,7 +67886,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -67901,7 +67901,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -67916,11 +67916,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -67931,11 +67931,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -68073,7 +68073,7 @@ }, "YPosition": { "type": "float", - "value": 136.1657562255859 + "value": 136.16575622558594 }, "ZOrientation": { "type": "float", @@ -68081,7 +68081,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -68109,11 +68109,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -68124,11 +68124,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -68139,11 +68139,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -68154,11 +68154,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -68169,7 +68169,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -68188,7 +68188,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -68199,11 +68199,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -68218,7 +68218,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -68229,11 +68229,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -68244,11 +68244,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -68263,7 +68263,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -68278,7 +68278,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -68289,7 +68289,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -68304,11 +68304,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -68319,11 +68319,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -68334,11 +68334,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -68349,7 +68349,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -68364,7 +68364,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -68379,11 +68379,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -68394,11 +68394,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -68544,7 +68544,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -68572,11 +68572,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -68587,11 +68587,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -68602,11 +68602,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -68617,11 +68617,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -68632,7 +68632,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -68651,7 +68651,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -68662,11 +68662,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -68681,7 +68681,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -68692,11 +68692,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -68707,11 +68707,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -68726,7 +68726,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -68741,7 +68741,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -68752,7 +68752,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -68767,11 +68767,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -68782,11 +68782,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -68797,11 +68797,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -68812,7 +68812,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -68827,7 +68827,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -68842,11 +68842,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -68857,11 +68857,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -68991,7 +68991,7 @@ }, "XPosition": { "type": "float", - "value": 95.34055328369141 + "value": 95.3405532836914 }, "YOrientation": { "type": "float", @@ -69007,7 +69007,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000019550323486 + "value": 0.20000195503234863 } }, { @@ -69035,11 +69035,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -69050,11 +69050,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -69065,11 +69065,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -69080,11 +69080,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -69095,7 +69095,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -69114,7 +69114,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -69125,11 +69125,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -69144,7 +69144,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -69155,11 +69155,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -69170,11 +69170,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -69189,7 +69189,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -69204,7 +69204,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -69215,7 +69215,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -69230,11 +69230,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -69245,11 +69245,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -69260,11 +69260,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -69275,7 +69275,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -69290,7 +69290,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -69305,11 +69305,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -69320,11 +69320,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -69470,7 +69470,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -69498,11 +69498,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -69513,11 +69513,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -69528,11 +69528,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -69543,11 +69543,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -69558,7 +69558,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -69577,7 +69577,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -69588,11 +69588,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -69607,7 +69607,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -69618,11 +69618,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -69633,11 +69633,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -69652,7 +69652,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -69667,7 +69667,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -69678,7 +69678,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -69693,11 +69693,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -69708,11 +69708,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -69723,11 +69723,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -69738,7 +69738,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -69753,7 +69753,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -69768,11 +69768,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -69783,11 +69783,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -69917,7 +69917,7 @@ }, "XPosition": { "type": "float", - "value": 85.70761871337891 + "value": 85.7076187133789 }, "YOrientation": { "type": "float", @@ -69925,7 +69925,7 @@ }, "YPosition": { "type": "float", - "value": 145.5891265869141 + "value": 145.58912658691406 }, "ZOrientation": { "type": "float", @@ -69933,7 +69933,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -69961,11 +69961,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -69976,11 +69976,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -69991,11 +69991,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -70006,11 +70006,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -70021,7 +70021,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -70040,7 +70040,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -70051,11 +70051,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -70070,7 +70070,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -70081,11 +70081,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -70096,11 +70096,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -70115,7 +70115,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -70130,7 +70130,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -70141,7 +70141,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -70156,11 +70156,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -70171,11 +70171,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -70186,11 +70186,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -70201,7 +70201,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -70216,7 +70216,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -70231,11 +70231,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -70246,11 +70246,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -70388,7 +70388,7 @@ }, "YPosition": { "type": "float", - "value": 145.9153137207031 + "value": 145.91531372070312 }, "ZOrientation": { "type": "float", @@ -70396,7 +70396,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200000524520874 + "value": 0.20000052452087402 } }, { @@ -70424,11 +70424,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.025417327880859 + "value": -3.0254173278808594 }, "PointY": { "type": "float", - "value": 1.006362915039063 + "value": 1.0063629150390625 }, "PointZ": { "type": "float", @@ -70439,11 +70439,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.512710571289063 + "value": -1.5127105712890625 }, "PointY": { "type": "float", - "value": -0.4936904907226563 + "value": -0.49369049072265625 }, "PointZ": { "type": "float", @@ -70454,11 +70454,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.519039154052734 + "value": -1.5190391540527344 }, "PointY": { "type": "float", - "value": -1.481063842773438 + "value": -1.4810638427734375 }, "PointZ": { "type": "float", @@ -70469,11 +70469,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.010276794433594 + "value": -3.0102767944335938 }, "PointY": { "type": "float", - "value": -2.999496459960938 + "value": -2.9994964599609375 }, "PointZ": { "type": "float", @@ -70484,7 +70484,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.022621154785156 + "value": -3.0226211547851562 }, "PointY": { "type": "float", @@ -70503,7 +70503,7 @@ }, "PointY": { "type": "float", - "value": -3.499496459960938 + "value": -3.4994964599609375 }, "PointZ": { "type": "float", @@ -70514,11 +70514,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.010269165039063 + "value": -1.0102691650390625 }, "PointY": { "type": "float", - "value": -1.987144470214844 + "value": -1.9871444702148438 }, "PointZ": { "type": "float", @@ -70533,7 +70533,7 @@ }, "PointY": { "type": "float", - "value": -1.987148284912109 + "value": -1.9871482849121094 }, "PointZ": { "type": "float", @@ -70544,11 +70544,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.511528015136719 + "value": 1.5115280151367188 }, "PointY": { "type": "float", - "value": -3.480979919433594 + "value": -3.4809799194335938 }, "PointZ": { "type": "float", @@ -70559,11 +70559,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999183654785156 + "value": 1.9991836547851562 }, "PointY": { "type": "float", - "value": -3.493324279785156 + "value": -3.4933242797851562 }, "PointZ": { "type": "float", @@ -70578,7 +70578,7 @@ }, "PointY": { "type": "float", - "value": -2.993324279785156 + "value": -2.9933242797851562 }, "PointZ": { "type": "float", @@ -70593,7 +70593,7 @@ }, "PointY": { "type": "float", - "value": -1.487144470214844 + "value": -1.4871444702148438 }, "PointZ": { "type": "float", @@ -70604,7 +70604,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.4930038452148438 + "value": 0.49300384521484375 }, "PointY": { "type": "float", @@ -70619,11 +70619,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.999927520751953 + "value": 1.9999275207519531 }, "PointY": { "type": "float", - "value": 1.015377044677734 + "value": 1.0153770446777344 }, "PointZ": { "type": "float", @@ -70634,11 +70634,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.007808685302734 + "value": 2.0078086853027344 }, "PointY": { "type": "float", - "value": 1.519588470458984 + "value": 1.5195884704589844 }, "PointZ": { "type": "float", @@ -70649,11 +70649,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.487838745117188 + "value": 1.4878387451171875 }, "PointY": { "type": "float", - "value": 1.527469635009766 + "value": 1.5274696350097656 }, "PointZ": { "type": "float", @@ -70664,7 +70664,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.01651382446289063 + "value": -0.016513824462890625 }, "PointY": { "type": "float", @@ -70679,7 +70679,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.012691497802734 + "value": -1.0126914978027344 }, "PointY": { "type": "float", @@ -70694,11 +70694,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.531734466552734 + "value": -2.5317344665527344 }, "PointY": { "type": "float", - "value": 1.512706756591797 + "value": 1.5127067565917969 }, "PointZ": { "type": "float", @@ -70709,11 +70709,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.012760162353516 + "value": -3.0127601623535156 }, "PointY": { "type": "float", - "value": 1.519035339355469 + "value": 1.5190353393554688 }, "PointZ": { "type": "float", @@ -70851,7 +70851,7 @@ }, "YPosition": { "type": "float", - "value": 116.0966491699219 + "value": 116.09664916992188 }, "ZOrientation": { "type": "float", @@ -70859,7 +70859,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -70902,7 +70902,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -70921,7 +70921,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -71074,7 +71074,7 @@ }, "YPosition": { "type": "float", - "value": 156.9161987304688 + "value": 156.91619873046875 }, "ZOrientation": { "type": "float", @@ -71118,14 +71118,14 @@ }, "PointZ": { "type": "float", - "value": 0.2250001728534699 + "value": 0.22500017285346985 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -71144,7 +71144,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -71289,7 +71289,7 @@ }, "XPosition": { "type": "float", - "value": 127.4393997192383 + "value": 127.43939971923828 }, "YOrientation": { "type": "float", @@ -71305,7 +71305,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -71348,7 +71348,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -71367,7 +71367,7 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", @@ -71512,7 +71512,7 @@ }, "XPosition": { "type": "float", - "value": 37.38794326782227 + "value": 37.387943267822266 }, "YOrientation": { "type": "float", @@ -71520,7 +71520,7 @@ }, "YPosition": { "type": "float", - "value": 146.9919738769531 + "value": 146.99197387695312 }, "ZOrientation": { "type": "float", @@ -71528,7 +71528,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -71571,7 +71571,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -71590,11 +71590,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.4688006937503815 + "value": 0.46880069375038147 } }, { @@ -71743,7 +71743,7 @@ }, "YPosition": { "type": "float", - "value": 21.14060592651367 + "value": 21.140605926513672 }, "ZOrientation": { "type": "float", @@ -71794,7 +71794,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -71813,11 +71813,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.2707840502262116 + "value": 0.27078405022621155 } }, { @@ -71958,7 +71958,7 @@ }, "XPosition": { "type": "float", - "value": 92.99277496337891 + "value": 92.9927749633789 }, "YOrientation": { "type": "float", @@ -71974,7 +71974,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -72017,7 +72017,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -72036,11 +72036,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.3958608210086823 + "value": 0.39586082100868225 } }, { @@ -72197,7 +72197,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -72240,7 +72240,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -72259,11 +72259,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.3958608210086823 + "value": 0.39586082100868225 } }, { @@ -72404,7 +72404,7 @@ }, "XPosition": { "type": "float", - "value": 139.1716156005859 + "value": 139.17161560058594 }, "YOrientation": { "type": "float", @@ -72412,7 +72412,7 @@ }, "YPosition": { "type": "float", - "value": 16.96518707275391 + "value": 16.965187072753906 }, "ZOrientation": { "type": "float", @@ -72420,7 +72420,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1999990940093994 + "value": 0.19999909400939941 } }, { @@ -72463,7 +72463,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -72482,11 +72482,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.3958608210086823 + "value": 0.39586082100868225 } }, { @@ -72643,7 +72643,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } }, { @@ -72686,7 +72686,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.003210067749023438 + "value": 0.0032100677490234375 }, "PointY": { "type": "float", @@ -72705,11 +72705,11 @@ }, "PointY": { "type": "float", - "value": -4.02381181716919 + "value": -4.0238118171691895 }, "PointZ": { "type": "float", - "value": 0.3958608210086823 + "value": 0.39586082100868225 } }, { @@ -72850,7 +72850,7 @@ }, "XPosition": { "type": "float", - "value": 48.66843414306641 + "value": 48.668434143066406 }, "YOrientation": { "type": "float", @@ -72866,7 +72866,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000476837158 + "value": 0.20000004768371582 } } ] @@ -72945,7 +72945,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -72953,7 +72953,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73007,7 +73007,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73015,7 +73015,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73069,7 +73069,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73077,7 +73077,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73131,7 +73131,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73139,7 +73139,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73193,7 +73193,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73201,7 +73201,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73263,7 +73263,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73309,7 +73309,7 @@ }, "XOrientation": { "type": "float", - "value": 2.773600272121257e-006 + "value": 0.000002773600272121257 }, "XPosition": { "type": "float", @@ -73325,7 +73325,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73379,7 +73379,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73387,7 +73387,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73441,7 +73441,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73449,7 +73449,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -73511,7 +73511,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73627,7 +73627,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", @@ -73635,7 +73635,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2099999934434891 + "value": 0.20999999344348907 } }, { @@ -73689,7 +73689,7 @@ }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", diff --git a/_module/git/purgatory.git.json b/_module/git/purgatory.git.json index ecf4bd6..8c9f4a0 100644 --- a/_module/git/purgatory.git.json +++ b/_module/git/purgatory.git.json @@ -125,7 +125,7 @@ }, "XPosition": { "type": "float", - "value": 40.07159805297852 + "value": 40.071598052978516 }, "YOrientation": { "type": "float", @@ -137,7 +137,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/reddesert.git.json b/_module/git/reddesert.git.json index 5997e42..a0761fe 100644 --- a/_module/git/reddesert.git.json +++ b/_module/git/reddesert.git.json @@ -103,7 +103,7 @@ }, "PointY": { "type": "float", - "value": 3.007884502410889 + "value": 3.0078845024108887 }, "PointZ": { "type": "float", @@ -122,7 +122,7 @@ }, "PointZ": { "type": "float", - "value": 0.02149715833365917 + "value": 0.021497158333659172 } }, { @@ -133,7 +133,7 @@ }, "PointY": { "type": "float", - "value": 0.1442375183105469 + "value": 0.14423751831054688 }, "PointZ": { "type": "float", @@ -148,7 +148,7 @@ }, "PointY": { "type": "float", - "value": 3.008047819137573 + "value": 3.0080478191375732 }, "PointZ": { "type": "float", @@ -257,7 +257,7 @@ }, "XPosition": { "type": "float", - "value": 130.1768951416016 + "value": 130.17689514160156 }, "YOrientation": { "type": "float", @@ -316,11 +316,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.06428909301757813 + "value": 0.06428909301757812 }, "PointY": { "type": "float", - "value": -3.214462280273438 + "value": -3.2144622802734375 }, "PointZ": { "type": "float", @@ -331,7 +331,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.0933723449707 + "value": 10.093372344970703 }, "PointY": { "type": "float", @@ -339,7 +339,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499952353537083 + "value": 0.024999523535370827 } }, { @@ -468,7 +468,7 @@ }, "YPosition": { "type": "float", - "value": 149.6670227050781 + "value": 149.66702270507812 }, "ZOrientation": { "type": "float", @@ -508,11 +508,11 @@ }, "PointY": { "type": "float", - "value": -0.1077079772949219 + "value": -0.10770797729492188 }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -557,7 +557,7 @@ }, "PointZ": { "type": "float", - "value": 0.02053144387900829 + "value": 0.020531443879008293 } } ] @@ -662,7 +662,7 @@ }, "XPosition": { "type": "float", - "value": 149.7251281738281 + "value": 149.72512817382812 }, "YOrientation": { "type": "float", @@ -670,7 +670,7 @@ }, "YPosition": { "type": "float", - "value": 20.05143356323242 + "value": 20.051433563232422 }, "ZOrientation": { "type": "float", @@ -772,7 +772,7 @@ }, "XPosition": { "type": "float", - "value": 40.93923187255859 + "value": 40.939231872558594 }, "YOrientation": { "type": "float", @@ -784,7 +784,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -845,7 +845,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -894,7 +894,7 @@ }, "XPosition": { "type": "float", - "value": 16.81290817260742 + "value": 16.812908172607422 }, "YOrientation": { "type": "float", @@ -902,11 +902,11 @@ }, "YPosition": { "type": "float", - "value": 41.86660003662109 + "value": 41.866600036621094 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -967,7 +967,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1024,11 +1024,11 @@ }, "YPosition": { "type": "float", - "value": 52.39529418945313 + "value": 52.395294189453125 }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1077,7 +1077,7 @@ }, "XPosition": { "type": "float", - "value": 82.24661254882813 + "value": 82.24661254882812 }, "YOrientation": { "type": "float", @@ -1146,11 +1146,11 @@ }, "YPosition": { "type": "float", - "value": 41.57226181030273 + "value": 41.572261810302734 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -1219,7 +1219,7 @@ }, "XPosition": { "type": "float", - "value": 126.6620635986328 + "value": 126.66206359863281 }, "YOrientation": { "type": "float", @@ -1227,7 +1227,7 @@ }, "YPosition": { "type": "float", - "value": 132.6837463378906 + "value": 132.68374633789062 }, "ZPosition": { "type": "float", @@ -1288,11 +1288,11 @@ }, "YPosition": { "type": "float", - "value": 126.3234100341797 + "value": 126.32341003417969 }, "ZPosition": { "type": "float", - "value": 0.001601696014404297 + "value": 0.0016016960144042969 } }, { @@ -1341,7 +1341,7 @@ }, "XPosition": { "type": "float", - "value": 115.4032363891602 + "value": 115.40323638916016 }, "YOrientation": { "type": "float", @@ -1349,11 +1349,11 @@ }, "YPosition": { "type": "float", - "value": 106.5378036499023 + "value": 106.53780364990234 }, "ZPosition": { "type": "float", - "value": 0.01999237015843391 + "value": 0.019992370158433914 } }, { @@ -1402,7 +1402,7 @@ }, "XPosition": { "type": "float", - "value": 145.9252319335938 + "value": 145.92523193359375 }, "YOrientation": { "type": "float", @@ -1414,7 +1414,7 @@ }, "ZPosition": { "type": "float", - "value": 0.001601696014404297 + "value": 0.0016016960144042969 } }, { @@ -1471,11 +1471,11 @@ }, "YPosition": { "type": "float", - "value": 115.4336471557617 + "value": 115.43364715576172 }, "ZPosition": { "type": "float", - "value": 0.01999237015843391 + "value": 0.019992370158433914 } }, { @@ -1536,7 +1536,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1597,7 +1597,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1666,7 +1666,7 @@ }, "XPosition": { "type": "float", - "value": 10.44853591918945 + "value": 10.448535919189453 }, "YOrientation": { "type": "float", @@ -1678,7 +1678,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1727,7 +1727,7 @@ }, "XPosition": { "type": "float", - "value": 23.04706192016602 + "value": 23.047061920166016 }, "YOrientation": { "type": "float", @@ -1735,11 +1735,11 @@ }, "YPosition": { "type": "float", - "value": 121.5804901123047 + "value": 121.58049011230469 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1788,7 +1788,7 @@ }, "XPosition": { "type": "float", - "value": 43.78436660766602 + "value": 43.784366607666016 }, "YOrientation": { "type": "float", @@ -1796,11 +1796,11 @@ }, "YPosition": { "type": "float", - "value": 142.0673522949219 + "value": 142.06735229492188 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1853,7 +1853,7 @@ }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", @@ -1861,7 +1861,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1918,7 +1918,7 @@ }, "YPosition": { "type": "float", - "value": 121.3418884277344 + "value": 121.34188842773438 }, "ZPosition": { "type": "float", @@ -1971,7 +1971,7 @@ }, "XPosition": { "type": "float", - "value": 143.1094360351563 + "value": 143.10943603515625 }, "YOrientation": { "type": "float", @@ -1979,11 +1979,11 @@ }, "YPosition": { "type": "float", - "value": 57.59514999389648 + "value": 57.595149993896484 }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -2040,11 +2040,11 @@ }, "YPosition": { "type": "float", - "value": 148.3822174072266 + "value": 148.38221740722656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2105,7 +2105,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2154,7 +2154,7 @@ }, "XPosition": { "type": "float", - "value": 148.2104187011719 + "value": 148.21041870117188 }, "YOrientation": { "type": "float", @@ -2166,7 +2166,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2215,11 +2215,11 @@ }, "XPosition": { "type": "float", - "value": 107.5436553955078 + "value": 107.54365539550781 }, "YOrientation": { "type": "float", - "value": -0.170961007475853 + "value": -0.17096100747585297 }, "YPosition": { "type": "float", @@ -2227,7 +2227,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -2284,11 +2284,11 @@ }, "YPosition": { "type": "float", - "value": 1.431632280349731 + "value": 1.4316322803497314 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2333,11 +2333,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 14.64913463592529 + "value": 14.649134635925293 }, "YOrientation": { "type": "float", @@ -2345,7 +2345,7 @@ }, "YPosition": { "type": "float", - "value": 147.7386322021484 + "value": 147.73863220214844 }, "ZPosition": { "type": "float", @@ -2398,7 +2398,7 @@ }, "XPosition": { "type": "float", - "value": 135.1883239746094 + "value": 135.18832397460938 }, "YOrientation": { "type": "float", @@ -2406,7 +2406,7 @@ }, "YPosition": { "type": "float", - "value": 1.588306784629822 + "value": 1.5883067846298218 }, "ZPosition": { "type": "float", @@ -2467,11 +2467,11 @@ }, "YPosition": { "type": "float", - "value": 24.86263275146484 + "value": 24.862632751464844 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2540,7 +2540,7 @@ }, "XPosition": { "type": "float", - "value": 42.77362442016602 + "value": 42.773624420166016 }, "YOrientation": { "type": "float", @@ -2552,7 +2552,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -2625,7 +2625,7 @@ }, "YOrientation": { "type": "float", - "value": 1.029172267408285e-006 + "value": 0.0000010291722674082848 }, "YPosition": { "type": "float", @@ -2690,7 +2690,7 @@ }, "YPosition": { "type": "float", - "value": 141.6948852539063 + "value": 141.69488525390625 }, "ZPosition": { "type": "float", diff --git a/_module/git/reddesert001.git.json b/_module/git/reddesert001.git.json index 97d814e..969f050 100644 --- a/_module/git/reddesert001.git.json +++ b/_module/git/reddesert001.git.json @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -483,7 +483,7 @@ }, "Z": { "type": "float", - "value": 1.370000004768372 + "value": 1.3700000047683716 } }, { @@ -698,11 +698,11 @@ }, "Y": { "type": "float", - "value": 109.2099990844727 + "value": 109.20999908447266 }, "Z": { "type": "float", - "value": 3.599999904632568 + "value": 3.5999999046325684 } } ] @@ -763,7 +763,7 @@ }, "PointZ": { "type": "float", - "value": 0.02072152309119701 + "value": 0.020721523091197014 } }, { @@ -774,7 +774,7 @@ }, "PointY": { "type": "float", - "value": -0.1428003311157227 + "value": -0.14280033111572266 }, "PointZ": { "type": "float", @@ -789,7 +789,7 @@ }, "PointY": { "type": "float", - "value": -0.1427822113037109 + "value": -0.14278221130371094 }, "PointZ": { "type": "float", @@ -804,11 +804,11 @@ }, "PointY": { "type": "float", - "value": 3.998144626617432 + "value": 3.9981446266174316 }, "PointZ": { "type": "float", - "value": 0.02137580327689648 + "value": 0.021375803276896477 } }, { @@ -819,7 +819,7 @@ }, "PointY": { "type": "float", - "value": 3.855470180511475 + "value": 3.8554701805114746 }, "PointZ": { "type": "float", @@ -928,7 +928,7 @@ }, "XPosition": { "type": "float", - "value": 120.1760177612305 + "value": 120.17601776123047 }, "YOrientation": { "type": "float", @@ -936,7 +936,7 @@ }, "YPosition": { "type": "float", - "value": 0.2027339935302734 + "value": 0.20273399353027344 }, "ZOrientation": { "type": "float", @@ -987,7 +987,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.52587890625e-005 + "value": 0.0000152587890625 }, "PointY": { "type": "float", @@ -995,7 +995,7 @@ }, "PointZ": { "type": "float", - "value": 0.02075084857642651 + "value": 0.020750848576426506 } }, { @@ -1006,11 +1006,11 @@ }, "PointY": { "type": "float", - "value": -2.435409545898438 + "value": -2.4354095458984375 }, "PointZ": { "type": "float", - "value": 0.02050968818366528 + "value": 0.020509688183665276 } }, { @@ -1145,7 +1145,7 @@ }, "XPosition": { "type": "float", - "value": 120.0675582885742 + "value": 120.06755828857422 }, "YOrientation": { "type": "float", @@ -1153,7 +1153,7 @@ }, "YPosition": { "type": "float", - "value": 149.8477630615234 + "value": 149.84776306152344 }, "ZOrientation": { "type": "float", @@ -1189,7 +1189,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.772506713867188 + "value": -3.7725067138671875 }, "PointY": { "type": "float", @@ -1197,7 +1197,7 @@ }, "PointZ": { "type": "float", - "value": 0.02021238021552563 + "value": 0.020212380215525627 } }, { @@ -1227,7 +1227,7 @@ }, "PointZ": { "type": "float", - "value": 0.02042916230857372 + "value": 0.020429162308573723 } }, { @@ -1242,7 +1242,7 @@ }, "PointZ": { "type": "float", - "value": 0.02098557166755199 + "value": 0.020985571667551994 } } ] @@ -1410,7 +1410,7 @@ }, "PointY": { "type": "float", - "value": -1.46993350982666 + "value": -1.4699335098266602 }, "PointZ": { "type": "float", @@ -1425,11 +1425,11 @@ }, "PointY": { "type": "float", - "value": -1.556609153747559 + "value": -1.5566091537475586 }, "PointZ": { "type": "float", - "value": 0.0243439357727766 + "value": 0.024343935772776604 } }, { @@ -1444,7 +1444,7 @@ }, "PointZ": { "type": "float", - "value": 0.02264281921088696 + "value": 0.022642819210886955 } } ] @@ -1550,7 +1550,7 @@ }, "XPosition": { "type": "float", - "value": 121.0459365844727 + "value": 121.04593658447266 }, "YOrientation": { "type": "float", @@ -1558,7 +1558,7 @@ }, "YPosition": { "type": "float", - "value": 10.6723575592041 + "value": 10.672357559204102 }, "ZOrientation": { "type": "float", @@ -1640,7 +1640,7 @@ }, "XPosition": { "type": "float", - "value": 144.9814605712891 + "value": 144.98146057128906 }, "YOrientation": { "type": "float", @@ -1648,11 +1648,11 @@ }, "YPosition": { "type": "float", - "value": 101.4867324829102 + "value": 101.48673248291016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1781,7 +1781,7 @@ }, "XPosition": { "type": "float", - "value": 136.0357360839844 + "value": 136.03573608398438 }, "YOrientation": { "type": "float", @@ -1789,11 +1789,11 @@ }, "YPosition": { "type": "float", - "value": 101.0801162719727 + "value": 101.08011627197266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1874,7 +1874,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1935,7 +1935,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1996,7 +1996,7 @@ }, "ZPosition": { "type": "float", - "value": 0.008211135864257813 + "value": 0.008211135864257812 } }, { @@ -2045,7 +2045,7 @@ }, "XPosition": { "type": "float", - "value": 38.33963012695313 + "value": 38.339630126953125 }, "YOrientation": { "type": "float", @@ -2057,7 +2057,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2114,11 +2114,11 @@ }, "YPosition": { "type": "float", - "value": 32.61825561523438 + "value": 32.618255615234375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2179,7 +2179,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2260,7 +2260,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -2317,11 +2317,11 @@ }, "YPosition": { "type": "float", - "value": 26.61923217773438 + "value": 26.619232177734375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2427,7 +2427,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1950900852680206 + "value": 0.19509008526802063 }, "XPosition": { "type": "float", @@ -2439,11 +2439,11 @@ }, "YPosition": { "type": "float", - "value": 58.25244522094727 + "value": 58.252445220947266 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2504,7 +2504,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2565,7 +2565,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -2634,7 +2634,7 @@ }, "XPosition": { "type": "float", - "value": 57.72912979125977 + "value": 57.729129791259766 }, "YOrientation": { "type": "float", @@ -2642,11 +2642,11 @@ }, "YPosition": { "type": "float", - "value": 141.7155456542969 + "value": 141.71554565429688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2695,7 +2695,7 @@ }, "XPosition": { "type": "float", - "value": 12.55478096008301 + "value": 12.554780960083008 }, "YOrientation": { "type": "float", @@ -2707,7 +2707,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2756,7 +2756,7 @@ }, "XPosition": { "type": "float", - "value": 19.42137718200684 + "value": 19.421377182006836 }, "YOrientation": { "type": "float", @@ -2764,11 +2764,11 @@ }, "YPosition": { "type": "float", - "value": 110.7408599853516 + "value": 110.74085998535156 }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -2813,7 +2813,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3368940651416779 + "value": -0.33689406514167786 }, "XPosition": { "type": "float", @@ -2825,11 +2825,11 @@ }, "YPosition": { "type": "float", - "value": 110.9922332763672 + "value": 110.99223327636719 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2890,7 +2890,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2959,7 +2959,7 @@ }, "XPosition": { "type": "float", - "value": 100.7566299438477 + "value": 100.75662994384766 }, "YOrientation": { "type": "float", @@ -2967,11 +2967,11 @@ }, "YPosition": { "type": "float", - "value": 138.0095062255859 + "value": 138.00950622558594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3036,23 +3036,23 @@ }, "XOrientation": { "type": "float", - "value": 0.3826878964900971 + "value": 0.38268789649009705 }, "XPosition": { "type": "float", - "value": 101.7138977050781 + "value": 101.71389770507812 }, "YOrientation": { "type": "float", - "value": -0.9238776564598084 + "value": -0.9238776564598083 }, "YPosition": { "type": "float", - "value": 92.31357574462891 + "value": 92.3135757446289 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3117,7 +3117,7 @@ }, "XOrientation": { "type": "float", - "value": 0.3826878964900971 + "value": 0.38268789649009705 }, "XPosition": { "type": "float", @@ -3125,7 +3125,7 @@ }, "YOrientation": { "type": "float", - "value": -0.9238776564598084 + "value": -0.9238776564598083 }, "YPosition": { "type": "float", @@ -3133,7 +3133,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -3178,7 +3178,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454120293259621 + "value": 0.024541202932596207 }, "XPosition": { "type": "float", @@ -3194,7 +3194,7 @@ }, "ZPosition": { "type": "float", - "value": -8.344650268554688e-006 + "value": -0.000008344650268554688 } }, { @@ -3243,19 +3243,19 @@ }, "XPosition": { "type": "float", - "value": 22.98435211181641 + "value": 22.984352111816406 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 11.56290721893311 + "value": 11.562907218933105 }, "ZPosition": { "type": "float", - "value": -8.344650268554688e-006 + "value": -0.000008344650268554688 } }, { @@ -3300,7 +3300,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454120293259621 + "value": 0.024541202932596207 }, "XPosition": { "type": "float", @@ -3312,11 +3312,11 @@ }, "YPosition": { "type": "float", - "value": 143.8568725585938 + "value": 143.85687255859375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3365,11 +3365,11 @@ }, "XPosition": { "type": "float", - "value": 134.1790924072266 + "value": 134.17909240722656 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -3446,7 +3446,7 @@ }, "XPosition": { "type": "float", - "value": 148.3961334228516 + "value": 148.39613342285156 }, "YOrientation": { "type": "float", @@ -3458,7 +3458,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3511,7 +3511,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -3519,7 +3519,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -3629,19 +3629,19 @@ }, "XPosition": { "type": "float", - "value": 147.9806823730469 + "value": 147.98068237304688 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 94.99672698974609 + "value": 94.9967269897461 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3690,11 +3690,11 @@ }, "XPosition": { "type": "float", - "value": 143.4918365478516 + "value": 143.49183654785156 }, "YOrientation": { "type": "float", - "value": -0.8819193840026856 + "value": -0.8819193840026855 }, "YPosition": { "type": "float", @@ -3702,7 +3702,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3751,11 +3751,11 @@ }, "XPosition": { "type": "float", - "value": 125.5531616210938 + "value": 125.55316162109375 }, "YOrientation": { "type": "float", - "value": -0.8819193840026856 + "value": -0.8819193840026855 }, "YPosition": { "type": "float", @@ -3763,7 +3763,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3812,19 +3812,19 @@ }, "XPosition": { "type": "float", - "value": 125.0255508422852 + "value": 125.02555084228516 }, "YOrientation": { "type": "float", - "value": -0.8819193840026856 + "value": -0.8819193840026855 }, "YPosition": { "type": "float", - "value": 141.7269897460938 + "value": 141.72698974609375 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3893,7 +3893,7 @@ }, "XPosition": { "type": "float", - "value": 141.3645629882813 + "value": 141.36456298828125 }, "YOrientation": { "type": "float", @@ -3905,7 +3905,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -3950,11 +3950,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 124.9861297607422 + "value": 124.98612976074219 }, "YOrientation": { "type": "float", @@ -3966,7 +3966,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4023,11 +4023,11 @@ }, "YPosition": { "type": "float", - "value": 64.22560882568359 + "value": 64.2256088256836 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/respawning.git.json b/_module/git/respawning.git.json index 4e2d244..bea49b7 100644 --- a/_module/git/respawning.git.json +++ b/_module/git/respawning.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795059204102 + "value": -1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -344,7 +344,7 @@ }, "XPosition": { "type": "float", - "value": 13.00344657897949 + "value": 13.003446578979492 }, "YOrientation": { "type": "float", @@ -352,11 +352,11 @@ }, "YPosition": { "type": "float", - "value": 10.46471309661865 + "value": 10.464713096618652 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -405,7 +405,7 @@ }, "XPosition": { "type": "float", - "value": 11.35294151306152 + "value": 11.352941513061523 }, "YOrientation": { "type": "float", @@ -413,11 +413,11 @@ }, "YPosition": { "type": "float", - "value": 14.56647682189941 + "value": 14.566476821899414 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/ridges.git.json b/_module/git/ridges.git.json index 4c9e61b..10b5fe7 100644 --- a/_module/git/ridges.git.json +++ b/_module/git/ridges.git.json @@ -256,7 +256,7 @@ }, "X": { "type": "float", - "value": 14.73999977111816 + "value": 14.739999771118164 }, "Y": { "type": "float", @@ -332,26 +332,26 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.04884719848632813 + "value": 0.048847198486328125 }, "PointY": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 9.573947906494141 + "value": 9.57394790649414 }, "PointY": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 }, "PointZ": { "type": "float", @@ -362,15 +362,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.573947906494141 + "value": 9.57394790649414 }, "PointY": { "type": "float", - "value": 2.930801391601563 + "value": 2.9308013916015625 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -381,11 +381,11 @@ }, "PointY": { "type": "float", - "value": 2.930801391601563 + "value": 2.9308013916015625 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -499,7 +499,7 @@ }, "YPosition": { "type": "float", - "value": 0.1256532669067383 + "value": 0.12565326690673828 }, "ZOrientation": { "type": "float", @@ -581,7 +581,7 @@ }, "XPosition": { "type": "float", - "value": 47.95181274414063 + "value": 47.951812744140625 }, "YOrientation": { "type": "float", @@ -593,7 +593,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -654,7 +654,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -703,7 +703,7 @@ }, "XPosition": { "type": "float", - "value": 12.44990539550781 + "value": 12.449905395507812 }, "YOrientation": { "type": "float", @@ -715,7 +715,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -764,7 +764,7 @@ }, "XPosition": { "type": "float", - "value": 42.03482818603516 + "value": 42.034828186035156 }, "YOrientation": { "type": "float", @@ -772,11 +772,11 @@ }, "YPosition": { "type": "float", - "value": 58.13993072509766 + "value": 58.139930725097656 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -833,11 +833,11 @@ }, "YPosition": { "type": "float", - "value": 39.25087738037109 + "value": 39.250877380371094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -886,7 +886,7 @@ }, "XPosition": { "type": "float", - "value": 28.15266799926758 + "value": 28.152667999267578 }, "YOrientation": { "type": "float", @@ -894,11 +894,11 @@ }, "YPosition": { "type": "float", - "value": 31.28591918945313 + "value": 31.285919189453125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -947,7 +947,7 @@ }, "XPosition": { "type": "float", - "value": 21.32538032531738 + "value": 21.325380325317383 }, "YOrientation": { "type": "float", @@ -959,7 +959,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1004,7 +1004,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3368906974792481 + "value": -0.33689069747924805 }, "XPosition": { "type": "float", @@ -1016,11 +1016,11 @@ }, "YPosition": { "type": "float", - "value": 16.03830528259277 + "value": 16.038305282592773 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1069,7 +1069,7 @@ }, "XPosition": { "type": "float", - "value": 44.96545791625977 + "value": 44.965457916259766 }, "YOrientation": { "type": "float", @@ -1077,11 +1077,11 @@ }, "YPosition": { "type": "float", - "value": 1.297974348068237 + "value": 1.2979743480682373 }, "ZPosition": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } } ] diff --git a/_module/git/ruinedcitadelofa.git.json b/_module/git/ruinedcitadelofa.git.json index e5a8085..1d03218 100644 --- a/_module/git/ruinedcitadelofa.git.json +++ b/_module/git/ruinedcitadelofa.git.json @@ -264,7 +264,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -283,7 +283,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -940,7 +940,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794463157654 + "value": -1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -1378,7 +1378,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -1597,7 +1597,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -2035,7 +2035,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -2473,7 +2473,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794820785523 + "value": 1.5707948207855225 }, "CloseLockDC": { "type": "byte", @@ -3349,7 +3349,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794463157654 + "value": -1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -3568,7 +3568,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588449478149 + "value": -3.1415884494781494 }, "CloseLockDC": { "type": "byte", @@ -4443,7 +4443,7 @@ }, "Y": { "type": "float", - "value": 108.5617141723633 + "value": 108.56171417236328 }, "Z": { "type": "float", @@ -4466,7 +4466,7 @@ }, "Bearing": { "type": "float", - "value": 1.619882822036743 + "value": 1.6198828220367432 }, "BodyBag": { "type": "byte", @@ -4895,11 +4895,11 @@ }, "X": { "type": "float", - "value": 39.73441314697266 + "value": 39.734413146972656 }, "Y": { "type": "float", - "value": 76.55263519287109 + "value": 76.5526351928711 }, "Z": { "type": "float", @@ -5122,15 +5122,15 @@ }, "X": { "type": "float", - "value": 144.7955474853516 + "value": 144.79554748535156 }, "Y": { "type": "float", - "value": 24.38657951354981 + "value": 24.386579513549805 }, "Z": { "type": "float", - "value": 0.2000009417533875 + "value": 0.20000094175338745 } }, { @@ -5349,7 +5349,7 @@ }, "X": { "type": "float", - "value": 119.6679840087891 + "value": 119.66798400878906 }, "Y": { "type": "float", @@ -5357,7 +5357,7 @@ }, "Z": { "type": "float", - "value": 0.4000000357627869 + "value": 0.40000003576278687 } }, { @@ -5576,7 +5576,7 @@ }, "X": { "type": "float", - "value": 123.4087753295898 + "value": 123.40877532958984 }, "Y": { "type": "float", @@ -5803,7 +5803,7 @@ }, "X": { "type": "float", - "value": 126.8007888793945 + "value": 126.80078887939453 }, "Y": { "type": "float", @@ -5811,7 +5811,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-006 + "value": -0.000002384185791015625 } }, { @@ -6030,11 +6030,11 @@ }, "X": { "type": "float", - "value": 121.0302124023438 + "value": 121.03021240234375 }, "Y": { "type": "float", - "value": 14.72723960876465 + "value": 14.727239608764648 }, "Z": { "type": "float", @@ -6261,11 +6261,11 @@ }, "Y": { "type": "float", - "value": 11.4947566986084 + "value": 11.494756698608398 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -6484,7 +6484,7 @@ }, "X": { "type": "float", - "value": 132.8587036132813 + "value": 132.85870361328125 }, "Y": { "type": "float", @@ -6492,7 +6492,7 @@ }, "Z": { "type": "float", - "value": -1.430511474609375e-006 + "value": -0.000001430511474609375 } }, { @@ -6711,7 +6711,7 @@ }, "X": { "type": "float", - "value": 134.0802307128906 + "value": 134.08023071289062 }, "Y": { "type": "float", @@ -6719,7 +6719,7 @@ }, "Z": { "type": "float", - "value": 1.192092895507813e-007 + "value": 0.00000011920928955078125 } }, { @@ -6938,7 +6938,7 @@ }, "X": { "type": "float", - "value": 144.1456909179688 + "value": 144.14569091796875 }, "Y": { "type": "float", @@ -6946,7 +6946,7 @@ }, "Z": { "type": "float", - "value": 6.556510925292969e-007 + "value": 0.0000006556510925292969 } }, { @@ -7169,11 +7169,11 @@ }, "Y": { "type": "float", - "value": 12.61856937408447 + "value": 12.618569374084473 }, "Z": { "type": "float", - "value": -1.430511474609375e-006 + "value": -0.000001430511474609375 } }, { @@ -7619,11 +7619,11 @@ }, "X": { "type": "float", - "value": 56.07574844360352 + "value": 56.075748443603516 }, "Y": { "type": "float", - "value": 146.3234710693359 + "value": 146.32347106933594 }, "Z": { "type": "float", @@ -7846,15 +7846,15 @@ }, "X": { "type": "float", - "value": 50.96396636962891 + "value": 50.963966369628906 }, "Y": { "type": "float", - "value": 145.5302581787109 + "value": 145.53025817871094 }, "Z": { "type": "float", - "value": 0.3999998569488525 + "value": 0.39999985694885254 } }, { @@ -8073,11 +8073,11 @@ }, "X": { "type": "float", - "value": 53.11631011962891 + "value": 53.116310119628906 }, "Y": { "type": "float", - "value": 144.9096374511719 + "value": 144.90963745117188 }, "Z": { "type": "float", @@ -8300,15 +8300,15 @@ }, "X": { "type": "float", - "value": 94.34828948974609 + "value": 94.3482894897461 }, "Y": { "type": "float", - "value": 144.5556793212891 + "value": 144.55567932128906 }, "Z": { "type": "float", - "value": 0.199999988079071 + "value": 0.19999998807907104 } }, { @@ -8531,7 +8531,7 @@ }, "Y": { "type": "float", - "value": 135.9236450195313 + "value": 135.92364501953125 }, "Z": { "type": "float", @@ -8985,11 +8985,11 @@ }, "Y": { "type": "float", - "value": 136.2886657714844 + "value": 136.28866577148438 }, "Z": { "type": "float", - "value": -1.430511474609375e-006 + "value": -0.000001430511474609375 } }, { @@ -9439,7 +9439,7 @@ }, "Y": { "type": "float", - "value": 126.293098449707 + "value": 126.29309844970703 }, "Z": { "type": "float", @@ -9670,7 +9670,7 @@ }, "Z": { "type": "float", - "value": 0.3999997973442078 + "value": 0.39999979734420776 } }, { @@ -9689,7 +9689,7 @@ }, "Bearing": { "type": "float", - "value": 1.030834794044495 + "value": 1.0308347940444946 }, "BodyBag": { "type": "byte", @@ -9893,11 +9893,11 @@ }, "Y": { "type": "float", - "value": 141.8928527832031 + "value": 141.89285278320312 }, "Z": { "type": "float", - "value": 0.4000007510185242 + "value": 0.40000075101852417 } }, { @@ -10116,7 +10116,7 @@ }, "X": { "type": "float", - "value": 18.96699142456055 + "value": 18.966991424560547 }, "Y": { "type": "float", @@ -10124,7 +10124,7 @@ }, "Z": { "type": "float", - "value": 0.3999990522861481 + "value": 0.39999905228614807 } }, { @@ -10343,15 +10343,15 @@ }, "X": { "type": "float", - "value": 34.66896820068359 + "value": 34.668968200683594 }, "Y": { "type": "float", - "value": 25.80832672119141 + "value": 25.808326721191406 }, "Z": { "type": "float", - "value": 0.3999997973442078 + "value": 0.39999979734420776 } }, { @@ -10578,7 +10578,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -10797,7 +10797,7 @@ }, "X": { "type": "float", - "value": 48.19290161132813 + "value": 48.192901611328125 }, "Y": { "type": "float", @@ -10805,7 +10805,7 @@ }, "Z": { "type": "float", - "value": 3.576278686523438e-007 + "value": 0.00000035762786865234375 } }, { @@ -11251,7 +11251,7 @@ }, "X": { "type": "float", - "value": 76.49265289306641 + "value": 76.4926528930664 }, "Y": { "type": "float", @@ -11478,15 +11478,15 @@ }, "X": { "type": "float", - "value": 76.84799957275391 + "value": 76.8479995727539 }, "Y": { "type": "float", - "value": 10.00470924377441 + "value": 10.004709243774414 }, "Z": { "type": "float", - "value": 1.013278961181641e-006 + "value": 0.0000010132789611816406 } } ] @@ -11544,7 +11544,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -11974,11 +11974,11 @@ }, "YPosition": { "type": "float", - "value": 62.96376800537109 + "value": 62.963768005371094 }, "ZPosition": { "type": "float", - "value": 3.570003986358643 + "value": 3.5700039863586426 } }, { @@ -12212,15 +12212,15 @@ }, "XPosition": { "type": "float", - "value": 13.09056949615479 + "value": 13.090569496154785 }, "YPosition": { "type": "float", - "value": 23.20940208435059 + "value": 23.209402084350586 }, "ZPosition": { "type": "float", - "value": 3.570003986358643 + "value": 3.5700039863586426 } }, { @@ -12333,7 +12333,7 @@ }, "XPosition": { "type": "float", - "value": 17.05520057678223 + "value": 17.055200576782227 }, "YPosition": { "type": "float", @@ -12341,7 +12341,7 @@ }, "ZPosition": { "type": "float", - "value": 3.570003986358643 + "value": 3.5700039863586426 } }, { @@ -12454,7 +12454,7 @@ }, "XPosition": { "type": "float", - "value": 123.2961730957031 + "value": 123.29617309570312 }, "YPosition": { "type": "float", @@ -12575,7 +12575,7 @@ }, "XPosition": { "type": "float", - "value": 123.4352111816406 + "value": 123.43521118164062 }, "YPosition": { "type": "float", @@ -12620,11 +12620,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.910079956054688 + "value": -2.9100799560546875 }, "PointY": { "type": "float", - "value": -0.01415348052978516 + "value": -0.014153480529785156 }, "PointZ": { "type": "float", @@ -12643,7 +12643,7 @@ }, "PointZ": { "type": "float", - "value": 0.05008926242589951 + "value": 0.050089262425899506 } }, { @@ -12658,7 +12658,7 @@ }, "PointZ": { "type": "float", - "value": 0.05008926242589951 + "value": 0.050089262425899506 } }, { @@ -12801,7 +12801,7 @@ }, "YPosition": { "type": "float", - "value": 12.61208248138428 + "value": 12.612082481384277 }, "ZOrientation": { "type": "float", @@ -12887,11 +12887,11 @@ }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 109.4883346557617 + "value": 109.48833465576172 }, "ZPosition": { "type": "float", @@ -12940,11 +12940,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454120665788651 + "value": 0.024541206657886505 }, "XPosition": { "type": "float", - "value": 105.5720291137695 + "value": 105.57202911376953 }, "YOrientation": { "type": "float", @@ -12952,7 +12952,7 @@ }, "YPosition": { "type": "float", - "value": 103.4139099121094 + "value": 103.41390991210938 }, "ZPosition": { "type": "float", @@ -13005,11 +13005,11 @@ }, "XPosition": { "type": "float", - "value": 115.1258850097656 + "value": 115.12588500976562 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", @@ -13074,11 +13074,11 @@ }, "YPosition": { "type": "float", - "value": 137.3652496337891 + "value": 137.36524963378906 }, "ZPosition": { "type": "float", - "value": 0.4000076055526733 + "value": 0.40000760555267334 } }, { @@ -13127,7 +13127,7 @@ }, "XPosition": { "type": "float", - "value": 122.102165222168 + "value": 122.10216522216797 }, "YOrientation": { "type": "float", @@ -13139,7 +13139,7 @@ }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -13188,7 +13188,7 @@ }, "XPosition": { "type": "float", - "value": 109.1445465087891 + "value": 109.14454650878906 }, "YOrientation": { "type": "float", @@ -13196,7 +13196,7 @@ }, "YPosition": { "type": "float", - "value": 71.08351898193359 + "value": 71.0835189819336 }, "ZPosition": { "type": "float", @@ -13249,7 +13249,7 @@ }, "XPosition": { "type": "float", - "value": 139.3662261962891 + "value": 139.36622619628906 }, "YOrientation": { "type": "float", @@ -13428,7 +13428,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1224105432629585 + "value": 0.12241054326295853 }, "XPosition": { "type": "float", @@ -13440,7 +13440,7 @@ }, "YPosition": { "type": "float", - "value": 25.08297157287598 + "value": 25.082971572875977 }, "ZPosition": { "type": "float", @@ -13554,7 +13554,7 @@ }, "XPosition": { "type": "float", - "value": 9.560756683349609 + "value": 9.56075668334961 }, "YOrientation": { "type": "float", @@ -13615,7 +13615,7 @@ }, "XPosition": { "type": "float", - "value": 35.00091171264648 + "value": 35.000911712646484 }, "YOrientation": { "type": "float", @@ -13684,11 +13684,11 @@ }, "YPosition": { "type": "float", - "value": 105.634635925293 + "value": 105.63463592529297 }, "ZPosition": { "type": "float", - "value": 0.4000076055526733 + "value": 0.40000760555267334 } }, { @@ -13741,15 +13741,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 134.5383605957031 + "value": 134.53836059570312 }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -13883,7 +13883,7 @@ }, "YOrientation": { "type": "float", - "value": -0.8819193840026856 + "value": -0.8819193840026855 }, "YPosition": { "type": "float", @@ -13948,7 +13948,7 @@ }, "YPosition": { "type": "float", - "value": 36.88663482666016 + "value": 36.886634826660156 }, "ZPosition": { "type": "float", @@ -14005,7 +14005,7 @@ }, "YOrientation": { "type": "float", - "value": -0.8819193840026856 + "value": -0.8819193840026855 }, "YPosition": { "type": "float", @@ -14184,7 +14184,7 @@ }, "XPosition": { "type": "float", - "value": 44.08792877197266 + "value": 44.087928771972656 }, "YOrientation": { "type": "float", @@ -14192,11 +14192,11 @@ }, "YPosition": { "type": "float", - "value": 22.39803504943848 + "value": 22.398035049438477 }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -14241,7 +14241,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454478666186333 + "value": 0.024544786661863327 }, "XPosition": { "type": "float", @@ -14257,7 +14257,7 @@ }, "ZPosition": { "type": "float", - "value": 0.4000076055526733 + "value": 0.40000760555267334 } }, { @@ -14318,7 +14318,7 @@ }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -14367,7 +14367,7 @@ }, "XPosition": { "type": "float", - "value": 142.3476409912109 + "value": 142.34764099121094 }, "YOrientation": { "type": "float", @@ -14375,7 +14375,7 @@ }, "YPosition": { "type": "float", - "value": 110.7870254516602 + "value": 110.78702545166016 }, "ZPosition": { "type": "float", @@ -14436,11 +14436,11 @@ }, "YPosition": { "type": "float", - "value": 14.40037822723389 + "value": 14.400378227233887 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-008 + "value": -5.960464477539063e-8 } }, { @@ -14501,7 +14501,7 @@ }, "ZPosition": { "type": "float", - "value": -7.718801498413086e-006 + "value": -0.000007718801498413086 } }, { @@ -14558,11 +14558,11 @@ }, "YPosition": { "type": "float", - "value": 133.8198547363281 + "value": 133.81985473632812 }, "ZPosition": { "type": "float", - "value": 3.576278686523438e-007 + "value": 0.00000035762786865234375 } }, { @@ -14611,19 +14611,19 @@ }, "XPosition": { "type": "float", - "value": 141.7982482910156 + "value": 141.79824829101562 }, "YOrientation": { "type": "float", - "value": 0.4052420258522034 + "value": 0.40524202585220337 }, "YPosition": { "type": "float", - "value": 21.61739921569824 + "value": 21.617399215698242 }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -14737,11 +14737,11 @@ }, "XPosition": { "type": "float", - "value": 143.6638336181641 + "value": 143.66383361816406 }, "YOrientation": { "type": "float", - "value": 0.4052420258522034 + "value": 0.40524202585220337 }, "YPosition": { "type": "float", @@ -14749,7 +14749,7 @@ }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } }, { @@ -14798,7 +14798,7 @@ }, "XPosition": { "type": "float", - "value": 148.0324554443359 + "value": 148.03245544433594 }, "YOrientation": { "type": "float", @@ -14810,7 +14810,7 @@ }, "ZPosition": { "type": "float", - "value": -6.198883056640625e-006 + "value": -0.000006198883056640625 } } ] diff --git a/_module/git/ruinedminds001.git.json b/_module/git/ruinedminds001.git.json index 75591c2..96f14e5 100644 --- a/_module/git/ruinedminds001.git.json +++ b/_module/git/ruinedminds001.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795655250549 + "value": 1.5707956552505493 }, "CloseLockDC": { "type": "byte", @@ -264,7 +264,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -926,7 +926,7 @@ }, "X": { "type": "float", - "value": 15.04899024963379 + "value": 15.048990249633789 }, "Y": { "type": "float", @@ -1155,11 +1155,11 @@ }, "Y": { "type": "float", - "value": 74.52798461914063 + "value": 74.52798461914062 }, "Z": { "type": "float", - "value": 0.2000002861022949 + "value": 0.20000028610229492 } } ] @@ -1281,11 +1281,11 @@ }, "YPosition": { "type": "float", - "value": 24.88151931762695 + "value": 24.881519317626953 }, "ZPosition": { "type": "float", - "value": 3.12960410118103 + "value": 3.1296041011810303 } }, { @@ -1406,7 +1406,7 @@ }, "ZPosition": { "type": "float", - "value": -1.50000524520874 + "value": -1.5000052452087402 } }, { @@ -1519,7 +1519,7 @@ }, "XPosition": { "type": "float", - "value": 48.06650543212891 + "value": 48.066505432128906 }, "YPosition": { "type": "float", @@ -1527,7 +1527,7 @@ }, "ZPosition": { "type": "float", - "value": 1.500000476837158 + "value": 1.5000004768371582 } }, { @@ -1580,7 +1580,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -1658,11 +1658,11 @@ }, "YPosition": { "type": "float", - "value": 14.52048015594482 + "value": 14.520480155944824 }, "ZPosition": { "type": "float", - "value": 1.388710021972656 + "value": 1.3887100219726562 } }, { @@ -1779,11 +1779,11 @@ }, "YPosition": { "type": "float", - "value": 65.12294769287109 + "value": 65.1229476928711 }, "ZPosition": { "type": "float", - "value": 2.100000381469727 + "value": 2.1000003814697266 } }, { @@ -1836,7 +1836,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -1924,7 +1924,7 @@ }, "XPosition": { "type": "float", - "value": 14.92038059234619 + "value": 14.920380592346191 }, "YPosition": { "type": "float", @@ -1932,7 +1932,7 @@ }, "ZPosition": { "type": "float", - "value": 1.299999833106995 + "value": 1.2999998331069946 } }, { @@ -1985,7 +1985,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -2094,7 +2094,7 @@ }, "XPosition": { "type": "float", - "value": 14.92793464660645 + "value": 14.927934646606445 }, "YPosition": { "type": "float", @@ -2102,7 +2102,7 @@ }, "ZPosition": { "type": "float", - "value": 1.400000095367432 + "value": 1.4000000953674316 } }, { @@ -2215,7 +2215,7 @@ }, "XPosition": { "type": "float", - "value": 34.48321914672852 + "value": 34.483219146728516 }, "YPosition": { "type": "float", @@ -2223,7 +2223,7 @@ }, "ZPosition": { "type": "float", - "value": 1.899991393089294 + "value": 1.8999913930892944 } }, { @@ -2340,7 +2340,7 @@ }, "YPosition": { "type": "float", - "value": 40.13705444335938 + "value": 40.137054443359375 }, "ZPosition": { "type": "float", @@ -2457,7 +2457,7 @@ }, "XPosition": { "type": "float", - "value": 35.51938629150391 + "value": 35.519386291503906 }, "YPosition": { "type": "float", @@ -2465,7 +2465,7 @@ }, "ZPosition": { "type": "float", - "value": 1.899991393089294 + "value": 1.8999913930892944 } }, { @@ -2586,7 +2586,7 @@ }, "ZPosition": { "type": "float", - "value": 1.900000095367432 + "value": 1.9000000953674316 } }, { @@ -2721,7 +2721,7 @@ }, "ZPosition": { "type": "float", - "value": 1.830684065818787 + "value": 1.8306840658187866 } } ] diff --git a/_module/git/ruinedtempleofga.git.json b/_module/git/ruinedtempleofga.git.json index 98406d0..a2a414d 100644 --- a/_module/git/ruinedtempleofga.git.json +++ b/_module/git/ruinedtempleofga.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 3.110000133514404 + "value": 3.1100001335144043 }, "Z": { "type": "float", @@ -721,7 +721,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -1159,7 +1159,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -1378,7 +1378,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -2231,7 +2231,7 @@ }, "Y": { "type": "float", - "value": 106.0500030517578 + "value": 106.05000305175781 }, "Z": { "type": "float", @@ -2267,7 +2267,7 @@ }, "Bearing": { "type": "float", - "value": 2.82252049446106 + "value": 2.8225204944610596 }, "BodyBag": { "type": "byte", @@ -2702,7 +2702,7 @@ }, "Z": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } }, { @@ -2948,7 +2948,7 @@ }, "Bearing": { "type": "float", - "value": 3.043413162231445 + "value": 3.0434131622314453 }, "BodyBag": { "type": "byte", @@ -3148,7 +3148,7 @@ }, "X": { "type": "float", - "value": 48.08273315429688 + "value": 48.082733154296875 }, "Y": { "type": "float", @@ -3156,7 +3156,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3175,7 +3175,7 @@ }, "Bearing": { "type": "float", - "value": 1.497163414955139 + "value": 1.4971634149551392 }, "BodyBag": { "type": "byte", @@ -3375,15 +3375,15 @@ }, "X": { "type": "float", - "value": 61.62897109985352 + "value": 61.628971099853516 }, "Y": { "type": "float", - "value": 82.27927398681641 + "value": 82.2792739868164 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3606,11 +3606,11 @@ }, "Y": { "type": "float", - "value": 85.06020355224609 + "value": 85.0602035522461 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -3837,7 +3837,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4056,15 +4056,15 @@ }, "X": { "type": "float", - "value": 62.38485717773438 + "value": 62.384857177734375 }, "Y": { "type": "float", - "value": 23.41353034973145 + "value": 23.413530349731445 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4287,11 +4287,11 @@ }, "Y": { "type": "float", - "value": 11.22583484649658 + "value": 11.225834846496582 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4310,7 +4310,7 @@ }, "Bearing": { "type": "float", - "value": -1.178097248077393 + "value": -1.1780972480773926 }, "BodyBag": { "type": "byte", @@ -4510,15 +4510,15 @@ }, "X": { "type": "float", - "value": 44.53920745849609 + "value": 44.539207458496094 }, "Y": { "type": "float", - "value": 22.57011985778809 + "value": 22.570119857788086 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4537,7 +4537,7 @@ }, "Bearing": { "type": "float", - "value": 0.02454365603625774 + "value": 0.024543656036257744 }, "BodyBag": { "type": "byte", @@ -4745,7 +4745,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4972,7 +4972,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5199,7 +5199,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5422,11 +5422,11 @@ }, "Y": { "type": "float", - "value": 24.6953239440918 + "value": 24.695323944091797 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5645,7 +5645,7 @@ }, "X": { "type": "float", - "value": 101.3356323242188 + "value": 101.33563232421875 }, "Y": { "type": "float", @@ -5653,7 +5653,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5876,11 +5876,11 @@ }, "Y": { "type": "float", - "value": 11.57808208465576 + "value": 11.578082084655762 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6099,7 +6099,7 @@ }, "X": { "type": "float", - "value": 115.5978469848633 + "value": 115.59784698486328 }, "Y": { "type": "float", @@ -6107,7 +6107,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6330,11 +6330,11 @@ }, "Y": { "type": "float", - "value": 76.36106109619141 + "value": 76.3610610961914 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6353,7 +6353,7 @@ }, "Bearing": { "type": "float", - "value": 0.2945242524147034 + "value": 0.29452425241470337 }, "BodyBag": { "type": "byte", @@ -6788,7 +6788,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7015,7 +7015,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7234,7 +7234,7 @@ }, "X": { "type": "float", - "value": 79.25954437255859 + "value": 79.2595443725586 }, "Y": { "type": "float", @@ -7242,7 +7242,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7461,7 +7461,7 @@ }, "X": { "type": "float", - "value": 24.03521919250488 + "value": 24.035219192504883 }, "Y": { "type": "float", @@ -7469,7 +7469,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7696,7 +7696,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7915,15 +7915,15 @@ }, "X": { "type": "float", - "value": 24.87287330627441 + "value": 24.872873306274414 }, "Y": { "type": "float", - "value": 104.3000030517578 + "value": 104.30000305175781 }, "Z": { "type": "float", - "value": 1.356802821159363 + "value": 1.3568028211593628 } }, { @@ -8146,7 +8146,7 @@ }, "Y": { "type": "float", - "value": 102.8000030517578 + "value": 102.80000305175781 }, "Z": { "type": "float", @@ -8373,11 +8373,11 @@ }, "Y": { "type": "float", - "value": 101.0303649902344 + "value": 101.03036499023438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8604,7 +8604,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8823,15 +8823,15 @@ }, "X": { "type": "float", - "value": 19.5892448425293 + "value": 19.589244842529297 }, "Y": { "type": "float", - "value": 25.44528770446777 + "value": 25.445287704467773 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8850,7 +8850,7 @@ }, "Bearing": { "type": "float", - "value": -0.196349248290062 + "value": -0.19634924829006195 }, "BodyBag": { "type": "byte", @@ -9058,7 +9058,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9504,7 +9504,7 @@ }, "X": { "type": "float", - "value": 35.28338241577148 + "value": 35.283382415771484 }, "Y": { "type": "float", @@ -9512,7 +9512,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9735,11 +9735,11 @@ }, "Y": { "type": "float", - "value": 13.9829797744751 + "value": 13.982979774475098 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -9966,7 +9966,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -10185,15 +10185,15 @@ }, "X": { "type": "float", - "value": 36.74807739257813 + "value": 36.748077392578125 }, "Y": { "type": "float", - "value": 16.56711578369141 + "value": 16.567115783691406 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -10412,7 +10412,7 @@ }, "X": { "type": "float", - "value": 10.44281959533691 + "value": 10.442819595336914 }, "Y": { "type": "float", @@ -10420,7 +10420,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -10639,7 +10639,7 @@ }, "X": { "type": "float", - "value": 18.63752937316895 + "value": 18.637529373168945 }, "Y": { "type": "float", @@ -10647,7 +10647,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -10870,11 +10870,11 @@ }, "Y": { "type": "float", - "value": 25.4832935333252 + "value": 25.483293533325195 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11101,7 +11101,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11324,11 +11324,11 @@ }, "Y": { "type": "float", - "value": 25.98703002929688 + "value": 25.987030029296875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11551,11 +11551,11 @@ }, "Y": { "type": "float", - "value": 45.76980590820313 + "value": 45.769805908203125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11782,7 +11782,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11801,7 +11801,7 @@ }, "Bearing": { "type": "float", - "value": 1.055378556251526 + "value": 1.0553785562515259 }, "BodyBag": { "type": "byte", @@ -12009,7 +12009,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12236,7 +12236,7 @@ }, "Z": { "type": "float", - "value": 3.576278686523438e-007 + "value": 0.00000035762786865234375 } }, { @@ -12463,7 +12463,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12682,7 +12682,7 @@ }, "X": { "type": "float", - "value": 80.82151031494141 + "value": 80.8215103149414 }, "Y": { "type": "float", @@ -12913,11 +12913,11 @@ }, "Y": { "type": "float", - "value": 63.71304321289063 + "value": 63.713043212890625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13144,7 +13144,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13371,7 +13371,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -13594,11 +13594,11 @@ }, "Y": { "type": "float", - "value": 27.73280334472656 + "value": 27.732803344726562 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13821,11 +13821,11 @@ }, "Y": { "type": "float", - "value": 12.47485542297363 + "value": 12.474855422973633 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14044,15 +14044,15 @@ }, "X": { "type": "float", - "value": 14.65913581848145 + "value": 14.659135818481445 }, "Y": { "type": "float", - "value": 12.93210983276367 + "value": 12.932109832763672 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14271,15 +14271,15 @@ }, "X": { "type": "float", - "value": 98.27133941650391 + "value": 98.2713394165039 }, "Y": { "type": "float", - "value": 23.65780448913574 + "value": 23.657804489135742 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14502,11 +14502,11 @@ }, "Y": { "type": "float", - "value": 15.60841464996338 + "value": 15.608414649963379 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -14725,15 +14725,15 @@ }, "X": { "type": "float", - "value": 90.20839691162109 + "value": 90.2083969116211 }, "Y": { "type": "float", - "value": 15.8074541091919 + "value": 15.807454109191895 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -14952,11 +14952,11 @@ }, "X": { "type": "float", - "value": 100.4822387695313 + "value": 100.48223876953125 }, "Y": { "type": "float", - "value": 21.86115646362305 + "value": 21.861156463623047 }, "Z": { "type": "float", @@ -15187,7 +15187,7 @@ }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -15406,11 +15406,11 @@ }, "X": { "type": "float", - "value": 116.7421951293945 + "value": 116.74219512939453 }, "Y": { "type": "float", - "value": 26.18485260009766 + "value": 26.184852600097656 }, "Z": { "type": "float", @@ -15633,11 +15633,11 @@ }, "X": { "type": "float", - "value": 113.9580230712891 + "value": 113.95802307128906 }, "Y": { "type": "float", - "value": 33.37851715087891 + "value": 33.378517150878906 }, "Z": { "type": "float", @@ -15860,7 +15860,7 @@ }, "X": { "type": "float", - "value": 116.8378753662109 + "value": 116.83787536621094 }, "Y": { "type": "float", @@ -16087,15 +16087,15 @@ }, "X": { "type": "float", - "value": 116.4333343505859 + "value": 116.43333435058594 }, "Y": { "type": "float", - "value": 38.04278182983398 + "value": 38.042781829833984 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -16314,11 +16314,11 @@ }, "X": { "type": "float", - "value": 114.0606536865234 + "value": 114.06065368652344 }, "Y": { "type": "float", - "value": 45.35891723632813 + "value": 45.358917236328125 }, "Z": { "type": "float", @@ -16545,7 +16545,7 @@ }, "Y": { "type": "float", - "value": 46.09082412719727 + "value": 46.090824127197266 }, "Z": { "type": "float", @@ -16768,7 +16768,7 @@ }, "X": { "type": "float", - "value": 25.16816329956055 + "value": 25.168163299560547 }, "Y": { "type": "float", @@ -17230,7 +17230,7 @@ }, "Z": { "type": "float", - "value": 1.379609823226929 + "value": 1.3796098232269287 } }, { @@ -17453,11 +17453,11 @@ }, "Y": { "type": "float", - "value": 15.32495021820068 + "value": 15.324950218200684 }, "Z": { "type": "float", - "value": -1.862645149230957e-007 + "value": -0.0000001862645149230957 } }, { @@ -17680,11 +17680,11 @@ }, "Y": { "type": "float", - "value": 16.73186302185059 + "value": 16.731863021850586 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -17907,11 +17907,11 @@ }, "Y": { "type": "float", - "value": 26.63034820556641 + "value": 26.630348205566406 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -18134,11 +18134,11 @@ }, "Y": { "type": "float", - "value": 4.363599300384522 + "value": 4.3635993003845215 }, "Z": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 } }, { @@ -18157,7 +18157,7 @@ }, "Bearing": { "type": "float", - "value": 1.030834794044495 + "value": 1.0308347940444946 }, "BodyBag": { "type": "byte", @@ -18361,11 +18361,11 @@ }, "Y": { "type": "float", - "value": 13.26178932189941 + "value": 13.261789321899414 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18384,7 +18384,7 @@ }, "Bearing": { "type": "float", - "value": -1.178097248077393 + "value": -1.1780972480773926 }, "BodyBag": { "type": "byte", @@ -18592,7 +18592,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18815,11 +18815,11 @@ }, "Y": { "type": "float", - "value": 15.86056613922119 + "value": 15.860566139221191 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19038,7 +19038,7 @@ }, "X": { "type": "float", - "value": 49.92303848266602 + "value": 49.923038482666016 }, "Y": { "type": "float", @@ -19046,7 +19046,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -19104,7 +19104,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -19540,7 +19540,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454573847353458 + "value": 0.024545738473534584 }, "XPosition": { "type": "float", @@ -19556,7 +19556,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19601,7 +19601,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454573847353458 + "value": 0.024545738473534584 }, "XPosition": { "type": "float", @@ -19617,7 +19617,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19662,7 +19662,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454573847353458 + "value": 0.024545738473534584 }, "XPosition": { "type": "float", @@ -19678,7 +19678,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19727,11 +19727,11 @@ }, "XPosition": { "type": "float", - "value": 102.5445861816406 + "value": 102.54458618164062 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -19739,7 +19739,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19784,7 +19784,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454573847353458 + "value": 0.024545738473534584 }, "XPosition": { "type": "float", @@ -19796,11 +19796,11 @@ }, "YPosition": { "type": "float", - "value": 25.17817115783691 + "value": 25.178171157836914 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -19849,7 +19849,7 @@ }, "XPosition": { "type": "float", - "value": 100.9718856811523 + "value": 100.97188568115234 }, "YOrientation": { "type": "float", @@ -19861,7 +19861,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19910,7 +19910,7 @@ }, "XPosition": { "type": "float", - "value": 15.65147113800049 + "value": 15.651471138000488 }, "YOrientation": { "type": "float", @@ -19918,11 +19918,11 @@ }, "YPosition": { "type": "float", - "value": 10.42945098876953 + "value": 10.429450988769531 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -19967,7 +19967,7 @@ }, "XOrientation": { "type": "float", - "value": 0.02454573847353458 + "value": 0.024545738473534584 }, "XPosition": { "type": "float", @@ -19979,11 +19979,11 @@ }, "YPosition": { "type": "float", - "value": 43.13845062255859 + "value": 43.138450622558594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20040,11 +20040,11 @@ }, "YPosition": { "type": "float", - "value": 11.57297515869141 + "value": 11.572975158691406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20089,7 +20089,7 @@ }, "XOrientation": { "type": "float", - "value": 1.819925842028169e-006 + "value": 0.0000018199258420281694 }, "XPosition": { "type": "float", @@ -20101,7 +20101,7 @@ }, "YPosition": { "type": "float", - "value": 22.3079948425293 + "value": 22.307994842529297 }, "ZPosition": { "type": "float", @@ -20150,7 +20150,7 @@ }, "XOrientation": { "type": "float", - "value": 1.819925842028169e-006 + "value": 0.0000018199258420281694 }, "XPosition": { "type": "float", @@ -20162,11 +20162,11 @@ }, "YPosition": { "type": "float", - "value": 15.62606239318848 + "value": 15.626062393188477 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20307,7 +20307,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/southernbottomla.git.json b/_module/git/southernbottomla.git.json index dbfdeff..803b0cd 100644 --- a/_module/git/southernbottomla.git.json +++ b/_module/git/southernbottomla.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -3.141588926315308 + "value": -3.1415889263153076 }, "CloseLockDC": { "type": "byte", @@ -500,11 +500,11 @@ }, "Y": { "type": "float", - "value": 88.01108551025391 + "value": 88.0110855102539 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -723,15 +723,15 @@ }, "X": { "type": "float", - "value": 85.15921020507813 + "value": 85.15921020507812 }, "Y": { "type": "float", - "value": 94.62314605712891 + "value": 94.6231460571289 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -958,7 +958,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1181,11 +1181,11 @@ }, "Y": { "type": "float", - "value": 118.7093887329102 + "value": 118.70938873291016 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1404,15 +1404,15 @@ }, "X": { "type": "float", - "value": 102.0278472900391 + "value": 102.02784729003906 }, "Y": { "type": "float", - "value": 118.2731246948242 + "value": 118.27312469482422 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1631,7 +1631,7 @@ }, "X": { "type": "float", - "value": 103.0657119750977 + "value": 103.06571197509766 }, "Y": { "type": "float", @@ -1639,7 +1639,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1866,7 +1866,7 @@ }, "Z": { "type": "float", - "value": 0.002994269132614136 + "value": 0.0029942691326141357 } }, { @@ -2085,7 +2085,7 @@ }, "X": { "type": "float", - "value": 112.6633987426758 + "value": 112.66339874267578 }, "Y": { "type": "float", @@ -2093,7 +2093,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2312,7 +2312,7 @@ }, "X": { "type": "float", - "value": 95.93613433837891 + "value": 95.9361343383789 }, "Y": { "type": "float", @@ -2320,7 +2320,7 @@ }, "Z": { "type": "float", - "value": 0.08801341056823731 + "value": 0.0880134105682373 } }, { @@ -2539,7 +2539,7 @@ }, "X": { "type": "float", - "value": 85.61538696289063 + "value": 85.61538696289062 }, "Y": { "type": "float", @@ -2547,7 +2547,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2766,15 +2766,15 @@ }, "X": { "type": "float", - "value": 69.32839965820313 + "value": 69.32839965820312 }, "Y": { "type": "float", - "value": 54.86270141601563 + "value": 54.862701416015625 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3001,7 +3001,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3228,7 +3228,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3447,15 +3447,15 @@ }, "X": { "type": "float", - "value": 38.33538436889648 + "value": 38.335384368896484 }, "Y": { "type": "float", - "value": 32.15738677978516 + "value": 32.157386779785156 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3678,11 +3678,11 @@ }, "Y": { "type": "float", - "value": 14.41621780395508 + "value": 14.416217803955078 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3901,7 +3901,7 @@ }, "X": { "type": "float", - "value": 71.92726898193359 + "value": 71.9272689819336 }, "Y": { "type": "float", @@ -3909,7 +3909,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4136,7 +4136,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4363,7 +4363,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4582,7 +4582,7 @@ }, "X": { "type": "float", - "value": 92.21144866943359 + "value": 92.2114486694336 }, "Y": { "type": "float", @@ -4590,7 +4590,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4817,7 +4817,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5044,7 +5044,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5263,15 +5263,15 @@ }, "X": { "type": "float", - "value": 125.8431777954102 + "value": 125.84317779541016 }, "Y": { "type": "float", - "value": 103.0363616943359 + "value": 103.03636169433594 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5498,7 +5498,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5717,7 +5717,7 @@ }, "X": { "type": "float", - "value": 141.9847259521484 + "value": 141.98472595214844 }, "Y": { "type": "float", @@ -5725,7 +5725,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5944,15 +5944,15 @@ }, "X": { "type": "float", - "value": 135.0046081542969 + "value": 135.00460815429688 }, "Y": { "type": "float", - "value": 112.6340408325195 + "value": 112.63404083251953 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6171,15 +6171,15 @@ }, "X": { "type": "float", - "value": 146.6381530761719 + "value": 146.63815307617188 }, "Y": { "type": "float", - "value": 122.9588088989258 + "value": 122.95880889892578 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6398,15 +6398,15 @@ }, "X": { "type": "float", - "value": 135.2954406738281 + "value": 135.29544067382812 }, "Y": { "type": "float", - "value": 125.2532653808594 + "value": 125.25326538085938 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6629,11 +6629,11 @@ }, "Y": { "type": "float", - "value": 122.9265441894531 + "value": 122.92654418945312 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6852,15 +6852,15 @@ }, "X": { "type": "float", - "value": 125.8431777954102 + "value": 125.84317779541016 }, "Y": { "type": "float", - "value": 136.7413940429688 + "value": 136.74139404296875 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7087,7 +7087,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7306,15 +7306,15 @@ }, "X": { "type": "float", - "value": 106.7932281494141 + "value": 106.79322814941406 }, "Y": { "type": "float", - "value": 128.1616516113281 + "value": 128.16165161132812 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7533,15 +7533,15 @@ }, "X": { "type": "float", - "value": 91.69192504882813 + "value": 91.69192504882812 }, "Y": { "type": "float", - "value": 144.0123596191406 + "value": 144.01235961914062 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7760,7 +7760,7 @@ }, "X": { "type": "float", - "value": 106.8155364990234 + "value": 106.81553649902344 }, "Y": { "type": "float", @@ -7768,7 +7768,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7995,7 +7995,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8214,7 +8214,7 @@ }, "X": { "type": "float", - "value": 106.6701202392578 + "value": 106.67012023925781 }, "Y": { "type": "float", @@ -8222,7 +8222,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8441,7 +8441,7 @@ }, "X": { "type": "float", - "value": 102.3075408935547 + "value": 102.30754089355469 }, "Y": { "type": "float", @@ -8449,7 +8449,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8672,11 +8672,11 @@ }, "Y": { "type": "float", - "value": 33.53824615478516 + "value": 33.538246154785156 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8895,7 +8895,7 @@ }, "X": { "type": "float", - "value": 55.17173004150391 + "value": 55.171730041503906 }, "Y": { "type": "float", @@ -8903,7 +8903,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9130,7 +9130,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9349,15 +9349,15 @@ }, "X": { "type": "float", - "value": 25.09227561950684 + "value": 25.092275619506836 }, "Y": { "type": "float", - "value": 46.87457656860352 + "value": 46.874576568603516 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9576,7 +9576,7 @@ }, "X": { "type": "float", - "value": 36.72583389282227 + "value": 36.725833892822266 }, "Y": { "type": "float", @@ -9584,7 +9584,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9803,15 +9803,15 @@ }, "X": { "type": "float", - "value": 43.85138320922852 + "value": 43.851383209228516 }, "Y": { "type": "float", - "value": 57.49019622802734 + "value": 57.490196228027344 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10034,11 +10034,11 @@ }, "Y": { "type": "float", - "value": 68.83290863037109 + "value": 68.8329086303711 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10265,7 +10265,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10492,7 +10492,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10719,7 +10719,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10942,11 +10942,11 @@ }, "Y": { "type": "float", - "value": 54.14554595947266 + "value": 54.145545959472656 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11165,15 +11165,15 @@ }, "X": { "type": "float", - "value": 16.36710739135742 + "value": 16.367107391357422 }, "Y": { "type": "float", - "value": 63.88864898681641 + "value": 63.888648986816406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11392,7 +11392,7 @@ }, "X": { "type": "float", - "value": 24.36517715454102 + "value": 24.365177154541016 }, "Y": { "type": "float", @@ -11400,7 +11400,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11854,7 +11854,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12073,7 +12073,7 @@ }, "X": { "type": "float", - "value": 21.60220909118652 + "value": 21.602209091186523 }, "Y": { "type": "float", @@ -12081,7 +12081,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -12308,7 +12308,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12527,15 +12527,15 @@ }, "X": { "type": "float", - "value": 31.49069786071777 + "value": 31.490697860717773 }, "Y": { "type": "float", - "value": 108.5507278442383 + "value": 108.55072784423828 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12754,15 +12754,15 @@ }, "X": { "type": "float", - "value": 24.07433700561523 + "value": 24.074337005615234 }, "Y": { "type": "float", - "value": 117.8579864501953 + "value": 117.85798645019531 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -12989,7 +12989,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -13212,11 +13212,11 @@ }, "Y": { "type": "float", - "value": 125.1289596557617 + "value": 125.12895965576172 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -13435,7 +13435,7 @@ }, "X": { "type": "float", - "value": 18.11214065551758 + "value": 18.112140655517578 }, "Y": { "type": "float", @@ -13443,7 +13443,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13666,11 +13666,11 @@ }, "Y": { "type": "float", - "value": 133.8541107177734 + "value": 133.85411071777344 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -13893,11 +13893,11 @@ }, "Y": { "type": "float", - "value": 115.385856628418 + "value": 115.38585662841797 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14120,11 +14120,11 @@ }, "Y": { "type": "float", - "value": 124.8381195068359 + "value": 124.83811950683594 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14343,15 +14343,15 @@ }, "X": { "type": "float", - "value": 23.78349876403809 + "value": 23.783498764038086 }, "Y": { "type": "float", - "value": 104.4794006347656 + "value": 104.47940063476562 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14574,7 +14574,7 @@ }, "Y": { "type": "float", - "value": 148.8621215820313 + "value": 148.86212158203125 }, "Z": { "type": "float", @@ -14805,7 +14805,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15024,7 +15024,7 @@ }, "X": { "type": "float", - "value": 134.3085784912109 + "value": 134.30857849121094 }, "Y": { "type": "float", @@ -15032,7 +15032,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15251,7 +15251,7 @@ }, "X": { "type": "float", - "value": 121.9479293823242 + "value": 121.94792938232422 }, "Y": { "type": "float", @@ -15259,7 +15259,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15478,7 +15478,7 @@ }, "X": { "type": "float", - "value": 125.5834121704102 + "value": 125.58341217041016 }, "Y": { "type": "float", @@ -15486,7 +15486,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15705,7 +15705,7 @@ }, "X": { "type": "float", - "value": 141.5795593261719 + "value": 141.57955932617188 }, "Y": { "type": "float", @@ -15713,7 +15713,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15932,15 +15932,15 @@ }, "X": { "type": "float", - "value": 108.3747482299805 + "value": 108.37474822998047 }, "Y": { "type": "float", - "value": 19.6847038269043 + "value": 19.684703826904297 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16159,11 +16159,11 @@ }, "X": { "type": "float", - "value": 3.187642574310303 + "value": 3.1876425743103027 }, "Y": { "type": "float", - "value": 21.15977478027344 + "value": 21.159774780273438 }, "Z": { "type": "float", @@ -16390,7 +16390,7 @@ }, "Y": { "type": "float", - "value": 22.73388862609863 + "value": 22.733888626098633 }, "Z": { "type": "float", @@ -17067,11 +17067,11 @@ }, "X": { "type": "float", - "value": 32.03977203369141 + "value": 32.039772033691406 }, "Y": { "type": "float", - "value": 4.393170833587647 + "value": 4.3931708335876465 }, "Z": { "type": "float", @@ -17525,7 +17525,7 @@ }, "Y": { "type": "float", - "value": 12.10023784637451 + "value": 12.100237846374512 }, "Z": { "type": "float", @@ -17748,11 +17748,11 @@ }, "X": { "type": "float", - "value": 39.22927093505859 + "value": 39.229270935058594 }, "Y": { "type": "float", - "value": 20.05452728271484 + "value": 20.054527282714844 }, "Z": { "type": "float", @@ -17975,11 +17975,11 @@ }, "X": { "type": "float", - "value": 33.52742767333984 + "value": 33.527427673339844 }, "Y": { "type": "float", - "value": 23.59656715393066 + "value": 23.596567153930664 }, "Z": { "type": "float", @@ -18656,11 +18656,11 @@ }, "X": { "type": "float", - "value": 2.226627349853516 + "value": 2.2266273498535156 }, "Y": { "type": "float", - "value": 35.13980865478516 + "value": 35.139808654785156 }, "Z": { "type": "float", @@ -18722,7 +18722,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -19087,11 +19087,11 @@ }, "YPosition": { "type": "float", - "value": 72.36252593994141 + "value": 72.3625259399414 }, "ZPosition": { "type": "float", - "value": 1.000000476837158 + "value": 1.0000004768371582 } }, { @@ -19144,7 +19144,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19215,7 +19215,7 @@ }, "YPosition": { "type": "float", - "value": 41.27248382568359 + "value": 41.272483825683594 }, "ZPosition": { "type": "float", @@ -19272,7 +19272,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19400,7 +19400,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19467,7 +19467,7 @@ }, "XPosition": { "type": "float", - "value": 42.89258193969727 + "value": 42.892581939697266 }, "YPosition": { "type": "float", @@ -19528,7 +19528,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19656,7 +19656,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19730,11 +19730,11 @@ }, "XPosition": { "type": "float", - "value": 110.0530471801758 + "value": 110.05304718017578 }, "YPosition": { "type": "float", - "value": 100.7743072509766 + "value": 100.77430725097656 }, "ZPosition": { "type": "float", @@ -19791,7 +19791,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19929,11 +19929,11 @@ }, "PointY": { "type": "float", - "value": -2.615463256835938 + "value": -2.6154632568359375 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -19963,7 +19963,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -20083,7 +20083,7 @@ }, "XPosition": { "type": "float", - "value": 110.0479125976563 + "value": 110.04791259765625 }, "YOrientation": { "type": "float", @@ -20091,7 +20091,7 @@ }, "YPosition": { "type": "float", - "value": 149.5365295410156 + "value": 149.53652954101562 }, "ZOrientation": { "type": "float", @@ -20135,7 +20135,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -20146,11 +20146,11 @@ }, "PointY": { "type": "float", - "value": -3.203933715820313 + "value": -3.2039337158203125 }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -20165,7 +20165,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -20187,7 +20187,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1307716369628906 + "value": 0.13077163696289062 }, "PointY": { "type": "float", @@ -20195,7 +20195,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } } ] @@ -20308,7 +20308,7 @@ }, "YPosition": { "type": "float", - "value": 149.4711303710938 + "value": 149.47113037109375 }, "ZOrientation": { "type": "float", @@ -20410,7 +20410,7 @@ }, "XPosition": { "type": "float", - "value": 10.33492469787598 + "value": 10.334924697875977 }, "YOrientation": { "type": "float", @@ -20422,7 +20422,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -20471,7 +20471,7 @@ }, "XPosition": { "type": "float", - "value": 21.8990364074707 + "value": 21.899036407470703 }, "YOrientation": { "type": "float", @@ -20483,7 +20483,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20544,7 +20544,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -20597,15 +20597,15 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 102.6484069824219 + "value": 102.64840698242188 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20666,7 +20666,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20727,7 +20727,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -20780,15 +20780,15 @@ }, "YOrientation": { "type": "float", - "value": 1.50600942561141e-006 + "value": 0.0000015060094256114098 }, "YPosition": { "type": "float", - "value": 39.51284790039063 + "value": 39.512847900390625 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -20869,7 +20869,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20930,7 +20930,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -20991,7 +20991,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -21052,7 +21052,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -21101,7 +21101,7 @@ }, "XPosition": { "type": "float", - "value": 112.0935974121094 + "value": 112.09359741210938 }, "YOrientation": { "type": "float", @@ -21113,7 +21113,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -21174,7 +21174,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -21243,7 +21243,7 @@ }, "XPosition": { "type": "float", - "value": 103.4221954345703 + "value": 103.42219543457031 }, "YOrientation": { "type": "float", @@ -21255,7 +21255,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -21308,7 +21308,7 @@ }, "YOrientation": { "type": "float", - "value": 1.50600942561141e-006 + "value": 0.0000015060094256114098 }, "YPosition": { "type": "float", @@ -21316,7 +21316,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -21365,7 +21365,7 @@ }, "XPosition": { "type": "float", - "value": 136.3264312744141 + "value": 136.32643127441406 }, "YOrientation": { "type": "float", @@ -21377,7 +21377,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21426,7 +21426,7 @@ }, "XPosition": { "type": "float", - "value": 122.3106079101563 + "value": 122.31060791015625 }, "YOrientation": { "type": "float", @@ -21434,11 +21434,11 @@ }, "YPosition": { "type": "float", - "value": 46.45523834228516 + "value": 46.455238342285156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -21487,7 +21487,7 @@ }, "XPosition": { "type": "float", - "value": 142.1417083740234 + "value": 142.14170837402344 }, "YOrientation": { "type": "float", @@ -21495,11 +21495,11 @@ }, "YPosition": { "type": "float", - "value": 67.46567535400391 + "value": 67.4656753540039 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -21548,7 +21548,7 @@ }, "XPosition": { "type": "float", - "value": 127.5293045043945 + "value": 127.52930450439453 }, "YOrientation": { "type": "float", @@ -21560,7 +21560,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -21613,15 +21613,15 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 113.0493469238281 + "value": 113.04934692382812 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -21678,11 +21678,11 @@ }, "YPosition": { "type": "float", - "value": 148.3268737792969 + "value": 148.32687377929688 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -21739,11 +21739,11 @@ }, "YPosition": { "type": "float", - "value": 147.9345550537109 + "value": 147.93455505371094 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -21792,7 +21792,7 @@ }, "XPosition": { "type": "float", - "value": 62.45284271240234 + "value": 62.452842712402344 }, "YOrientation": { "type": "float", @@ -21800,11 +21800,11 @@ }, "YPosition": { "type": "float", - "value": 128.3264312744141 + "value": 128.32643127441406 }, "ZPosition": { "type": "float", - "value": 0.01000015716999769 + "value": 0.010000157169997692 } }, { @@ -21865,7 +21865,7 @@ }, "ZPosition": { "type": "float", - "value": -1.9073486328125e-006 + "value": -0.0000019073486328125 } } ] diff --git a/_module/git/southernmorrahil.git.json b/_module/git/southernmorrahil.git.json index 1d2a739..603fff1 100644 --- a/_module/git/southernmorrahil.git.json +++ b/_module/git/southernmorrahil.git.json @@ -282,11 +282,11 @@ }, "Y": { "type": "float", - "value": 12.71696853637695 + "value": 12.716968536376953 }, "Z": { "type": "float", - "value": 5.147842407226563 + "value": 5.1478424072265625 } }, { @@ -736,7 +736,7 @@ }, "Y": { "type": "float", - "value": 10.71091556549072 + "value": 10.710915565490723 }, "Z": { "type": "float", @@ -1186,7 +1186,7 @@ }, "X": { "type": "float", - "value": 75.01223754882813 + "value": 75.01223754882812 }, "Y": { "type": "float", @@ -1640,11 +1640,11 @@ }, "X": { "type": "float", - "value": 116.6847839355469 + "value": 116.68478393554688 }, "Y": { "type": "float", - "value": 35.51184463500977 + "value": 35.511844635009766 }, "Z": { "type": "float", @@ -1867,7 +1867,7 @@ }, "X": { "type": "float", - "value": 122.5237426757813 + "value": 122.52374267578125 }, "Y": { "type": "float", @@ -2094,7 +2094,7 @@ }, "X": { "type": "float", - "value": 118.6378936767578 + "value": 118.63789367675781 }, "Y": { "type": "float", @@ -2321,11 +2321,11 @@ }, "X": { "type": "float", - "value": 119.0944290161133 + "value": 119.09442901611328 }, "Y": { "type": "float", - "value": 31.26017379760742 + "value": 31.260173797607422 }, "Z": { "type": "float", @@ -2548,7 +2548,7 @@ }, "X": { "type": "float", - "value": 105.915412902832 + "value": 105.91541290283203 }, "Y": { "type": "float", @@ -2775,11 +2775,11 @@ }, "X": { "type": "float", - "value": 124.4618530273438 + "value": 124.46185302734375 }, "Y": { "type": "float", - "value": 34.87994766235352 + "value": 34.879947662353516 }, "Z": { "type": "float", @@ -3002,11 +3002,11 @@ }, "X": { "type": "float", - "value": 122.4858322143555 + "value": 122.48583221435547 }, "Y": { "type": "float", - "value": 36.79232025146484 + "value": 36.792320251464844 }, "Z": { "type": "float", @@ -3029,7 +3029,7 @@ }, "Bearing": { "type": "float", - "value": -2.380736351013184 + "value": -2.3807363510131836 }, "BodyBag": { "type": "byte", @@ -3229,7 +3229,7 @@ }, "X": { "type": "float", - "value": 143.3689117431641 + "value": 143.36891174316406 }, "Y": { "type": "float", @@ -3237,7 +3237,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3460,7 +3460,7 @@ }, "Y": { "type": "float", - "value": 8.043960571289063 + "value": 8.043960571289062 }, "Z": { "type": "float", @@ -3691,7 +3691,7 @@ }, "Z": { "type": "float", - "value": 0.01000035181641579 + "value": 0.010000351816415787 } }, { @@ -3910,15 +3910,15 @@ }, "X": { "type": "float", - "value": 145.1878051757813 + "value": 145.18780517578125 }, "Y": { "type": "float", - "value": 14.22296333312988 + "value": 14.222963333129883 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4137,15 +4137,15 @@ }, "X": { "type": "float", - "value": 142.1591491699219 + "value": 142.15914916992188 }, "Y": { "type": "float", - "value": 12.46450996398926 + "value": 12.464509963989258 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -4368,11 +4368,11 @@ }, "Y": { "type": "float", - "value": 11.89322471618652 + "value": 11.893224716186523 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4595,11 +4595,11 @@ }, "Y": { "type": "float", - "value": 10.99310874938965 + "value": 10.993108749389648 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -4618,7 +4618,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "BodyBag": { "type": "byte", @@ -5045,7 +5045,7 @@ }, "X": { "type": "float", - "value": 104.9822311401367 + "value": 104.98223114013672 }, "Y": { "type": "float", @@ -5272,11 +5272,11 @@ }, "X": { "type": "float", - "value": 10.22712898254395 + "value": 10.227128982543945 }, "Y": { "type": "float", - "value": 27.87498092651367 + "value": 27.874980926513672 }, "Z": { "type": "float", @@ -5499,15 +5499,15 @@ }, "X": { "type": "float", - "value": 12.77791595458984 + "value": 12.777915954589844 }, "Y": { "type": "float", - "value": 34.71301651000977 + "value": 34.713016510009766 }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -5730,11 +5730,11 @@ }, "Y": { "type": "float", - "value": 34.12894439697266 + "value": 34.128944396972656 }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -5753,7 +5753,7 @@ }, "Bearing": { "type": "float", - "value": 1.374445796012878 + "value": 1.3744457960128784 }, "BodyBag": { "type": "byte", @@ -5957,7 +5957,7 @@ }, "Y": { "type": "float", - "value": 33.79465484619141 + "value": 33.794654846191406 }, "Z": { "type": "float", @@ -6415,7 +6415,7 @@ }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -6634,7 +6634,7 @@ }, "X": { "type": "float", - "value": 10.0003833770752 + "value": 10.000383377075195 }, "Y": { "type": "float", @@ -6642,7 +6642,7 @@ }, "Z": { "type": "float", - "value": 10.01000022888184 + "value": 10.010000228881836 } }, { @@ -6861,11 +6861,11 @@ }, "X": { "type": "float", - "value": 17.58893966674805 + "value": 17.588939666748047 }, "Y": { "type": "float", - "value": 20.34441757202148 + "value": 20.344417572021484 }, "Z": { "type": "float", @@ -7088,11 +7088,11 @@ }, "X": { "type": "float", - "value": 21.37063407897949 + "value": 21.370634078979492 }, "Y": { "type": "float", - "value": 10.43999099731445 + "value": 10.439990997314453 }, "Z": { "type": "float", @@ -7542,7 +7542,7 @@ }, "X": { "type": "float", - "value": 30.73523330688477 + "value": 30.735233306884766 }, "Y": { "type": "float", @@ -7550,7 +7550,7 @@ }, "Z": { "type": "float", - "value": 10.00313186645508 + "value": 10.003131866455078 } }, { @@ -7777,7 +7777,7 @@ }, "Z": { "type": "float", - "value": 9.999997138977051 + "value": 9.99999713897705 } }, { @@ -7996,7 +7996,7 @@ }, "X": { "type": "float", - "value": 29.65433883666992 + "value": 29.654338836669922 }, "Y": { "type": "float", @@ -8450,7 +8450,7 @@ }, "X": { "type": "float", - "value": 11.10604858398438 + "value": 11.106048583984375 }, "Y": { "type": "float", @@ -8681,7 +8681,7 @@ }, "Y": { "type": "float", - "value": 59.60195922851563 + "value": 59.601959228515625 }, "Z": { "type": "float", @@ -9358,7 +9358,7 @@ }, "X": { "type": "float", - "value": 11.71467018127441 + "value": 11.714670181274414 }, "Y": { "type": "float", @@ -9589,7 +9589,7 @@ }, "Y": { "type": "float", - "value": 100.2873382568359 + "value": 100.28733825683594 }, "Z": { "type": "float", @@ -10039,15 +10039,15 @@ }, "X": { "type": "float", - "value": 29.60418891906738 + "value": 29.604188919067383 }, "Y": { "type": "float", - "value": 123.5373916625977 + "value": 123.53739166259766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10270,11 +10270,11 @@ }, "Y": { "type": "float", - "value": 116.3385467529297 + "value": 116.33854675292969 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10501,7 +10501,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10724,11 +10724,11 @@ }, "Y": { "type": "float", - "value": 114.198356628418 + "value": 114.19835662841797 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10951,11 +10951,11 @@ }, "Y": { "type": "float", - "value": 101.3571624755859 + "value": 101.35716247558594 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11178,11 +11178,11 @@ }, "Y": { "type": "float", - "value": 30.90708923339844 + "value": 30.907089233398438 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11636,7 +11636,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11863,7 +11863,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12082,7 +12082,7 @@ }, "X": { "type": "float", - "value": 123.7254028320313 + "value": 123.72540283203125 }, "Y": { "type": "float", @@ -12090,7 +12090,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12309,15 +12309,15 @@ }, "X": { "type": "float", - "value": 113.9972305297852 + "value": 113.99723052978516 }, "Y": { "type": "float", - "value": 85.51381683349609 + "value": 85.5138168334961 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12536,7 +12536,7 @@ }, "X": { "type": "float", - "value": 103.8799285888672 + "value": 103.87992858886719 }, "Y": { "type": "float", @@ -12544,7 +12544,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12763,7 +12763,7 @@ }, "X": { "type": "float", - "value": 127.4221038818359 + "value": 127.42210388183594 }, "Y": { "type": "float", @@ -12771,7 +12771,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12990,7 +12990,7 @@ }, "X": { "type": "float", - "value": 112.8298416137695 + "value": 112.82984161376953 }, "Y": { "type": "float", @@ -12998,7 +12998,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13217,7 +13217,7 @@ }, "X": { "type": "float", - "value": 136.9228820800781 + "value": 136.92288208007812 }, "Y": { "type": "float", @@ -13225,7 +13225,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13444,15 +13444,15 @@ }, "X": { "type": "float", - "value": 127.9729614257813 + "value": 127.97296142578125 }, "Y": { "type": "float", - "value": 15.86574554443359 + "value": 15.865745544433594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13671,7 +13671,7 @@ }, "X": { "type": "float", - "value": 134.5881042480469 + "value": 134.58810424804688 }, "Y": { "type": "float", @@ -13679,7 +13679,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13906,7 +13906,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -13964,7 +13964,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -14329,7 +14329,7 @@ }, "YPosition": { "type": "float", - "value": 81.34291839599609 + "value": 81.3429183959961 }, "ZPosition": { "type": "float", @@ -14378,7 +14378,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -14393,7 +14393,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -14404,7 +14404,7 @@ }, "PointY": { "type": "float", - "value": -2.505050659179688 + "value": -2.5050506591796875 }, "PointZ": { "type": "float", @@ -14423,7 +14423,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -14528,7 +14528,7 @@ }, "XPosition": { "type": "float", - "value": 129.9508972167969 + "value": 129.95089721679688 }, "YOrientation": { "type": "float", @@ -14536,7 +14536,7 @@ }, "YPosition": { "type": "float", - "value": 149.8266296386719 + "value": 149.82662963867188 }, "ZOrientation": { "type": "float", @@ -14580,7 +14580,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -14595,7 +14595,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -14606,7 +14606,7 @@ }, "PointY": { "type": "float", - "value": -2.505050659179688 + "value": -2.5050506591796875 }, "PointZ": { "type": "float", @@ -14625,7 +14625,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -14738,7 +14738,7 @@ }, "YPosition": { "type": "float", - "value": 149.8265533447266 + "value": 149.82655334472656 }, "ZOrientation": { "type": "float", @@ -14746,7 +14746,7 @@ }, "ZPosition": { "type": "float", - "value": -1.013278961181641e-006 + "value": -0.0000010132789611816406 } } ] @@ -14848,7 +14848,7 @@ }, "YPosition": { "type": "float", - "value": 31.01243400573731 + "value": 31.012434005737305 }, "ZPosition": { "type": "float", @@ -14901,7 +14901,7 @@ }, "XPosition": { "type": "float", - "value": 44.74877548217773 + "value": 44.748775482177734 }, "YOrientation": { "type": "float", @@ -15031,7 +15031,7 @@ }, "YPosition": { "type": "float", - "value": 70.91493988037109 + "value": 70.9149398803711 }, "ZPosition": { "type": "float", @@ -15141,11 +15141,11 @@ }, "XOrientation": { "type": "float", - "value": 0.1224105581641197 + "value": 0.12241055816411972 }, "XPosition": { "type": "float", - "value": 39.71437835693359 + "value": 39.714378356933594 }, "YOrientation": { "type": "float", @@ -15153,11 +15153,11 @@ }, "YPosition": { "type": "float", - "value": 107.2351608276367 + "value": 107.23516082763672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15218,7 +15218,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15267,7 +15267,7 @@ }, "XPosition": { "type": "float", - "value": 24.99452972412109 + "value": 24.994529724121094 }, "YOrientation": { "type": "float", @@ -15275,11 +15275,11 @@ }, "YPosition": { "type": "float", - "value": 148.5740356445313 + "value": 148.57403564453125 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15324,11 +15324,11 @@ }, "XOrientation": { "type": "float", - "value": -3.727274588527507e-006 + "value": -0.000003727274588527507 }, "XPosition": { "type": "float", - "value": 135.2418060302734 + "value": 135.24180603027344 }, "YOrientation": { "type": "float", @@ -15336,11 +15336,11 @@ }, "YPosition": { "type": "float", - "value": 148.3932495117188 + "value": 148.39324951171875 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15409,7 +15409,7 @@ }, "XPosition": { "type": "float", - "value": 139.2479858398438 + "value": 139.24798583984375 }, "YOrientation": { "type": "float", @@ -15417,11 +15417,11 @@ }, "YPosition": { "type": "float", - "value": 10.82012176513672 + "value": 10.820121765136719 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15502,7 +15502,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15551,7 +15551,7 @@ }, "XPosition": { "type": "float", - "value": 100.100944519043 + "value": 100.10094451904297 }, "YOrientation": { "type": "float", @@ -15563,7 +15563,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15612,7 +15612,7 @@ }, "XPosition": { "type": "float", - "value": 140.5845794677734 + "value": 140.58457946777344 }, "YOrientation": { "type": "float", @@ -15620,7 +15620,7 @@ }, "YPosition": { "type": "float", - "value": 38.15301895141602 + "value": 38.153018951416016 }, "ZPosition": { "type": "float", @@ -15681,11 +15681,11 @@ }, "YPosition": { "type": "float", - "value": 60.60077285766602 + "value": 60.600772857666016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15746,7 +15746,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15807,7 +15807,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15856,7 +15856,7 @@ }, "XPosition": { "type": "float", - "value": 108.7839508056641 + "value": 108.78395080566406 }, "YOrientation": { "type": "float", @@ -15868,7 +15868,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15929,7 +15929,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15978,11 +15978,11 @@ }, "XPosition": { "type": "float", - "value": 60.84616851806641 + "value": 60.846168518066406 }, "YOrientation": { "type": "float", - "value": 0.1709629148244858 + "value": 0.17096291482448578 }, "YPosition": { "type": "float", @@ -15990,7 +15990,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16039,7 +16039,7 @@ }, "XPosition": { "type": "float", - "value": 88.86472320556641 + "value": 88.8647232055664 }, "YOrientation": { "type": "float", @@ -16051,7 +16051,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16112,7 +16112,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16169,11 +16169,11 @@ }, "YPosition": { "type": "float", - "value": 128.3639068603516 + "value": 128.36390686035156 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16222,7 +16222,7 @@ }, "XPosition": { "type": "float", - "value": 109.4125900268555 + "value": 109.41259002685547 }, "YOrientation": { "type": "float", @@ -16230,11 +16230,11 @@ }, "YPosition": { "type": "float", - "value": 139.8093109130859 + "value": 139.80931091308594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16291,11 +16291,11 @@ }, "YPosition": { "type": "float", - "value": 139.8093109130859 + "value": 139.80931091308594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16352,11 +16352,11 @@ }, "YPosition": { "type": "float", - "value": 117.8884429931641 + "value": 117.88844299316406 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16413,11 +16413,11 @@ }, "YPosition": { "type": "float", - "value": 108.5588760375977 + "value": 108.55887603759766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16543,7 +16543,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/southernredde001.git.json b/_module/git/southernredde001.git.json index 28867b8..b95053e 100644 --- a/_module/git/southernredde001.git.json +++ b/_module/git/southernredde001.git.json @@ -939,7 +939,7 @@ }, "XPosition": { "type": "float", - "value": 19.71643447875977 + "value": 19.716434478759766 }, "YOrientation": { "type": "float", @@ -951,7 +951,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1812,7 +1812,7 @@ }, "XPosition": { "type": "float", - "value": 13.74655342102051 + "value": 13.746553421020508 }, "YOrientation": { "type": "float", @@ -1820,7 +1820,7 @@ }, "YPosition": { "type": "float", - "value": 24.70902633666992 + "value": 24.709026336669922 }, "ZPosition": { "type": "float", @@ -2044,7 +2044,7 @@ }, "Y": { "type": "float", - "value": 12.19000053405762 + "value": 12.190000534057617 }, "Z": { "type": "float", @@ -2080,7 +2080,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -2280,7 +2280,7 @@ }, "X": { "type": "float", - "value": 15.09064197540283 + "value": 15.090641975402832 }, "Y": { "type": "float", @@ -2288,7 +2288,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -2515,7 +2515,7 @@ }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -2734,15 +2734,15 @@ }, "X": { "type": "float", - "value": 13.76332569122315 + "value": 13.763325691223145 }, "Y": { "type": "float", - "value": 16.59481048583984 + "value": 16.594810485839844 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -2961,15 +2961,15 @@ }, "X": { "type": "float", - "value": 16.34305572509766 + "value": 16.343055725097656 }, "Y": { "type": "float", - "value": 20.39274406433106 + "value": 20.392744064331055 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -3188,15 +3188,15 @@ }, "X": { "type": "float", - "value": 13.72749710083008 + "value": 13.727497100830078 }, "Y": { "type": "float", - "value": 20.42857360839844 + "value": 20.428573608398438 }, "Z": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } } ] @@ -7091,11 +7091,11 @@ }, "YPosition": { "type": "float", - "value": 25.89728927612305 + "value": 25.897289276123047 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -7205,7 +7205,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7274,7 +7274,7 @@ }, "XPosition": { "type": "float", - "value": 28.49736404418945 + "value": 28.497364044189453 }, "YOrientation": { "type": "float", @@ -7282,11 +7282,11 @@ }, "YPosition": { "type": "float", - "value": 25.78352737426758 + "value": 25.783527374267578 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7355,19 +7355,19 @@ }, "XPosition": { "type": "float", - "value": 32.30749893188477 + "value": 32.307498931884766 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 18.79695510864258 + "value": 18.796955108642578 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7424,11 +7424,11 @@ }, "YPosition": { "type": "float", - "value": 22.87789344787598 + "value": 22.877893447875977 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -7497,7 +7497,7 @@ }, "XPosition": { "type": "float", - "value": 18.22841262817383 + "value": 18.228412628173828 }, "YOrientation": { "type": "float", @@ -7505,11 +7505,11 @@ }, "YPosition": { "type": "float", - "value": 14.13908004760742 + "value": 14.139080047607422 }, "ZPosition": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } }, { @@ -7578,7 +7578,7 @@ }, "XPosition": { "type": "float", - "value": 15.90006637573242 + "value": 15.900066375732422 }, "YOrientation": { "type": "float", @@ -7586,11 +7586,11 @@ }, "YPosition": { "type": "float", - "value": 14.28267478942871 + "value": 14.282674789428711 }, "ZPosition": { "type": "float", - "value": 0.0004218816757202148 + "value": 0.00042188167572021484 } } ] diff --git a/_module/git/testarea.git.json b/_module/git/testarea.git.json index ad86948..ecba178 100644 --- a/_module/git/testarea.git.json +++ b/_module/git/testarea.git.json @@ -855,11 +855,11 @@ }, "XOrientation": { "type": "float", - "value": -0.19511978328228 + "value": -0.19511978328227997 }, "XPosition": { "type": "float", - "value": 44.77255249023438 + "value": 44.772552490234375 }, "YOrientation": { "type": "float", @@ -867,11 +867,11 @@ }, "YPosition": { "type": "float", - "value": 29.48842239379883 + "value": 29.488422393798828 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1448,7 +1448,7 @@ }, "XPosition": { "type": "float", - "value": 45.56912994384766 + "value": 45.569129943847656 }, "YOrientation": { "type": "float", @@ -1460,7 +1460,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3821,7 +3821,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] @@ -3919,7 +3919,7 @@ }, "XPosition": { "type": "float", - "value": 44.81463241577148 + "value": 44.814632415771484 }, "YOrientation": { "type": "float", @@ -3931,7 +3931,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4042,7 +4042,7 @@ }, "XPosition": { "type": "float", - "value": 43.98202514648438 + "value": 43.982025146484375 }, "YOrientation": { "type": "float", @@ -4050,11 +4050,11 @@ }, "YPosition": { "type": "float", - "value": 27.98151779174805 + "value": 27.981517791748047 }, "ZPosition": { "type": "float", - "value": 0.009999865666031838 + "value": 0.009999865666031837 } } ] @@ -4278,15 +4278,15 @@ }, "X": { "type": "float", - "value": 40.66957855224609 + "value": 40.669578552246094 }, "Y": { "type": "float", - "value": 19.65661239624023 + "value": 19.656612396240234 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4305,7 +4305,7 @@ }, "Bearing": { "type": "float", - "value": -0.9081114530563355 + "value": -0.9081114530563354 }, "BodyBag": { "type": "byte", @@ -4513,7 +4513,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] @@ -4554,7 +4554,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.534530639648438 + "value": -2.5345306396484375 }, "PointY": { "type": "float", @@ -4562,14 +4562,14 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -2.534530639648438 + "value": -2.5345306396484375 }, "PointY": { "type": "float", @@ -4607,7 +4607,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } } ] @@ -4721,7 +4721,7 @@ }, "YPosition": { "type": "float", - "value": 39.85516738891602 + "value": 39.855167388916016 }, "ZOrientation": { "type": "float", @@ -4803,7 +4803,7 @@ }, "XPosition": { "type": "float", - "value": 44.91998672485352 + "value": 44.919986724853516 }, "YOrientation": { "type": "float", @@ -4811,11 +4811,11 @@ }, "YPosition": { "type": "float", - "value": 26.75646591186523 + "value": 26.756465911865234 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4911,7 +4911,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4972,7 +4972,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5033,7 +5033,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5110,11 +5110,11 @@ }, "YPosition": { "type": "float", - "value": 56.02169799804688 + "value": 56.021697998046875 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5179,11 +5179,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 18.66433906555176 + "value": 18.664339065551758 }, "YOrientation": { "type": "float", @@ -5195,7 +5195,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5240,11 +5240,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 15.02035713195801 + "value": 15.020357131958008 }, "YOrientation": { "type": "float", @@ -5252,11 +5252,11 @@ }, "YPosition": { "type": "float", - "value": 52.87099456787109 + "value": 52.870994567871094 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5301,11 +5301,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 26.37974548339844 + "value": 26.379745483398438 }, "YOrientation": { "type": "float", @@ -5317,7 +5317,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5398,7 +5398,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5447,7 +5447,7 @@ }, "XPosition": { "type": "float", - "value": 40.19302368164063 + "value": 40.193023681640625 }, "YOrientation": { "type": "float", @@ -5455,11 +5455,11 @@ }, "YPosition": { "type": "float", - "value": 29.37199401855469 + "value": 29.371994018554688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5536,11 +5536,11 @@ }, "YPosition": { "type": "float", - "value": 25.92896461486816 + "value": 25.928964614868164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5621,7 +5621,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5698,11 +5698,11 @@ }, "YPosition": { "type": "float", - "value": 29.86649322509766 + "value": 29.866493225097656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5759,7 +5759,7 @@ }, "YPosition": { "type": "float", - "value": 31.03280067443848 + "value": 31.032800674438477 }, "ZPosition": { "type": "float", @@ -5836,7 +5836,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -5844,7 +5844,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5970,7 +5970,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6035,7 +6035,7 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", @@ -6051,7 +6051,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6096,7 +6096,7 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", @@ -6112,7 +6112,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6157,11 +6157,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 72.82278442382813 + "value": 72.82278442382812 }, "YOrientation": { "type": "float", @@ -6173,7 +6173,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6242,7 +6242,7 @@ }, "XPosition": { "type": "float", - "value": 19.10181617736816 + "value": 19.101816177368164 }, "YOrientation": { "type": "float", @@ -6250,11 +6250,11 @@ }, "YPosition": { "type": "float", - "value": 15.46980476379395 + "value": 15.469804763793945 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6319,11 +6319,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 12.14552688598633 + "value": 12.145526885986328 }, "YOrientation": { "type": "float", @@ -6335,7 +6335,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6408,15 +6408,15 @@ }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", - "value": 15.34720420837402 + "value": 15.347204208374023 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6489,7 +6489,7 @@ }, "YOrientation": { "type": "float", - "value": -0.9996983408927918 + "value": -0.9996983408927917 }, "YPosition": { "type": "float", @@ -6497,7 +6497,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6589,11 +6589,11 @@ }, "YPosition": { "type": "float", - "value": 52.12588500976563 + "value": 52.125885009765625 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6689,7 +6689,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/theblackcliffs.git.json b/_module/git/theblackcliffs.git.json index 09ccce1..ee9e20c 100644 --- a/_module/git/theblackcliffs.git.json +++ b/_module/git/theblackcliffs.git.json @@ -116,7 +116,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -477,11 +477,11 @@ }, "XPosition": { "type": "float", - "value": 81.96121215820313 + "value": 81.96121215820312 }, "YPosition": { "type": "float", - "value": 81.00998687744141 + "value": 81.0099868774414 }, "ZPosition": { "type": "float", @@ -537,11 +537,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 }, "PointY": { "type": "float", - "value": -10.33064270019531 + "value": -10.330642700195312 }, "PointZ": { "type": "float", @@ -556,7 +556,7 @@ }, "PointY": { "type": "float", - "value": -10.33064270019531 + "value": -10.330642700195312 }, "PointZ": { "type": "float", @@ -571,7 +571,7 @@ }, "PointY": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 }, "PointZ": { "type": "float", @@ -739,7 +739,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 1.52587890625e-005 + "value": 0.0000152587890625 }, "PointY": { "type": "float", @@ -754,11 +754,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.25056457519531 + "value": 10.250564575195312 }, "PointY": { "type": "float", - "value": -2.72299599647522 + "value": -2.7229959964752197 }, "PointZ": { "type": "float", @@ -773,7 +773,7 @@ }, "PointY": { "type": "float", - "value": 0.1601355075836182 + "value": 0.16013550758361816 }, "PointZ": { "type": "float", @@ -882,7 +882,7 @@ }, "XPosition": { "type": "float", - "value": 129.9187622070313 + "value": 129.91876220703125 }, "YOrientation": { "type": "float", @@ -926,7 +926,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 }, "PointY": { "type": "float", @@ -945,11 +945,11 @@ }, "PointY": { "type": "float", - "value": -2.562956094741821 + "value": -2.5629560947418213 }, "PointZ": { "type": "float", - "value": 0.02077427320182324 + "value": 0.020774273201823235 } }, { @@ -960,18 +960,18 @@ }, "PointY": { "type": "float", - "value": -7.748603820800781e-005 + "value": -0.00007748603820800781 }, "PointZ": { "type": "float", - "value": 0.02082291059195995 + "value": 0.020822910591959953 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1600112915039063 + "value": 0.16001129150390625 }, "PointY": { "type": "float", @@ -979,7 +979,7 @@ }, "PointZ": { "type": "float", - "value": 0.02129515819251537 + "value": 0.021295158192515373 } }, { @@ -1107,7 +1107,7 @@ }, "YPosition": { "type": "float", - "value": 2.627886056900024 + "value": 2.6278860569000244 }, "ZOrientation": { "type": "float", @@ -1158,7 +1158,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.890029907226563 + "value": 9.890029907226562 }, "PointY": { "type": "float", @@ -1188,7 +1188,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 4.57763671875e-005 + "value": 0.0000457763671875 }, "PointY": { "type": "float", @@ -1196,7 +1196,7 @@ }, "PointZ": { "type": "float", - "value": 0.02026751451194286 + "value": 0.020267514511942863 } }, { @@ -1316,7 +1316,7 @@ }, "XPosition": { "type": "float", - "value": 130.0157165527344 + "value": 130.01571655273438 }, "YOrientation": { "type": "float", @@ -1324,7 +1324,7 @@ }, "YPosition": { "type": "float", - "value": 149.9423675537109 + "value": 149.94236755371094 }, "ZOrientation": { "type": "float", @@ -1360,22 +1360,22 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.6053237915039063 + "value": -0.6053237915039062 }, "PointY": { "type": "float", - "value": -1.383594512939453 + "value": -1.3835945129394531 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 13.66299438476563 + "value": 13.662994384765625 }, "PointY": { "type": "float", @@ -1383,14 +1383,14 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 14.52775573730469 + "value": 14.527755737304688 }, "PointY": { "type": "float", @@ -1413,7 +1413,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -1519,7 +1519,7 @@ }, "XPosition": { "type": "float", - "value": 126.3370056152344 + "value": 126.33700561523438 }, "YOrientation": { "type": "float", @@ -1609,7 +1609,7 @@ }, "XPosition": { "type": "float", - "value": 29.19258117675781 + "value": 29.192581176757812 }, "YOrientation": { "type": "float", @@ -1617,11 +1617,11 @@ }, "YPosition": { "type": "float", - "value": 146.9690093994141 + "value": 146.96900939941406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1670,7 +1670,7 @@ }, "XPosition": { "type": "float", - "value": 28.30813789367676 + "value": 28.308137893676758 }, "YOrientation": { "type": "float", @@ -1678,11 +1678,11 @@ }, "YPosition": { "type": "float", - "value": 149.0032348632813 + "value": 149.00323486328125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1731,7 +1731,7 @@ }, "XPosition": { "type": "float", - "value": 42.27853393554688 + "value": 42.278533935546875 }, "YOrientation": { "type": "float", @@ -1743,7 +1743,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -1800,7 +1800,7 @@ }, "YPosition": { "type": "float", - "value": 148.1095275878906 + "value": 148.10952758789062 }, "ZPosition": { "type": "float", @@ -1865,7 +1865,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1922,11 +1922,11 @@ }, "YPosition": { "type": "float", - "value": 109.6142959594727 + "value": 109.61429595947266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1987,7 +1987,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2068,7 +2068,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2117,7 +2117,7 @@ }, "XPosition": { "type": "float", - "value": 1.009467124938965 + "value": 1.0094671249389648 }, "YOrientation": { "type": "float", @@ -2125,11 +2125,11 @@ }, "YPosition": { "type": "float", - "value": 121.3978424072266 + "value": 121.39784240722656 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2190,7 +2190,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2247,7 +2247,7 @@ }, "YPosition": { "type": "float", - "value": 101.6412734985352 + "value": 101.64127349853516 }, "ZPosition": { "type": "float", @@ -2300,7 +2300,7 @@ }, "XPosition": { "type": "float", - "value": 24.23681449890137 + "value": 24.236814498901367 }, "YOrientation": { "type": "float", @@ -2308,7 +2308,7 @@ }, "YPosition": { "type": "float", - "value": 62.71987152099609 + "value": 62.719871520996094 }, "ZPosition": { "type": "float", @@ -2373,7 +2373,7 @@ }, "ZPosition": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 } }, { @@ -2422,7 +2422,7 @@ }, "XPosition": { "type": "float", - "value": 35.08385848999023 + "value": 35.083858489990234 }, "YOrientation": { "type": "float", @@ -2434,7 +2434,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2491,11 +2491,11 @@ }, "YPosition": { "type": "float", - "value": 36.30273056030273 + "value": 36.302730560302734 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2544,7 +2544,7 @@ }, "XPosition": { "type": "float", - "value": 135.0440368652344 + "value": 135.04403686523438 }, "YOrientation": { "type": "float", @@ -2552,7 +2552,7 @@ }, "YPosition": { "type": "float", - "value": 1.506620645523071 + "value": 1.5066206455230713 }, "ZPosition": { "type": "float", @@ -2613,11 +2613,11 @@ }, "YPosition": { "type": "float", - "value": 1.346408009529114 + "value": 1.3464080095291138 }, "ZPosition": { "type": "float", - "value": 0.02288713678717613 + "value": 0.022887136787176132 } }, { @@ -2700,7 +2700,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -2767,11 +2767,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4275574386119843 + "value": 0.42755743861198425 }, "XPosition": { "type": "float", - "value": 111.9356536865234 + "value": 111.93565368652344 }, "YOrientation": { "type": "float", @@ -2783,7 +2783,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2844,7 +2844,7 @@ }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -2915,7 +2915,7 @@ }, "XPosition": { "type": "float", - "value": 13.72811412811279 + "value": 13.728114128112793 }, "YOrientation": { "type": "float", @@ -2923,11 +2923,11 @@ }, "YPosition": { "type": "float", - "value": 15.17633247375488 + "value": 15.176332473754883 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2984,11 +2984,11 @@ }, "YPosition": { "type": "float", - "value": 148.0954284667969 + "value": 148.09542846679688 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3041,7 +3041,7 @@ }, "YOrientation": { "type": "float", - "value": 1.029172267408285e-006 + "value": 0.0000010291722674082848 }, "YPosition": { "type": "float", @@ -3049,7 +3049,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3094,11 +3094,11 @@ }, "XOrientation": { "type": "float", - "value": -0.1950912475585938 + "value": -0.19509124755859375 }, "XPosition": { "type": "float", - "value": 137.6652221679688 + "value": 137.66522216796875 }, "YOrientation": { "type": "float", @@ -3110,7 +3110,7 @@ }, "ZPosition": { "type": "float", - "value": 0.0007866667583584786 + "value": 0.0007866667583584785 } }, { @@ -3155,11 +3155,11 @@ }, "XOrientation": { "type": "float", - "value": 0.3368900120258331 + "value": 0.33689001202583313 }, "XPosition": { "type": "float", - "value": 8.916300773620606 + "value": 8.916300773620605 }, "YOrientation": { "type": "float", @@ -3167,11 +3167,11 @@ }, "YPosition": { "type": "float", - "value": 31.53874015808106 + "value": 31.538740158081055 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/theblackforest.git.json b/_module/git/theblackforest.git.json index 424c9b9..9d3d5c0 100644 --- a/_module/git/theblackforest.git.json +++ b/_module/git/theblackforest.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 124.6399993896484 + "value": 124.63999938964844 }, "Z": { "type": "float", @@ -334,7 +334,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -695,7 +695,7 @@ }, "XPosition": { "type": "float", - "value": 81.44235992431641 + "value": 81.4423599243164 }, "YPosition": { "type": "float", @@ -748,7 +748,7 @@ }, "PointZ": { "type": "float", - "value": 0.02005192451179028 + "value": 0.020051924511790276 } }, { @@ -770,11 +770,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 9.769557952880859 + "value": 9.76955795288086 }, "PointY": { "type": "float", - "value": 3.157849311828613 + "value": 3.1578493118286133 }, "PointZ": { "type": "float", @@ -789,7 +789,7 @@ }, "PointY": { "type": "float", - "value": 3.305853366851807 + "value": 3.3058533668518066 }, "PointZ": { "type": "float", @@ -808,7 +808,7 @@ }, "PointZ": { "type": "float", - "value": 0.02040013484656811 + "value": 0.020400134846568108 } } ] @@ -913,7 +913,7 @@ }, "XPosition": { "type": "float", - "value": 20.06363677978516 + "value": 20.063636779785156 }, "YOrientation": { "type": "float", @@ -921,7 +921,7 @@ }, "YPosition": { "type": "float", - "value": 0.1053996086120606 + "value": 0.10539960861206055 }, "ZOrientation": { "type": "float", @@ -957,7 +957,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.1870627403259277 + "value": -0.18706274032592773 }, "PointY": { "type": "float", @@ -965,18 +965,18 @@ }, "PointZ": { "type": "float", - "value": 0.02011552266776562 + "value": 0.020115522667765617 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -0.1489148139953613 + "value": -0.14891481399536133 }, "PointY": { "type": "float", - "value": -10.16342926025391 + "value": -10.163429260253906 }, "PointZ": { "type": "float", @@ -987,11 +987,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 2.866606950759888 + "value": 2.8666069507598877 }, "PointY": { "type": "float", - "value": -10.16342926025391 + "value": -10.163429260253906 }, "PointZ": { "type": "float", @@ -1006,7 +1006,7 @@ }, "PointY": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 }, "PointZ": { "type": "float", @@ -1138,7 +1138,7 @@ }, "YPosition": { "type": "float", - "value": 120.0005340576172 + "value": 120.00053405761719 }, "ZOrientation": { "type": "float", @@ -1182,7 +1182,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -1197,14 +1197,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.06819534301757813 + "value": 0.06819534301757812 }, "PointY": { "type": "float", @@ -1227,7 +1227,7 @@ }, "PointZ": { "type": "float", - "value": 3.027190208435059 + "value": 3.0271902084350586 } }, { @@ -1242,7 +1242,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } } ] @@ -1347,7 +1347,7 @@ }, "XPosition": { "type": "float", - "value": 36.58764266967773 + "value": 36.587642669677734 }, "YOrientation": { "type": "float", @@ -1355,7 +1355,7 @@ }, "YPosition": { "type": "float", - "value": 149.3481292724609 + "value": 149.34812927246094 }, "ZOrientation": { "type": "float", @@ -1395,7 +1395,7 @@ }, "PointY": { "type": "float", - "value": -1.383706092834473 + "value": -1.3837060928344727 }, "PointZ": { "type": "float", @@ -1410,7 +1410,7 @@ }, "PointY": { "type": "float", - "value": -1.383708953857422 + "value": -1.3837089538574219 }, "PointZ": { "type": "float", @@ -1421,7 +1421,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.3778018951416 + "value": 10.377801895141602 }, "PointY": { "type": "float", @@ -1429,7 +1429,7 @@ }, "PointZ": { "type": "float", - "value": 0.0213873665779829 + "value": 0.021387366577982903 } }, { @@ -1550,7 +1550,7 @@ }, "XPosition": { "type": "float", - "value": 19.36275672912598 + "value": 19.362756729125977 }, "YOrientation": { "type": "float", @@ -1558,7 +1558,7 @@ }, "YPosition": { "type": "float", - "value": 17.14212226867676 + "value": 17.142122268676758 }, "ZOrientation": { "type": "float", @@ -1660,7 +1660,7 @@ }, "XPosition": { "type": "float", - "value": 132.0367279052734 + "value": 132.03672790527344 }, "YOrientation": { "type": "float", @@ -1668,11 +1668,11 @@ }, "YPosition": { "type": "float", - "value": 128.4922790527344 + "value": 128.49227905273438 }, "ZPosition": { "type": "float", - "value": -1.059994697570801 + "value": -1.0599946975708008 } }, { @@ -1721,7 +1721,7 @@ }, "XPosition": { "type": "float", - "value": 102.0147552490234 + "value": 102.01475524902344 }, "YOrientation": { "type": "float", @@ -1729,11 +1729,11 @@ }, "YPosition": { "type": "float", - "value": 119.7443237304688 + "value": 119.74432373046875 }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -1786,7 +1786,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4496119320392609 + "value": 0.44961193203926086 }, "YPosition": { "type": "float", @@ -1794,7 +1794,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01788902282714844 + "value": 0.017889022827148438 } }, { @@ -1904,7 +1904,7 @@ }, "XPosition": { "type": "float", - "value": 106.7821197509766 + "value": 106.78211975097656 }, "YOrientation": { "type": "float", @@ -1916,7 +1916,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1973,11 +1973,11 @@ }, "YPosition": { "type": "float", - "value": 76.36203765869141 + "value": 76.3620376586914 }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -2046,7 +2046,7 @@ }, "XPosition": { "type": "float", - "value": 130.5236206054688 + "value": 130.52362060546875 }, "YOrientation": { "type": "float", @@ -2058,7 +2058,7 @@ }, "ZPosition": { "type": "float", - "value": 0.6100000143051148 + "value": 0.6100000143051147 } }, { @@ -2107,19 +2107,19 @@ }, "XPosition": { "type": "float", - "value": 146.6056518554688 + "value": 146.60565185546875 }, "YOrientation": { "type": "float", - "value": 0.4496119320392609 + "value": 0.44961193203926086 }, "YPosition": { "type": "float", - "value": 20.27466201782227 + "value": 20.274662017822266 }, "ZPosition": { "type": "float", - "value": 0.003746956586837769 + "value": 0.0037469565868377686 } }, { @@ -2168,7 +2168,7 @@ }, "XPosition": { "type": "float", - "value": 107.1886901855469 + "value": 107.18869018554688 }, "YOrientation": { "type": "float", @@ -2176,11 +2176,11 @@ }, "YPosition": { "type": "float", - "value": 17.59902763366699 + "value": 17.599027633666992 }, "ZPosition": { "type": "float", - "value": 0.1711388826370239 + "value": 0.17113888263702393 } }, { @@ -2229,7 +2229,7 @@ }, "XPosition": { "type": "float", - "value": 136.3668060302734 + "value": 136.36680603027344 }, "YOrientation": { "type": "float", @@ -2241,7 +2241,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2290,7 +2290,7 @@ }, "XPosition": { "type": "float", - "value": 92.00271606445313 + "value": 92.00271606445312 }, "YOrientation": { "type": "float", @@ -2359,11 +2359,11 @@ }, "YPosition": { "type": "float", - "value": 2.248675107955933 + "value": 2.2486751079559326 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2432,7 +2432,7 @@ }, "XPosition": { "type": "float", - "value": 119.2866134643555 + "value": 119.28661346435547 }, "YOrientation": { "type": "float", @@ -2444,7 +2444,7 @@ }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -2505,7 +2505,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -2554,7 +2554,7 @@ }, "XPosition": { "type": "float", - "value": 63.55834579467773 + "value": 63.558345794677734 }, "YOrientation": { "type": "float", @@ -2627,7 +2627,7 @@ }, "ZPosition": { "type": "float", - "value": 0.3089021444320679 + "value": 0.30890214443206787 } }, { @@ -2700,7 +2700,7 @@ }, "YOrientation": { "type": "float", - "value": -0.4713962078094482 + "value": -0.47139620780944824 }, "YPosition": { "type": "float", @@ -2708,7 +2708,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -2789,7 +2789,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -2862,11 +2862,11 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 38.70508193969727 + "value": 38.705081939697266 }, "ZPosition": { "type": "float", @@ -2927,11 +2927,11 @@ }, "YPosition": { "type": "float", - "value": 124.6188278198242 + "value": 124.61882781982422 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2988,7 +2988,7 @@ }, "YPosition": { "type": "float", - "value": 3.835408687591553 + "value": 3.8354086875915527 }, "ZPosition": { "type": "float", @@ -3041,7 +3041,7 @@ }, "XPosition": { "type": "float", - "value": 123.3885116577148 + "value": 123.38851165771484 }, "YOrientation": { "type": "float", @@ -3053,7 +3053,7 @@ }, "ZPosition": { "type": "float", - "value": -8.344650268554688e-006 + "value": -0.000008344650268554688 } }, { @@ -3102,7 +3102,7 @@ }, "XPosition": { "type": "float", - "value": 15.51117610931397 + "value": 15.511176109313965 }, "YOrientation": { "type": "float", @@ -3114,7 +3114,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3163,7 +3163,7 @@ }, "XPosition": { "type": "float", - "value": 50.52468109130859 + "value": 50.524681091308594 }, "YOrientation": { "type": "float", @@ -3171,11 +3171,11 @@ }, "YPosition": { "type": "float", - "value": 120.2290115356445 + "value": 120.22901153564453 }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -3220,11 +3220,11 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", - "value": 11.90100955963135 + "value": 11.901009559631348 }, "YOrientation": { "type": "float", @@ -3232,11 +3232,11 @@ }, "YPosition": { "type": "float", - "value": 125.9011764526367 + "value": 125.90117645263672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3361,7 +3361,7 @@ }, "XOrientation": { "type": "float", - "value": 0.0245474074035883 + "value": 0.024547407403588295 }, "XPosition": { "type": "float", @@ -3373,11 +3373,11 @@ }, "YPosition": { "type": "float", - "value": 121.4894943237305 + "value": 121.48949432373047 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3426,7 +3426,7 @@ }, "XPosition": { "type": "float", - "value": 24.92368125915527 + "value": 24.923681259155273 }, "YOrientation": { "type": "float", @@ -3434,11 +3434,11 @@ }, "YPosition": { "type": "float", - "value": 1.708962440490723 + "value": 1.7089624404907227 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3487,11 +3487,11 @@ }, "XPosition": { "type": "float", - "value": 1.539023399353027 + "value": 1.5390233993530273 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3499,7 +3499,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3560,7 +3560,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3605,7 +3605,7 @@ }, "XOrientation": { "type": "float", - "value": 0.3368940651416779 + "value": 0.33689406514167786 }, "XPosition": { "type": "float", @@ -3621,7 +3621,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3678,11 +3678,11 @@ }, "YPosition": { "type": "float", - "value": 21.77896118164063 + "value": 21.778961181640625 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3759,7 +3759,7 @@ }, "YPosition": { "type": "float", - "value": 142.4233703613281 + "value": 142.42337036132812 }, "ZPosition": { "type": "float", @@ -3824,7 +3824,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3885,7 +3885,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3946,7 +3946,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/theblackruins.git.json b/_module/git/theblackruins.git.json index 669edaa..56018f8 100644 --- a/_module/git/theblackruins.git.json +++ b/_module/git/theblackruins.git.json @@ -286,7 +286,7 @@ }, "Z": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -513,7 +513,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -740,7 +740,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] @@ -785,18 +785,18 @@ }, "PointY": { "type": "float", - "value": -0.04611587524414063 + "value": -0.046115875244140625 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 }, "PointY": { "type": "float", @@ -804,14 +804,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.401792764663696 + "value": 3.4017927646636963 }, "PointY": { "type": "float", @@ -819,14 +819,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 3.401793003082275 + "value": 3.4017930030822754 }, "PointY": { "type": "float", @@ -834,7 +834,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -849,7 +849,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } } ] @@ -955,7 +955,7 @@ }, "XPosition": { "type": "float", - "value": 0.1184930801391602 + "value": 0.11849308013916016 }, "YOrientation": { "type": "float", @@ -1057,7 +1057,7 @@ }, "ZPosition": { "type": "float", - "value": 0.02655982971191406 + "value": 0.026559829711914062 } }, { @@ -1106,7 +1106,7 @@ }, "XPosition": { "type": "float", - "value": 57.53250885009766 + "value": 57.532508850097656 }, "YOrientation": { "type": "float", @@ -1114,7 +1114,7 @@ }, "YPosition": { "type": "float", - "value": 41.56752777099609 + "value": 41.567527770996094 }, "ZPosition": { "type": "float", @@ -1175,11 +1175,11 @@ }, "YPosition": { "type": "float", - "value": 11.5184383392334 + "value": 11.518438339233398 }, "ZPosition": { "type": "float", - "value": 0.003746956586837769 + "value": 0.0037469565868377686 } }, { @@ -1228,7 +1228,7 @@ }, "XPosition": { "type": "float", - "value": 26.78127288818359 + "value": 26.781272888183594 }, "YOrientation": { "type": "float", @@ -1236,11 +1236,11 @@ }, "YPosition": { "type": "float", - "value": 19.54437637329102 + "value": 19.544376373291016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1301,7 +1301,7 @@ }, "ZPosition": { "type": "float", - "value": -6.318092346191406e-006 + "value": -0.000006318092346191406 } }, { @@ -1358,11 +1358,11 @@ }, "YPosition": { "type": "float", - "value": 56.58215713500977 + "value": 56.582157135009766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1419,11 +1419,11 @@ }, "YPosition": { "type": "float", - "value": 12.51845550537109 + "value": 12.518455505371094 }, "ZPosition": { "type": "float", - "value": 0.01207542419433594 + "value": 0.012075424194335938 } }, { @@ -1470,7 +1470,7 @@ }, "XPosition": { "type": "float", - "value": 1.865937471389771 + "value": 1.8659374713897705 }, "YOrientation": { "type": "float", @@ -1482,7 +1482,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1537,11 +1537,11 @@ }, "YPosition": { "type": "float", - "value": 31.44564056396484 + "value": 31.445640563964844 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1665,7 +1665,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/git/thebloodcaverns.git.json b/_module/git/thebloodcaverns.git.json index 4bba415..0de3bb1 100644 --- a/_module/git/thebloodcaverns.git.json +++ b/_module/git/thebloodcaverns.git.json @@ -473,11 +473,11 @@ }, "X": { "type": "float", - "value": 15.98999977111816 + "value": 15.989999771118164 }, "Y": { "type": "float", - "value": 125.7600021362305 + "value": 125.76000213623047 }, "Z": { "type": "float", @@ -551,7 +551,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", @@ -795,7 +795,7 @@ }, "XPosition": { "type": "float", - "value": 134.6473541259766 + "value": 134.64735412597656 }, "YPosition": { "type": "float", @@ -803,7 +803,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } } ] @@ -956,7 +956,7 @@ }, "XOrientation": { "type": "float", - "value": -0.3368945121765137 + "value": -0.33689451217651367 }, "XPosition": { "type": "float", @@ -972,7 +972,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1029,11 +1029,11 @@ }, "YPosition": { "type": "float", - "value": 114.788444519043 + "value": 114.78844451904297 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1094,7 +1094,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1147,7 +1147,7 @@ }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", @@ -1155,7 +1155,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1204,7 +1204,7 @@ }, "XPosition": { "type": "float", - "value": 68.31655883789063 + "value": 68.31655883789062 }, "YOrientation": { "type": "float", @@ -1212,11 +1212,11 @@ }, "YPosition": { "type": "float", - "value": 117.9393768310547 + "value": 117.93937683105469 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1277,7 +1277,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1326,7 +1326,7 @@ }, "XPosition": { "type": "float", - "value": 12.16646194458008 + "value": 12.166461944580078 }, "YOrientation": { "type": "float", @@ -1334,11 +1334,11 @@ }, "YPosition": { "type": "float", - "value": 47.50180053710938 + "value": 47.501800537109375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1387,7 +1387,7 @@ }, "XPosition": { "type": "float", - "value": 29.96538925170898 + "value": 29.965389251708984 }, "YOrientation": { "type": "float", @@ -1395,11 +1395,11 @@ }, "YPosition": { "type": "float", - "value": 18.31510925292969 + "value": 18.315109252929688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1448,11 +1448,11 @@ }, "XPosition": { "type": "float", - "value": 82.22153472900391 + "value": 82.2215347290039 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -1460,7 +1460,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1521,7 +1521,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1570,7 +1570,7 @@ }, "XPosition": { "type": "float", - "value": 100.0622100830078 + "value": 100.06221008300781 }, "YOrientation": { "type": "float", @@ -1578,11 +1578,11 @@ }, "YPosition": { "type": "float", - "value": 107.850456237793 + "value": 107.85045623779297 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1631,7 +1631,7 @@ }, "XPosition": { "type": "float", - "value": 141.5556945800781 + "value": 141.55569458007812 }, "YOrientation": { "type": "float", @@ -1643,7 +1643,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1700,11 +1700,11 @@ }, "YPosition": { "type": "float", - "value": 58.71151733398438 + "value": 58.711517333984375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1753,7 +1753,7 @@ }, "XPosition": { "type": "float", - "value": 130.9768981933594 + "value": 130.97689819335938 }, "YOrientation": { "type": "float", @@ -1765,7 +1765,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1814,7 +1814,7 @@ }, "XPosition": { "type": "float", - "value": 112.2183990478516 + "value": 112.21839904785156 }, "YOrientation": { "type": "float", @@ -1822,11 +1822,11 @@ }, "YPosition": { "type": "float", - "value": 30.96477317810059 + "value": 30.964773178100586 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1955,7 +1955,7 @@ }, "XPosition": { "type": "float", - "value": 138.0560607910156 + "value": 138.05606079101562 }, "YOrientation": { "type": "float", @@ -1967,7 +1967,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2016,7 +2016,7 @@ }, "XPosition": { "type": "float", - "value": 126.2919540405273 + "value": 126.29195404052734 }, "YOrientation": { "type": "float", @@ -2077,7 +2077,7 @@ }, "XPosition": { "type": "float", - "value": 139.0265502929688 + "value": 139.02655029296875 }, "YOrientation": { "type": "float", @@ -2085,11 +2085,11 @@ }, "YPosition": { "type": "float", - "value": 51.40542602539063 + "value": 51.405426025390625 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2150,7 +2150,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2207,11 +2207,11 @@ }, "YPosition": { "type": "float", - "value": 11.71115684509277 + "value": 11.711156845092773 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2260,7 +2260,7 @@ }, "XPosition": { "type": "float", - "value": 18.69433212280273 + "value": 18.694332122802734 }, "YOrientation": { "type": "float", @@ -2268,11 +2268,11 @@ }, "YPosition": { "type": "float", - "value": 28.86042785644531 + "value": 28.860427856445312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2333,7 +2333,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2382,7 +2382,7 @@ }, "XPosition": { "type": "float", - "value": 140.2035064697266 + "value": 140.20350646972656 }, "YOrientation": { "type": "float", @@ -2394,7 +2394,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2443,7 +2443,7 @@ }, "XPosition": { "type": "float", - "value": 100.471549987793 + "value": 100.47154998779297 }, "YOrientation": { "type": "float", @@ -2451,11 +2451,11 @@ }, "YPosition": { "type": "float", - "value": 128.8652038574219 + "value": 128.86520385742188 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2512,11 +2512,11 @@ }, "YPosition": { "type": "float", - "value": 100.2801818847656 + "value": 100.28018188476562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/thebloodylair.git.json b/_module/git/thebloodylair.git.json index daa7f2c..191c437 100644 --- a/_module/git/thebloodylair.git.json +++ b/_module/git/thebloodylair.git.json @@ -496,7 +496,7 @@ }, "X": { "type": "float", - "value": 10.46321487426758 + "value": 10.463214874267578 }, "Y": { "type": "float", @@ -504,7 +504,7 @@ }, "Z": { "type": "float", - "value": -2.980232238769531e-008 + "value": -2.9802322387695312e-8 } }, { @@ -723,15 +723,15 @@ }, "X": { "type": "float", - "value": 29.47822570800781 + "value": 29.478225708007812 }, "Y": { "type": "float", - "value": 41.11489105224609 + "value": 41.114891052246094 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -950,7 +950,7 @@ }, "X": { "type": "float", - "value": 10.50278186798096 + "value": 10.502781867980957 }, "Y": { "type": "float", @@ -958,7 +958,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1177,7 +1177,7 @@ }, "X": { "type": "float", - "value": 29.33052825927734 + "value": 29.330528259277344 }, "Y": { "type": "float", @@ -1185,7 +1185,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1404,7 +1404,7 @@ }, "X": { "type": "float", - "value": 19.80043411254883 + "value": 19.800434112548828 }, "Y": { "type": "float", @@ -1412,7 +1412,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1631,7 +1631,7 @@ }, "X": { "type": "float", - "value": 19.64113807678223 + "value": 19.641138076782227 }, "Y": { "type": "float", @@ -1639,7 +1639,7 @@ }, "Z": { "type": "float", - "value": 0.07878494262695313 + "value": 0.07878494262695312 } }, { @@ -1866,7 +1866,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2089,11 +2089,11 @@ }, "Y": { "type": "float", - "value": 50.57891464233398 + "value": 50.578914642333984 }, "Z": { "type": "float", - "value": 0.01456260681152344 + "value": 0.014562606811523438 } }, { @@ -2313,7 +2313,7 @@ }, "X": { "type": "float", - "value": 2.630266189575195 + "value": 2.6302661895751953 }, "Y": { "type": "float", @@ -2321,7 +2321,7 @@ }, "Z": { "type": "float", - "value": 0.2499961853027344 + "value": 0.24999618530273438 } } ] @@ -2447,7 +2447,7 @@ }, "ZPosition": { "type": "float", - "value": 1.718452453613281 + "value": 1.7184524536132812 } }, { @@ -2564,11 +2564,11 @@ }, "YPosition": { "type": "float", - "value": 41.07680511474609 + "value": 41.076805114746094 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -2689,7 +2689,7 @@ }, "ZPosition": { "type": "float", - "value": 1.599298477172852 + "value": 1.5992984771728516 } }, { @@ -2802,7 +2802,7 @@ }, "XPosition": { "type": "float", - "value": 29.41426467895508 + "value": 29.414264678955078 }, "YPosition": { "type": "float", @@ -2810,7 +2810,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -2923,7 +2923,7 @@ }, "XPosition": { "type": "float", - "value": 19.83614349365234 + "value": 19.836143493652344 }, "YPosition": { "type": "float", @@ -2931,7 +2931,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -3044,15 +3044,15 @@ }, "XPosition": { "type": "float", - "value": 10.00816440582275 + "value": 10.008164405822754 }, "YPosition": { "type": "float", - "value": 59.15029907226563 + "value": 59.150299072265625 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -3173,7 +3173,7 @@ }, "ZPosition": { "type": "float", - "value": 1.668027877807617 + "value": 1.6680278778076172 } }, { @@ -3286,15 +3286,15 @@ }, "XPosition": { "type": "float", - "value": 10.17473793029785 + "value": 10.174737930297852 }, "YPosition": { "type": "float", - "value": 40.74365615844727 + "value": 40.743656158447266 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -3407,15 +3407,15 @@ }, "XPosition": { "type": "float", - "value": 20.33731842041016 + "value": 20.337318420410156 }, "YPosition": { "type": "float", - "value": 51.08646392822266 + "value": 51.086463928222656 }, "ZPosition": { "type": "float", - "value": 1.899999618530273 + "value": 1.8999996185302734 } } ] @@ -3485,7 +3485,7 @@ }, "YPosition": { "type": "float", - "value": 47.87109756469727 + "value": 47.871097564697266 }, "ZPosition": { "type": "float", diff --git a/_module/git/thecursedwoods.git.json b/_module/git/thecursedwoods.git.json index 85ddc43..203ad58 100644 --- a/_module/git/thecursedwoods.git.json +++ b/_module/git/thecursedwoods.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -298,7 +298,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -506,7 +506,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -525,7 +525,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -725,7 +725,7 @@ }, "X": { "type": "float", - "value": 132.4012298583984 + "value": 132.40122985839844 }, "Y": { "type": "float", @@ -733,7 +733,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -752,7 +752,7 @@ }, "Bearing": { "type": "float", - "value": -0.02454365231096745 + "value": -0.024543652310967445 }, "BodyBag": { "type": "byte", @@ -952,15 +952,15 @@ }, "X": { "type": "float", - "value": 130.3388366699219 + "value": 130.33883666992188 }, "Y": { "type": "float", - "value": 122.6066436767578 + "value": 122.60664367675781 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -979,7 +979,7 @@ }, "Bearing": { "type": "float", - "value": -0.02454365231096745 + "value": -0.024543652310967445 }, "BodyBag": { "type": "byte", @@ -1179,7 +1179,7 @@ }, "X": { "type": "float", - "value": 126.4124374389648 + "value": 126.41243743896484 }, "Y": { "type": "float", @@ -1187,7 +1187,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1206,7 +1206,7 @@ }, "Bearing": { "type": "float", - "value": -0.02454365231096745 + "value": -0.024543652310967445 }, "BodyBag": { "type": "byte", @@ -1406,15 +1406,15 @@ }, "X": { "type": "float", - "value": 122.5271759033203 + "value": 122.52717590332031 }, "Y": { "type": "float", - "value": 122.7648162841797 + "value": 122.76481628417969 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1433,7 +1433,7 @@ }, "Bearing": { "type": "float", - "value": -0.02454365231096745 + "value": -0.024543652310967445 }, "BodyBag": { "type": "byte", @@ -1633,15 +1633,15 @@ }, "X": { "type": "float", - "value": 130.2220764160156 + "value": 130.22207641601562 }, "Y": { "type": "float", - "value": 107.3415451049805 + "value": 107.34154510498047 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1660,7 +1660,7 @@ }, "Bearing": { "type": "float", - "value": -0.02454365231096745 + "value": -0.024543652310967445 }, "BodyBag": { "type": "byte", @@ -1860,15 +1860,15 @@ }, "X": { "type": "float", - "value": 126.2815017700195 + "value": 126.28150177001953 }, "Y": { "type": "float", - "value": 107.4443893432617 + "value": 107.44438934326172 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1887,7 +1887,7 @@ }, "Bearing": { "type": "float", - "value": -0.02454365231096745 + "value": -0.024543652310967445 }, "BodyBag": { "type": "byte", @@ -2087,15 +2087,15 @@ }, "X": { "type": "float", - "value": 122.3464889526367 + "value": 122.34648895263672 }, "Y": { "type": "float", - "value": 107.5629577636719 + "value": 107.56295776367188 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2114,7 +2114,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -2314,15 +2314,15 @@ }, "X": { "type": "float", - "value": 120.5422821044922 + "value": 120.54228210449219 }, "Y": { "type": "float", - "value": 120.9290084838867 + "value": 120.92900848388672 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2341,7 +2341,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -2541,15 +2541,15 @@ }, "X": { "type": "float", - "value": 120.4516220092773 + "value": 120.45162200927734 }, "Y": { "type": "float", - "value": 109.6624069213867 + "value": 109.66240692138672 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2568,7 +2568,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -2768,15 +2768,15 @@ }, "X": { "type": "float", - "value": 124.447395324707 + "value": 124.44739532470703 }, "Y": { "type": "float", - "value": 115.2234573364258 + "value": 115.22345733642578 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2995,15 +2995,15 @@ }, "X": { "type": "float", - "value": 122.7849197387695 + "value": 122.78491973876953 }, "Y": { "type": "float", - "value": 111.8108673095703 + "value": 111.81086730957031 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3222,15 +3222,15 @@ }, "X": { "type": "float", - "value": 123.0377349853516 + "value": 123.03773498535156 }, "Y": { "type": "float", - "value": 117.9241638183594 + "value": 117.92416381835938 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3449,15 +3449,15 @@ }, "X": { "type": "float", - "value": 125.6819686889648 + "value": 125.68196868896484 }, "Y": { "type": "float", - "value": 111.8748245239258 + "value": 111.87482452392578 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3676,15 +3676,15 @@ }, "X": { "type": "float", - "value": 126.0566329956055 + "value": 126.05663299560547 }, "Y": { "type": "float", - "value": 117.8589630126953 + "value": 117.85896301269531 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3903,15 +3903,15 @@ }, "X": { "type": "float", - "value": 127.1358184814453 + "value": 127.13581848144531 }, "Y": { "type": "float", - "value": 111.9180145263672 + "value": 111.91801452636719 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4130,15 +4130,15 @@ }, "X": { "type": "float", - "value": 127.6829376220703 + "value": 127.68293762207031 }, "Y": { "type": "float", - "value": 117.7452087402344 + "value": 117.74520874023438 }, "Z": { "type": "float", - "value": 0.1278164386749268 + "value": 0.12781643867492676 } }, { @@ -4357,15 +4357,15 @@ }, "X": { "type": "float", - "value": 123.0269393920898 + "value": 123.02693939208984 }, "Y": { "type": "float", - "value": 109.4151458740234 + "value": 109.41514587402344 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4584,15 +4584,15 @@ }, "X": { "type": "float", - "value": 125.6350631713867 + "value": 125.63506317138672 }, "Y": { "type": "float", - "value": 109.2360534667969 + "value": 109.23605346679688 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4815,7 +4815,7 @@ }, "Y": { "type": "float", - "value": 109.1679840087891 + "value": 109.16798400878906 }, "Z": { "type": "float", @@ -5038,15 +5038,15 @@ }, "X": { "type": "float", - "value": 123.268196105957 + "value": 123.26819610595703 }, "Y": { "type": "float", - "value": 120.1399078369141 + "value": 120.13990783691406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5265,15 +5265,15 @@ }, "X": { "type": "float", - "value": 126.1188583374023 + "value": 126.11885833740234 }, "Y": { "type": "float", - "value": 120.3021850585938 + "value": 120.30218505859375 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5500,7 +5500,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5519,7 +5519,7 @@ }, "Bearing": { "type": "float", - "value": -1.546251058578491 + "value": -1.5462510585784912 }, "BodyBag": { "type": "byte", @@ -5720,15 +5720,15 @@ }, "X": { "type": "float", - "value": 131.4248962402344 + "value": 131.42489624023438 }, "Y": { "type": "float", - "value": 112.8607711791992 + "value": 112.86077117919922 }, "Z": { "type": "float", - "value": 0.01000001933425665 + "value": 0.010000019334256649 } }, { @@ -5747,7 +5747,7 @@ }, "Bearing": { "type": "float", - "value": -1.546251058578491 + "value": -1.5462510585784912 }, "BodyBag": { "type": "byte", @@ -5948,7 +5948,7 @@ }, "X": { "type": "float", - "value": 145.1190490722656 + "value": 145.11904907226562 }, "Y": { "type": "float", @@ -6179,11 +6179,11 @@ }, "Y": { "type": "float", - "value": 19.2469367980957 + "value": 19.246936798095703 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -6402,7 +6402,7 @@ }, "X": { "type": "float", - "value": 23.46999549865723 + "value": 23.469995498657227 }, "Y": { "type": "float", @@ -6410,7 +6410,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6629,15 +6629,15 @@ }, "X": { "type": "float", - "value": 52.58016967773438 + "value": 52.580169677734375 }, "Y": { "type": "float", - "value": 13.55860996246338 + "value": 13.558609962463379 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6864,7 +6864,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7091,7 +7091,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7314,11 +7314,11 @@ }, "Y": { "type": "float", - "value": 16.71277809143066 + "value": 16.712778091430664 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7541,11 +7541,11 @@ }, "Y": { "type": "float", - "value": 34.39247894287109 + "value": 34.392478942871094 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7764,7 +7764,7 @@ }, "X": { "type": "float", - "value": 100.4579162597656 + "value": 100.45791625976562 }, "Y": { "type": "float", @@ -7772,7 +7772,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7999,7 +7999,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8218,7 +8218,7 @@ }, "X": { "type": "float", - "value": 137.3306579589844 + "value": 137.33065795898438 }, "Y": { "type": "float", @@ -8226,7 +8226,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8453,7 +8453,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8680,7 +8680,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8907,7 +8907,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9134,7 +9134,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9357,11 +9357,11 @@ }, "Y": { "type": "float", - "value": 88.14133453369141 + "value": 88.1413345336914 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9580,7 +9580,7 @@ }, "X": { "type": "float", - "value": 22.75563049316406 + "value": 22.755630493164062 }, "Y": { "type": "float", @@ -9588,7 +9588,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9811,11 +9811,11 @@ }, "Y": { "type": "float", - "value": 107.3965301513672 + "value": 107.39653015136719 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10034,15 +10034,15 @@ }, "X": { "type": "float", - "value": 24.06452560424805 + "value": 24.064525604248047 }, "Y": { "type": "float", - "value": 127.4052200317383 + "value": 127.40522003173828 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10269,7 +10269,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10488,7 +10488,7 @@ }, "X": { "type": "float", - "value": 11.21779251098633 + "value": 11.217792510986328 }, "Y": { "type": "float", @@ -10496,7 +10496,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10715,15 +10715,15 @@ }, "X": { "type": "float", - "value": 59.14465713500977 + "value": 59.144657135009766 }, "Y": { "type": "float", - "value": 122.3338775634766 + "value": 122.33387756347656 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10946,11 +10946,11 @@ }, "Y": { "type": "float", - "value": 110.9204559326172 + "value": 110.92045593261719 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11177,7 +11177,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11400,11 +11400,11 @@ }, "Y": { "type": "float", - "value": 132.2687683105469 + "value": 132.26876831054688 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11631,7 +11631,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11854,11 +11854,11 @@ }, "Y": { "type": "float", - "value": 97.86196136474609 + "value": 97.8619613647461 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12077,15 +12077,15 @@ }, "X": { "type": "float", - "value": 104.8762588500977 + "value": 104.87625885009766 }, "Y": { "type": "float", - "value": 107.7244567871094 + "value": 107.72445678710938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12304,11 +12304,11 @@ }, "X": { "type": "float", - "value": 126.3273849487305 + "value": 126.32738494873047 }, "Y": { "type": "float", - "value": 118.2551651000977 + "value": 118.25516510009766 }, "Z": { "type": "float", @@ -12531,15 +12531,15 @@ }, "X": { "type": "float", - "value": 125.1534118652344 + "value": 125.15341186523438 }, "Y": { "type": "float", - "value": 110.7615509033203 + "value": 110.76155090332031 }, "Z": { "type": "float", - "value": 0.2114869058132172 + "value": 0.21148690581321716 } }, { @@ -12758,15 +12758,15 @@ }, "X": { "type": "float", - "value": 110.4768524169922 + "value": 110.47685241699219 }, "Y": { "type": "float", - "value": 121.8779830932617 + "value": 121.87798309326172 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12985,15 +12985,15 @@ }, "X": { "type": "float", - "value": 110.2075576782227 + "value": 110.20755767822266 }, "Y": { "type": "float", - "value": 107.9092254638672 + "value": 107.90922546386719 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13212,15 +13212,15 @@ }, "X": { "type": "float", - "value": 110.7573547363281 + "value": 110.75735473632812 }, "Y": { "type": "float", - "value": 115.4037246704102 + "value": 115.40372467041016 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13439,15 +13439,15 @@ }, "X": { "type": "float", - "value": 110.6233825683594 + "value": 110.62338256835938 }, "Y": { "type": "float", - "value": 119.7346878051758 + "value": 119.73468780517578 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13666,15 +13666,15 @@ }, "X": { "type": "float", - "value": 110.3988723754883 + "value": 110.39887237548828 }, "Y": { "type": "float", - "value": 112.1152420043945 + "value": 112.11524200439453 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13893,15 +13893,15 @@ }, "X": { "type": "float", - "value": 110.2161102294922 + "value": 110.21611022949219 }, "Y": { "type": "float", - "value": 104.8195266723633 + "value": 104.81952667236328 }, "Z": { "type": "float", - "value": 0.01000007893890142 + "value": 0.010000078938901424 } }, { @@ -14120,15 +14120,15 @@ }, "X": { "type": "float", - "value": 118.5447158813477 + "value": 118.54471588134766 }, "Y": { "type": "float", - "value": 125.3235015869141 + "value": 125.32350158691406 }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -14347,15 +14347,15 @@ }, "X": { "type": "float", - "value": 115.8879013061523 + "value": 115.88790130615234 }, "Y": { "type": "float", - "value": 117.9588317871094 + "value": 117.95883178710938 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14574,15 +14574,15 @@ }, "X": { "type": "float", - "value": 118.1173858642578 + "value": 118.11738586425781 }, "Y": { "type": "float", - "value": 104.5789413452148 + "value": 104.57894134521484 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -14805,11 +14805,11 @@ }, "Y": { "type": "float", - "value": 103.7700805664063 + "value": 103.77008056640625 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15028,7 +15028,7 @@ }, "X": { "type": "float", - "value": 127.8237838745117 + "value": 127.82378387451172 }, "Y": { "type": "float", @@ -15036,7 +15036,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15255,7 +15255,7 @@ }, "X": { "type": "float", - "value": 135.8113403320313 + "value": 135.81134033203125 }, "Y": { "type": "float", @@ -15263,7 +15263,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -15482,15 +15482,15 @@ }, "X": { "type": "float", - "value": 135.5080261230469 + "value": 135.50802612304688 }, "Y": { "type": "float", - "value": 107.6121978759766 + "value": 107.61219787597656 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -15709,11 +15709,11 @@ }, "X": { "type": "float", - "value": 115.690788269043 + "value": 115.69078826904297 }, "Y": { "type": "float", - "value": 111.4543151855469 + "value": 111.45431518554688 }, "Z": { "type": "float", @@ -15940,11 +15940,11 @@ }, "Y": { "type": "float", - "value": 121.7673645019531 + "value": 121.76736450195312 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -16171,7 +16171,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -16390,15 +16390,15 @@ }, "X": { "type": "float", - "value": 132.4489898681641 + "value": 132.44898986816406 }, "Y": { "type": "float", - "value": 97.49221038818359 + "value": 97.4922103881836 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -16621,11 +16621,11 @@ }, "Y": { "type": "float", - "value": 132.2428131103516 + "value": 132.24281311035156 }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -16844,7 +16844,7 @@ }, "X": { "type": "float", - "value": 118.9440155029297 + "value": 118.94401550292969 }, "Y": { "type": "float", @@ -16910,7 +16910,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -17096,7 +17096,7 @@ }, "XPosition": { "type": "float", - "value": 74.26511383056641 + "value": 74.2651138305664 }, "YPosition": { "type": "float", @@ -17141,7 +17141,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -0.02784967422485352 + "value": -0.027849674224853516 }, "PointY": { "type": "float", @@ -17149,14 +17149,14 @@ }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.02826738357543945 + "value": 0.028267383575439453 }, "PointY": { "type": "float", @@ -17164,14 +17164,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 1.810376644134522 + "value": 1.8103766441345215 }, "PointY": { "type": "float", @@ -17179,7 +17179,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -17194,7 +17194,7 @@ }, "PointZ": { "type": "float", - "value": 0.02255978621542454 + "value": 0.022559786215424538 } }, { @@ -17322,7 +17322,7 @@ }, "YPosition": { "type": "float", - "value": 30.02083587646484 + "value": 30.020835876464844 }, "ZOrientation": { "type": "float", @@ -17416,7 +17416,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17465,7 +17465,7 @@ }, "XPosition": { "type": "float", - "value": 117.8530960083008 + "value": 117.85309600830078 }, "YOrientation": { "type": "float", @@ -17477,7 +17477,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17538,7 +17538,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17599,7 +17599,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17660,7 +17660,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17709,7 +17709,7 @@ }, "XPosition": { "type": "float", - "value": 35.63730621337891 + "value": 35.637306213378906 }, "YOrientation": { "type": "float", @@ -17721,7 +17721,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17770,7 +17770,7 @@ }, "XPosition": { "type": "float", - "value": 130.1985931396484 + "value": 130.19859313964844 }, "YOrientation": { "type": "float", @@ -17782,7 +17782,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17831,7 +17831,7 @@ }, "XPosition": { "type": "float", - "value": 129.6204223632813 + "value": 129.62042236328125 }, "YOrientation": { "type": "float", @@ -17843,7 +17843,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17896,7 +17896,7 @@ }, "YOrientation": { "type": "float", - "value": 0.9495281577110291 + "value": 0.949528157711029 }, "YPosition": { "type": "float", @@ -17904,7 +17904,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17961,11 +17961,11 @@ }, "YPosition": { "type": "float", - "value": 127.6023483276367 + "value": 127.60234832763672 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18014,7 +18014,7 @@ }, "XPosition": { "type": "float", - "value": 15.6056432723999 + "value": 15.605643272399902 }, "YOrientation": { "type": "float", @@ -18022,11 +18022,11 @@ }, "YPosition": { "type": "float", - "value": 116.832878112793 + "value": 116.83287811279297 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18075,7 +18075,7 @@ }, "XPosition": { "type": "float", - "value": 15.86831092834473 + "value": 15.868310928344727 }, "YOrientation": { "type": "float", @@ -18087,7 +18087,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18136,7 +18136,7 @@ }, "XPosition": { "type": "float", - "value": 67.61435699462891 + "value": 67.6143569946289 }, "YOrientation": { "type": "float", @@ -18148,7 +18148,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -18262,7 +18262,7 @@ }, "XPosition": { "type": "float", - "value": 3.085032463073731 + "value": 3.0850324630737305 }, "YOrientation": { "type": "float", @@ -18270,7 +18270,7 @@ }, "YPosition": { "type": "float", - "value": 22.97519683837891 + "value": 22.975196838378906 }, "ZPosition": { "type": "float", @@ -18323,7 +18323,7 @@ }, "XPosition": { "type": "float", - "value": 109.1152191162109 + "value": 109.11521911621094 }, "YOrientation": { "type": "float", @@ -18331,11 +18331,11 @@ }, "YPosition": { "type": "float", - "value": 140.9461364746094 + "value": 140.94613647460938 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18388,15 +18388,15 @@ }, "YOrientation": { "type": "float", - "value": 0.02454232610762119 + "value": 0.024542326107621193 }, "YPosition": { "type": "float", - "value": 25.03613090515137 + "value": 25.036130905151367 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { diff --git a/_module/git/thegraydepths.git.json b/_module/git/thegraydepths.git.json index 5746a03..49625da 100644 --- a/_module/git/thegraydepths.git.json +++ b/_module/git/thegraydepths.git.json @@ -1159,7 +1159,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1378,7 +1378,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1597,7 +1597,7 @@ }, "Bearing": { "type": "float", - "value": 1.748454110384046e-007 + "value": 0.00000017484541103840456 }, "CloseLockDC": { "type": "byte", @@ -2035,7 +2035,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -2473,7 +2473,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -3130,7 +3130,7 @@ }, "Bearing": { "type": "float", - "value": 1.748454110384046e-007 + "value": 0.00000017484541103840456 }, "CloseLockDC": { "type": "byte", @@ -4006,7 +4006,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -4225,7 +4225,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -5758,7 +5758,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -5977,7 +5977,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -7510,7 +7510,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -7951,7 +7951,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8171,7 +8171,7 @@ }, "X": { "type": "float", - "value": 183.5198364257813 + "value": 183.51983642578125 }, "Y": { "type": "float", @@ -8179,7 +8179,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8398,7 +8398,7 @@ }, "X": { "type": "float", - "value": 125.0137100219727 + "value": 125.01371002197266 }, "Y": { "type": "float", @@ -8406,7 +8406,7 @@ }, "Z": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 } }, { @@ -8625,7 +8625,7 @@ }, "X": { "type": "float", - "value": 132.1455230712891 + "value": 132.14552307128906 }, "Y": { "type": "float", @@ -8852,7 +8852,7 @@ }, "X": { "type": "float", - "value": 117.5421752929688 + "value": 117.54217529296875 }, "Y": { "type": "float", @@ -8860,7 +8860,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9080,7 +9080,7 @@ }, "X": { "type": "float", - "value": 131.9161529541016 + "value": 131.91615295410156 }, "Y": { "type": "float", @@ -9088,7 +9088,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9107,7 +9107,7 @@ }, "Bearing": { "type": "float", - "value": -1.619882822036743 + "value": -1.6198828220367432 }, "BodyBag": { "type": "byte", @@ -9308,15 +9308,15 @@ }, "X": { "type": "float", - "value": 54.51928329467773 + "value": 54.519283294677734 }, "Y": { "type": "float", - "value": 185.3622741699219 + "value": 185.36227416992188 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9604,11 +9604,11 @@ }, "Y": { "type": "float", - "value": 189.0410003662109 + "value": 189.04100036621094 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -9900,7 +9900,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10192,7 +10192,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10480,11 +10480,11 @@ }, "Y": { "type": "float", - "value": 182.5040588378906 + "value": 182.50405883789062 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10768,15 +10768,15 @@ }, "X": { "type": "float", - "value": 41.12314605712891 + "value": 41.123146057128906 }, "Y": { "type": "float", - "value": 187.4794616699219 + "value": 187.47946166992188 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11352,7 +11352,7 @@ }, "X": { "type": "float", - "value": 37.94832611083984 + "value": 37.948326110839844 }, "Y": { "type": "float", @@ -11360,7 +11360,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11648,11 +11648,11 @@ }, "Y": { "type": "float", - "value": 191.7751159667969 + "value": 191.77511596679688 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11940,11 +11940,11 @@ }, "Y": { "type": "float", - "value": 191.3349761962891 + "value": 191.33497619628906 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12164,11 +12164,11 @@ }, "X": { "type": "float", - "value": 151.3418884277344 + "value": 151.34188842773438 }, "Y": { "type": "float", - "value": 193.5095062255859 + "value": 193.50950622558594 }, "Z": { "type": "float", @@ -12396,11 +12396,11 @@ }, "Y": { "type": "float", - "value": 192.5447387695313 + "value": 192.54473876953125 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -12419,7 +12419,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -12619,15 +12619,15 @@ }, "X": { "type": "float", - "value": 102.8595275878906 + "value": 102.85952758789062 }, "Y": { "type": "float", - "value": 104.9860458374023 + "value": 104.98604583740234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12646,7 +12646,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -12846,15 +12846,15 @@ }, "X": { "type": "float", - "value": 102.5875854492188 + "value": 102.58758544921875 }, "Y": { "type": "float", - "value": 114.9236373901367 + "value": 114.92363739013672 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12873,7 +12873,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -13073,15 +13073,15 @@ }, "X": { "type": "float", - "value": 102.5379257202148 + "value": 102.53792572021484 }, "Y": { "type": "float", - "value": 124.7517242431641 + "value": 124.75172424316406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13100,7 +13100,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -13300,7 +13300,7 @@ }, "X": { "type": "float", - "value": 102.5875930786133 + "value": 102.58759307861328 }, "Y": { "type": "float", @@ -13308,7 +13308,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13327,7 +13327,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -13531,11 +13531,11 @@ }, "Y": { "type": "float", - "value": 134.9327239990234 + "value": 134.93272399902344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13554,7 +13554,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -13758,11 +13758,11 @@ }, "Y": { "type": "float", - "value": 124.7020645141602 + "value": 124.70206451416016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13781,7 +13781,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -13981,15 +13981,15 @@ }, "X": { "type": "float", - "value": 87.36838531494141 + "value": 87.3683853149414 }, "Y": { "type": "float", - "value": 114.9954986572266 + "value": 114.99549865722656 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14008,7 +14008,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "BodyBag": { "type": "byte", @@ -14212,11 +14212,11 @@ }, "Y": { "type": "float", - "value": 105.1162643432617 + "value": 105.11626434326172 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -14274,7 +14274,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -14700,7 +14700,7 @@ }, "XPosition": { "type": "float", - "value": 186.2229309082031 + "value": 186.22293090820312 }, "YPosition": { "type": "float", @@ -14829,7 +14829,7 @@ }, "ZPosition": { "type": "float", - "value": 1.500000476837158 + "value": 1.5000004768371582 } }, { @@ -14946,11 +14946,11 @@ }, "YPosition": { "type": "float", - "value": 3.788721561431885 + "value": 3.7887215614318848 }, "ZPosition": { "type": "float", - "value": 1.500000953674316 + "value": 1.5000009536743164 } }, { @@ -15067,11 +15067,11 @@ }, "YPosition": { "type": "float", - "value": 177.2508392333984 + "value": 177.25083923339844 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15188,11 +15188,11 @@ }, "YPosition": { "type": "float", - "value": 191.8506774902344 + "value": 191.85067749023438 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15305,15 +15305,15 @@ }, "XPosition": { "type": "float", - "value": 51.61800384521484 + "value": 51.618003845214844 }, "YPosition": { "type": "float", - "value": 191.3693695068359 + "value": 191.36936950683594 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -15430,11 +15430,11 @@ }, "YPosition": { "type": "float", - "value": 177.6519470214844 + "value": 177.65194702148438 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } } ] @@ -15528,7 +15528,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15577,7 +15577,7 @@ }, "XPosition": { "type": "float", - "value": 28.47016334533691 + "value": 28.470163345336914 }, "YOrientation": { "type": "float", @@ -15589,7 +15589,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15650,7 +15650,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15699,7 +15699,7 @@ }, "XPosition": { "type": "float", - "value": 44.65472793579102 + "value": 44.654727935791016 }, "YOrientation": { "type": "float", @@ -15707,11 +15707,11 @@ }, "YPosition": { "type": "float", - "value": 20.25150871276856 + "value": 20.251508712768555 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15772,7 +15772,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15833,7 +15833,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15890,11 +15890,11 @@ }, "YPosition": { "type": "float", - "value": 161.5486145019531 + "value": 161.54861450195312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15943,7 +15943,7 @@ }, "XPosition": { "type": "float", - "value": 185.1712951660156 + "value": 185.17129516601562 }, "YOrientation": { "type": "float", @@ -15951,11 +15951,11 @@ }, "YPosition": { "type": "float", - "value": 124.3275527954102 + "value": 124.32755279541016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16004,7 +16004,7 @@ }, "XPosition": { "type": "float", - "value": 191.1506500244141 + "value": 191.15065002441406 }, "YOrientation": { "type": "float", @@ -16012,11 +16012,11 @@ }, "YPosition": { "type": "float", - "value": 105.3558883666992 + "value": 105.35588836669922 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16065,7 +16065,7 @@ }, "XPosition": { "type": "float", - "value": 174.6077575683594 + "value": 174.60775756835938 }, "YOrientation": { "type": "float", @@ -16077,7 +16077,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16126,7 +16126,7 @@ }, "XPosition": { "type": "float", - "value": 195.3361968994141 + "value": 195.33619689941406 }, "YOrientation": { "type": "float", @@ -16138,7 +16138,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16199,7 +16199,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16256,11 +16256,11 @@ }, "YPosition": { "type": "float", - "value": 12.27377796173096 + "value": 12.273777961730957 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16309,19 +16309,19 @@ }, "XPosition": { "type": "float", - "value": 176.4207458496094 + "value": 176.42074584960938 }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", - "value": 136.0961303710938 + "value": 136.09613037109375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16370,7 +16370,7 @@ }, "XPosition": { "type": "float", - "value": 125.1734313964844 + "value": 125.17343139648438 }, "YOrientation": { "type": "float", @@ -16382,7 +16382,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16431,7 +16431,7 @@ }, "XPosition": { "type": "float", - "value": 130.3087005615234 + "value": 130.30870056152344 }, "YOrientation": { "type": "float", @@ -16443,7 +16443,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16496,15 +16496,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 129.0705261230469 + "value": 129.07052612304688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16549,11 +16549,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 161.6739807128906 + "value": 161.67398071289062 }, "YOrientation": { "type": "float", @@ -16561,11 +16561,11 @@ }, "YPosition": { "type": "float", - "value": 128.2673187255859 + "value": 128.26731872558594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16610,11 +16610,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 151.0973205566406 + "value": 151.09732055664062 }, "YOrientation": { "type": "float", @@ -16622,11 +16622,11 @@ }, "YPosition": { "type": "float", - "value": 108.5338745117188 + "value": 108.53387451171875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16671,11 +16671,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 155.0651550292969 + "value": 155.06515502929688 }, "YOrientation": { "type": "float", @@ -16683,11 +16683,11 @@ }, "YPosition": { "type": "float", - "value": 67.82212066650391 + "value": 67.8221206665039 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16732,11 +16732,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 144.7431030273438 + "value": 144.74310302734375 }, "YOrientation": { "type": "float", @@ -16744,11 +16744,11 @@ }, "YPosition": { "type": "float", - "value": 37.70203018188477 + "value": 37.702030181884766 }, "ZPosition": { "type": "float", - "value": -5.221962965151761e-006 + "value": -0.000005221962965151761 } }, { @@ -16805,11 +16805,11 @@ }, "YPosition": { "type": "float", - "value": 185.5333557128906 + "value": 185.53335571289062 }, "ZPosition": { "type": "float", - "value": 1.630007982254028 + "value": 1.6300079822540283 } }, { @@ -16858,7 +16858,7 @@ }, "XPosition": { "type": "float", - "value": 19.97651290893555 + "value": 19.976512908935547 }, "YOrientation": { "type": "float", @@ -16866,11 +16866,11 @@ }, "YPosition": { "type": "float", - "value": 187.3088684082031 + "value": 187.30886840820312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16927,11 +16927,11 @@ }, "YPosition": { "type": "float", - "value": 172.6035461425781 + "value": 172.60354614257812 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16988,11 +16988,11 @@ }, "YPosition": { "type": "float", - "value": 153.8614807128906 + "value": 153.86148071289062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17041,7 +17041,7 @@ }, "XPosition": { "type": "float", - "value": 14.65982246398926 + "value": 14.659822463989258 }, "YOrientation": { "type": "float", @@ -17049,11 +17049,11 @@ }, "YPosition": { "type": "float", - "value": 155.0501098632813 + "value": 155.05010986328125 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17102,7 +17102,7 @@ }, "XPosition": { "type": "float", - "value": 14.22731399536133 + "value": 14.227313995361328 }, "YOrientation": { "type": "float", @@ -17114,7 +17114,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17167,15 +17167,15 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 77.14064788818359 + "value": 77.1406478881836 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17240,11 +17240,11 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 150.1213073730469 + "value": 150.12130737304688 }, "YOrientation": { "type": "float", @@ -17252,11 +17252,11 @@ }, "YPosition": { "type": "float", - "value": 179.9681091308594 + "value": 179.96810913085938 }, "ZPosition": { "type": "float", - "value": 0.3618761301040649 + "value": 0.36187613010406494 } }, { @@ -17301,11 +17301,11 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 155.0937805175781 + "value": 155.09378051757812 }, "YOrientation": { "type": "float", @@ -17317,7 +17317,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17362,11 +17362,11 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", - "value": 145.6604614257813 + "value": 145.66046142578125 }, "YOrientation": { "type": "float", @@ -17374,11 +17374,11 @@ }, "YPosition": { "type": "float", - "value": 148.6862945556641 + "value": 148.68629455566406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17427,7 +17427,7 @@ }, "XPosition": { "type": "float", - "value": 121.6103439331055 + "value": 121.61034393310547 }, "YOrientation": { "type": "float", @@ -17435,11 +17435,11 @@ }, "YPosition": { "type": "float", - "value": 148.4719085693359 + "value": 148.47190856933594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17488,19 +17488,19 @@ }, "XPosition": { "type": "float", - "value": 113.5456237792969 + "value": 113.54562377929688 }, "YOrientation": { "type": "float", - "value": 1.148381556959066e-006 + "value": 0.000001148381556959066 }, "YPosition": { "type": "float", - "value": 177.8637084960938 + "value": 177.86370849609375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17545,7 +17545,7 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", @@ -17561,7 +17561,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17606,7 +17606,7 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", @@ -17622,7 +17622,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17667,7 +17667,7 @@ }, "XOrientation": { "type": "float", - "value": -2.773600272121257e-006 + "value": -0.000002773600272121257 }, "XPosition": { "type": "float", @@ -17679,11 +17679,11 @@ }, "YPosition": { "type": "float", - "value": 141.8131713867188 + "value": 141.81317138671875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17732,7 +17732,7 @@ }, "XPosition": { "type": "float", - "value": 58.05150985717773 + "value": 58.051509857177734 }, "YOrientation": { "type": "float", @@ -17740,11 +17740,11 @@ }, "YPosition": { "type": "float", - "value": 132.1559448242188 + "value": 132.15594482421875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17793,7 +17793,7 @@ }, "XPosition": { "type": "float", - "value": 176.2972717285156 + "value": 176.29727172851562 }, "YOrientation": { "type": "float", @@ -17805,7 +17805,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17854,19 +17854,19 @@ }, "XPosition": { "type": "float", - "value": 164.9989624023438 + "value": 164.99896240234375 }, "YOrientation": { "type": "float", - "value": -0.09801651537418366 + "value": -0.09801651537418365 }, "YPosition": { "type": "float", - "value": 83.71109008789063 + "value": 83.71109008789062 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17927,7 +17927,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18037,7 +18037,7 @@ }, "XPosition": { "type": "float", - "value": 165.2588043212891 + "value": 165.25880432128906 }, "YOrientation": { "type": "float", @@ -18045,7 +18045,7 @@ }, "YPosition": { "type": "float", - "value": 40.92434692382813 + "value": 40.924346923828125 }, "ZPosition": { "type": "float", @@ -18098,7 +18098,7 @@ }, "XPosition": { "type": "float", - "value": 104.4499053955078 + "value": 104.44990539550781 }, "YOrientation": { "type": "float", @@ -18110,7 +18110,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18167,11 +18167,11 @@ }, "YPosition": { "type": "float", - "value": 13.19279861450195 + "value": 13.192798614501953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18228,11 +18228,11 @@ }, "YPosition": { "type": "float", - "value": 45.07082366943359 + "value": 45.070823669433594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18293,7 +18293,7 @@ }, "ZPosition": { "type": "float", - "value": -5.364418029785156e-006 + "value": -0.000005364418029785156 } }, { @@ -18342,7 +18342,7 @@ }, "XPosition": { "type": "float", - "value": 104.7534332275391 + "value": 104.75343322753906 }, "YOrientation": { "type": "float", @@ -18354,7 +18354,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18403,7 +18403,7 @@ }, "XPosition": { "type": "float", - "value": 97.21193695068359 + "value": 97.2119369506836 }, "YOrientation": { "type": "float", @@ -18415,7 +18415,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18464,7 +18464,7 @@ }, "XPosition": { "type": "float", - "value": 94.29518890380859 + "value": 94.2951889038086 }, "YOrientation": { "type": "float", @@ -18476,7 +18476,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18533,11 +18533,11 @@ }, "YPosition": { "type": "float", - "value": 113.5102920532227 + "value": 113.51029205322266 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18586,7 +18586,7 @@ }, "XPosition": { "type": "float", - "value": 65.03579711914063 + "value": 65.03579711914062 }, "YOrientation": { "type": "float", @@ -18598,7 +18598,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18655,11 +18655,11 @@ }, "YPosition": { "type": "float", - "value": 164.7228698730469 + "value": 164.72286987304688 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -18716,11 +18716,11 @@ }, "YPosition": { "type": "float", - "value": 145.7104339599609 + "value": 145.71043395996094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/thelonelyinn.git.json b/_module/git/thelonelyinn.git.json index 14141a8..e542751 100644 --- a/_module/git/thelonelyinn.git.json +++ b/_module/git/thelonelyinn.git.json @@ -770,7 +770,7 @@ }, "XPosition": { "type": "float", - "value": 10.48044586181641 + "value": 10.480445861816406 }, "YOrientation": { "type": "float", @@ -782,7 +782,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -1517,11 +1517,11 @@ }, "YPosition": { "type": "float", - "value": 21.55999565124512 + "value": 21.559995651245117 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -2286,7 +2286,7 @@ }, "XPosition": { "type": "float", - "value": 48.56319427490234 + "value": 48.563194274902344 }, "YOrientation": { "type": "float", @@ -2294,11 +2294,11 @@ }, "YPosition": { "type": "float", - "value": 18.71085929870606 + "value": 18.710859298706055 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3025,7 +3025,7 @@ }, "XPosition": { "type": "float", - "value": 19.70968437194824 + "value": 19.709684371948242 }, "YOrientation": { "type": "float", @@ -3033,7 +3033,7 @@ }, "YPosition": { "type": "float", - "value": 13.09587001800537 + "value": 13.095870018005371 }, "ZPosition": { "type": "float", @@ -3061,7 +3061,7 @@ }, "Bearing": { "type": "float", - "value": -3.141585826873779 + "value": -3.1415858268737793 }, "CloseLockDC": { "type": "byte", @@ -3293,7 +3293,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -3497,7 +3497,7 @@ }, "Y": { "type": "float", - "value": 15.90363121032715 + "value": 15.903631210327148 }, "Z": { "type": "float", @@ -3520,7 +3520,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -3724,11 +3724,11 @@ }, "Y": { "type": "float", - "value": 14.96478080749512 + "value": 14.964780807495117 }, "Z": { "type": "float", - "value": 0.001474380493164063 + "value": 0.0014743804931640625 } }, { @@ -3747,7 +3747,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -3951,11 +3951,11 @@ }, "Y": { "type": "float", - "value": 15.48729515075684 + "value": 15.487295150756836 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3974,7 +3974,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -4174,15 +4174,15 @@ }, "X": { "type": "float", - "value": 11.17114067077637 + "value": 11.171140670776367 }, "Y": { "type": "float", - "value": 15.95122337341309 + "value": 15.951223373413086 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -4201,7 +4201,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -4405,11 +4405,11 @@ }, "Y": { "type": "float", - "value": 15.01237869262695 + "value": 15.012378692626953 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -4428,7 +4428,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -4628,15 +4628,15 @@ }, "X": { "type": "float", - "value": 18.78404045104981 + "value": 18.784040451049805 }, "Y": { "type": "float", - "value": 16.29302787780762 + "value": 16.293027877807617 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -4655,7 +4655,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -4855,15 +4855,15 @@ }, "X": { "type": "float", - "value": 18.73582458496094 + "value": 18.735824584960938 }, "Y": { "type": "float", - "value": 15.35417747497559 + "value": 15.354177474975586 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -4882,7 +4882,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -5086,11 +5086,11 @@ }, "Y": { "type": "float", - "value": 15.87669181823731 + "value": 15.876691818237305 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5109,7 +5109,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -5309,15 +5309,15 @@ }, "X": { "type": "float", - "value": 21.76994323730469 + "value": 21.769943237304688 }, "Y": { "type": "float", - "value": 16.34062004089356 + "value": 16.340620040893555 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5336,7 +5336,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -5540,11 +5540,11 @@ }, "Y": { "type": "float", - "value": 15.40177536010742 + "value": 15.401775360107422 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5563,7 +5563,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -5767,11 +5767,11 @@ }, "Y": { "type": "float", - "value": 27.0102653503418 + "value": 27.010265350341797 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -5790,7 +5790,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -5994,11 +5994,11 @@ }, "Y": { "type": "float", - "value": 26.07141494750977 + "value": 26.071414947509766 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -6017,7 +6017,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -6221,11 +6221,11 @@ }, "Y": { "type": "float", - "value": 26.59392929077148 + "value": 26.593929290771484 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -6244,7 +6244,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -6444,15 +6444,15 @@ }, "X": { "type": "float", - "value": 11.53337097167969 + "value": 11.533370971679688 }, "Y": { "type": "float", - "value": 27.05785751342773 + "value": 27.057857513427734 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6471,7 +6471,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -6679,7 +6679,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6698,7 +6698,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -6898,15 +6898,15 @@ }, "X": { "type": "float", - "value": 2.078665971755981 + "value": 2.0786659717559814 }, "Y": { "type": "float", - "value": 20.3597526550293 + "value": 20.359752655029297 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -6925,7 +6925,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -7129,11 +7129,11 @@ }, "Y": { "type": "float", - "value": 19.42090225219727 + "value": 19.420902252197266 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7152,7 +7152,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -7356,11 +7356,11 @@ }, "Y": { "type": "float", - "value": 19.94341659545898 + "value": 19.943416595458984 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7379,7 +7379,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -7583,11 +7583,11 @@ }, "Y": { "type": "float", - "value": 20.40734481811523 + "value": 20.407344818115234 }, "Z": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } }, { @@ -7606,7 +7606,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "BodyBag": { "type": "byte", @@ -7814,7 +7814,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8033,15 +8033,15 @@ }, "X": { "type": "float", - "value": 49.56887817382813 + "value": 49.568878173828125 }, "Y": { "type": "float", - "value": 12.78316688537598 + "value": 12.783166885375977 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8264,11 +8264,11 @@ }, "Y": { "type": "float", - "value": 16.05825233459473 + "value": 16.058252334594727 }, "Z": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -8495,7 +8495,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } } ] @@ -10877,7 +10877,7 @@ }, "XPosition": { "type": "float", - "value": 19.85028266906738 + "value": 19.850282669067383 }, "YOrientation": { "type": "float", @@ -10885,11 +10885,11 @@ }, "YPosition": { "type": "float", - "value": 12.29342460632324 + "value": 12.293424606323242 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -10987,7 +10987,7 @@ }, "XPosition": { "type": "float", - "value": 29.50527381896973 + "value": 29.505273818969727 }, "YOrientation": { "type": "float", @@ -10995,11 +10995,11 @@ }, "YPosition": { "type": "float", - "value": 25.82029342651367 + "value": 25.820293426513672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11068,7 +11068,7 @@ }, "XPosition": { "type": "float", - "value": 19.31554794311523 + "value": 19.315547943115234 }, "YOrientation": { "type": "float", @@ -11076,11 +11076,11 @@ }, "YPosition": { "type": "float", - "value": 25.54050827026367 + "value": 25.540508270263672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11153,15 +11153,15 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 15.30039310455322 + "value": 15.300393104553223 }, "ZPosition": { "type": "float", - "value": 0.02411079406738281 + "value": 0.024110794067382812 } }, { @@ -11208,7 +11208,7 @@ }, "XPosition": { "type": "float", - "value": 48.65421295166016 + "value": 48.654212951660156 }, "YOrientation": { "type": "float", @@ -11216,11 +11216,11 @@ }, "YPosition": { "type": "float", - "value": 18.77267646789551 + "value": 18.772676467895508 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11271,7 +11271,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -11279,7 +11279,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11334,11 +11334,11 @@ }, "YPosition": { "type": "float", - "value": 17.84542083740234 + "value": 17.845420837402344 }, "ZPosition": { "type": "float", - "value": 0.004476547241210938 + "value": 0.0044765472412109375 } }, { @@ -11385,7 +11385,7 @@ }, "XPosition": { "type": "float", - "value": 29.56481552124023 + "value": 29.564815521240234 }, "YOrientation": { "type": "float", @@ -11393,11 +11393,11 @@ }, "YPosition": { "type": "float", - "value": 23.28603363037109 + "value": 23.286033630371094 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } }, { @@ -11444,7 +11444,7 @@ }, "XPosition": { "type": "float", - "value": 19.7549934387207 + "value": 19.754993438720703 }, "YOrientation": { "type": "float", @@ -11452,11 +11452,11 @@ }, "YPosition": { "type": "float", - "value": 23.01581192016602 + "value": 23.015811920166016 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11515,7 +11515,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000621914863586 + "value": 0.010006219148635864 } }, { @@ -11570,11 +11570,11 @@ }, "YPosition": { "type": "float", - "value": 22.22168159484863 + "value": 22.221681594848633 }, "ZPosition": { "type": "float", - "value": -5.573034286499023e-006 + "value": -0.0000055730342864990234 } } ] diff --git a/_module/git/thequietofthemin.git.json b/_module/git/thequietofthemin.git.json index e9f1948..ce2866a 100644 --- a/_module/git/thequietofthemin.git.json +++ b/_module/git/thequietofthemin.git.json @@ -278,11 +278,11 @@ }, "Y": { "type": "float", - "value": 52.21608734130859 + "value": 52.216087341308594 }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -498,7 +498,7 @@ }, "X": { "type": "float", - "value": 41.19637298583984 + "value": 41.196372985839844 }, "Y": { "type": "float", @@ -506,7 +506,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-006 + "value": 0.0000095367431640625 } }, { @@ -725,7 +725,7 @@ }, "Y": { "type": "float", - "value": 48.89194488525391 + "value": 48.891944885253906 }, "Z": { "type": "float", @@ -944,7 +944,7 @@ }, "X": { "type": "float", - "value": 43.33951568603516 + "value": 43.339515686035156 }, "Y": { "type": "float", @@ -1167,11 +1167,11 @@ }, "X": { "type": "float", - "value": 52.57250595092773 + "value": 52.572505950927734 }, "Y": { "type": "float", - "value": 13.78011512756348 + "value": 13.780115127563477 }, "Z": { "type": "float", @@ -1394,11 +1394,11 @@ }, "Y": { "type": "float", - "value": 5.94110918045044 + "value": 5.9411091804504395 }, "Z": { "type": "float", - "value": 0.009999930858612061 + "value": 0.00999993085861206 } }, { @@ -1617,11 +1617,11 @@ }, "Y": { "type": "float", - "value": 10.84413909912109 + "value": 10.844139099121094 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -1836,7 +1836,7 @@ }, "X": { "type": "float", - "value": 52.99975967407227 + "value": 52.999759674072266 }, "Y": { "type": "float", @@ -1844,7 +1844,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -2063,7 +2063,7 @@ }, "Y": { "type": "float", - "value": 10.37340545654297 + "value": 10.373405456542969 }, "Z": { "type": "float", @@ -2290,7 +2290,7 @@ }, "Z": { "type": "float", - "value": 0.0100000100210309 + "value": 0.010000010021030903 } }, { @@ -2505,11 +2505,11 @@ }, "X": { "type": "float", - "value": 18.31732559204102 + "value": 18.317325592041016 }, "Y": { "type": "float", - "value": 1.762819051742554 + "value": 1.7628190517425537 }, "Z": { "type": "float", @@ -2728,11 +2728,11 @@ }, "X": { "type": "float", - "value": 23.21756553649902 + "value": 23.217565536499023 }, "Y": { "type": "float", - "value": 2.530272006988525 + "value": 2.5302720069885254 }, "Z": { "type": "float", @@ -2955,7 +2955,7 @@ }, "Y": { "type": "float", - "value": 19.3975944519043 + "value": 19.397594451904297 }, "Z": { "type": "float", @@ -3174,7 +3174,7 @@ }, "X": { "type": "float", - "value": 40.07021331787109 + "value": 40.070213317871094 }, "Y": { "type": "float", @@ -3182,7 +3182,7 @@ }, "Z": { "type": "float", - "value": -8.568167686462402e-008 + "value": -8.568167686462402e-8 } }, { @@ -3401,7 +3401,7 @@ }, "Y": { "type": "float", - "value": 29.61967849731445 + "value": 29.619678497314453 }, "Z": { "type": "float", @@ -3620,7 +3620,7 @@ }, "X": { "type": "float", - "value": 34.29781341552734 + "value": 34.297813415527344 }, "Y": { "type": "float", @@ -3851,7 +3851,7 @@ }, "Z": { "type": "float", - "value": 0.01000005286186934 + "value": 0.010000052861869335 } }, { @@ -4293,11 +4293,11 @@ }, "Y": { "type": "float", - "value": 31.98800086975098 + "value": 31.988000869750977 }, "Z": { "type": "float", - "value": 0.01000010967254639 + "value": 0.010000109672546387 } }, { @@ -4512,7 +4512,7 @@ }, "X": { "type": "float", - "value": 42.45475006103516 + "value": 42.454750061035156 }, "Y": { "type": "float", @@ -4539,7 +4539,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795893669128 + "value": 1.5707958936691284 }, "BodyBag": { "type": "byte", @@ -4962,7 +4962,7 @@ }, "Y": { "type": "float", - "value": 19.42643356323242 + "value": 19.426433563232422 }, "Z": { "type": "float", @@ -5181,11 +5181,11 @@ }, "X": { "type": "float", - "value": 18.11355590820313 + "value": 18.113555908203125 }, "Y": { "type": "float", - "value": 21.91219520568848 + "value": 21.912195205688477 }, "Z": { "type": "float", @@ -5408,7 +5408,7 @@ }, "Y": { "type": "float", - "value": 21.08381080627441 + "value": 21.083810806274414 }, "Z": { "type": "float", @@ -5631,7 +5631,7 @@ }, "Y": { "type": "float", - "value": 16.62683486938477 + "value": 16.626834869384766 }, "Z": { "type": "float", @@ -5854,11 +5854,11 @@ }, "Y": { "type": "float", - "value": 18.73380661010742 + "value": 18.733806610107422 }, "Z": { "type": "float", - "value": 5.960464477539063e-008 + "value": 5.960464477539063e-8 } }, { @@ -6077,7 +6077,7 @@ }, "Y": { "type": "float", - "value": 17.61887168884277 + "value": 17.618871688842773 }, "Z": { "type": "float", @@ -6300,11 +6300,11 @@ }, "Y": { "type": "float", - "value": 20.75842666625977 + "value": 20.758426666259766 }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -6527,7 +6527,7 @@ }, "Z": { "type": "float", - "value": 1.490116119384766e-008 + "value": 1.4901161193847656e-8 } }, { @@ -6973,7 +6973,7 @@ }, "Z": { "type": "float", - "value": 1.127251029014587 + "value": 1.1272510290145874 } }, { @@ -7411,7 +7411,7 @@ }, "X": { "type": "float", - "value": 43.41528701782227 + "value": 43.415287017822266 }, "Y": { "type": "float", @@ -7419,7 +7419,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { diff --git a/_module/git/thewesternblackf.git.json b/_module/git/thewesternblackf.git.json index 3293250..5850c82 100644 --- a/_module/git/thewesternblackf.git.json +++ b/_module/git/thewesternblackf.git.json @@ -258,7 +258,7 @@ }, "X": { "type": "float", - "value": 135.0899963378906 + "value": 135.08999633789062 }, "Y": { "type": "float", @@ -336,7 +336,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -701,7 +701,7 @@ }, "YPosition": { "type": "float", - "value": 72.79489898681641 + "value": 72.7948989868164 }, "ZPosition": { "type": "float", @@ -742,22 +742,22 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -4.488174438476563 + "value": -4.4881744384765625 }, "PointY": { "type": "float", - "value": 1.52587890625e-005 + "value": 0.0000152587890625 }, "PointZ": { "type": "float", - "value": 0.02108320407569408 + "value": 0.021083204075694084 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -4.488174438476563 + "value": -4.4881744384765625 }, "PointY": { "type": "float", @@ -765,7 +765,7 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } }, { @@ -776,7 +776,7 @@ }, "PointY": { "type": "float", - "value": -10.07703399658203 + "value": -10.077033996582031 }, "PointZ": { "type": "float", @@ -900,7 +900,7 @@ }, "XPosition": { "type": "float", - "value": 149.6553344726563 + "value": 149.65533447265625 }, "YOrientation": { "type": "float", @@ -908,7 +908,7 @@ }, "YPosition": { "type": "float", - "value": 129.9057464599609 + "value": 129.90574645996094 }, "ZOrientation": { "type": "float", @@ -952,7 +952,7 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } }, { @@ -967,7 +967,7 @@ }, "PointZ": { "type": "float", - "value": 0.02020725421607494 + "value": 0.020207254216074944 } }, { @@ -978,11 +978,11 @@ }, "PointY": { "type": "float", - "value": -3.077346801757813 + "value": -3.0773468017578125 }, "PointZ": { "type": "float", - "value": 0.02488156966865063 + "value": 0.024881569668650627 } }, { @@ -997,7 +997,7 @@ }, "PointZ": { "type": "float", - "value": 0.02169701270759106 + "value": 0.021697012707591057 } } ] @@ -1102,7 +1102,7 @@ }, "XPosition": { "type": "float", - "value": 119.994758605957 + "value": 119.99475860595703 }, "YOrientation": { "type": "float", @@ -1110,7 +1110,7 @@ }, "YPosition": { "type": "float", - "value": 149.6789245605469 + "value": 149.67892456054688 }, "ZOrientation": { "type": "float", @@ -1146,7 +1146,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.674148559570313 + "value": -2.6741485595703125 }, "PointY": { "type": "float", @@ -1154,14 +1154,14 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": -2.674148559570313 + "value": -2.6741485595703125 }, "PointY": { "type": "float", @@ -1169,7 +1169,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -1184,7 +1184,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -1199,7 +1199,7 @@ }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } } ] @@ -1305,7 +1305,7 @@ }, "XPosition": { "type": "float", - "value": 149.4584045410156 + "value": 149.45840454101562 }, "YOrientation": { "type": "float", @@ -1313,7 +1313,7 @@ }, "YPosition": { "type": "float", - "value": 82.31996917724609 + "value": 82.3199691772461 }, "ZOrientation": { "type": "float", @@ -1395,19 +1395,19 @@ }, "XPosition": { "type": "float", - "value": 147.5381927490234 + "value": 147.53819274902344 }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 124.8672409057617 + "value": 124.86724090576172 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1476,7 +1476,7 @@ }, "XPosition": { "type": "float", - "value": 11.48818969726563 + "value": 11.488189697265625 }, "YOrientation": { "type": "float", @@ -1484,11 +1484,11 @@ }, "YPosition": { "type": "float", - "value": 120.7604827880859 + "value": 120.76048278808594 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1537,19 +1537,19 @@ }, "XPosition": { "type": "float", - "value": 21.9444465637207 + "value": 21.944446563720703 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 140.7997894287109 + "value": 140.79978942871094 }, "ZPosition": { "type": "float", - "value": 0.01482200622558594 + "value": 0.014822006225585938 } }, { @@ -1598,11 +1598,11 @@ }, "XPosition": { "type": "float", - "value": 38.61826324462891 + "value": 38.618263244628906 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -1610,7 +1610,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1667,11 +1667,11 @@ }, "YPosition": { "type": "float", - "value": 108.1674728393555 + "value": 108.16747283935547 }, "ZPosition": { "type": "float", - "value": 1.668930053710938e-006 + "value": 0.0000016689300537109375 } }, { @@ -1724,7 +1724,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -1732,7 +1732,7 @@ }, "ZPosition": { "type": "float", - "value": 0.2917699813842773 + "value": 0.29176998138427734 } }, { @@ -1789,11 +1789,11 @@ }, "YPosition": { "type": "float", - "value": 129.7039184570313 + "value": 129.70391845703125 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1862,11 +1862,11 @@ }, "XPosition": { "type": "float", - "value": 17.10512161254883 + "value": 17.105121612548828 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -1927,11 +1927,11 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 61.29424667358398 + "value": 61.294246673583984 }, "ZPosition": { "type": "float", @@ -1984,11 +1984,11 @@ }, "XPosition": { "type": "float", - "value": 37.31162261962891 + "value": 37.311622619628906 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -1996,7 +1996,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2049,7 +2049,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2057,7 +2057,7 @@ }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -2110,7 +2110,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2118,7 +2118,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2167,11 +2167,11 @@ }, "XPosition": { "type": "float", - "value": 88.48953247070313 + "value": 88.48953247070312 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2179,7 +2179,7 @@ }, "ZPosition": { "type": "float", - "value": -8.58306884765625e-006 + "value": -0.00000858306884765625 } }, { @@ -2232,7 +2232,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2240,7 +2240,7 @@ }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -2313,11 +2313,11 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 34.51556015014648 + "value": 34.515560150146484 }, "ZPosition": { "type": "float", @@ -2370,7 +2370,7 @@ }, "XPosition": { "type": "float", - "value": 40.40903472900391 + "value": 40.409034729003906 }, "YOrientation": { "type": "float", @@ -2382,7 +2382,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2431,11 +2431,11 @@ }, "XPosition": { "type": "float", - "value": 50.83444976806641 + "value": 50.834449768066406 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2443,7 +2443,7 @@ }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -2496,7 +2496,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2504,7 +2504,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -2553,11 +2553,11 @@ }, "XPosition": { "type": "float", - "value": 100.7430572509766 + "value": 100.74305725097656 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -2565,7 +2565,7 @@ }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -2634,7 +2634,7 @@ }, "XPosition": { "type": "float", - "value": 140.9378356933594 + "value": 140.93783569335938 }, "YOrientation": { "type": "float", @@ -2646,7 +2646,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1012712717056274 + "value": 0.10127127170562744 } }, { @@ -2723,11 +2723,11 @@ }, "YPosition": { "type": "float", - "value": 39.56682968139648 + "value": 39.566829681396484 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2788,7 +2788,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2837,7 +2837,7 @@ }, "XPosition": { "type": "float", - "value": 143.0663757324219 + "value": 143.06637573242188 }, "YOrientation": { "type": "float", @@ -2849,7 +2849,7 @@ }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -2898,7 +2898,7 @@ }, "XPosition": { "type": "float", - "value": 128.8672027587891 + "value": 128.86720275878906 }, "YOrientation": { "type": "float", @@ -2910,7 +2910,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2967,11 +2967,11 @@ }, "YPosition": { "type": "float", - "value": 36.31295776367188 + "value": 36.312957763671875 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3020,7 +3020,7 @@ }, "XPosition": { "type": "float", - "value": 129.5638122558594 + "value": 129.56381225585938 }, "YOrientation": { "type": "float", @@ -3028,11 +3028,11 @@ }, "YPosition": { "type": "float", - "value": 125.2964935302734 + "value": 125.29649353027344 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3101,7 +3101,7 @@ }, "XPosition": { "type": "float", - "value": 148.5413970947266 + "value": 148.54139709472656 }, "YOrientation": { "type": "float", @@ -3113,7 +3113,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3158,11 +3158,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 11.3187313079834 + "value": 11.318731307983398 }, "YOrientation": { "type": "float", @@ -3170,11 +3170,11 @@ }, "YPosition": { "type": "float", - "value": 117.2623825073242 + "value": 117.26238250732422 }, "ZPosition": { "type": "float", - "value": -7.033348083496094e-006 + "value": -0.000007033348083496094 } }, { @@ -3227,15 +3227,15 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 95.77341461181641 + "value": 95.7734146118164 }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -3284,7 +3284,7 @@ }, "XPosition": { "type": "float", - "value": 11.02437782287598 + "value": 11.024377822875977 }, "YOrientation": { "type": "float", @@ -3296,7 +3296,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3341,11 +3341,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454478666186333 + "value": -0.024544786661863327 }, "XPosition": { "type": "float", - "value": 124.9528961181641 + "value": 124.95289611816406 }, "YOrientation": { "type": "float", @@ -3353,11 +3353,11 @@ }, "YPosition": { "type": "float", - "value": 148.1404418945313 + "value": 148.14044189453125 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3404,11 +3404,11 @@ }, "XPosition": { "type": "float", - "value": 148.1977386474609 + "value": 148.19773864746094 }, "YOrientation": { "type": "float", - "value": 0.02454256452620029 + "value": 0.024542564526200294 }, "YPosition": { "type": "float", @@ -3416,7 +3416,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3465,11 +3465,11 @@ }, "XPosition": { "type": "float", - "value": 139.7051849365234 + "value": 139.70518493652344 }, "YOrientation": { "type": "float", - "value": 0.266712874174118 + "value": 0.26671287417411804 }, "YPosition": { "type": "float", @@ -3477,7 +3477,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3526,7 +3526,7 @@ }, "XPosition": { "type": "float", - "value": 138.4080657958984 + "value": 138.40806579589844 }, "YOrientation": { "type": "float", @@ -3534,11 +3534,11 @@ }, "YPosition": { "type": "float", - "value": 135.8773498535156 + "value": 135.87734985351562 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3587,15 +3587,15 @@ }, "XPosition": { "type": "float", - "value": 116.8832397460938 + "value": 116.88323974609375 }, "YOrientation": { "type": "float", - "value": -0.2667123973369598 + "value": -0.26671239733695984 }, "YPosition": { "type": "float", - "value": 111.3632202148438 + "value": 111.36322021484375 }, "ZPosition": { "type": "float", @@ -3652,7 +3652,7 @@ }, "YOrientation": { "type": "float", - "value": 4.331257628109597e-007 + "value": 0.0000004331257628109597 }, "YPosition": { "type": "float", @@ -3660,7 +3660,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3709,7 +3709,7 @@ }, "XPosition": { "type": "float", - "value": 116.825080871582 + "value": 116.82508087158203 }, "YOrientation": { "type": "float", @@ -3721,7 +3721,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1095771789550781 + "value": 0.10957717895507812 } } ] diff --git a/_module/git/towerofthemag001.git.json b/_module/git/towerofthemag001.git.json index 88e1961..e563bb1 100644 --- a/_module/git/towerofthemag001.git.json +++ b/_module/git/towerofthemag001.git.json @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795297622681 + "value": 1.5707952976226807 }, "CloseLockDC": { "type": "byte", @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1380,7 +1380,7 @@ }, "Bearing": { "type": "float", - "value": -1.570795178413391 + "value": -1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2473,11 +2473,11 @@ }, "Y": { "type": "float", - "value": 26.25778961181641 + "value": 26.257789611816406 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2761,7 +2761,7 @@ }, "X": { "type": "float", - "value": 99.92837524414063 + "value": 99.92837524414062 }, "Y": { "type": "float", @@ -2769,7 +2769,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3057,11 +3057,11 @@ }, "Y": { "type": "float", - "value": 25.28239059448242 + "value": 25.282390594482422 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -3349,11 +3349,11 @@ }, "Y": { "type": "float", - "value": 25.25800514221191 + "value": 25.258005142211914 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3641,11 +3641,11 @@ }, "Y": { "type": "float", - "value": 28.45244407653809 + "value": 28.452444076538086 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3929,15 +3929,15 @@ }, "X": { "type": "float", - "value": 101.560417175293 + "value": 101.56041717529297 }, "Y": { "type": "float", - "value": 28.40366935729981 + "value": 28.403669357299805 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4164,7 +4164,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4387,11 +4387,11 @@ }, "Y": { "type": "float", - "value": 17.81425094604492 + "value": 17.814250946044922 }, "Z": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 } }, { @@ -4618,7 +4618,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4837,7 +4837,7 @@ }, "X": { "type": "float", - "value": 108.8109970092773 + "value": 108.81099700927734 }, "Y": { "type": "float", @@ -4845,7 +4845,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5065,7 +5065,7 @@ }, "X": { "type": "float", - "value": 100.0881042480469 + "value": 100.08810424804688 }, "Y": { "type": "float", @@ -5293,11 +5293,11 @@ }, "X": { "type": "float", - "value": 109.9150466918945 + "value": 109.91504669189453 }, "Y": { "type": "float", - "value": 13.58577919006348 + "value": 13.585779190063477 }, "Z": { "type": "float", @@ -5520,7 +5520,7 @@ }, "X": { "type": "float", - "value": 89.68667602539063 + "value": 89.68667602539062 }, "Y": { "type": "float", @@ -5528,7 +5528,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5982,7 +5982,7 @@ }, "Z": { "type": "float", - "value": 9.5367431640625e-007 + "value": 0.00000095367431640625 } }, { @@ -6001,7 +6001,7 @@ }, "Bearing": { "type": "float", - "value": -0.2699806094169617 + "value": -0.26998060941696167 }, "BodyBag": { "type": "byte", @@ -6201,15 +6201,15 @@ }, "X": { "type": "float", - "value": 110.2207183837891 + "value": 110.22071838378906 }, "Y": { "type": "float", - "value": 111.9659729003906 + "value": 111.96597290039062 }, "Z": { "type": "float", - "value": 7.152557373046875e-007 + "value": 0.0000007152557373046875 } }, { @@ -6228,7 +6228,7 @@ }, "Bearing": { "type": "float", - "value": -1.448077082633972 + "value": -1.4480770826339722 }, "BodyBag": { "type": "byte", @@ -6428,7 +6428,7 @@ }, "X": { "type": "float", - "value": 112.364875793457 + "value": 112.36487579345703 }, "Y": { "type": "float", @@ -6436,7 +6436,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6659,11 +6659,11 @@ }, "Y": { "type": "float", - "value": 109.4068069458008 + "value": 109.40680694580078 }, "Z": { "type": "float", - "value": -5.125999905430945e-006 + "value": -0.000005125999905430945 } }, { @@ -7336,7 +7336,7 @@ }, "X": { "type": "float", - "value": 65.87062835693359 + "value": 65.8706283569336 }, "Y": { "type": "float", @@ -7571,7 +7571,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -7790,7 +7790,7 @@ }, "X": { "type": "float", - "value": 102.5422744750977 + "value": 102.54227447509766 }, "Y": { "type": "float", @@ -8017,15 +8017,15 @@ }, "X": { "type": "float", - "value": 117.3104858398438 + "value": 117.31048583984375 }, "Y": { "type": "float", - "value": 97.39072418212891 + "value": 97.3907241821289 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -8248,11 +8248,11 @@ }, "Y": { "type": "float", - "value": 61.88027954101563 + "value": 61.880279541015625 }, "Z": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -8479,7 +8479,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8706,7 +8706,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8725,7 +8725,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -8925,7 +8925,7 @@ }, "X": { "type": "float", - "value": 15.01560974121094 + "value": 15.015609741210938 }, "Y": { "type": "float", @@ -8933,7 +8933,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9152,15 +9152,15 @@ }, "X": { "type": "float", - "value": 10.7380485534668 + "value": 10.738048553466797 }, "Y": { "type": "float", - "value": 27.17044639587402 + "value": 27.170446395874023 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9379,7 +9379,7 @@ }, "X": { "type": "float", - "value": 19.31467437744141 + "value": 19.314674377441406 }, "Y": { "type": "float", @@ -9833,15 +9833,15 @@ }, "X": { "type": "float", - "value": 108.5678329467773 + "value": 108.56783294677734 }, "Y": { "type": "float", - "value": 35.48087310791016 + "value": 35.480873107910156 }, "Z": { "type": "float", - "value": 1.259994506835938 + "value": 1.2599945068359375 } }, { @@ -10068,7 +10068,7 @@ }, "Z": { "type": "float", - "value": 1.260007858276367 + "value": 1.2600078582763672 } }, { @@ -10287,7 +10287,7 @@ }, "X": { "type": "float", - "value": 108.5421981811523 + "value": 108.54219818115234 }, "Y": { "type": "float", @@ -10295,7 +10295,7 @@ }, "Z": { "type": "float", - "value": 1.259994268417358 + "value": 1.2599942684173584 } } ] @@ -10353,7 +10353,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -10783,11 +10783,11 @@ }, "YPosition": { "type": "float", - "value": 35.05859756469727 + "value": 35.058597564697266 }, "ZPosition": { "type": "float", - "value": 1.499999284744263 + "value": 1.4999992847442627 } }, { @@ -10904,7 +10904,7 @@ }, "YPosition": { "type": "float", - "value": 34.82464981079102 + "value": 34.824649810791016 }, "ZPosition": { "type": "float", @@ -11025,7 +11025,7 @@ }, "YPosition": { "type": "float", - "value": 17.78873443603516 + "value": 17.788734436035156 }, "ZPosition": { "type": "float", @@ -11142,15 +11142,15 @@ }, "XPosition": { "type": "float", - "value": 108.3027877807617 + "value": 108.30278778076172 }, "YPosition": { "type": "float", - "value": 17.25395011901856 + "value": 17.253950119018555 }, "ZPosition": { "type": "float", - "value": 1.500001907348633 + "value": 1.5000019073486328 } }, { @@ -11267,11 +11267,11 @@ }, "YPosition": { "type": "float", - "value": 26.59942817687988 + "value": 26.599428176879883 }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -11388,7 +11388,7 @@ }, "YPosition": { "type": "float", - "value": 106.313835144043 + "value": 106.31383514404297 }, "ZPosition": { "type": "float", @@ -11623,11 +11623,11 @@ }, "YPosition": { "type": "float", - "value": 25.97782516479492 + "value": 25.977825164794922 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11684,7 +11684,7 @@ }, "YPosition": { "type": "float", - "value": 42.55428314208984 + "value": 42.554283142089844 }, "ZPosition": { "type": "float", @@ -11749,7 +11749,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11802,15 +11802,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 109.5525588989258 + "value": 109.55255889892578 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11855,11 +11855,11 @@ }, "XOrientation": { "type": "float", - "value": -0.5555721521377564 + "value": -0.5555721521377563 }, "XPosition": { "type": "float", - "value": 61.55932998657227 + "value": 61.559329986572266 }, "YOrientation": { "type": "float", @@ -11867,11 +11867,11 @@ }, "YPosition": { "type": "float", - "value": 111.8056716918945 + "value": 111.80567169189453 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11920,19 +11920,19 @@ }, "XPosition": { "type": "float", - "value": 49.32814788818359 + "value": 49.328147888183594 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 54.81772613525391 + "value": 54.817726135253906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11977,11 +11977,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 21.74347305297852 + "value": 21.743473052978516 }, "YOrientation": { "type": "float", @@ -11993,7 +11993,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12038,7 +12038,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -12050,11 +12050,11 @@ }, "YPosition": { "type": "float", - "value": 58.82381439208984 + "value": 58.823814392089844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12099,7 +12099,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0245412141084671 + "value": -0.024541214108467102 }, "XPosition": { "type": "float", @@ -12115,7 +12115,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12160,11 +12160,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 15.14507579803467 + "value": 15.145075798034668 }, "YOrientation": { "type": "float", @@ -12172,11 +12172,11 @@ }, "YPosition": { "type": "float", - "value": 36.84104156494141 + "value": 36.841041564941406 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12221,7 +12221,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -12237,7 +12237,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12282,11 +12282,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 74.52219390869141 + "value": 74.5221939086914 }, "YOrientation": { "type": "float", @@ -12294,11 +12294,11 @@ }, "YPosition": { "type": "float", - "value": 104.8606033325195 + "value": 104.86060333251953 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12343,7 +12343,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -12359,7 +12359,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12404,11 +12404,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", - "value": 110.5072860717773 + "value": 110.50728607177734 }, "YOrientation": { "type": "float", @@ -12420,7 +12420,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12465,7 +12465,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0490705817937851 + "value": -0.049070581793785095 }, "XPosition": { "type": "float", @@ -12477,11 +12477,11 @@ }, "YPosition": { "type": "float", - "value": 66.15016937255859 + "value": 66.1501693725586 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12538,11 +12538,11 @@ }, "YPosition": { "type": "float", - "value": 17.90759658813477 + "value": 17.907596588134766 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/towerofthemagi.git.json b/_module/git/towerofthemagi.git.json index 733e709..ae3d5a5 100644 --- a/_module/git/towerofthemagi.git.json +++ b/_module/git/towerofthemagi.git.json @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -1380,7 +1380,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -2256,7 +2256,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -2475,7 +2475,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -2695,7 +2695,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -3133,7 +3133,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -3352,7 +3352,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794224739075 + "value": 1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -4460,7 +4460,7 @@ }, "Bearing": { "type": "float", - "value": -1.619882822036743 + "value": -1.6198828220367432 }, "BodyBag": { "type": "byte", @@ -4660,15 +4660,15 @@ }, "X": { "type": "float", - "value": 103.254768371582 + "value": 103.25476837158203 }, "Y": { "type": "float", - "value": 104.9842224121094 + "value": 104.98422241210938 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4911,11 +4911,11 @@ }, "Y": { "type": "float", - "value": 115.5054397583008 + "value": 115.50543975830078 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -5138,7 +5138,7 @@ }, "Y": { "type": "float", - "value": 115.3461074829102 + "value": 115.34610748291016 }, "Z": { "type": "float", @@ -5365,11 +5365,11 @@ }, "Y": { "type": "float", - "value": 111.6030578613281 + "value": 111.60305786132812 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -5592,7 +5592,7 @@ }, "Y": { "type": "float", - "value": 111.6449279785156 + "value": 111.64492797851562 }, "Z": { "type": "float", @@ -5819,7 +5819,7 @@ }, "Y": { "type": "float", - "value": 111.5194931030273 + "value": 111.51949310302734 }, "Z": { "type": "float", @@ -5842,7 +5842,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -6062,15 +6062,15 @@ }, "X": { "type": "float", - "value": 106.3326568603516 + "value": 106.33265686035156 }, "Y": { "type": "float", - "value": 109.2261657714844 + "value": 109.22616577148438 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6089,7 +6089,7 @@ }, "Bearing": { "type": "float", - "value": -1.59533965587616 + "value": -1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -6317,7 +6317,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6540,11 +6540,11 @@ }, "Y": { "type": "float", - "value": 108.7169036865234 + "value": 108.71690368652344 }, "Z": { "type": "float", - "value": 7.152557373046875e-007 + "value": 0.0000007152557373046875 } }, { @@ -6763,15 +6763,15 @@ }, "X": { "type": "float", - "value": 95.35288238525391 + "value": 95.3528823852539 }, "Y": { "type": "float", - "value": 111.3340454101563 + "value": 111.33404541015625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6994,7 +6994,7 @@ }, "Y": { "type": "float", - "value": 114.8921051025391 + "value": 114.89210510253906 }, "Z": { "type": "float", @@ -7221,11 +7221,11 @@ }, "Y": { "type": "float", - "value": 114.8485717773438 + "value": 114.84857177734375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7448,7 +7448,7 @@ }, "Y": { "type": "float", - "value": 114.8921051025391 + "value": 114.89210510253906 }, "Z": { "type": "float", @@ -7671,15 +7671,15 @@ }, "X": { "type": "float", - "value": 100.2238311767578 + "value": 100.22383117675781 }, "Y": { "type": "float", - "value": 114.8474960327148 + "value": 114.84749603271484 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7898,15 +7898,15 @@ }, "X": { "type": "float", - "value": 104.5017776489258 + "value": 104.50177764892578 }, "Y": { "type": "float", - "value": 109.7290344238281 + "value": 109.72903442382812 }, "Z": { "type": "float", - "value": -2.980232238769531e-007 + "value": -0.0000002980232238769531 } }, { @@ -8129,11 +8129,11 @@ }, "Y": { "type": "float", - "value": 109.7290344238281 + "value": 109.72903442382812 }, "Z": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -8356,11 +8356,11 @@ }, "Y": { "type": "float", - "value": 114.7177200317383 + "value": 114.71772003173828 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8579,11 +8579,11 @@ }, "X": { "type": "float", - "value": 47.59810638427734 + "value": 47.598106384277344 }, "Y": { "type": "float", - "value": 25.11460113525391 + "value": 25.114601135253906 }, "Z": { "type": "float", @@ -8806,15 +8806,15 @@ }, "X": { "type": "float", - "value": 47.67624664306641 + "value": 47.676246643066406 }, "Y": { "type": "float", - "value": 25.21359062194824 + "value": 25.213590621948242 }, "Z": { "type": "float", - "value": 0.1246146112680435 + "value": 0.12461461126804352 } }, { @@ -9037,11 +9037,11 @@ }, "Y": { "type": "float", - "value": 29.77548789978027 + "value": 29.775487899780273 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9264,11 +9264,11 @@ }, "Y": { "type": "float", - "value": 29.9686450958252 + "value": 29.968645095825195 }, "Z": { "type": "float", - "value": -1.341104507446289e-007 + "value": -0.0000001341104507446289 } }, { @@ -9491,11 +9491,11 @@ }, "Y": { "type": "float", - "value": 29.85847854614258 + "value": 29.858478546142578 }, "Z": { "type": "float", - "value": -1.043081283569336e-007 + "value": -0.0000001043081283569336 } }, { @@ -9718,11 +9718,11 @@ }, "Y": { "type": "float", - "value": 69.28555297851563 + "value": 69.28555297851562 }, "Z": { "type": "float", - "value": -3.073364496231079e-007 + "value": -0.0000003073364496231079 } }, { @@ -9949,7 +9949,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -10176,7 +10176,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -10403,7 +10403,7 @@ }, "Z": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -10626,7 +10626,7 @@ }, "Y": { "type": "float", - "value": 24.88034057617188 + "value": 24.880340576171875 }, "Z": { "type": "float", @@ -10649,7 +10649,7 @@ }, "Bearing": { "type": "float", - "value": 1.668970465660095 + "value": 1.6689704656600952 }, "BodyBag": { "type": "byte", @@ -10857,7 +10857,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10876,7 +10876,7 @@ }, "Bearing": { "type": "float", - "value": 1.668970465660095 + "value": 1.6689704656600952 }, "BodyBag": { "type": "byte", @@ -11080,11 +11080,11 @@ }, "Y": { "type": "float", - "value": 20.95900344848633 + "value": 20.959003448486328 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11304,11 +11304,11 @@ }, "X": { "type": "float", - "value": 17.29899215698242 + "value": 17.298992156982422 }, "Y": { "type": "float", - "value": 106.8540191650391 + "value": 106.85401916503906 }, "Z": { "type": "float", @@ -11370,7 +11370,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -11675,11 +11675,11 @@ }, "XPosition": { "type": "float", - "value": 54.16296005249023 + "value": 54.162960052490234 }, "YPosition": { "type": "float", - "value": 59.61086273193359 + "value": 59.610862731933594 }, "ZPosition": { "type": "float", @@ -11720,11 +11720,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.099441528320313e-006 + "value": -0.0000030994415283203125 }, "PointY": { "type": "float", - "value": -1.097801208496094 + "value": -1.0978012084960938 }, "PointZ": { "type": "float", @@ -11739,7 +11739,7 @@ }, "PointY": { "type": "float", - "value": -1.134223937988281 + "value": -1.1342239379882812 }, "PointZ": { "type": "float", @@ -11758,7 +11758,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -11878,7 +11878,7 @@ }, "XPosition": { "type": "float", - "value": 1.999991416931152 + "value": 1.9999914169311523 }, "YOrientation": { "type": "float", @@ -11886,7 +11886,7 @@ }, "YPosition": { "type": "float", - "value": 61.35892486572266 + "value": 61.358924865722656 }, "ZOrientation": { "type": "float", @@ -11922,11 +11922,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.099441528320313e-006 + "value": -0.0000030994415283203125 }, "PointY": { "type": "float", - "value": -1.097801208496094 + "value": -1.0978012084960938 }, "PointZ": { "type": "float", @@ -11941,7 +11941,7 @@ }, "PointY": { "type": "float", - "value": -1.134223937988281 + "value": -1.1342239379882812 }, "PointZ": { "type": "float", @@ -11960,7 +11960,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -12088,7 +12088,7 @@ }, "YPosition": { "type": "float", - "value": 71.00857543945313 + "value": 71.00857543945312 }, "ZOrientation": { "type": "float", @@ -12096,7 +12096,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1677656173706055 + "value": 0.16776561737060547 } } ] @@ -12248,7 +12248,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12297,7 +12297,7 @@ }, "XPosition": { "type": "float", - "value": 25.00869750976563 + "value": 25.008697509765625 }, "YOrientation": { "type": "float", @@ -12305,11 +12305,11 @@ }, "YPosition": { "type": "float", - "value": 103.0668792724609 + "value": 103.06687927246094 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12358,7 +12358,7 @@ }, "XPosition": { "type": "float", - "value": 11.06601905822754 + "value": 11.066019058227539 }, "YOrientation": { "type": "float", @@ -12370,7 +12370,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12431,7 +12431,7 @@ }, "ZPosition": { "type": "float", - "value": -5.492940545082092e-006 + "value": -0.000005492940545082092 } }, { @@ -12480,7 +12480,7 @@ }, "XPosition": { "type": "float", - "value": 101.8882141113281 + "value": 101.88821411132812 }, "YOrientation": { "type": "float", @@ -12488,11 +12488,11 @@ }, "YPosition": { "type": "float", - "value": 60.71932983398438 + "value": 60.719329833984375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12553,7 +12553,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12606,7 +12606,7 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", @@ -12659,7 +12659,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4929004311561585 + "value": -0.49290043115615845 }, "XPosition": { "type": "float", @@ -12675,7 +12675,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12732,11 +12732,11 @@ }, "YPosition": { "type": "float", - "value": 18.73008346557617 + "value": 18.730083465576172 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12781,11 +12781,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", - "value": 14.88814449310303 + "value": 14.888144493103027 }, "YOrientation": { "type": "float", @@ -12797,7 +12797,7 @@ }, "ZPosition": { "type": "float", - "value": 2.384185791015625e-007 + "value": 0.0000002384185791015625 } }, { @@ -12846,7 +12846,7 @@ }, "XPosition": { "type": "float", - "value": 105.1085357666016 + "value": 105.10853576660156 }, "YOrientation": { "type": "float", @@ -12858,7 +12858,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12919,7 +12919,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12980,7 +12980,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13041,7 +13041,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13102,7 +13102,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13159,11 +13159,11 @@ }, "YPosition": { "type": "float", - "value": 54.39363861083984 + "value": 54.393638610839844 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13220,11 +13220,11 @@ }, "YPosition": { "type": "float", - "value": 54.12998199462891 + "value": 54.129981994628906 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13285,7 +13285,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13334,7 +13334,7 @@ }, "XPosition": { "type": "float", - "value": 23.10953903198242 + "value": 23.109539031982422 }, "YOrientation": { "type": "float", @@ -13346,7 +13346,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13395,7 +13395,7 @@ }, "XPosition": { "type": "float", - "value": 63.18622207641602 + "value": 63.186222076416016 }, "YOrientation": { "type": "float", @@ -13403,11 +13403,11 @@ }, "YPosition": { "type": "float", - "value": 105.5441436767578 + "value": 105.54414367675781 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13468,7 +13468,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13517,7 +13517,7 @@ }, "XPosition": { "type": "float", - "value": 54.72192764282227 + "value": 54.721927642822266 }, "YOrientation": { "type": "float", @@ -13529,7 +13529,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13586,11 +13586,11 @@ }, "YPosition": { "type": "float", - "value": 22.66714286804199 + "value": 22.667142868041992 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } } ] diff --git a/_module/git/towerofthemagile.git.json b/_module/git/towerofthemagile.git.json index 61f4c8b..fdd5579 100644 --- a/_module/git/towerofthemagile.git.json +++ b/_module/git/towerofthemagile.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795059204102 + "value": 1.5707950592041016 }, "CloseLockDC": { "type": "byte", @@ -504,7 +504,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -942,7 +942,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -1161,7 +1161,7 @@ }, "Bearing": { "type": "float", - "value": 1.570795178413391 + "value": 1.5707951784133911 }, "CloseLockDC": { "type": "byte", @@ -2014,7 +2014,7 @@ }, "Y": { "type": "float", - "value": 116.0500030517578 + "value": 116.05000305175781 }, "Z": { "type": "float", @@ -2050,7 +2050,7 @@ }, "Bearing": { "type": "float", - "value": 3.117046117782593 + "value": 3.1170461177825928 }, "BodyBag": { "type": "byte", @@ -2254,11 +2254,11 @@ }, "Y": { "type": "float", - "value": 105.405143737793 + "value": 105.40514373779297 }, "Z": { "type": "float", - "value": -1.341104507446289e-007 + "value": -0.0000001341104507446289 } }, { @@ -2277,7 +2277,7 @@ }, "Bearing": { "type": "float", - "value": 3.117046117782593 + "value": 3.1170461177825928 }, "BodyBag": { "type": "byte", @@ -2481,11 +2481,11 @@ }, "Y": { "type": "float", - "value": 104.8236465454102 + "value": 104.82364654541016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2704,15 +2704,15 @@ }, "X": { "type": "float", - "value": 84.82546234130859 + "value": 84.8254623413086 }, "Y": { "type": "float", - "value": 10.54767608642578 + "value": 10.547676086425781 }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -2935,11 +2935,11 @@ }, "Y": { "type": "float", - "value": 19.97846984863281 + "value": 19.978469848632812 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3162,11 +3162,11 @@ }, "Y": { "type": "float", - "value": 10.59258556365967 + "value": 10.592585563659668 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3389,11 +3389,11 @@ }, "Y": { "type": "float", - "value": 20.02338027954102 + "value": 20.023380279541016 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3612,15 +3612,15 @@ }, "X": { "type": "float", - "value": 64.91213989257813 + "value": 64.91213989257812 }, "Y": { "type": "float", - "value": 10.50276851654053 + "value": 10.502768516540527 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3839,15 +3839,15 @@ }, "X": { "type": "float", - "value": 65.09177398681641 + "value": 65.0917739868164 }, "Y": { "type": "float", - "value": 19.93356323242188 + "value": 19.933563232421875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4074,7 +4074,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4293,15 +4293,15 @@ }, "X": { "type": "float", - "value": 54.85262298583984 + "value": 54.852622985839844 }, "Y": { "type": "float", - "value": 19.75392913818359 + "value": 19.753929138183594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4520,15 +4520,15 @@ }, "X": { "type": "float", - "value": 45.15918350219727 + "value": 45.159183502197266 }, "Y": { "type": "float", - "value": 10.50276851654053 + "value": 10.502768516540527 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4751,11 +4751,11 @@ }, "Y": { "type": "float", - "value": 19.93356323242188 + "value": 19.933563232421875 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4978,11 +4978,11 @@ }, "Y": { "type": "float", - "value": 10.23331642150879 + "value": 10.233316421508789 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5201,15 +5201,15 @@ }, "X": { "type": "float", - "value": 35.00984954833984 + "value": 35.009849548339844 }, "Y": { "type": "float", - "value": 19.66411209106445 + "value": 19.664112091064453 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5228,7 +5228,7 @@ }, "Bearing": { "type": "float", - "value": 1.59533965587616 + "value": 1.5953396558761597 }, "BodyBag": { "type": "byte", @@ -5428,7 +5428,7 @@ }, "X": { "type": "float", - "value": 64.79677581787109 + "value": 64.7967758178711 }, "Y": { "type": "float", @@ -5436,7 +5436,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5655,7 +5655,7 @@ }, "X": { "type": "float", - "value": 64.67014312744141 + "value": 64.6701431274414 }, "Y": { "type": "float", @@ -5663,7 +5663,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5886,11 +5886,11 @@ }, "Y": { "type": "float", - "value": 56.54177856445313 + "value": 56.541778564453125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6182,7 +6182,7 @@ }, "Z": { "type": "float", - "value": -5.211829829931958e-006 + "value": -0.000005211829829931958 } }, { @@ -6474,7 +6474,7 @@ }, "Z": { "type": "float", - "value": -5.211829829931958e-006 + "value": -0.000005211829829931958 } }, { @@ -6828,7 +6828,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -6949,7 +6949,7 @@ }, "ZPosition": { "type": "float", - "value": 1.499994277954102 + "value": 1.4999942779541016 } }, { @@ -7070,7 +7070,7 @@ }, "ZPosition": { "type": "float", - "value": 1.49999475479126 + "value": 1.4999947547912598 } }, { @@ -7183,7 +7183,7 @@ }, "XPosition": { "type": "float", - "value": 74.74472808837891 + "value": 74.7447280883789 }, "YPosition": { "type": "float", @@ -7308,7 +7308,7 @@ }, "YPosition": { "type": "float", - "value": 59.78640747070313 + "value": 59.786407470703125 }, "ZPosition": { "type": "float", @@ -7365,7 +7365,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -7723,7 +7723,7 @@ }, "PointZ": { "type": "float", - "value": 0.02499994076788425 + "value": 0.024999940767884254 } }, { @@ -7734,7 +7734,7 @@ }, "PointY": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 }, "PointZ": { "type": "float", @@ -7749,7 +7749,7 @@ }, "PointY": { "type": "float", - "value": 25.67903327941895 + "value": 25.679033279418945 }, "PointZ": { "type": "float", @@ -7760,15 +7760,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 7.62939453125e-006 + "value": 0.00000762939453125 }, "PointY": { "type": "float", - "value": 25.67903518676758 + "value": 25.679035186767578 }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } } ] @@ -7873,7 +7873,7 @@ }, "XPosition": { "type": "float", - "value": 59.45052337646484 + "value": 59.450523376464844 }, "YOrientation": { "type": "float", @@ -7881,7 +7881,7 @@ }, "YPosition": { "type": "float", - "value": 2.0408034324646 + "value": 2.0408034324645996 }, "ZOrientation": { "type": "float", @@ -7959,11 +7959,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", - "value": 14.84165191650391 + "value": 14.841651916503906 }, "YOrientation": { "type": "float", @@ -7971,11 +7971,11 @@ }, "YPosition": { "type": "float", - "value": 62.05920028686523 + "value": 62.059200286865234 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8020,11 +8020,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454407140612602 + "value": 0.024544071406126022 }, "XPosition": { "type": "float", - "value": 4.57127857208252 + "value": 4.5712785720825195 }, "YOrientation": { "type": "float", @@ -8032,11 +8032,11 @@ }, "YPosition": { "type": "float", - "value": 27.14209938049316 + "value": 27.142099380493164 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8085,11 +8085,11 @@ }, "XPosition": { "type": "float", - "value": 28.50509643554688 + "value": 28.505096435546875 }, "YOrientation": { "type": "float", - "value": -0.8932232260704041 + "value": -0.893223226070404 }, "YPosition": { "type": "float", @@ -8097,7 +8097,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8146,7 +8146,7 @@ }, "XPosition": { "type": "float", - "value": 71.47061157226563 + "value": 71.47061157226562 }, "YOrientation": { "type": "float", @@ -8154,11 +8154,11 @@ }, "YPosition": { "type": "float", - "value": 4.462387084960938 + "value": 4.4623870849609375 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8219,7 +8219,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8268,7 +8268,7 @@ }, "XPosition": { "type": "float", - "value": 106.7713928222656 + "value": 106.77139282226562 }, "YOrientation": { "type": "float", @@ -8280,7 +8280,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8337,11 +8337,11 @@ }, "YPosition": { "type": "float", - "value": 104.1734237670898 + "value": 104.17342376708984 }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -8390,11 +8390,11 @@ }, "XPosition": { "type": "float", - "value": 18.27519035339356 + "value": 18.275190353393555 }, "YOrientation": { "type": "float", - "value": 0.9495281577110291 + "value": 0.949528157711029 }, "YPosition": { "type": "float", @@ -8402,7 +8402,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8451,7 +8451,7 @@ }, "XPosition": { "type": "float", - "value": 37.79207611083984 + "value": 37.792076110839844 }, "YOrientation": { "type": "float", @@ -8463,7 +8463,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8524,7 +8524,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8581,11 +8581,11 @@ }, "YPosition": { "type": "float", - "value": 94.48953247070313 + "value": 94.48953247070312 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8634,7 +8634,7 @@ }, "XPosition": { "type": "float", - "value": 105.3762817382813 + "value": 105.37628173828125 }, "YOrientation": { "type": "float", @@ -8642,11 +8642,11 @@ }, "YPosition": { "type": "float", - "value": 15.41547203063965 + "value": 15.415472030639648 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8695,7 +8695,7 @@ }, "XPosition": { "type": "float", - "value": 23.54654693603516 + "value": 23.546546936035156 }, "YOrientation": { "type": "float", @@ -8703,11 +8703,11 @@ }, "YPosition": { "type": "float", - "value": 14.55548667907715 + "value": 14.555486679077148 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8756,7 +8756,7 @@ }, "XPosition": { "type": "float", - "value": 14.45522785186768 + "value": 14.455227851867676 }, "YOrientation": { "type": "float", @@ -8764,7 +8764,7 @@ }, "YPosition": { "type": "float", - "value": 45.26938629150391 + "value": 45.269386291503906 }, "ZPosition": { "type": "float", @@ -8829,7 +8829,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8878,7 +8878,7 @@ }, "XPosition": { "type": "float", - "value": 63.51367568969727 + "value": 63.513675689697266 }, "YOrientation": { "type": "float", @@ -8890,7 +8890,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } } ] diff --git a/_module/git/webbedforest.git.json b/_module/git/webbedforest.git.json index add0f10..aaf9ad8 100644 --- a/_module/git/webbedforest.git.json +++ b/_module/git/webbedforest.git.json @@ -286,7 +286,7 @@ }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -505,15 +505,15 @@ }, "X": { "type": "float", - "value": 33.17752838134766 + "value": 33.177528381347656 }, "Y": { "type": "float", - "value": 71.70847320556641 + "value": 71.7084732055664 }, "Z": { "type": "float", - "value": 4.76837158203125e-007 + "value": 0.000000476837158203125 } }, { @@ -740,7 +740,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-006 + "value": 0.000002384185791015625 } }, { @@ -967,7 +967,7 @@ }, "Z": { "type": "float", - "value": 3.474236726760864 + "value": 3.4742367267608643 } }, { @@ -1190,11 +1190,11 @@ }, "Y": { "type": "float", - "value": 27.68290328979492 + "value": 27.682903289794922 }, "Z": { "type": "float", - "value": -3.576278686523438e-007 + "value": -0.00000035762786865234375 } } ] @@ -1252,7 +1252,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -1449,11 +1449,11 @@ }, "YPosition": { "type": "float", - "value": 31.12758636474609 + "value": 31.127586364746094 }, "ZPosition": { "type": "float", - "value": 1.035624504089356 + "value": 1.0356245040893555 } } ] @@ -1490,15 +1490,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointY": { "type": "float", - "value": 2.230563879013062 + "value": 2.2305638790130615 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -1513,14 +1513,14 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.08823776245117 + "value": 10.088237762451172 }, "PointY": { "type": "float", @@ -1528,22 +1528,22 @@ }, "PointZ": { "type": "float", - "value": 0.02881207503378391 + "value": 0.028812075033783913 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.08823776245117 + "value": 10.088237762451172 }, "PointY": { "type": "float", - "value": 2.180548429489136 + "value": 2.1805484294891357 }, "PointZ": { "type": "float", - "value": 0.02881207503378391 + "value": 0.028812075033783913 } } ] @@ -1657,7 +1657,7 @@ }, "YPosition": { "type": "float", - "value": 0.08207607269287109 + "value": 0.0820760726928711 }, "ZOrientation": { "type": "float", @@ -1719,7 +1719,7 @@ }, "XPosition": { "type": "float", - "value": 35.20935440063477 + "value": 35.209354400634766 }, "YOrientation": { "type": "float", @@ -1727,11 +1727,11 @@ }, "YPosition": { "type": "float", - "value": 1.095967769622803 + "value": 1.0959677696228027 }, "ZPosition": { "type": "float", - "value": -9.5367431640625e-007 + "value": -0.00000095367431640625 } }, { @@ -1792,7 +1792,7 @@ }, "ZPosition": { "type": "float", - "value": -7.858499884605408e-006 + "value": -0.000007858499884605408 } }, { @@ -1841,7 +1841,7 @@ }, "XPosition": { "type": "float", - "value": 33.73415374755859 + "value": 33.734153747558594 }, "YOrientation": { "type": "float", @@ -1853,7 +1853,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -1910,11 +1910,11 @@ }, "YPosition": { "type": "float", - "value": 70.18789672851563 + "value": 70.18789672851562 }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -1975,7 +1975,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -2024,7 +2024,7 @@ }, "XPosition": { "type": "float", - "value": 64.55605316162109 + "value": 64.5560531616211 }, "YOrientation": { "type": "float", @@ -2032,7 +2032,7 @@ }, "YPosition": { "type": "float", - "value": 16.51483345031738 + "value": 16.514833450317383 }, "ZPosition": { "type": "float", @@ -2093,11 +2093,11 @@ }, "YPosition": { "type": "float", - "value": 30.87540435791016 + "value": 30.875404357910156 }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -2146,7 +2146,7 @@ }, "XPosition": { "type": "float", - "value": 37.33901977539063 + "value": 37.339019775390625 }, "YOrientation": { "type": "float", @@ -2154,11 +2154,11 @@ }, "YPosition": { "type": "float", - "value": 25.55329895019531 + "value": 25.553298950195312 }, "ZPosition": { "type": "float", - "value": 0.02496910095214844 + "value": 0.024969100952148438 } } ] diff --git a/_module/git/westernblackfore.git.json b/_module/git/westernblackfore.git.json index 730682a..717e55a 100644 --- a/_module/git/westernblackfore.git.json +++ b/_module/git/westernblackfore.git.json @@ -260,7 +260,7 @@ }, "Y": { "type": "float", - "value": 27.79000091552734 + "value": 27.790000915527344 }, "Z": { "type": "float", @@ -390,11 +390,11 @@ }, "YPosition": { "type": "float", - "value": 19.62258720397949 + "value": 19.622587203979492 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -463,7 +463,7 @@ }, "XPosition": { "type": "float", - "value": 20.40773010253906 + "value": 20.407730102539062 }, "YOrientation": { "type": "float", @@ -471,11 +471,11 @@ }, "YPosition": { "type": "float", - "value": 15.39732074737549 + "value": 15.397320747375488 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -552,11 +552,11 @@ }, "YPosition": { "type": "float", - "value": 19.74482154846191 + "value": 19.744821548461914 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/westernbottom001.git.json b/_module/git/westernbottom001.git.json index 0e841c7..86af228 100644 --- a/_module/git/westernbottom001.git.json +++ b/_module/git/westernbottom001.git.json @@ -256,11 +256,11 @@ }, "X": { "type": "float", - "value": 15.02000045776367 + "value": 15.020000457763672 }, "Y": { "type": "float", - "value": 2.329999923706055 + "value": 2.3299999237060547 }, "Z": { "type": "float", @@ -483,7 +483,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -702,7 +702,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -921,7 +921,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1140,7 +1140,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } }, { @@ -1359,7 +1359,7 @@ }, "Z": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 } } ] @@ -1599,7 +1599,7 @@ }, "Z": { "type": "float", - "value": -7.450580596923828e-008 + "value": -7.450580596923828e-8 } }, { @@ -1818,7 +1818,7 @@ }, "X": { "type": "float", - "value": 50.93062591552734 + "value": 50.930625915527344 }, "Y": { "type": "float", @@ -1826,7 +1826,7 @@ }, "Z": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -2049,7 +2049,7 @@ }, "Y": { "type": "float", - "value": 28.81310653686523 + "value": 28.813106536865234 }, "Z": { "type": "float", @@ -2272,11 +2272,11 @@ }, "X": { "type": "float", - "value": 29.30078506469727 + "value": 29.300785064697266 }, "Y": { "type": "float", - "value": 28.81310653686523 + "value": 28.813106536865234 }, "Z": { "type": "float", @@ -2398,7 +2398,7 @@ }, "ZPosition": { "type": "float", - "value": 0.3300096988677979 + "value": 0.33000969886779785 } }, { @@ -2447,7 +2447,7 @@ }, "XPosition": { "type": "float", - "value": 51.52114105224609 + "value": 51.521141052246094 }, "YOrientation": { "type": "float", @@ -2459,7 +2459,7 @@ }, "ZPosition": { "type": "float", - "value": -7.987022399902344e-006 + "value": -0.000007987022399902344 } }, { @@ -2508,7 +2508,7 @@ }, "XPosition": { "type": "float", - "value": 17.70642280578613 + "value": 17.706422805786133 }, "YOrientation": { "type": "float", @@ -2516,11 +2516,11 @@ }, "YPosition": { "type": "float", - "value": 58.80574798583984 + "value": 58.805747985839844 }, "ZPosition": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } }, { @@ -2577,7 +2577,7 @@ }, "YPosition": { "type": "float", - "value": 45.33480834960938 + "value": 45.334808349609375 }, "ZPosition": { "type": "float", @@ -2626,11 +2626,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454168722033501 + "value": -0.024541687220335007 }, "XPosition": { "type": "float", - "value": 14.96115589141846 + "value": 14.961155891418457 }, "YOrientation": { "type": "float", @@ -2642,7 +2642,7 @@ }, "ZPosition": { "type": "float", - "value": 0.200001671910286 + "value": 0.20000167191028595 } }, { @@ -2756,7 +2756,7 @@ }, "YOrientation": { "type": "float", - "value": 0.9495281577110291 + "value": 0.949528157711029 }, "YPosition": { "type": "float", @@ -2813,7 +2813,7 @@ }, "XPosition": { "type": "float", - "value": 83.56052398681641 + "value": 83.5605239868164 }, "YOrientation": { "type": "float", @@ -2821,11 +2821,11 @@ }, "YPosition": { "type": "float", - "value": 56.80514526367188 + "value": 56.805145263671875 }, "ZPosition": { "type": "float", - "value": -7.018446922302246e-006 + "value": -0.000007018446922302246 } } ] diff --git a/_module/git/westernbottom002.git.json b/_module/git/westernbottom002.git.json index 5a6e0f8..57f4304 100644 --- a/_module/git/westernbottom002.git.json +++ b/_module/git/westernbottom002.git.json @@ -2421,7 +2421,7 @@ }, "YOrientation": { "type": "float", - "value": 0.4496119320392609 + "value": 0.44961193203926086 }, "YPosition": { "type": "float", @@ -2429,7 +2429,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -2647,7 +2647,7 @@ }, "Y": { "type": "float", - "value": 3.730000019073486 + "value": 3.7300000190734863 }, "Z": { "type": "float", @@ -2765,7 +2765,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4714010357856751 + "value": -0.47140103578567505 }, "XPosition": { "type": "float", @@ -2777,11 +2777,11 @@ }, "YPosition": { "type": "float", - "value": 24.66049003601074 + "value": 24.660490036010742 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2865,7 +2865,7 @@ }, "XPosition": { "type": "float", - "value": 12.05823993682861 + "value": 12.058239936828613 }, "YOrientation": { "type": "float", @@ -2873,11 +2873,11 @@ }, "YPosition": { "type": "float", - "value": 22.20888137817383 + "value": 22.208881378173828 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2946,11 +2946,11 @@ }, "XPosition": { "type": "float", - "value": 34.05825805664063 + "value": 34.058258056640625 }, "YOrientation": { "type": "float", - "value": -0.1224095225334168 + "value": -0.12240952253341675 }, "YPosition": { "type": "float", @@ -2958,7 +2958,7 @@ }, "ZPosition": { "type": "float", - "value": -5.125998995936243e-006 + "value": -0.000005125998995936243 } }, { @@ -3027,7 +3027,7 @@ }, "XPosition": { "type": "float", - "value": 23.42956352233887 + "value": 23.429563522338867 }, "YOrientation": { "type": "float", @@ -3035,11 +3035,11 @@ }, "YPosition": { "type": "float", - "value": 15.49312210083008 + "value": 15.493122100830078 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3116,11 +3116,11 @@ }, "YPosition": { "type": "float", - "value": 16.05118560791016 + "value": 16.051185607910156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/westernbottomlan.git.json b/_module/git/westernbottomlan.git.json index 1c07342..c01bf33 100644 --- a/_module/git/westernbottomlan.git.json +++ b/_module/git/westernbottomlan.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 22.29999923706055 + "value": 22.299999237060547 }, "Z": { "type": "float", @@ -285,7 +285,7 @@ }, "Bearing": { "type": "float", - "value": -1.570794224739075 + "value": -1.5707942247390747 }, "CloseLockDC": { "type": "byte", @@ -725,7 +725,7 @@ }, "Z": { "type": "float", - "value": -1.192092895507813e-007 + "value": -0.00000011920928955078125 } }, { @@ -944,7 +944,7 @@ }, "X": { "type": "float", - "value": 141.8468933105469 + "value": 141.84689331054688 }, "Y": { "type": "float", @@ -952,7 +952,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1171,7 +1171,7 @@ }, "X": { "type": "float", - "value": 129.3173217773438 + "value": 129.31732177734375 }, "Y": { "type": "float", @@ -1179,7 +1179,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1625,15 +1625,15 @@ }, "X": { "type": "float", - "value": 118.4111633300781 + "value": 118.41116333007812 }, "Y": { "type": "float", - "value": 87.32583618164063 + "value": 87.32583618164062 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -1852,7 +1852,7 @@ }, "X": { "type": "float", - "value": 117.5859527587891 + "value": 117.58595275878906 }, "Y": { "type": "float", @@ -1860,7 +1860,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -2087,7 +2087,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2306,15 +2306,15 @@ }, "X": { "type": "float", - "value": 125.3008728027344 + "value": 125.30087280273438 }, "Y": { "type": "float", - "value": 108.289680480957 + "value": 108.28968048095703 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2533,15 +2533,15 @@ }, "X": { "type": "float", - "value": 130.2253723144531 + "value": 130.22537231445312 }, "Y": { "type": "float", - "value": 113.5710296630859 + "value": 113.57102966308594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2760,15 +2760,15 @@ }, "X": { "type": "float", - "value": 140.3052825927734 + "value": 140.30528259277344 }, "Y": { "type": "float", - "value": 113.5572357177734 + "value": 113.55723571777344 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2991,11 +2991,11 @@ }, "Y": { "type": "float", - "value": 112.1194458007813 + "value": 112.11944580078125 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3214,7 +3214,7 @@ }, "X": { "type": "float", - "value": 104.0685958862305 + "value": 104.06859588623047 }, "Y": { "type": "float", @@ -3222,7 +3222,7 @@ }, "Z": { "type": "float", - "value": 0.01000004727393389 + "value": 0.010000047273933887 } }, { @@ -3441,7 +3441,7 @@ }, "X": { "type": "float", - "value": 111.732551574707 + "value": 111.73255157470703 }, "Y": { "type": "float", @@ -3449,7 +3449,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3676,7 +3676,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -3895,7 +3895,7 @@ }, "X": { "type": "float", - "value": 102.1257476806641 + "value": 102.12574768066406 }, "Y": { "type": "float", @@ -3903,7 +3903,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4122,15 +4122,15 @@ }, "X": { "type": "float", - "value": 102.4047775268555 + "value": 102.40477752685547 }, "Y": { "type": "float", - "value": 107.7751998901367 + "value": 107.77519989013672 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4349,15 +4349,15 @@ }, "X": { "type": "float", - "value": 102.4229583740234 + "value": 102.42295837402344 }, "Y": { "type": "float", - "value": 119.690544128418 + "value": 119.69054412841797 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4576,15 +4576,15 @@ }, "X": { "type": "float", - "value": 109.1726226806641 + "value": 109.17262268066406 }, "Y": { "type": "float", - "value": 130.2008361816406 + "value": 130.20083618164062 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -4811,7 +4811,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5034,11 +5034,11 @@ }, "Y": { "type": "float", - "value": 105.7650833129883 + "value": 105.76508331298828 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5261,11 +5261,11 @@ }, "Y": { "type": "float", - "value": 116.3467407226563 + "value": 116.34674072265625 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5488,11 +5488,11 @@ }, "Y": { "type": "float", - "value": 125.1175842285156 + "value": 125.11758422851562 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5719,7 +5719,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5938,15 +5938,15 @@ }, "X": { "type": "float", - "value": 77.76694488525391 + "value": 77.7669448852539 }, "Y": { "type": "float", - "value": 142.2776184082031 + "value": 142.27761840820312 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6165,15 +6165,15 @@ }, "X": { "type": "float", - "value": 52.86074829101563 + "value": 52.860748291015625 }, "Y": { "type": "float", - "value": 126.9094314575195 + "value": 126.90943145751953 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6396,11 +6396,11 @@ }, "Y": { "type": "float", - "value": 132.7637634277344 + "value": 132.76376342773438 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -6627,7 +6627,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6846,15 +6846,15 @@ }, "X": { "type": "float", - "value": 25.39990425109863 + "value": 25.399904251098633 }, "Y": { "type": "float", - "value": 136.7252807617188 + "value": 136.72528076171875 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7073,15 +7073,15 @@ }, "X": { "type": "float", - "value": 13.22381210327148 + "value": 13.223812103271484 }, "Y": { "type": "float", - "value": 132.2152252197266 + "value": 132.21522521972656 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -7304,11 +7304,11 @@ }, "Y": { "type": "float", - "value": 137.5706634521484 + "value": 137.57066345214844 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7527,15 +7527,15 @@ }, "X": { "type": "float", - "value": 13.93467998504639 + "value": 13.934679985046387 }, "Y": { "type": "float", - "value": 149.5149078369141 + "value": 149.51490783691406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7758,11 +7758,11 @@ }, "Y": { "type": "float", - "value": 148.0925140380859 + "value": 148.09251403808594 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7985,11 +7985,11 @@ }, "Y": { "type": "float", - "value": 126.2629776000977 + "value": 126.26297760009766 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8216,7 +8216,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8439,11 +8439,11 @@ }, "Y": { "type": "float", - "value": 15.804368019104 + "value": 15.804368019104004 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8670,7 +8670,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -8889,7 +8889,7 @@ }, "X": { "type": "float", - "value": 68.31912231445313 + "value": 68.31912231445312 }, "Y": { "type": "float", @@ -8897,7 +8897,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9120,11 +9120,11 @@ }, "Y": { "type": "float", - "value": 17.67858695983887 + "value": 17.678586959838867 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9343,7 +9343,7 @@ }, "X": { "type": "float", - "value": 76.84829711914063 + "value": 76.84829711914062 }, "Y": { "type": "float", @@ -9351,7 +9351,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -9578,7 +9578,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9805,7 +9805,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10032,7 +10032,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10259,7 +10259,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10482,11 +10482,11 @@ }, "Y": { "type": "float", - "value": 76.71628570556641 + "value": 76.7162857055664 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10709,11 +10709,11 @@ }, "Y": { "type": "float", - "value": 86.27029418945313 + "value": 86.27029418945312 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -10932,7 +10932,7 @@ }, "X": { "type": "float", - "value": 30.01805686950684 + "value": 30.018056869506836 }, "Y": { "type": "float", @@ -10940,7 +10940,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -11167,7 +11167,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -11386,11 +11386,11 @@ }, "X": { "type": "float", - "value": 27.11764717102051 + "value": 27.117647171020508 }, "Y": { "type": "float", - "value": 73.44192504882813 + "value": 73.44192504882812 }, "Z": { "type": "float", @@ -11617,11 +11617,11 @@ }, "Y": { "type": "float", - "value": 65.93740844726563 + "value": 65.93740844726562 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -11848,7 +11848,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -12075,7 +12075,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -12294,7 +12294,7 @@ }, "X": { "type": "float", - "value": 17.46636581420898 + "value": 17.466365814208984 }, "Y": { "type": "float", @@ -12521,15 +12521,15 @@ }, "X": { "type": "float", - "value": 7.501078605651856 + "value": 7.5010786056518555 }, "Y": { "type": "float", - "value": 65.71743774414063 + "value": 65.71743774414062 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -12748,7 +12748,7 @@ }, "X": { "type": "float", - "value": 1.684243679046631 + "value": 1.6842436790466309 }, "Y": { "type": "float", @@ -12756,7 +12756,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12979,11 +12979,11 @@ }, "Y": { "type": "float", - "value": 85.08157348632813 + "value": 85.08157348632812 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13210,7 +13210,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13429,7 +13429,7 @@ }, "X": { "type": "float", - "value": 16.01384544372559 + "value": 16.013845443725586 }, "Y": { "type": "float", @@ -13437,7 +13437,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -13656,7 +13656,7 @@ }, "X": { "type": "float", - "value": 15.22678089141846 + "value": 15.226780891418457 }, "Y": { "type": "float", @@ -13664,7 +13664,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -13883,7 +13883,7 @@ }, "X": { "type": "float", - "value": 37.44121932983398 + "value": 37.441219329833984 }, "Y": { "type": "float", @@ -13891,7 +13891,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -14114,11 +14114,11 @@ }, "Y": { "type": "float", - "value": 112.5054016113281 + "value": 112.50540161132812 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14337,15 +14337,15 @@ }, "X": { "type": "float", - "value": 55.79956436157227 + "value": 55.799564361572266 }, "Y": { "type": "float", - "value": 103.7021331787109 + "value": 103.70213317871094 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -14564,7 +14564,7 @@ }, "X": { "type": "float", - "value": 71.80520629882813 + "value": 71.80520629882812 }, "Y": { "type": "float", @@ -14572,7 +14572,7 @@ }, "Z": { "type": "float", - "value": 0.003511160612106323 + "value": 0.0035111606121063232 } }, { @@ -14799,7 +14799,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -15018,15 +15018,15 @@ }, "X": { "type": "float", - "value": 54.37805557250977 + "value": 54.378055572509766 }, "Y": { "type": "float", - "value": 94.99880981445313 + "value": 94.99880981445312 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15253,7 +15253,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15472,7 +15472,7 @@ }, "X": { "type": "float", - "value": 66.57485961914063 + "value": 66.57485961914062 }, "Y": { "type": "float", @@ -15480,7 +15480,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -15707,7 +15707,7 @@ }, "Z": { "type": "float", - "value": 0.003833502531051636 + "value": 0.0038335025310516357 } }, { @@ -15934,7 +15934,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16161,7 +16161,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16384,11 +16384,11 @@ }, "Y": { "type": "float", - "value": 52.89621734619141 + "value": 52.896217346191406 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16615,7 +16615,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16834,15 +16834,15 @@ }, "X": { "type": "float", - "value": 53.98462295532227 + "value": 53.984622955322266 }, "Y": { "type": "float", - "value": 13.80790424346924 + "value": 13.807904243469238 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -17069,7 +17069,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -17292,11 +17292,11 @@ }, "Y": { "type": "float", - "value": 22.98481369018555 + "value": 22.984813690185547 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -17519,11 +17519,11 @@ }, "Y": { "type": "float", - "value": 27.19880676269531 + "value": 27.198806762695312 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -17742,7 +17742,7 @@ }, "X": { "type": "float", - "value": 15.23902797698975 + "value": 15.239027976989746 }, "Y": { "type": "float", @@ -17750,7 +17750,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -17969,15 +17969,15 @@ }, "X": { "type": "float", - "value": 6.20404863357544 + "value": 6.2040486335754395 }, "Y": { "type": "float", - "value": 15.36752796173096 + "value": 15.367527961730957 }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -18204,7 +18204,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -18423,7 +18423,7 @@ }, "X": { "type": "float", - "value": 143.2167663574219 + "value": 143.21676635742188 }, "Y": { "type": "float", @@ -18431,7 +18431,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18650,7 +18650,7 @@ }, "X": { "type": "float", - "value": 113.6456756591797 + "value": 113.64567565917969 }, "Y": { "type": "float", @@ -18658,7 +18658,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -18877,7 +18877,7 @@ }, "X": { "type": "float", - "value": 115.4873962402344 + "value": 115.48739624023438 }, "Y": { "type": "float", @@ -18885,7 +18885,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -19104,7 +19104,7 @@ }, "X": { "type": "float", - "value": 123.1853179931641 + "value": 123.18531799316406 }, "Y": { "type": "float", @@ -19112,7 +19112,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] @@ -19170,7 +19170,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -19539,7 +19539,7 @@ }, "ZPosition": { "type": "float", - "value": 1.009999632835388 + "value": 1.0099996328353882 } }, { @@ -19592,7 +19592,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19666,7 +19666,7 @@ }, "XPosition": { "type": "float", - "value": 126.7572784423828 + "value": 126.75727844238281 }, "YPosition": { "type": "float", @@ -19727,7 +19727,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19801,7 +19801,7 @@ }, "XPosition": { "type": "float", - "value": 100.7324371337891 + "value": 100.73243713378906 }, "YPosition": { "type": "float", @@ -19862,7 +19862,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -19936,7 +19936,7 @@ }, "XPosition": { "type": "float", - "value": 53.65377807617188 + "value": 53.653778076171875 }, "YPosition": { "type": "float", @@ -19997,7 +19997,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -20071,11 +20071,11 @@ }, "XPosition": { "type": "float", - "value": 29.09100532531738 + "value": 29.091005325317383 }, "YPosition": { "type": "float", - "value": 88.30484008789063 + "value": 88.30484008789062 }, "ZPosition": { "type": "float", @@ -20132,7 +20132,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -20267,7 +20267,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -20345,11 +20345,11 @@ }, "YPosition": { "type": "float", - "value": 108.1889953613281 + "value": 108.18899536132812 }, "ZPosition": { "type": "float", - "value": 0.4999991655349731 + "value": 0.49999916553497314 } }, { @@ -20402,7 +20402,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -20480,7 +20480,7 @@ }, "YPosition": { "type": "float", - "value": 131.8745269775391 + "value": 131.87452697753906 }, "ZPosition": { "type": "float", @@ -20537,7 +20537,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -20611,11 +20611,11 @@ }, "XPosition": { "type": "float", - "value": 119.4469299316406 + "value": 119.44692993164062 }, "YPosition": { "type": "float", - "value": 115.7917556762695 + "value": 115.79175567626953 }, "ZPosition": { "type": "float", @@ -20672,7 +20672,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -20791,7 +20791,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 }, "PointY": { "type": "float", @@ -20821,7 +20821,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.00077819824219 + "value": 10.000778198242188 }, "PointY": { "type": "float", @@ -20829,22 +20829,22 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.00078582763672 + "value": 10.000785827636719 }, "PointY": { "type": "float", - "value": 2.423096895217896 + "value": 2.4230968952178955 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -20950,7 +20950,7 @@ }, "XPosition": { "type": "float", - "value": 69.98130035400391 + "value": 69.9813003540039 }, "YOrientation": { "type": "float", @@ -20958,7 +20958,7 @@ }, "YPosition": { "type": "float", - "value": 0.1379914283752441 + "value": 0.13799142837524414 }, "ZOrientation": { "type": "float", @@ -20994,7 +20994,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -2.765304565429688 + "value": -2.7653045654296875 }, "PointY": { "type": "float", @@ -21002,7 +21002,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500005997717381 + "value": 0.025000059977173805 } }, { @@ -21043,7 +21043,7 @@ }, "PointY": { "type": "float", - "value": 1.9073486328125e-006 + "value": 0.0000019073486328125 }, "PointZ": { "type": "float", @@ -21167,7 +21167,7 @@ }, "XPosition": { "type": "float", - "value": 149.5333557128906 + "value": 149.53335571289062 }, "YOrientation": { "type": "float", @@ -21219,7 +21219,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -21245,7 +21245,7 @@ }, "PointY": { "type": "float", - "value": 2.943710803985596 + "value": 2.9437108039855957 }, "PointZ": { "type": "float", @@ -21264,7 +21264,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } } ] @@ -21369,7 +21369,7 @@ }, "XPosition": { "type": "float", - "value": 129.9978179931641 + "value": 129.99781799316406 }, "YOrientation": { "type": "float", @@ -21377,7 +21377,7 @@ }, "YPosition": { "type": "float", - "value": 0.2037253379821777 + "value": 0.20372533798217773 }, "ZOrientation": { "type": "float", @@ -21413,11 +21413,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -1.52587890625e-005 + "value": -0.0000152587890625 }, "PointY": { "type": "float", - "value": -3.516891479492188 + "value": -3.5168914794921875 }, "PointZ": { "type": "float", @@ -21428,11 +21428,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.01335144042969 + "value": 10.013351440429688 }, "PointY": { "type": "float", - "value": -3.516891479492188 + "value": -3.5168914794921875 }, "PointZ": { "type": "float", @@ -21634,7 +21634,7 @@ }, "PointY": { "type": "float", - "value": -2.248344421386719 + "value": -2.2483444213867188 }, "PointZ": { "type": "float", @@ -21653,7 +21653,7 @@ }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -21892,11 +21892,11 @@ }, "YPosition": { "type": "float", - "value": 1.195342302322388 + "value": 1.1953423023223877 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -21977,7 +21977,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -22038,7 +22038,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -22083,7 +22083,7 @@ }, "XOrientation": { "type": "float", - "value": -0.1467366963624954 + "value": -0.14673669636249542 }, "XPosition": { "type": "float", @@ -22095,11 +22095,11 @@ }, "YPosition": { "type": "float", - "value": 138.9862670898438 + "value": 138.98626708984375 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22148,7 +22148,7 @@ }, "XPosition": { "type": "float", - "value": 78.33286285400391 + "value": 78.3328628540039 }, "YOrientation": { "type": "float", @@ -22160,7 +22160,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22205,11 +22205,11 @@ }, "XOrientation": { "type": "float", - "value": -0.0245474074035883 + "value": -0.024547407403588295 }, "XPosition": { "type": "float", - "value": 103.1408309936523 + "value": 103.14083099365234 }, "YOrientation": { "type": "float", @@ -22221,7 +22221,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22278,11 +22278,11 @@ }, "YPosition": { "type": "float", - "value": 58.35587310791016 + "value": 58.355873107910156 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22351,11 +22351,11 @@ }, "XPosition": { "type": "float", - "value": 41.85141754150391 + "value": 41.851417541503906 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -22363,7 +22363,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22412,7 +22412,7 @@ }, "XPosition": { "type": "float", - "value": 11.27606296539307 + "value": 11.276062965393066 }, "YOrientation": { "type": "float", @@ -22424,7 +22424,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -22473,7 +22473,7 @@ }, "XPosition": { "type": "float", - "value": 23.0482349395752 + "value": 23.048234939575195 }, "YOrientation": { "type": "float", @@ -22485,7 +22485,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22530,7 +22530,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0245474074035883 + "value": -0.024547407403588295 }, "XPosition": { "type": "float", @@ -22542,11 +22542,11 @@ }, "YPosition": { "type": "float", - "value": 102.5312347412109 + "value": 102.53123474121094 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22595,7 +22595,7 @@ }, "XPosition": { "type": "float", - "value": 56.61200332641602 + "value": 56.612003326416016 }, "YOrientation": { "type": "float", @@ -22607,7 +22607,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22656,7 +22656,7 @@ }, "XPosition": { "type": "float", - "value": 57.22885894775391 + "value": 57.228858947753906 }, "YOrientation": { "type": "float", @@ -22664,11 +22664,11 @@ }, "YPosition": { "type": "float", - "value": 37.89980316162109 + "value": 37.899803161621094 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -22717,7 +22717,7 @@ }, "XPosition": { "type": "float", - "value": 15.76522922515869 + "value": 15.765229225158691 }, "YOrientation": { "type": "float", @@ -22725,7 +22725,7 @@ }, "YPosition": { "type": "float", - "value": 18.71336364746094 + "value": 18.713363647460938 }, "ZPosition": { "type": "float", @@ -22790,7 +22790,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22855,7 +22855,7 @@ }, "XOrientation": { "type": "float", - "value": -0.0245474074035883 + "value": -0.024547407403588295 }, "XPosition": { "type": "float", @@ -22867,11 +22867,11 @@ }, "YPosition": { "type": "float", - "value": 124.4223098754883 + "value": 124.42230987548828 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -22928,11 +22928,11 @@ }, "YPosition": { "type": "float", - "value": 58.13946151733398 + "value": 58.139461517333984 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -23013,7 +23013,7 @@ }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -23082,7 +23082,7 @@ }, "XPosition": { "type": "float", - "value": 117.1758651733398 + "value": 117.17586517333984 }, "YOrientation": { "type": "float", @@ -23090,11 +23090,11 @@ }, "YPosition": { "type": "float", - "value": 3.043183088302612 + "value": 3.0431830883026123 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -23171,11 +23171,11 @@ }, "YPosition": { "type": "float", - "value": 128.3147583007813 + "value": 128.31475830078125 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -23224,7 +23224,7 @@ }, "XPosition": { "type": "float", - "value": 124.7031860351563 + "value": 124.70318603515625 }, "YOrientation": { "type": "float", @@ -23232,11 +23232,11 @@ }, "YPosition": { "type": "float", - "value": 25.22059631347656 + "value": 25.220596313476562 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -23297,7 +23297,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -23346,11 +23346,11 @@ }, "XPosition": { "type": "float", - "value": 148.1952972412109 + "value": 148.19529724121094 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -23358,7 +23358,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -23407,7 +23407,7 @@ }, "XPosition": { "type": "float", - "value": 138.2045288085938 + "value": 138.20452880859375 }, "YOrientation": { "type": "float", @@ -23419,7 +23419,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -23468,7 +23468,7 @@ }, "XPosition": { "type": "float", - "value": 134.5512390136719 + "value": 134.55123901367188 }, "YOrientation": { "type": "float", @@ -23533,15 +23533,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 28.78044128417969 + "value": 28.780441284179688 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -23590,11 +23590,11 @@ }, "XPosition": { "type": "float", - "value": 82.28750610351563 + "value": 82.28750610351562 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -23602,7 +23602,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -23651,11 +23651,11 @@ }, "XPosition": { "type": "float", - "value": 144.5778961181641 + "value": 144.57789611816406 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -23663,7 +23663,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -23710,7 +23710,7 @@ }, "XPosition": { "type": "float", - "value": 134.9039916992188 + "value": 134.90399169921875 }, "YOrientation": { "type": "float", @@ -23722,7 +23722,7 @@ }, "ZPosition": { "type": "float", - "value": 0.02500024996697903 + "value": 0.025000249966979027 } }, { @@ -23781,7 +23781,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -23826,11 +23826,11 @@ }, "XOrientation": { "type": "float", - "value": -3.250437430324382e-006 + "value": -0.000003250437430324382 }, "XPosition": { "type": "float", - "value": 135.1886901855469 + "value": 135.18869018554688 }, "YOrientation": { "type": "float", @@ -23842,7 +23842,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -23899,11 +23899,11 @@ }, "YPosition": { "type": "float", - "value": 142.4567565917969 + "value": 142.45675659179688 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -23964,7 +23964,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } } ] diff --git a/_module/git/westernevarifore.git.json b/_module/git/westernevarifore.git.json index b31ee6c..86a434b 100644 --- a/_module/git/westernevarifore.git.json +++ b/_module/git/westernevarifore.git.json @@ -66,7 +66,7 @@ }, "Bearing": { "type": "float", - "value": 1.570794463157654 + "value": 1.5707944631576538 }, "CloseLockDC": { "type": "byte", @@ -257,11 +257,11 @@ }, "X": { "type": "float", - "value": 3.930000305175781 + "value": 3.9300003051757812 }, "Y": { "type": "float", - "value": 20.82999992370606 + "value": 20.829999923706055 }, "Z": { "type": "float", @@ -501,11 +501,11 @@ }, "Y": { "type": "float", - "value": 28.43770027160645 + "value": 28.437700271606445 }, "Z": { "type": "float", - "value": -8.344650268554688e-006 + "value": -0.000008344650268554688 } }, { @@ -724,15 +724,15 @@ }, "X": { "type": "float", - "value": 36.14407348632813 + "value": 36.144073486328125 }, "Y": { "type": "float", - "value": 31.08252906799316 + "value": 31.082529067993164 }, "Z": { "type": "float", - "value": -1.311302185058594e-006 + "value": -0.0000013113021850585938 } }, { @@ -978,7 +978,7 @@ }, "Bearing": { "type": "float", - "value": 1.300815582275391 + "value": 1.3008155822753906 }, "BodyBag": { "type": "byte", @@ -1178,7 +1178,7 @@ }, "X": { "type": "float", - "value": 37.72443008422852 + "value": 37.724430084228516 }, "Y": { "type": "float", @@ -1409,11 +1409,11 @@ }, "Y": { "type": "float", - "value": 29.31931114196777 + "value": 29.319311141967773 }, "Z": { "type": "float", - "value": -8.344650268554688e-006 + "value": -0.000008344650268554688 } }, { @@ -1636,7 +1636,7 @@ }, "Y": { "type": "float", - "value": 30.97232818603516 + "value": 30.972328186035156 }, "Z": { "type": "float", @@ -1859,7 +1859,7 @@ }, "X": { "type": "float", - "value": 38.66525268554688 + "value": 38.665252685546875 }, "Y": { "type": "float", @@ -1867,7 +1867,7 @@ }, "Z": { "type": "float", - "value": 2.384185791015625e-006 + "value": 0.000002384185791015625 } }, { @@ -2094,7 +2094,7 @@ }, "Z": { "type": "float", - "value": 1.430511474609375e-006 + "value": 0.000001430511474609375 } }, { @@ -2321,7 +2321,7 @@ }, "Z": { "type": "float", - "value": 0.1986528038978577 + "value": 0.19865280389785767 } }, { @@ -2540,15 +2540,15 @@ }, "X": { "type": "float", - "value": 35.80481338500977 + "value": 35.804813385009766 }, "Y": { "type": "float", - "value": 36.77504730224609 + "value": 36.775047302246094 }, "Z": { "type": "float", - "value": 0.2843347787857056 + "value": 0.28433477878570557 } } ] @@ -2606,7 +2606,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -2967,7 +2967,7 @@ }, "XPosition": { "type": "float", - "value": 78.50222015380859 + "value": 78.5022201538086 }, "YPosition": { "type": "float", @@ -3092,7 +3092,7 @@ }, "YPosition": { "type": "float", - "value": 17.9046516418457 + "value": 17.904651641845703 }, "ZPosition": { "type": "float", @@ -3171,7 +3171,7 @@ }, "PointZ": { "type": "float", - "value": 0.02036085538566113 + "value": 0.020360855385661125 } }, { @@ -3186,7 +3186,7 @@ }, "PointZ": { "type": "float", - "value": 0.02038219384849072 + "value": 0.020382193848490715 } } ] @@ -3299,7 +3299,7 @@ }, "YPosition": { "type": "float", - "value": 129.9284973144531 + "value": 129.92849731445312 }, "ZOrientation": { "type": "float", @@ -3343,7 +3343,7 @@ }, "PointZ": { "type": "float", - "value": 0.02928581647574902 + "value": 0.029285816475749016 } }, { @@ -3358,7 +3358,7 @@ }, "PointZ": { "type": "float", - "value": 0.02568849734961987 + "value": 0.025688497349619865 } }, { @@ -3384,7 +3384,7 @@ }, "PointY": { "type": "float", - "value": -5.7220458984375e-005 + "value": -0.000057220458984375 }, "PointZ": { "type": "float", @@ -3493,7 +3493,7 @@ }, "XPosition": { "type": "float", - "value": 149.8872222900391 + "value": 149.88722229003906 }, "YOrientation": { "type": "float", @@ -3545,7 +3545,7 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } }, { @@ -3556,11 +3556,11 @@ }, "PointY": { "type": "float", - "value": -10.06582641601563 + "value": -10.065826416015625 }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -3571,11 +3571,11 @@ }, "PointY": { "type": "float", - "value": -10.06582641601563 + "value": -10.065826416015625 }, "PointZ": { "type": "float", - "value": 0.02719011344015598 + "value": 0.027190113440155983 } }, { @@ -3590,14 +3590,14 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 0.1006717681884766 + "value": 0.10067176818847656 }, "PointY": { "type": "float", @@ -3605,7 +3605,7 @@ }, "PointZ": { "type": "float", - "value": 0.02244796790182591 + "value": 0.022447967901825905 } } ] @@ -3718,7 +3718,7 @@ }, "YPosition": { "type": "float", - "value": 140.0151519775391 + "value": 140.01515197753906 }, "ZOrientation": { "type": "float", @@ -3828,11 +3828,11 @@ }, "YPosition": { "type": "float", - "value": 30.49478912353516 + "value": 30.494789123535156 }, "ZPosition": { "type": "float", - "value": 7.152557373046875e-007 + "value": 0.0000007152557373046875 } }, { @@ -3885,15 +3885,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 52.22232055664063 + "value": 52.222320556640625 }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -3942,11 +3942,11 @@ }, "XPosition": { "type": "float", - "value": 75.07077789306641 + "value": 75.0707778930664 }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -3954,7 +3954,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -4007,15 +4007,15 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", - "value": 38.76129531860352 + "value": 38.761295318603516 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4076,7 +4076,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4129,7 +4129,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -4137,7 +4137,7 @@ }, "ZPosition": { "type": "float", - "value": -5.960464477539063e-006 + "value": -0.0000059604644775390625 } }, { @@ -4210,7 +4210,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -4218,7 +4218,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -4267,11 +4267,11 @@ }, "XPosition": { "type": "float", - "value": 26.8272876739502 + "value": 26.827287673950195 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -4332,15 +4332,15 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 92.13437652587891 + "value": 92.1343765258789 }, "ZPosition": { "type": "float", - "value": 0.09832227230072022 + "value": 0.09832227230072021 } }, { @@ -4393,7 +4393,7 @@ }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", @@ -4401,7 +4401,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4450,19 +4450,19 @@ }, "XPosition": { "type": "float", - "value": 60.07388305664063 + "value": 60.073883056640625 }, "YOrientation": { "type": "float", - "value": 0.7071069478988648 + "value": 0.7071069478988647 }, "YPosition": { "type": "float", - "value": 117.3486022949219 + "value": 117.34860229492188 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -4519,11 +4519,11 @@ }, "YPosition": { "type": "float", - "value": 119.5799179077148 + "value": 119.57991790771484 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4592,7 +4592,7 @@ }, "XPosition": { "type": "float", - "value": 120.0516510009766 + "value": 120.05165100097656 }, "YOrientation": { "type": "float", @@ -4604,7 +4604,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4685,7 +4685,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4750,11 +4750,11 @@ }, "XOrientation": { "type": "float", - "value": 0.4929004311561585 + "value": 0.49290043115615845 }, "XPosition": { "type": "float", - "value": 91.67527008056641 + "value": 91.6752700805664 }, "YOrientation": { "type": "float", @@ -4766,7 +4766,7 @@ }, "ZPosition": { "type": "float", - "value": -6.914138793945313e-006 + "value": -0.0000069141387939453125 } }, { @@ -4811,11 +4811,11 @@ }, "XOrientation": { "type": "float", - "value": -4.680948677560082e-006 + "value": -0.000004680948677560082 }, "XPosition": { "type": "float", - "value": 41.50719833374023 + "value": 41.507198333740234 }, "YOrientation": { "type": "float", @@ -4827,7 +4827,7 @@ }, "ZPosition": { "type": "float", - "value": -8.344650268554688e-006 + "value": -0.000008344650268554688 } }, { @@ -4872,11 +4872,11 @@ }, "XOrientation": { "type": "float", - "value": 4.680948677560082e-006 + "value": 0.000004680948677560082 }, "XPosition": { "type": "float", - "value": 13.50445938110352 + "value": 13.504459381103516 }, "YOrientation": { "type": "float", @@ -4888,7 +4888,7 @@ }, "ZPosition": { "type": "float", - "value": -7.152557373046875e-006 + "value": -0.000007152557373046875 } }, { @@ -4933,11 +4933,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454120293259621 + "value": -0.024541202932596207 }, "XPosition": { "type": "float", - "value": 139.4862670898438 + "value": 139.48626708984375 }, "YOrientation": { "type": "float", @@ -4945,11 +4945,11 @@ }, "YPosition": { "type": "float", - "value": 11.01270484924316 + "value": 11.012704849243164 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5002,7 +5002,7 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -5059,7 +5059,7 @@ }, "XPosition": { "type": "float", - "value": 48.43624114990234 + "value": 48.436241149902344 }, "YOrientation": { "type": "float", @@ -5071,7 +5071,7 @@ }, "ZPosition": { "type": "float", - "value": 0.002180576324462891 + "value": 0.0021805763244628906 } }, { @@ -5120,7 +5120,7 @@ }, "XPosition": { "type": "float", - "value": 15.05929565429688 + "value": 15.059295654296875 }, "YOrientation": { "type": "float", @@ -5128,11 +5128,11 @@ }, "YPosition": { "type": "float", - "value": 29.49320602416992 + "value": 29.493206024169922 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5177,11 +5177,11 @@ }, "XOrientation": { "type": "float", - "value": -0.02454120293259621 + "value": -0.024541202932596207 }, "XPosition": { "type": "float", - "value": 126.0690994262695 + "value": 126.06909942626953 }, "YOrientation": { "type": "float", @@ -5189,11 +5189,11 @@ }, "YPosition": { "type": "float", - "value": 22.99209594726563 + "value": 22.992095947265625 }, "ZPosition": { "type": "float", - "value": -8.58306884765625e-006 + "value": -0.00000858306884765625 } }, { @@ -5242,7 +5242,7 @@ }, "XPosition": { "type": "float", - "value": 114.946662902832 + "value": 114.94666290283203 }, "YOrientation": { "type": "float", @@ -5254,7 +5254,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5303,11 +5303,11 @@ }, "XPosition": { "type": "float", - "value": 148.3941345214844 + "value": 148.39413452148438 }, "YOrientation": { "type": "float", - "value": 2.102055759678478e-006 + "value": 0.0000021020557596784784 }, "YPosition": { "type": "float", @@ -5315,7 +5315,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5368,15 +5368,15 @@ }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 35.97930526733398 + "value": 35.979305267333984 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5429,15 +5429,15 @@ }, "YOrientation": { "type": "float", - "value": 1.267590846509847e-006 + "value": 0.0000012675908465098473 }, "YPosition": { "type": "float", - "value": 134.9822387695313 + "value": 134.98223876953125 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -5486,7 +5486,7 @@ }, "XPosition": { "type": "float", - "value": 121.9918060302734 + "value": 121.99180603027344 }, "YOrientation": { "type": "float", @@ -5498,7 +5498,7 @@ }, "ZPosition": { "type": "float", - "value": 0.004628066904842854 + "value": 0.0046280669048428535 } } ] diff --git a/_module/git/westernmorrah001.git.json b/_module/git/westernmorrah001.git.json index e8464e4..54ced16 100644 --- a/_module/git/westernmorrah001.git.json +++ b/_module/git/westernmorrah001.git.json @@ -1391,7 +1391,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2723,7 +2723,7 @@ }, "XOrientation": { "type": "float", - "value": -0.4275574386119843 + "value": -0.42755743861198425 }, "XPosition": { "type": "float", @@ -2735,11 +2735,11 @@ }, "YPosition": { "type": "float", - "value": 20.82487106323242 + "value": 20.824871063232422 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3462,7 +3462,7 @@ }, "XOrientation": { "type": "float", - "value": -0.02454573847353458 + "value": -0.024545738473534584 }, "XPosition": { "type": "float", @@ -3478,7 +3478,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -6096,7 +6096,7 @@ }, "XPosition": { "type": "float", - "value": 19.24099922180176 + "value": 19.240999221801758 }, "YOrientation": { "type": "float", @@ -6104,11 +6104,11 @@ }, "YPosition": { "type": "float", - "value": 25.84786224365234 + "value": 25.847862243652344 }, "ZPosition": { "type": "float", - "value": -2.384185791015625e-007 + "value": -0.0000002384185791015625 } } ] @@ -6202,7 +6202,7 @@ }, "XOrientation": { "type": "float", - "value": 0.1950966268777847 + "value": 0.19509662687778473 }, "XPosition": { "type": "float", @@ -6218,7 +6218,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6283,11 +6283,11 @@ }, "XOrientation": { "type": "float", - "value": -0.2191085070371628 + "value": -0.21910850703716278 }, "XPosition": { "type": "float", - "value": 25.68457412719727 + "value": 25.684574127197266 }, "YOrientation": { "type": "float", @@ -6295,11 +6295,11 @@ }, "YPosition": { "type": "float", - "value": 22.17244911193848 + "value": 22.172449111938477 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6368,7 +6368,7 @@ }, "XPosition": { "type": "float", - "value": 17.98141288757324 + "value": 17.981412887573242 }, "YOrientation": { "type": "float", @@ -6376,11 +6376,11 @@ }, "YPosition": { "type": "float", - "value": 22.30118560791016 + "value": 22.301185607910156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/westernmorrahill.git.json b/_module/git/westernmorrahill.git.json index 8e4dd6c..e839659 100644 --- a/_module/git/westernmorrahill.git.json +++ b/_module/git/westernmorrahill.git.json @@ -262,7 +262,7 @@ }, "Y": { "type": "float", - "value": 102.8300018310547 + "value": 102.83000183105469 }, "Z": { "type": "float", @@ -502,7 +502,7 @@ }, "Y": { "type": "float", - "value": 1.662409067153931 + "value": 1.6624090671539307 }, "Z": { "type": "float", @@ -729,7 +729,7 @@ }, "Y": { "type": "float", - "value": 0.300682544708252 + "value": 0.30068254470825195 }, "Z": { "type": "float", @@ -1183,11 +1183,11 @@ }, "Y": { "type": "float", - "value": 115.0984802246094 + "value": 115.09848022460938 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1406,15 +1406,15 @@ }, "X": { "type": "float", - "value": 127.4029083251953 + "value": 127.40290832519531 }, "Y": { "type": "float", - "value": 122.8294830322266 + "value": 122.82948303222656 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1633,15 +1633,15 @@ }, "X": { "type": "float", - "value": 123.3887329101563 + "value": 123.38873291015625 }, "Y": { "type": "float", - "value": 127.289665222168 + "value": 127.28966522216797 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1860,15 +1860,15 @@ }, "X": { "type": "float", - "value": 98.56032562255859 + "value": 98.5603256225586 }, "Y": { "type": "float", - "value": 137.5481109619141 + "value": 137.54811096191406 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2095,7 +2095,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2322,7 +2322,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2541,7 +2541,7 @@ }, "X": { "type": "float", - "value": 83.10959625244141 + "value": 83.1095962524414 }, "Y": { "type": "float", @@ -2549,7 +2549,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -2772,11 +2772,11 @@ }, "Y": { "type": "float", - "value": 113.0357055664063 + "value": 113.03570556640625 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3003,7 +3003,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3226,11 +3226,11 @@ }, "Y": { "type": "float", - "value": 124.2064361572266 + "value": 124.20643615722656 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3449,15 +3449,15 @@ }, "X": { "type": "float", - "value": 36.96762847900391 + "value": 36.967628479003906 }, "Y": { "type": "float", - "value": 118.2593841552734 + "value": 118.25938415527344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3676,7 +3676,7 @@ }, "X": { "type": "float", - "value": 17.25177383422852 + "value": 17.251773834228516 }, "Y": { "type": "float", @@ -3684,7 +3684,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3903,7 +3903,7 @@ }, "X": { "type": "float", - "value": 6.54731035232544 + "value": 6.5473103523254395 }, "Y": { "type": "float", @@ -3911,7 +3911,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4130,15 +4130,15 @@ }, "X": { "type": "float", - "value": 14.27831077575684 + "value": 14.278310775756836 }, "Y": { "type": "float", - "value": 106.6630096435547 + "value": 106.66300964355469 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4361,11 +4361,11 @@ }, "Y": { "type": "float", - "value": 92.70590972900391 + "value": 92.7059097290039 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4592,7 +4592,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4811,7 +4811,7 @@ }, "X": { "type": "float", - "value": 35.83590698242188 + "value": 35.835906982421875 }, "Y": { "type": "float", @@ -4819,7 +4819,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5046,7 +5046,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5265,7 +5265,7 @@ }, "X": { "type": "float", - "value": 17.69779205322266 + "value": 17.697792053222656 }, "Y": { "type": "float", @@ -5273,7 +5273,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5500,7 +5500,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5719,7 +5719,7 @@ }, "X": { "type": "float", - "value": 13.08892631530762 + "value": 13.088926315307617 }, "Y": { "type": "float", @@ -5727,7 +5727,7 @@ }, "Z": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -5950,11 +5950,11 @@ }, "Y": { "type": "float", - "value": 32.60745239257813 + "value": 32.607452392578125 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6177,11 +6177,11 @@ }, "Y": { "type": "float", - "value": 18.03686332702637 + "value": 18.036863327026367 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6408,7 +6408,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6635,7 +6635,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6862,7 +6862,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7081,7 +7081,7 @@ }, "X": { "type": "float", - "value": 107.2018203735352 + "value": 107.20182037353516 }, "Y": { "type": "float", @@ -7089,7 +7089,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7312,7 +7312,7 @@ }, "Y": { "type": "float", - "value": 32.18188095092773 + "value": 32.181880950927734 }, "Z": { "type": "float", @@ -7535,11 +7535,11 @@ }, "X": { "type": "float", - "value": 108.4716949462891 + "value": 108.47169494628906 }, "Y": { "type": "float", - "value": 39.67813873291016 + "value": 39.678138732910156 }, "Z": { "type": "float", @@ -7762,7 +7762,7 @@ }, "X": { "type": "float", - "value": 88.67105102539063 + "value": 88.67105102539062 }, "Y": { "type": "float", @@ -7989,11 +7989,11 @@ }, "X": { "type": "float", - "value": 79.76108551025391 + "value": 79.7610855102539 }, "Y": { "type": "float", - "value": 12.94757652282715 + "value": 12.947576522827148 }, "Z": { "type": "float", @@ -8216,11 +8216,11 @@ }, "X": { "type": "float", - "value": 110.8220291137695 + "value": 110.82202911376953 }, "Y": { "type": "float", - "value": 19.08571815490723 + "value": 19.085718154907227 }, "Z": { "type": "float", @@ -8443,7 +8443,7 @@ }, "X": { "type": "float", - "value": 124.9651794433594 + "value": 124.96517944335938 }, "Y": { "type": "float", @@ -9124,7 +9124,7 @@ }, "X": { "type": "float", - "value": 116.0541610717773 + "value": 116.05416107177734 }, "Y": { "type": "float", @@ -9351,15 +9351,15 @@ }, "X": { "type": "float", - "value": 122.2786026000977 + "value": 122.27860260009766 }, "Y": { "type": "float", - "value": 61.17832183837891 + "value": 61.178321838378906 }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -9578,7 +9578,7 @@ }, "X": { "type": "float", - "value": 129.7742309570313 + "value": 129.77423095703125 }, "Y": { "type": "float", @@ -9586,7 +9586,7 @@ }, "Z": { "type": "float", - "value": 5.003128051757813 + "value": 5.0031280517578125 } }, { @@ -10032,11 +10032,11 @@ }, "X": { "type": "float", - "value": 138.2777252197266 + "value": 138.27772521972656 }, "Y": { "type": "float", - "value": 119.8594818115234 + "value": 119.85948181152344 }, "Z": { "type": "float", @@ -10486,11 +10486,11 @@ }, "X": { "type": "float", - "value": 146.9057922363281 + "value": 146.90579223632812 }, "Y": { "type": "float", - "value": 80.96463012695313 + "value": 80.96463012695312 }, "Z": { "type": "float", @@ -10713,7 +10713,7 @@ }, "X": { "type": "float", - "value": 103.6651916503906 + "value": 103.66519165039062 }, "Y": { "type": "float", @@ -10944,7 +10944,7 @@ }, "Y": { "type": "float", - "value": 13.55170154571533 + "value": 13.551701545715332 }, "Z": { "type": "float", @@ -11167,11 +11167,11 @@ }, "X": { "type": "float", - "value": 100.6843109130859 + "value": 100.68431091308594 }, "Y": { "type": "float", - "value": 14.42580127716065 + "value": 14.425801277160645 }, "Z": { "type": "float", @@ -11398,7 +11398,7 @@ }, "Y": { "type": "float", - "value": 11.84860992431641 + "value": 11.848609924316406 }, "Z": { "type": "float", @@ -11625,7 +11625,7 @@ }, "Y": { "type": "float", - "value": 15.61775207519531 + "value": 15.617752075195312 }, "Z": { "type": "float", @@ -11848,11 +11848,11 @@ }, "X": { "type": "float", - "value": 102.6494216918945 + "value": 102.64942169189453 }, "Y": { "type": "float", - "value": 14.16808223724365 + "value": 14.168082237243652 }, "Z": { "type": "float", @@ -12302,7 +12302,7 @@ }, "X": { "type": "float", - "value": 59.73358535766602 + "value": 59.733585357666016 }, "Y": { "type": "float", @@ -12310,7 +12310,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12983,15 +12983,15 @@ }, "X": { "type": "float", - "value": 38.57095336914063 + "value": 38.570953369140625 }, "Y": { "type": "float", - "value": 14.42090606689453 + "value": 14.420906066894531 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13218,7 +13218,7 @@ }, "Z": { "type": "float", - "value": 0.01000006031244993 + "value": 0.010000060312449932 } } ] @@ -13340,7 +13340,7 @@ }, "YPosition": { "type": "float", - "value": 143.7856597900391 + "value": 143.78565979003906 }, "ZPosition": { "type": "float", @@ -13397,7 +13397,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", @@ -13762,7 +13762,7 @@ }, "YPosition": { "type": "float", - "value": 77.55100250244141 + "value": 77.5510025024414 }, "ZPosition": { "type": "float", @@ -13879,7 +13879,7 @@ }, "XPosition": { "type": "float", - "value": 83.82217407226563 + "value": 83.82217407226562 }, "YPosition": { "type": "float", @@ -14004,11 +14004,11 @@ }, "YPosition": { "type": "float", - "value": 106.8204193115234 + "value": 106.82041931152344 }, "ZPosition": { "type": "float", - "value": 0.1007735729217529 + "value": 0.10077357292175293 } }, { @@ -14121,7 +14121,7 @@ }, "XPosition": { "type": "float", - "value": 63.87643432617188 + "value": 63.876434326171875 }, "YPosition": { "type": "float", @@ -14363,7 +14363,7 @@ }, "XPosition": { "type": "float", - "value": 45.10457611083984 + "value": 45.104576110839844 }, "YPosition": { "type": "float", @@ -14371,7 +14371,7 @@ }, "ZPosition": { "type": "float", - "value": 0.1675951480865479 + "value": 0.16759514808654785 } }, { @@ -14424,7 +14424,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -14559,7 +14559,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -14637,7 +14637,7 @@ }, "YPosition": { "type": "float", - "value": 29.08390426635742 + "value": 29.083904266357422 }, "ZPosition": { "type": "float", @@ -14694,7 +14694,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.2000000029802322 + "value": 0.20000000298023224 }, "Positional": { "type": "byte", @@ -14768,7 +14768,7 @@ }, "XPosition": { "type": "float", - "value": 43.06039428710938 + "value": 43.060394287109375 }, "YPosition": { "type": "float", @@ -14889,7 +14889,7 @@ }, "XPosition": { "type": "float", - "value": 103.548225402832 + "value": 103.54822540283203 }, "YPosition": { "type": "float", @@ -14938,11 +14938,11 @@ }, "PointY": { "type": "float", - "value": -7.62939453125e-006 + "value": -0.00000762939453125 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -14957,7 +14957,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -14979,7 +14979,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.110855102539063 + "value": -3.1108551025390625 }, "PointY": { "type": "float", @@ -15144,7 +15144,7 @@ }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -15155,11 +15155,11 @@ }, "PointY": { "type": "float", - "value": -2.082992553710938 + "value": -2.0829925537109375 }, "PointZ": { "type": "float", - "value": 0.02150001563131809 + "value": 0.021500015631318092 } }, { @@ -15170,7 +15170,7 @@ }, "PointY": { "type": "float", - "value": -2.061691284179688 + "value": -2.0616912841796875 }, "PointZ": { "type": "float", @@ -15181,7 +15181,7 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03871154785156 + "value": 10.038711547851562 }, "PointY": { "type": "float", @@ -15294,7 +15294,7 @@ }, "XPosition": { "type": "float", - "value": 109.973503112793 + "value": 109.97350311279297 }, "YOrientation": { "type": "float", @@ -15302,7 +15302,7 @@ }, "YPosition": { "type": "float", - "value": 149.9016723632813 + "value": 149.90167236328125 }, "ZOrientation": { "type": "float", @@ -15408,7 +15408,7 @@ }, "YOrientation": { "type": "float", - "value": 0.04906884208321571 + "value": 0.049068842083215714 }, "YPosition": { "type": "float", @@ -15485,19 +15485,19 @@ }, "XPosition": { "type": "float", - "value": 59.09761810302734 + "value": 59.097618103027344 }, "YOrientation": { "type": "float", - "value": -0.0245408657938242 + "value": -0.024540865793824196 }, "YPosition": { "type": "float", - "value": 140.0377349853516 + "value": 140.03773498535156 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15566,7 +15566,7 @@ }, "XPosition": { "type": "float", - "value": 38.55594635009766 + "value": 38.555946350097656 }, "YOrientation": { "type": "float", @@ -15578,7 +15578,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15623,11 +15623,11 @@ }, "XOrientation": { "type": "float", - "value": -0.04906760528683662 + "value": -0.049067605286836624 }, "XPosition": { "type": "float", - "value": 139.5522766113281 + "value": 139.55227661132812 }, "YOrientation": { "type": "float", @@ -15684,11 +15684,11 @@ }, "XOrientation": { "type": "float", - "value": -0.04906760528683662 + "value": -0.049067605286836624 }, "XPosition": { "type": "float", - "value": 120.9194259643555 + "value": 120.91942596435547 }, "YOrientation": { "type": "float", @@ -15745,7 +15745,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906760528683662 + "value": -0.049067605286836624 }, "XPosition": { "type": "float", @@ -15810,7 +15810,7 @@ }, "XPosition": { "type": "float", - "value": 122.6745071411133 + "value": 122.67450714111328 }, "YOrientation": { "type": "float", @@ -15818,11 +15818,11 @@ }, "YPosition": { "type": "float", - "value": 73.16066741943359 + "value": 73.1606674194336 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -15867,7 +15867,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906760528683662 + "value": -0.049067605286836624 }, "XPosition": { "type": "float", @@ -15879,11 +15879,11 @@ }, "YPosition": { "type": "float", - "value": 109.9183502197266 + "value": 109.91835021972656 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15932,7 +15932,7 @@ }, "XPosition": { "type": "float", - "value": 30.39328765869141 + "value": 30.393287658691406 }, "YOrientation": { "type": "float", @@ -15940,11 +15940,11 @@ }, "YPosition": { "type": "float", - "value": 138.7556457519531 + "value": 138.75564575195312 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -15993,7 +15993,7 @@ }, "XPosition": { "type": "float", - "value": 19.30201721191406 + "value": 19.302017211914062 }, "YOrientation": { "type": "float", @@ -16005,7 +16005,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16066,7 +16066,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16111,11 +16111,11 @@ }, "XOrientation": { "type": "float", - "value": -0.04906760528683662 + "value": -0.049067605286836624 }, "XPosition": { "type": "float", - "value": 70.84946441650391 + "value": 70.8494644165039 }, "YOrientation": { "type": "float", @@ -16127,7 +16127,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16188,7 +16188,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16249,7 +16249,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16294,7 +16294,7 @@ }, "XOrientation": { "type": "float", - "value": -0.04906760528683662 + "value": -0.049067605286836624 }, "XPosition": { "type": "float", @@ -16310,7 +16310,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16375,7 +16375,7 @@ }, "XOrientation": { "type": "float", - "value": 0.04906760528683662 + "value": 0.049067605286836624 }, "XPosition": { "type": "float", @@ -16391,7 +16391,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16460,7 +16460,7 @@ }, "XPosition": { "type": "float", - "value": 138.9951477050781 + "value": 138.99514770507812 }, "YOrientation": { "type": "float", @@ -16468,11 +16468,11 @@ }, "YPosition": { "type": "float", - "value": 129.7149505615234 + "value": 129.71495056152344 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -16541,7 +16541,7 @@ }, "XPosition": { "type": "float", - "value": 78.22402191162109 + "value": 78.2240219116211 }, "YOrientation": { "type": "float", @@ -16549,11 +16549,11 @@ }, "YPosition": { "type": "float", - "value": 141.2804107666016 + "value": 141.28041076660156 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16618,11 +16618,11 @@ }, "XOrientation": { "type": "float", - "value": 0.04906760528683662 + "value": 0.049067605286836624 }, "XPosition": { "type": "float", - "value": 18.30309677124023 + "value": 18.303096771240234 }, "YOrientation": { "type": "float", @@ -16630,11 +16630,11 @@ }, "YPosition": { "type": "float", - "value": 39.75607299804688 + "value": 39.756072998046875 }, "ZPosition": { "type": "float", - "value": -5.006790161132813e-006 + "value": -0.0000050067901611328125 } }, { @@ -16683,7 +16683,7 @@ }, "XPosition": { "type": "float", - "value": 105.3105621337891 + "value": 105.31056213378906 }, "YOrientation": { "type": "float", @@ -16691,11 +16691,11 @@ }, "YPosition": { "type": "float", - "value": 135.2001342773438 + "value": 135.20013427734375 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16744,7 +16744,7 @@ }, "XPosition": { "type": "float", - "value": 100.3234405517578 + "value": 100.32344055175781 }, "YOrientation": { "type": "float", @@ -16756,7 +16756,7 @@ }, "ZPosition": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -16809,7 +16809,7 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -16817,7 +16817,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -16878,7 +16878,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -16951,7 +16951,7 @@ }, "YOrientation": { "type": "float", - "value": 1.625218715162191e-006 + "value": 0.000001625218715162191 }, "YPosition": { "type": "float", @@ -17032,7 +17032,7 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", @@ -17040,7 +17040,7 @@ }, "ZPosition": { "type": "float", - "value": 0.009999942965805531 + "value": 0.00999994296580553 } }, { @@ -17113,15 +17113,15 @@ }, "YOrientation": { "type": "float", - "value": 0.0245428029447794 + "value": 0.024542802944779396 }, "YPosition": { "type": "float", - "value": 12.42998886108398 + "value": 12.429988861083984 }, "ZPosition": { "type": "float", - "value": 0.009999938309192658 + "value": 0.009999938309192657 } }, { @@ -17168,7 +17168,7 @@ }, "XPosition": { "type": "float", - "value": 144.1808013916016 + "value": 144.18080139160156 }, "YOrientation": { "type": "float", @@ -17180,7 +17180,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17223,11 +17223,11 @@ }, "XOrientation": { "type": "float", - "value": -0.1224105581641197 + "value": -0.12241055816411972 }, "XPosition": { "type": "float", - "value": 112.6450881958008 + "value": 112.64508819580078 }, "YOrientation": { "type": "float", @@ -17239,7 +17239,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17286,7 +17286,7 @@ }, "XPosition": { "type": "float", - "value": 112.6450881958008 + "value": 112.64508819580078 }, "YOrientation": { "type": "float", @@ -17294,11 +17294,11 @@ }, "YPosition": { "type": "float", - "value": 144.2736663818359 + "value": 144.27366638183594 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17347,7 +17347,7 @@ }, "XPosition": { "type": "float", - "value": 114.9928588867188 + "value": 114.99285888671875 }, "YOrientation": { "type": "float", @@ -17355,11 +17355,11 @@ }, "YPosition": { "type": "float", - "value": 148.8601684570313 + "value": 148.86016845703125 }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -17408,7 +17408,7 @@ }, "XPosition": { "type": "float", - "value": 127.8892135620117 + "value": 127.88921356201172 }, "YOrientation": { "type": "float", @@ -17416,11 +17416,11 @@ }, "YPosition": { "type": "float", - "value": 129.2547912597656 + "value": 129.25479125976562 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -17469,7 +17469,7 @@ }, "XPosition": { "type": "float", - "value": 71.88747406005859 + "value": 71.8874740600586 }, "YOrientation": { "type": "float", @@ -17477,11 +17477,11 @@ }, "YPosition": { "type": "float", - "value": 79.81626129150391 + "value": 79.8162612915039 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -17530,7 +17530,7 @@ }, "XPosition": { "type": "float", - "value": 58.32485961914063 + "value": 58.324859619140625 }, "YOrientation": { "type": "float", @@ -17538,11 +17538,11 @@ }, "YPosition": { "type": "float", - "value": 107.0828170776367 + "value": 107.08281707763672 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] diff --git a/_module/git/woods.git.json b/_module/git/woods.git.json index 5250d6a..2f11e3c 100644 --- a/_module/git/woods.git.json +++ b/_module/git/woods.git.json @@ -513,7 +513,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -740,7 +740,7 @@ }, "Z": { "type": "float", - "value": 0.01000003144145012 + "value": 0.010000031441450119 } }, { @@ -967,7 +967,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -1190,11 +1190,11 @@ }, "Y": { "type": "float", - "value": 12.2578067779541 + "value": 12.257806777954102 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -1413,7 +1413,7 @@ }, "X": { "type": "float", - "value": 24.68585014343262 + "value": 24.685850143432617 }, "Y": { "type": "float", @@ -1421,7 +1421,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1640,15 +1640,15 @@ }, "X": { "type": "float", - "value": 23.46855163574219 + "value": 23.468551635742188 }, "Y": { "type": "float", - "value": 17.3014030456543 + "value": 17.301403045654297 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -1867,15 +1867,15 @@ }, "X": { "type": "float", - "value": 31.46797561645508 + "value": 31.467975616455078 }, "Y": { "type": "float", - "value": 23.90962409973145 + "value": 23.909624099731445 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -2098,11 +2098,11 @@ }, "Y": { "type": "float", - "value": 26.69203567504883 + "value": 26.692035675048828 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2321,7 +2321,7 @@ }, "X": { "type": "float", - "value": 27.81606292724609 + "value": 27.816062927246094 }, "Y": { "type": "float", @@ -2329,7 +2329,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2548,7 +2548,7 @@ }, "X": { "type": "float", - "value": 11.64331245422363 + "value": 11.643312454223633 }, "Y": { "type": "float", @@ -2556,7 +2556,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -2775,15 +2775,15 @@ }, "X": { "type": "float", - "value": 15.64238834381104 + "value": 15.642388343811035 }, "Y": { "type": "float", - "value": 32.77858734130859 + "value": 32.778587341308594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3002,15 +3002,15 @@ }, "X": { "type": "float", - "value": 22.42514610290527 + "value": 22.425146102905273 }, "Y": { "type": "float", - "value": 41.29967880249023 + "value": 41.299678802490234 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -3229,7 +3229,7 @@ }, "X": { "type": "float", - "value": 20.51223754882813 + "value": 20.512237548828125 }, "Y": { "type": "float", @@ -3237,7 +3237,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3460,11 +3460,11 @@ }, "Y": { "type": "float", - "value": 28.77883911132813 + "value": 28.778839111328125 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -3683,15 +3683,15 @@ }, "X": { "type": "float", - "value": 37.20669555664063 + "value": 37.206695556640625 }, "Y": { "type": "float", - "value": 33.47415924072266 + "value": 33.474159240722656 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -3918,7 +3918,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4141,11 +4141,11 @@ }, "Y": { "type": "float", - "value": 32.43075561523438 + "value": 32.430755615234375 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -4364,15 +4364,15 @@ }, "X": { "type": "float", - "value": 55.64015960693359 + "value": 55.640159606933594 }, "Y": { "type": "float", - "value": 31.73515319824219 + "value": 31.735153198242188 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4595,11 +4595,11 @@ }, "Y": { "type": "float", - "value": 27.5615348815918 + "value": 27.561534881591797 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -4818,7 +4818,7 @@ }, "X": { "type": "float", - "value": 65.90029907226563 + "value": 65.90029907226562 }, "Y": { "type": "float", @@ -4826,7 +4826,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5049,11 +5049,11 @@ }, "Y": { "type": "float", - "value": 35.73486709594727 + "value": 35.734867095947266 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -5276,11 +5276,11 @@ }, "Y": { "type": "float", - "value": 32.77858734130859 + "value": 32.778587341308594 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5503,11 +5503,11 @@ }, "Y": { "type": "float", - "value": 18.34480476379395 + "value": 18.344804763793945 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5730,11 +5730,11 @@ }, "Y": { "type": "float", - "value": 22.69210052490234 + "value": 22.692100524902344 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -5961,7 +5961,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6188,7 +6188,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -6407,7 +6407,7 @@ }, "X": { "type": "float", - "value": 82.34506988525391 + "value": 82.3450698852539 }, "Y": { "type": "float", @@ -6415,7 +6415,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -6638,11 +6638,11 @@ }, "Y": { "type": "float", - "value": 52.97472763061523 + "value": 52.974727630615234 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -6861,7 +6861,7 @@ }, "X": { "type": "float", - "value": 77.47585296630859 + "value": 77.4758529663086 }, "Y": { "type": "float", @@ -6869,7 +6869,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -7092,11 +7092,11 @@ }, "Y": { "type": "float", - "value": 68.80007934570313 + "value": 68.80007934570312 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -7315,7 +7315,7 @@ }, "X": { "type": "float", - "value": 89.82278442382813 + "value": 89.82278442382812 }, "Y": { "type": "float", @@ -7323,7 +7323,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7550,7 +7550,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -7777,7 +7777,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8004,7 +8004,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8227,11 +8227,11 @@ }, "Y": { "type": "float", - "value": 93.14585113525391 + "value": 93.1458511352539 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -8450,7 +8450,7 @@ }, "X": { "type": "float", - "value": 67.21572113037109 + "value": 67.2157211303711 }, "Y": { "type": "float", @@ -8458,7 +8458,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -8677,7 +8677,7 @@ }, "X": { "type": "float", - "value": 57.99866104125977 + "value": 57.998661041259766 }, "Y": { "type": "float", @@ -8685,7 +8685,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -8912,7 +8912,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9131,7 +9131,7 @@ }, "X": { "type": "float", - "value": 60.43358993530273 + "value": 60.433589935302734 }, "Y": { "type": "float", @@ -9139,7 +9139,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -9358,7 +9358,7 @@ }, "X": { "type": "float", - "value": 55.91180038452148 + "value": 55.911800384521484 }, "Y": { "type": "float", @@ -9366,7 +9366,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -9589,11 +9589,11 @@ }, "Y": { "type": "float", - "value": 82.88571929931641 + "value": 82.8857192993164 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -9816,11 +9816,11 @@ }, "Y": { "type": "float", - "value": 92.97194671630859 + "value": 92.9719467163086 }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -10039,7 +10039,7 @@ }, "X": { "type": "float", - "value": 43.39133453369141 + "value": 43.391334533691406 }, "Y": { "type": "float", @@ -10047,7 +10047,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10266,7 +10266,7 @@ }, "X": { "type": "float", - "value": 40.60892486572266 + "value": 40.608924865722656 }, "Y": { "type": "float", @@ -10274,7 +10274,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -10501,7 +10501,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10728,7 +10728,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -10947,15 +10947,15 @@ }, "X": { "type": "float", - "value": 23.86687850952148 + "value": 23.866878509521484 }, "Y": { "type": "float", - "value": 93.84145355224609 + "value": 93.8414535522461 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11174,7 +11174,7 @@ }, "X": { "type": "float", - "value": 21.08446884155273 + "value": 21.084468841552734 }, "Y": { "type": "float", @@ -11182,7 +11182,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11401,15 +11401,15 @@ }, "X": { "type": "float", - "value": 13.25894355773926 + "value": 13.258943557739258 }, "Y": { "type": "float", - "value": 77.32089996337891 + "value": 77.3208999633789 }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -11628,7 +11628,7 @@ }, "X": { "type": "float", - "value": 13.25894355773926 + "value": 13.258943557739258 }, "Y": { "type": "float", @@ -11636,7 +11636,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -11863,7 +11863,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -12082,7 +12082,7 @@ }, "X": { "type": "float", - "value": 15.69355201721191 + "value": 15.693552017211914 }, "Y": { "type": "float", @@ -12090,7 +12090,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12309,7 +12309,7 @@ }, "X": { "type": "float", - "value": 17.78026390075684 + "value": 17.780263900756836 }, "Y": { "type": "float", @@ -12317,7 +12317,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12536,7 +12536,7 @@ }, "X": { "type": "float", - "value": 26.9970874786377 + "value": 26.997087478637695 }, "Y": { "type": "float", @@ -12544,7 +12544,7 @@ }, "Z": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -12763,7 +12763,7 @@ }, "X": { "type": "float", - "value": 31.17070388793945 + "value": 31.170703887939453 }, "Y": { "type": "float", @@ -12771,7 +12771,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -12998,7 +12998,7 @@ }, "Z": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -13217,7 +13217,7 @@ }, "X": { "type": "float", - "value": 42.47423934936523 + "value": 42.474239349365234 }, "Y": { "type": "float", @@ -13225,7 +13225,7 @@ }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -13452,7 +13452,7 @@ }, "Z": { "type": "float", - "value": -4.76837158203125e-007 + "value": -0.000000476837158203125 } }, { @@ -13671,15 +13671,15 @@ }, "X": { "type": "float", - "value": 15.86745071411133 + "value": 15.867450714111328 }, "Y": { "type": "float", - "value": 18.36859321594238 + "value": 18.368593215942383 }, "Z": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } } ] @@ -13720,11 +13720,11 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointY": { "type": "float", - "value": -3.011375427246094 + "value": -3.0113754272460938 }, "PointZ": { "type": "float", @@ -13735,22 +13735,22 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03789520263672 + "value": 10.037895202636719 }, "PointY": { "type": "float", - "value": -3.011375427246094 + "value": -3.0113754272460938 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 10.03789520263672 + "value": 10.037895202636719 }, "PointY": { "type": "float", @@ -13937,15 +13937,15 @@ "__struct_id": 3, "PointX": { "type": "float", - "value": -3.814697265625e-006 + "value": -0.000003814697265625 }, "PointY": { "type": "float", - "value": 3.095019340515137 + "value": 3.0950193405151367 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { @@ -13971,18 +13971,18 @@ }, "PointY": { "type": "float", - "value": 0.08364963531494141 + "value": 0.0836496353149414 }, "PointZ": { "type": "float", - "value": 0.02500049956142902 + "value": 0.025000499561429024 } }, { "__struct_id": 3, "PointX": { "type": "float", - "value": 9.117752075195313 + "value": 9.117752075195312 }, "PointY": { "type": "float", @@ -14104,7 +14104,7 @@ }, "YPosition": { "type": "float", - "value": 0.2079834938049316 + "value": 0.20798349380493164 }, "ZOrientation": { "type": "float", @@ -14180,11 +14180,11 @@ }, "XOrientation": { "type": "float", - "value": 0.02454168722033501 + "value": 0.024541687220335007 }, "XPosition": { "type": "float", - "value": 24.92385101318359 + "value": 24.923851013183594 }, "YOrientation": { "type": "float", @@ -14196,7 +14196,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14245,7 +14245,7 @@ }, "XPosition": { "type": "float", - "value": 50.71709823608398 + "value": 50.717098236083984 }, "YOrientation": { "type": "float", @@ -14253,11 +14253,11 @@ }, "YPosition": { "type": "float", - "value": 1.379079341888428 + "value": 1.3790793418884277 }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } }, { @@ -14338,7 +14338,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000018604099751 + "value": 0.010000186040997505 } }, { @@ -14395,7 +14395,7 @@ }, "YPosition": { "type": "float", - "value": 3.136978387832642 + "value": 3.1369783878326416 }, "ZPosition": { "type": "float", @@ -14448,7 +14448,7 @@ }, "XPosition": { "type": "float", - "value": 24.99865531921387 + "value": 24.998655319213867 }, "YOrientation": { "type": "float", @@ -14456,11 +14456,11 @@ }, "YPosition": { "type": "float", - "value": 75.49631500244141 + "value": 75.4963150024414 }, "ZPosition": { "type": "float", - "value": 0.01000060234218836 + "value": 0.010000602342188358 } }, { @@ -14521,7 +14521,7 @@ }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14574,7 +14574,7 @@ }, "YOrientation": { "type": "float", - "value": -0.471396416425705 + "value": -0.47139641642570496 }, "YPosition": { "type": "float", @@ -14582,7 +14582,7 @@ }, "ZPosition": { "type": "float", - "value": 0.01000607013702393 + "value": 0.010006070137023926 } }, { @@ -14627,7 +14627,7 @@ }, "XOrientation": { "type": "float", - "value": -0.7409509420394898 + "value": -0.7409509420394897 }, "XPosition": { "type": "float", @@ -14639,11 +14639,11 @@ }, "YPosition": { "type": "float", - "value": 23.03990745544434 + "value": 23.039907455444336 }, "ZPosition": { "type": "float", - "value": -5.7220458984375e-006 + "value": -0.0000057220458984375 } }, { @@ -14704,7 +14704,7 @@ }, "ZPosition": { "type": "float", - "value": -5.222045729169622e-006 + "value": -0.000005222045729169622 } } ] diff --git a/_module/ifo/module.ifo.json b/_module/ifo/module.ifo.json index 6f0a707..948730a 100644 --- a/_module/ifo/module.ifo.json +++ b/_module/ifo/module.ifo.json @@ -1615,7 +1615,7 @@ }, "Mod_OnPlrGuiEvt": { "type": "resref", - "value": "" + "value": "prc_onplayergui" }, "Mod_OnPlrLvlUp": { "type": "resref", diff --git a/_module/itp/creaturepalcus.itp.json b/_module/itp/creaturepalcus.itp.json index 9c22e4a..3a694f4 100644 --- a/_module/itp/creaturepalcus.itp.json +++ b/_module/itp/creaturepalcus.itp.json @@ -32261,7 +32261,7 @@ "__struct_id": 0, "CR": { "type": "float", - "value": 17.0 + "value": 16.0 }, "FACTION": { "type": "cexostring", @@ -45848,7 +45848,7 @@ "__struct_id": 0, "CR": { "type": "float", - "value": 0.3333333432674408 + "value": 84.0 }, "FACTION": { "type": "cexostring", diff --git a/_module/ncs/0c_assoc_actions.ncs b/_module/ncs/0c_assoc_actions.ncs new file mode 100644 index 0000000..81b509d Binary files /dev/null and b/_module/ncs/0c_assoc_actions.ncs differ diff --git a/_module/ncs/0c_cast_polymorp.ncs b/_module/ncs/0c_cast_polymorp.ncs new file mode 100644 index 0000000..3e63738 Binary files /dev/null and b/_module/ncs/0c_cast_polymorp.ncs differ diff --git a/_module/ncs/0c_fire_henchmen.ncs b/_module/ncs/0c_fire_henchmen.ncs new file mode 100644 index 0000000..5ede92b Binary files /dev/null and b/_module/ncs/0c_fire_henchmen.ncs differ diff --git a/_module/ncs/0c_get_convo.ncs b/_module/ncs/0c_get_convo.ncs new file mode 100644 index 0000000..d1c3d77 Binary files /dev/null and b/_module/ncs/0c_get_convo.ncs differ diff --git a/_module/ncs/0c_get_henchman.ncs b/_module/ncs/0c_get_henchman.ncs new file mode 100644 index 0000000..0b8d5e9 Binary files /dev/null and b/_module/ncs/0c_get_henchman.ncs differ diff --git a/_module/ncs/0c_h_cast_spell.ncs b/_module/ncs/0c_h_cast_spell.ncs new file mode 100644 index 0000000..4a5f698 Binary files /dev/null and b/_module/ncs/0c_h_cast_spell.ncs differ diff --git a/_module/ncs/0c_henchmenspell.ncs b/_module/ncs/0c_henchmenspell.ncs new file mode 100644 index 0000000..d15b5a5 Binary files /dev/null and b/_module/ncs/0c_henchmenspell.ncs differ diff --git a/_module/ncs/0c_if_a_magic_m.ncs b/_module/ncs/0c_if_a_magic_m.ncs new file mode 100644 index 0000000..4867b25 Binary files /dev/null and b/_module/ncs/0c_if_a_magic_m.ncs differ diff --git a/_module/ncs/0c_if_ass_convo.ncs b/_module/ncs/0c_if_ass_convo.ncs new file mode 100644 index 0000000..2c3d67d Binary files /dev/null and b/_module/ncs/0c_if_ass_convo.ncs differ diff --git a/_module/ncs/0c_if_assoc_mode.ncs b/_module/ncs/0c_if_assoc_mode.ncs new file mode 100644 index 0000000..07de2d4 Binary files /dev/null and b/_module/ncs/0c_if_assoc_mode.ncs differ diff --git a/_module/ncs/0c_if_cntrspell.ncs b/_module/ncs/0c_if_cntrspell.ncs new file mode 100644 index 0000000..d6afe1e Binary files /dev/null and b/_module/ncs/0c_if_cntrspell.ncs differ diff --git a/_module/ncs/0c_if_com_script.ncs b/_module/ncs/0c_if_com_script.ncs new file mode 100644 index 0000000..ce151a0 Binary files /dev/null and b/_module/ncs/0c_if_com_script.ncs differ diff --git a/_module/ncs/0c_if_convo.ncs b/_module/ncs/0c_if_convo.ncs new file mode 100644 index 0000000..ef685bc Binary files /dev/null and b/_module/ncs/0c_if_convo.ncs differ diff --git a/_module/ncs/0c_if_has_assoc.ncs b/_module/ncs/0c_if_has_assoc.ncs new file mode 100644 index 0000000..cfe9eae Binary files /dev/null and b/_module/ncs/0c_if_has_assoc.ncs differ diff --git a/_module/ncs/0c_if_has_class.ncs b/_module/ncs/0c_if_has_class.ncs new file mode 100644 index 0000000..ba91574 Binary files /dev/null and b/_module/ncs/0c_if_has_class.ncs differ diff --git a/_module/ncs/0c_if_has_feat.ncs b/_module/ncs/0c_if_has_feat.ncs new file mode 100644 index 0000000..36c7493 Binary files /dev/null and b/_module/ncs/0c_if_has_feat.ncs differ diff --git a/_module/ncs/0c_if_has_spell.ncs b/_module/ncs/0c_if_has_spell.ncs new file mode 100644 index 0000000..7fc3923 Binary files /dev/null and b/_module/ncs/0c_if_has_spell.ncs differ diff --git a/_module/ncs/0c_if_hen_leave.ncs b/_module/ncs/0c_if_hen_leave.ncs new file mode 100644 index 0000000..8f43309 Binary files /dev/null and b/_module/ncs/0c_if_hen_leave.ncs differ diff --git a/_module/ncs/0c_if_hen_target.ncs b/_module/ncs/0c_if_hen_target.ncs new file mode 100644 index 0000000..27217da Binary files /dev/null and b/_module/ncs/0c_if_hen_target.ncs differ diff --git a/_module/ncs/0c_if_identify.ncs b/_module/ncs/0c_if_identify.ncs new file mode 100644 index 0000000..2e981b2 Binary files /dev/null and b/_module/ncs/0c_if_identify.ncs differ diff --git a/_module/ncs/0c_if_not_master.ncs b/_module/ncs/0c_if_not_master.ncs new file mode 100644 index 0000000..8a27ada Binary files /dev/null and b/_module/ncs/0c_if_not_master.ncs differ diff --git a/_module/ncs/0c_if_open_inven.ncs b/_module/ncs/0c_if_open_inven.ncs new file mode 100644 index 0000000..bea33e4 Binary files /dev/null and b/_module/ncs/0c_if_open_inven.ncs differ diff --git a/_module/ncs/0c_if_pickuploot.ncs b/_module/ncs/0c_if_pickuploot.ncs new file mode 100644 index 0000000..ff65ddd Binary files /dev/null and b/_module/ncs/0c_if_pickuploot.ncs differ diff --git a/_module/ncs/0c_if_polymorph.ncs b/_module/ncs/0c_if_polymorph.ncs new file mode 100644 index 0000000..b5d66cb Binary files /dev/null and b/_module/ncs/0c_if_polymorph.ncs differ diff --git a/_module/ncs/0c_if_scout.ncs b/_module/ncs/0c_if_scout.ncs new file mode 100644 index 0000000..3ef2e7d Binary files /dev/null and b/_module/ncs/0c_if_scout.ncs differ diff --git a/_module/ncs/0c_if_skillrank.ncs b/_module/ncs/0c_if_skillrank.ncs new file mode 100644 index 0000000..0116caa Binary files /dev/null and b/_module/ncs/0c_if_skillrank.ncs differ diff --git a/_module/ncs/0c_if_taunt.ncs b/_module/ncs/0c_if_taunt.ncs new file mode 100644 index 0000000..7a8ae4c Binary files /dev/null and b/_module/ncs/0c_if_taunt.ncs differ diff --git a/_module/ncs/0c_listhenchman.ncs b/_module/ncs/0c_listhenchman.ncs new file mode 100644 index 0000000..6af6af8 Binary files /dev/null and b/_module/ncs/0c_listhenchman.ncs differ diff --git a/_module/ncs/0c_no_com_script.ncs b/_module/ncs/0c_no_com_script.ncs new file mode 100644 index 0000000..217f3a3 Binary files /dev/null and b/_module/ncs/0c_no_com_script.ncs differ diff --git a/_module/ncs/0c_remove_effect.ncs b/_module/ncs/0c_remove_effect.ncs new file mode 100644 index 0000000..f525d1a Binary files /dev/null and b/_module/ncs/0c_remove_effect.ncs differ diff --git a/_module/ncs/0c_summon_assoc.ncs b/_module/ncs/0c_summon_assoc.ncs new file mode 100644 index 0000000..dfb5c9d Binary files /dev/null and b/_module/ncs/0c_summon_assoc.ncs differ diff --git a/_module/ncs/0c_use_feat.ncs b/_module/ncs/0c_use_feat.ncs new file mode 100644 index 0000000..20da4ab Binary files /dev/null and b/_module/ncs/0c_use_feat.ncs differ diff --git a/_module/ncs/0e_animations.ncs b/_module/ncs/0e_animations.ncs new file mode 100644 index 0000000..82a6259 Binary files /dev/null and b/_module/ncs/0e_animations.ncs differ diff --git a/_module/ncs/0e_c2_1_hb.ncs b/_module/ncs/0e_c2_1_hb.ncs new file mode 100644 index 0000000..05768dd Binary files /dev/null and b/_module/ncs/0e_c2_1_hb.ncs differ diff --git a/_module/ncs/0e_c2_7_ondeath.ncs b/_module/ncs/0e_c2_7_ondeath.ncs new file mode 100644 index 0000000..2a53a4c Binary files /dev/null and b/_module/ncs/0e_c2_7_ondeath.ncs differ diff --git a/_module/ncs/0e_ch_1_hb.ncs b/_module/ncs/0e_ch_1_hb.ncs new file mode 100644 index 0000000..910e7ac Binary files /dev/null and b/_module/ncs/0e_ch_1_hb.ncs differ diff --git a/_module/ncs/0e_ch_7_ondeath.ncs b/_module/ncs/0e_ch_7_ondeath.ncs new file mode 100644 index 0000000..e05e802 Binary files /dev/null and b/_module/ncs/0e_ch_7_ondeath.ncs differ diff --git a/_module/ncs/0e_do_combat_rnd.ncs b/_module/ncs/0e_do_combat_rnd.ncs new file mode 100644 index 0000000..6ff5d0d Binary files /dev/null and b/_module/ncs/0e_do_combat_rnd.ncs differ diff --git a/_module/ncs/0e_gui_events.ncs b/_module/ncs/0e_gui_events.ncs new file mode 100644 index 0000000..7a07799 Binary files /dev/null and b/_module/ncs/0e_gui_events.ncs differ diff --git a/_module/ncs/0e_nui.ncs b/_module/ncs/0e_nui.ncs new file mode 100644 index 0000000..efebaf4 Binary files /dev/null and b/_module/ncs/0e_nui.ncs differ diff --git a/_module/ncs/0e_nui_dm.ncs b/_module/ncs/0e_nui_dm.ncs new file mode 100644 index 0000000..5b60693 Binary files /dev/null and b/_module/ncs/0e_nui_dm.ncs differ diff --git a/_module/ncs/0e_onclientload.ncs b/_module/ncs/0e_onclientload.ncs new file mode 100644 index 0000000..512c069 Binary files /dev/null and b/_module/ncs/0e_onclientload.ncs differ diff --git a/_module/ncs/0e_player_target.ncs b/_module/ncs/0e_player_target.ncs new file mode 100644 index 0000000..e1b94a5 Binary files /dev/null and b/_module/ncs/0e_player_target.ncs differ diff --git a/_module/ncs/0e_prc_ch_events.ncs b/_module/ncs/0e_prc_ch_events.ncs new file mode 100644 index 0000000..ba8cca5 Binary files /dev/null and b/_module/ncs/0e_prc_ch_events.ncs differ diff --git a/_module/ncs/0e_prc_id_events.ncs b/_module/ncs/0e_prc_id_events.ncs new file mode 100644 index 0000000..a34961f Binary files /dev/null and b/_module/ncs/0e_prc_id_events.ncs differ diff --git a/_module/ncs/ai_a_ambusher.ncs b/_module/ncs/ai_a_ambusher.ncs new file mode 100644 index 0000000..86641c4 Binary files /dev/null and b/_module/ncs/ai_a_ambusher.ncs differ diff --git a/_module/ncs/ai_a_atk_casters.ncs b/_module/ncs/ai_a_atk_casters.ncs new file mode 100644 index 0000000..a5d0b24 Binary files /dev/null and b/_module/ncs/ai_a_atk_casters.ncs differ diff --git a/_module/ncs/ai_a_atk_nearest.ncs b/_module/ncs/ai_a_atk_nearest.ncs new file mode 100644 index 0000000..a08b18d Binary files /dev/null and b/_module/ncs/ai_a_atk_nearest.ncs differ diff --git a/_module/ncs/ai_a_atk_warrior.ncs b/_module/ncs/ai_a_atk_warrior.ncs new file mode 100644 index 0000000..2fb6a18 Binary files /dev/null and b/_module/ncs/ai_a_atk_warrior.ncs differ diff --git a/_module/ncs/ai_a_barbarian.ncs b/_module/ncs/ai_a_barbarian.ncs new file mode 100644 index 0000000..96a25c4 Binary files /dev/null and b/_module/ncs/ai_a_barbarian.ncs differ diff --git a/_module/ncs/ai_a_bard.ncs b/_module/ncs/ai_a_bard.ncs new file mode 100644 index 0000000..5fbe936 Binary files /dev/null and b/_module/ncs/ai_a_bard.ncs differ diff --git a/_module/ncs/ai_a_cleric.ncs b/_module/ncs/ai_a_cleric.ncs new file mode 100644 index 0000000..1c74806 Binary files /dev/null and b/_module/ncs/ai_a_cleric.ncs differ diff --git a/_module/ncs/ai_a_cntrspell.ncs b/_module/ncs/ai_a_cntrspell.ncs new file mode 100644 index 0000000..8df9d7d Binary files /dev/null and b/_module/ncs/ai_a_cntrspell.ncs differ diff --git a/_module/ncs/ai_a_default.ncs b/_module/ncs/ai_a_default.ncs new file mode 100644 index 0000000..7ac3954 Binary files /dev/null and b/_module/ncs/ai_a_default.ncs differ diff --git a/_module/ncs/ai_a_defensive.ncs b/_module/ncs/ai_a_defensive.ncs new file mode 100644 index 0000000..d20bcda Binary files /dev/null and b/_module/ncs/ai_a_defensive.ncs differ diff --git a/_module/ncs/ai_a_druid.ncs b/_module/ncs/ai_a_druid.ncs new file mode 100644 index 0000000..a83e8ab Binary files /dev/null and b/_module/ncs/ai_a_druid.ncs differ diff --git a/_module/ncs/ai_a_fighter.ncs b/_module/ncs/ai_a_fighter.ncs new file mode 100644 index 0000000..7954973 Binary files /dev/null and b/_module/ncs/ai_a_fighter.ncs differ diff --git a/_module/ncs/ai_a_flanker.ncs b/_module/ncs/ai_a_flanker.ncs new file mode 100644 index 0000000..fd3effc Binary files /dev/null and b/_module/ncs/ai_a_flanker.ncs differ diff --git a/_module/ncs/ai_a_invisible.ncs b/_module/ncs/ai_a_invisible.ncs new file mode 100644 index 0000000..91e1616 Binary files /dev/null and b/_module/ncs/ai_a_invisible.ncs differ diff --git a/_module/ncs/ai_a_monk.ncs b/_module/ncs/ai_a_monk.ncs new file mode 100644 index 0000000..d5b3351 Binary files /dev/null and b/_module/ncs/ai_a_monk.ncs differ diff --git a/_module/ncs/ai_a_no_cmb_mode.ncs b/_module/ncs/ai_a_no_cmb_mode.ncs new file mode 100644 index 0000000..576c1ca Binary files /dev/null and b/_module/ncs/ai_a_no_cmb_mode.ncs differ diff --git a/_module/ncs/ai_a_paladin.ncs b/_module/ncs/ai_a_paladin.ncs new file mode 100644 index 0000000..8d5417d Binary files /dev/null and b/_module/ncs/ai_a_paladin.ncs differ diff --git a/_module/ncs/ai_a_peaceful.ncs b/_module/ncs/ai_a_peaceful.ncs new file mode 100644 index 0000000..acf016b Binary files /dev/null and b/_module/ncs/ai_a_peaceful.ncs differ diff --git a/_module/ncs/ai_a_polymorphed.ncs b/_module/ncs/ai_a_polymorphed.ncs new file mode 100644 index 0000000..27b2eef Binary files /dev/null and b/_module/ncs/ai_a_polymorphed.ncs differ diff --git a/_module/ncs/ai_a_ranged.ncs b/_module/ncs/ai_a_ranged.ncs new file mode 100644 index 0000000..df772f5 Binary files /dev/null and b/_module/ncs/ai_a_ranged.ncs differ diff --git a/_module/ncs/ai_a_ranger.ncs b/_module/ncs/ai_a_ranger.ncs new file mode 100644 index 0000000..92a4663 Binary files /dev/null and b/_module/ncs/ai_a_ranger.ncs differ diff --git a/_module/ncs/ai_a_rogue.ncs b/_module/ncs/ai_a_rogue.ncs new file mode 100644 index 0000000..46a13a7 Binary files /dev/null and b/_module/ncs/ai_a_rogue.ncs differ diff --git a/_module/ncs/ai_a_sorcerer.ncs b/_module/ncs/ai_a_sorcerer.ncs new file mode 100644 index 0000000..276c287 Binary files /dev/null and b/_module/ncs/ai_a_sorcerer.ncs differ diff --git a/_module/ncs/ai_a_taunter.ncs b/_module/ncs/ai_a_taunter.ncs new file mode 100644 index 0000000..d188516 Binary files /dev/null and b/_module/ncs/ai_a_taunter.ncs differ diff --git a/_module/ncs/ai_a_wizard.ncs b/_module/ncs/ai_a_wizard.ncs new file mode 100644 index 0000000..b21f745 Binary files /dev/null and b/_module/ncs/ai_a_wizard.ncs differ diff --git a/_module/ncs/ai_ambusher.ncs b/_module/ncs/ai_ambusher.ncs new file mode 100644 index 0000000..e4a4d0c Binary files /dev/null and b/_module/ncs/ai_ambusher.ncs differ diff --git a/_module/ncs/ai_barbarian.ncs b/_module/ncs/ai_barbarian.ncs new file mode 100644 index 0000000..ec57d98 Binary files /dev/null and b/_module/ncs/ai_barbarian.ncs differ diff --git a/_module/ncs/ai_bard.ncs b/_module/ncs/ai_bard.ncs new file mode 100644 index 0000000..5564ba0 Binary files /dev/null and b/_module/ncs/ai_bard.ncs differ diff --git a/_module/ncs/ai_bloodmane.ncs b/_module/ncs/ai_bloodmane.ncs new file mode 100644 index 0000000..3cbdc68 Binary files /dev/null and b/_module/ncs/ai_bloodmane.ncs differ diff --git a/_module/ncs/ai_cleric.ncs b/_module/ncs/ai_cleric.ncs new file mode 100644 index 0000000..ce4b0ee Binary files /dev/null and b/_module/ncs/ai_cleric.ncs differ diff --git a/_module/ncs/ai_cntrspell.ncs b/_module/ncs/ai_cntrspell.ncs new file mode 100644 index 0000000..6bda2ec Binary files /dev/null and b/_module/ncs/ai_cntrspell.ncs differ diff --git a/_module/ncs/ai_coward.ncs b/_module/ncs/ai_coward.ncs new file mode 100644 index 0000000..11c124e Binary files /dev/null and b/_module/ncs/ai_coward.ncs differ diff --git a/_module/ncs/ai_default.ncs b/_module/ncs/ai_default.ncs new file mode 100644 index 0000000..0d3ee42 Binary files /dev/null and b/_module/ncs/ai_default.ncs differ diff --git a/_module/ncs/ai_defensive.ncs b/_module/ncs/ai_defensive.ncs new file mode 100644 index 0000000..814c727 Binary files /dev/null and b/_module/ncs/ai_defensive.ncs differ diff --git a/_module/ncs/ai_dragon.ncs b/_module/ncs/ai_dragon.ncs new file mode 100644 index 0000000..9160ad0 Binary files /dev/null and b/_module/ncs/ai_dragon.ncs differ diff --git a/_module/ncs/ai_dragon_boss.ncs b/_module/ncs/ai_dragon_boss.ncs new file mode 100644 index 0000000..7a6c294 Binary files /dev/null and b/_module/ncs/ai_dragon_boss.ncs differ diff --git a/_module/ncs/ai_druid.ncs b/_module/ncs/ai_druid.ncs new file mode 100644 index 0000000..f23a800 Binary files /dev/null and b/_module/ncs/ai_druid.ncs differ diff --git a/_module/ncs/ai_fighter.ncs b/_module/ncs/ai_fighter.ncs new file mode 100644 index 0000000..c70f131 Binary files /dev/null and b/_module/ncs/ai_fighter.ncs differ diff --git a/_module/ncs/ai_flanker.ncs b/_module/ncs/ai_flanker.ncs new file mode 100644 index 0000000..52df680 Binary files /dev/null and b/_module/ncs/ai_flanker.ncs differ diff --git a/_module/ncs/ai_incorporeal.ncs b/_module/ncs/ai_incorporeal.ncs new file mode 100644 index 0000000..1edff0b Binary files /dev/null and b/_module/ncs/ai_incorporeal.ncs differ diff --git a/_module/ncs/ai_invisible.ncs b/_module/ncs/ai_invisible.ncs new file mode 100644 index 0000000..5a66c06 Binary files /dev/null and b/_module/ncs/ai_invisible.ncs differ diff --git a/_module/ncs/ai_monk.ncs b/_module/ncs/ai_monk.ncs new file mode 100644 index 0000000..3d10c25 Binary files /dev/null and b/_module/ncs/ai_monk.ncs differ diff --git a/_module/ncs/ai_paladin.ncs b/_module/ncs/ai_paladin.ncs new file mode 100644 index 0000000..b8550fa Binary files /dev/null and b/_module/ncs/ai_paladin.ncs differ diff --git a/_module/ncs/ai_polymorphed.ncs b/_module/ncs/ai_polymorphed.ncs new file mode 100644 index 0000000..2efa3e1 Binary files /dev/null and b/_module/ncs/ai_polymorphed.ncs differ diff --git a/_module/ncs/ai_ranged.ncs b/_module/ncs/ai_ranged.ncs new file mode 100644 index 0000000..553fa7e Binary files /dev/null and b/_module/ncs/ai_ranged.ncs differ diff --git a/_module/ncs/ai_ranger.ncs b/_module/ncs/ai_ranger.ncs new file mode 100644 index 0000000..e5f8d05 Binary files /dev/null and b/_module/ncs/ai_ranger.ncs differ diff --git a/_module/ncs/ai_rogue.ncs b/_module/ncs/ai_rogue.ncs new file mode 100644 index 0000000..ad0244e Binary files /dev/null and b/_module/ncs/ai_rogue.ncs differ diff --git a/_module/ncs/ai_shadow.ncs b/_module/ncs/ai_shadow.ncs new file mode 100644 index 0000000..cbaa003 Binary files /dev/null and b/_module/ncs/ai_shadow.ncs differ diff --git a/_module/ncs/ai_sorcerer.ncs b/_module/ncs/ai_sorcerer.ncs new file mode 100644 index 0000000..8367265 Binary files /dev/null and b/_module/ncs/ai_sorcerer.ncs differ diff --git a/_module/ncs/ai_taunter.ncs b/_module/ncs/ai_taunter.ncs new file mode 100644 index 0000000..8c01537 Binary files /dev/null and b/_module/ncs/ai_taunter.ncs differ diff --git a/_module/ncs/ai_wizard.ncs b/_module/ncs/ai_wizard.ncs new file mode 100644 index 0000000..66e0041 Binary files /dev/null and b/_module/ncs/ai_wizard.ncs differ diff --git a/_module/ncs/cc1_alter.ncs b/_module/ncs/cc1_alter.ncs index 04d2885..1115e6b 100644 Binary files a/_module/ncs/cc1_alter.ncs and b/_module/ncs/cc1_alter.ncs differ diff --git a/_module/ncs/cm_buff_hench.ncs b/_module/ncs/cm_buff_hench.ncs index 3bb4d4c..74df07c 100644 Binary files a/_module/ncs/cm_buff_hench.ncs and b/_module/ncs/cm_buff_hench.ncs differ diff --git a/_module/ncs/cm_drheal_hench.ncs b/_module/ncs/cm_drheal_hench.ncs index 5c5102e..192050b 100644 Binary files a/_module/ncs/cm_drheal_hench.ncs and b/_module/ncs/cm_drheal_hench.ncs differ diff --git a/_module/ncs/cm_treat_hench.ncs b/_module/ncs/cm_treat_hench.ncs index 888ce5e..833456a 100644 Binary files a/_module/ncs/cm_treat_hench.ncs and b/_module/ncs/cm_treat_hench.ncs differ diff --git a/_module/ncs/cnv_q_r1.ncs b/_module/ncs/cnv_q_r1.ncs index 81b30f9..3b6920f 100644 Binary files a/_module/ncs/cnv_q_r1.ncs and b/_module/ncs/cnv_q_r1.ncs differ diff --git a/_module/ncs/cnv_q_r2.ncs b/_module/ncs/cnv_q_r2.ncs index 7a5ca39..c90424b 100644 Binary files a/_module/ncs/cnv_q_r2.ncs and b/_module/ncs/cnv_q_r2.ncs differ diff --git a/_module/ncs/cnv_q_r3.ncs b/_module/ncs/cnv_q_r3.ncs index 13e310c..a28388e 100644 Binary files a/_module/ncs/cnv_q_r3.ncs and b/_module/ncs/cnv_q_r3.ncs differ diff --git a/_module/ncs/cnv_q_r4.ncs b/_module/ncs/cnv_q_r4.ncs index 47a34a5..51f0b16 100644 Binary files a/_module/ncs/cnv_q_r4.ncs and b/_module/ncs/cnv_q_r4.ncs differ diff --git a/_module/ncs/cnv_q_r5.ncs b/_module/ncs/cnv_q_r5.ncs index 9f9af7a..6acbd20 100644 Binary files a/_module/ncs/cnv_q_r5.ncs and b/_module/ncs/cnv_q_r5.ncs differ diff --git a/_module/ncs/cw1_enter.ncs b/_module/ncs/cw1_enter.ncs index 80b1d36..9e4e7a1 100644 Binary files a/_module/ncs/cw1_enter.ncs and b/_module/ncs/cw1_enter.ncs differ diff --git a/_module/ncs/dm_onspwn.ncs b/_module/ncs/dm_onspwn.ncs index d504be2..c7ddfac 100644 Binary files a/_module/ncs/dm_onspwn.ncs and b/_module/ncs/dm_onspwn.ncs differ diff --git a/_module/ncs/en3_boss_spawn2.ncs b/_module/ncs/en3_boss_spawn2.ncs index 858d08a..1880ed7 100644 Binary files a/_module/ncs/en3_boss_spawn2.ncs and b/_module/ncs/en3_boss_spawn2.ncs differ diff --git a/_module/ncs/en3_fastbuff.ncs b/_module/ncs/en3_fastbuff.ncs index a71fc6d..7b34481 100644 Binary files a/_module/ncs/en3_fastbuff.ncs and b/_module/ncs/en3_fastbuff.ncs differ diff --git a/_module/ncs/en3_gypsy1.ncs b/_module/ncs/en3_gypsy1.ncs index de42360..350286d 100644 Binary files a/_module/ncs/en3_gypsy1.ncs and b/_module/ncs/en3_gypsy1.ncs differ diff --git a/_module/ncs/en3_phantwar.ncs b/_module/ncs/en3_phantwar.ncs index aaba2b0..5d6afe9 100644 Binary files a/_module/ncs/en3_phantwar.ncs and b/_module/ncs/en3_phantwar.ncs differ diff --git a/_module/ncs/en3_scout_spawn.ncs b/_module/ncs/en3_scout_spawn.ncs index 5d6b188..d682bef 100644 Binary files a/_module/ncs/en3_scout_spawn.ncs and b/_module/ncs/en3_scout_spawn.ncs differ diff --git a/_module/ncs/en4_ew_beye.ncs b/_module/ncs/en4_ew_beye.ncs index a100b5a..86ace36 100644 Binary files a/_module/ncs/en4_ew_beye.ncs and b/_module/ncs/en4_ew_beye.ncs differ diff --git a/_module/ncs/en4_ew_btooth.ncs b/_module/ncs/en4_ew_btooth.ncs index 29cd7c1..313b96c 100644 Binary files a/_module/ncs/en4_ew_btooth.ncs and b/_module/ncs/en4_ew_btooth.ncs differ diff --git a/_module/ncs/en4_ew_c_1.ncs b/_module/ncs/en4_ew_c_1.ncs index df87bc0..fbb1142 100644 Binary files a/_module/ncs/en4_ew_c_1.ncs and b/_module/ncs/en4_ew_c_1.ncs differ diff --git a/_module/ncs/en4_ew_c_10.ncs b/_module/ncs/en4_ew_c_10.ncs index fa6c367..277f1ae 100644 Binary files a/_module/ncs/en4_ew_c_10.ncs and b/_module/ncs/en4_ew_c_10.ncs differ diff --git a/_module/ncs/en4_ew_c_11.ncs b/_module/ncs/en4_ew_c_11.ncs index 7176229..9ae819a 100644 Binary files a/_module/ncs/en4_ew_c_11.ncs and b/_module/ncs/en4_ew_c_11.ncs differ diff --git a/_module/ncs/en4_ew_c_12.ncs b/_module/ncs/en4_ew_c_12.ncs index baa067a..0337a66 100644 Binary files a/_module/ncs/en4_ew_c_12.ncs and b/_module/ncs/en4_ew_c_12.ncs differ diff --git a/_module/ncs/en4_ew_c_14.ncs b/_module/ncs/en4_ew_c_14.ncs index 2efd303..ef7a162 100644 Binary files a/_module/ncs/en4_ew_c_14.ncs and b/_module/ncs/en4_ew_c_14.ncs differ diff --git a/_module/ncs/en4_ew_c_15.ncs b/_module/ncs/en4_ew_c_15.ncs index 3d59232..f46f411 100644 Binary files a/_module/ncs/en4_ew_c_15.ncs and b/_module/ncs/en4_ew_c_15.ncs differ diff --git a/_module/ncs/en4_ew_c_16.ncs b/_module/ncs/en4_ew_c_16.ncs index 5a0aa4b..cabf4f9 100644 Binary files a/_module/ncs/en4_ew_c_16.ncs and b/_module/ncs/en4_ew_c_16.ncs differ diff --git a/_module/ncs/en4_ew_c_19.ncs b/_module/ncs/en4_ew_c_19.ncs index 927ea42..a59ff04 100644 Binary files a/_module/ncs/en4_ew_c_19.ncs and b/_module/ncs/en4_ew_c_19.ncs differ diff --git a/_module/ncs/en4_ew_c_2.ncs b/_module/ncs/en4_ew_c_2.ncs index f7d14e3..c2ecf7e 100644 Binary files a/_module/ncs/en4_ew_c_2.ncs and b/_module/ncs/en4_ew_c_2.ncs differ diff --git a/_module/ncs/en4_ew_c_22.ncs b/_module/ncs/en4_ew_c_22.ncs index 30f1aa9..71be2ad 100644 Binary files a/_module/ncs/en4_ew_c_22.ncs and b/_module/ncs/en4_ew_c_22.ncs differ diff --git a/_module/ncs/en4_ew_c_23.ncs b/_module/ncs/en4_ew_c_23.ncs index 60f6d5c..fc885ce 100644 Binary files a/_module/ncs/en4_ew_c_23.ncs and b/_module/ncs/en4_ew_c_23.ncs differ diff --git a/_module/ncs/en4_ew_c_26.ncs b/_module/ncs/en4_ew_c_26.ncs index f120522..5e5bd4c 100644 Binary files a/_module/ncs/en4_ew_c_26.ncs and b/_module/ncs/en4_ew_c_26.ncs differ diff --git a/_module/ncs/en4_ew_c_28.ncs b/_module/ncs/en4_ew_c_28.ncs index c958938..bf95b86 100644 Binary files a/_module/ncs/en4_ew_c_28.ncs and b/_module/ncs/en4_ew_c_28.ncs differ diff --git a/_module/ncs/en4_ew_c_29.ncs b/_module/ncs/en4_ew_c_29.ncs index d743bf8..7b503db 100644 Binary files a/_module/ncs/en4_ew_c_29.ncs and b/_module/ncs/en4_ew_c_29.ncs differ diff --git a/_module/ncs/en4_ew_c_4.ncs b/_module/ncs/en4_ew_c_4.ncs index 71695d8..908c5bf 100644 Binary files a/_module/ncs/en4_ew_c_4.ncs and b/_module/ncs/en4_ew_c_4.ncs differ diff --git a/_module/ncs/en4_ew_c_5.ncs b/_module/ncs/en4_ew_c_5.ncs index b79a3e5..add769e 100644 Binary files a/_module/ncs/en4_ew_c_5.ncs and b/_module/ncs/en4_ew_c_5.ncs differ diff --git a/_module/ncs/en4_ew_c_6.ncs b/_module/ncs/en4_ew_c_6.ncs index 1465510..62f5dc6 100644 Binary files a/_module/ncs/en4_ew_c_6.ncs and b/_module/ncs/en4_ew_c_6.ncs differ diff --git a/_module/ncs/en4_ew_c_7.ncs b/_module/ncs/en4_ew_c_7.ncs index 0f14225..e3f6400 100644 Binary files a/_module/ncs/en4_ew_c_7.ncs and b/_module/ncs/en4_ew_c_7.ncs differ diff --git a/_module/ncs/en4_ew_ceye.ncs b/_module/ncs/en4_ew_ceye.ncs index d8075dc..835b64d 100644 Binary files a/_module/ncs/en4_ew_ceye.ncs and b/_module/ncs/en4_ew_ceye.ncs differ diff --git a/_module/ncs/en4_ew_dhide.ncs b/_module/ncs/en4_ew_dhide.ncs index 9cf182c..4249290 100644 Binary files a/_module/ncs/en4_ew_dhide.ncs and b/_module/ncs/en4_ew_dhide.ncs differ diff --git a/_module/ncs/en4_ew_drblood.ncs b/_module/ncs/en4_ew_drblood.ncs index e23604d..8c7998a 100644 Binary files a/_module/ncs/en4_ew_drblood.ncs and b/_module/ncs/en4_ew_drblood.ncs differ diff --git a/_module/ncs/en4_ew_fdust.ncs b/_module/ncs/en4_ew_fdust.ncs index a7e7015..b3aef2a 100644 Binary files a/_module/ncs/en4_ew_fdust.ncs and b/_module/ncs/en4_ew_fdust.ncs differ diff --git a/_module/ncs/en4_ew_gcooze.ncs b/_module/ncs/en4_ew_gcooze.ncs index 289d6c0..1b67f9e 100644 Binary files a/_module/ncs/en4_ew_gcooze.ncs and b/_module/ncs/en4_ew_gcooze.ncs differ diff --git a/_module/ncs/en4_ew_gheart.ncs b/_module/ncs/en4_ew_gheart.ncs index 0e8232f..de8fe49 100644 Binary files a/_module/ncs/en4_ew_gheart.ncs and b/_module/ncs/en4_ew_gheart.ncs differ diff --git a/_module/ncs/en4_ew_gskull.ncs b/_module/ncs/en4_ew_gskull.ncs index c4ccada..ff1303f 100644 Binary files a/_module/ncs/en4_ew_gskull.ncs and b/_module/ncs/en4_ew_gskull.ncs differ diff --git a/_module/ncs/en4_ew_igeye.ncs b/_module/ncs/en4_ew_igeye.ncs index 37c634d..49f5569 100644 Binary files a/_module/ncs/en4_ew_igeye.ncs and b/_module/ncs/en4_ew_igeye.ncs differ diff --git a/_module/ncs/en4_ew_lichdust.ncs b/_module/ncs/en4_ew_lichdust.ncs index b2f43fc..ef0515d 100644 Binary files a/_module/ncs/en4_ew_lichdust.ncs and b/_module/ncs/en4_ew_lichdust.ncs differ diff --git a/_module/ncs/en4_ew_licheye.ncs b/_module/ncs/en4_ew_licheye.ncs index d425066..065e7f1 100644 Binary files a/_module/ncs/en4_ew_licheye.ncs and b/_module/ncs/en4_ew_licheye.ncs differ diff --git a/_module/ncs/en4_ew_lskull.ncs b/_module/ncs/en4_ew_lskull.ncs index 0cd0254..0dd4c97 100644 Binary files a/_module/ncs/en4_ew_lskull.ncs and b/_module/ncs/en4_ew_lskull.ncs differ diff --git a/_module/ncs/en4_ew_mfstalk.ncs b/_module/ncs/en4_ew_mfstalk.ncs index e888fd2..c6e2d19 100644 Binary files a/_module/ncs/en4_ew_mfstalk.ncs and b/_module/ncs/en4_ew_mfstalk.ncs differ diff --git a/_module/ncs/en4_ew_mheart.ncs b/_module/ncs/en4_ew_mheart.ncs index 29a2b15..2ae8964 100644 Binary files a/_module/ncs/en4_ew_mheart.ncs and b/_module/ncs/en4_ew_mheart.ncs differ diff --git a/_module/ncs/en4_ew_rscale.ncs b/_module/ncs/en4_ew_rscale.ncs index 398671b..679fecc 100644 Binary files a/_module/ncs/en4_ew_rscale.ncs and b/_module/ncs/en4_ew_rscale.ncs differ diff --git a/_module/ncs/en4_ew_salskin.ncs b/_module/ncs/en4_ew_salskin.ncs index bf0317b..c8a64ec 100644 Binary files a/_module/ncs/en4_ew_salskin.ncs and b/_module/ncs/en4_ew_salskin.ncs differ diff --git a/_module/ncs/en4_ew_wess.ncs b/_module/ncs/en4_ew_wess.ncs index a26f372..ab135a6 100644 Binary files a/_module/ncs/en4_ew_wess.ncs and b/_module/ncs/en4_ew_wess.ncs differ diff --git a/_module/ncs/en4_hench_green.ncs b/_module/ncs/en4_hench_green.ncs index a435e74..33bcaab 100644 Binary files a/_module/ncs/en4_hench_green.ncs and b/_module/ncs/en4_hench_green.ncs differ diff --git a/_module/ncs/en4_hench_mstr.ncs b/_module/ncs/en4_hench_mstr.ncs index 6a2cbc5..c40a450 100644 Binary files a/_module/ncs/en4_hench_mstr.ncs and b/_module/ncs/en4_hench_mstr.ncs differ diff --git a/_module/ncs/en4_hench_washen.ncs b/_module/ncs/en4_hench_washen.ncs index ad0d2df..a07842b 100644 Binary files a/_module/ncs/en4_hench_washen.ncs and b/_module/ncs/en4_hench_washen.ncs differ diff --git a/_module/ncs/en4_mobdeath.ncs b/_module/ncs/en4_mobdeath.ncs index 37f5953..fa69445 100644 Binary files a/_module/ncs/en4_mobdeath.ncs and b/_module/ncs/en4_mobdeath.ncs differ diff --git a/_module/ncs/en5_c_gold100.ncs b/_module/ncs/en5_c_gold100.ncs index 3c4dfac..2d23ef5 100644 Binary files a/_module/ncs/en5_c_gold100.ncs and b/_module/ncs/en5_c_gold100.ncs differ diff --git a/_module/ncs/en5_c_gold200.ncs b/_module/ncs/en5_c_gold200.ncs index 8afa092..d41fad3 100644 Binary files a/_module/ncs/en5_c_gold200.ncs and b/_module/ncs/en5_c_gold200.ncs differ diff --git a/_module/ncs/en5_c_gold_l_100.ncs b/_module/ncs/en5_c_gold_l_100.ncs index aec81d6..b4014ba 100644 Binary files a/_module/ncs/en5_c_gold_l_100.ncs and b/_module/ncs/en5_c_gold_l_100.ncs differ diff --git a/_module/ncs/en5_ch_hen_heart.ncs b/_module/ncs/en5_ch_hen_heart.ncs index 0a3d5b6..22c70d1 100644 Binary files a/_module/ncs/en5_ch_hen_heart.ncs and b/_module/ncs/en5_ch_hen_heart.ncs differ diff --git a/_module/ncs/en5_chkdebug.ncs b/_module/ncs/en5_chkdebug.ncs index 3cc339a..0360b2d 100644 Binary files a/_module/ncs/en5_chkdebug.ncs and b/_module/ncs/en5_chkdebug.ncs differ diff --git a/_module/ncs/en5_clearank.ncs b/_module/ncs/en5_clearank.ncs index e8f1d8f..2fa2697 100644 Binary files a/_module/ncs/en5_clearank.ncs and b/_module/ncs/en5_clearank.ncs differ diff --git a/_module/ncs/en5_createitem.ncs b/_module/ncs/en5_createitem.ncs index ee337f6..5b840ba 100644 Binary files a/_module/ncs/en5_createitem.ncs and b/_module/ncs/en5_createitem.ncs differ diff --git a/_module/ncs/en5_dmer1.ncs b/_module/ncs/en5_dmer1.ncs index b9c1c01..d0577ac 100644 Binary files a/_module/ncs/en5_dmer1.ncs and b/_module/ncs/en5_dmer1.ncs differ diff --git a/_module/ncs/en5_false.ncs b/_module/ncs/en5_false.ncs index 9418978..2a79a4e 100644 Binary files a/_module/ncs/en5_false.ncs and b/_module/ncs/en5_false.ncs differ diff --git a/_module/ncs/en5_getmobtreas.ncs b/_module/ncs/en5_getmobtreas.ncs index f58441d..995386f 100644 Binary files a/_module/ncs/en5_getmobtreas.ncs and b/_module/ncs/en5_getmobtreas.ncs differ diff --git a/_module/ncs/en5_giveitem.ncs b/_module/ncs/en5_giveitem.ncs index 7bb2dea..c61a95c 100644 Binary files a/_module/ncs/en5_giveitem.ncs and b/_module/ncs/en5_giveitem.ncs differ diff --git a/_module/ncs/en5_h_ispm.ncs b/_module/ncs/en5_h_ispm.ncs index 95cf5ec..d9ac88e 100644 Binary files a/_module/ncs/en5_h_ispm.ncs and b/_module/ncs/en5_h_ispm.ncs differ diff --git a/_module/ncs/en5_has100gp.ncs b/_module/ncs/en5_has100gp.ncs index 3c4dfac..2d23ef5 100644 Binary files a/_module/ncs/en5_has100gp.ncs and b/_module/ncs/en5_has100gp.ncs differ diff --git a/_module/ncs/en5_heartbeat.ncs b/_module/ncs/en5_heartbeat.ncs index 7e76373..a716a9b 100644 Binary files a/_module/ncs/en5_heartbeat.ncs and b/_module/ncs/en5_heartbeat.ncs differ diff --git a/_module/ncs/en5_henchhasclas.ncs b/_module/ncs/en5_henchhasclas.ncs index 06ef910..705b121 100644 Binary files a/_module/ncs/en5_henchhasclas.ncs and b/_module/ncs/en5_henchhasclas.ncs differ diff --git a/_module/ncs/en5_henchnoclass.ncs b/_module/ncs/en5_henchnoclass.ncs index 3a003c3..f84c8c4 100644 Binary files a/_module/ncs/en5_henchnoclass.ncs and b/_module/ncs/en5_henchnoclass.ncs differ diff --git a/_module/ncs/en5_i_restoreq.ncs b/_module/ncs/en5_i_restoreq.ncs index 7719285..17c8c8d 100644 Binary files a/_module/ncs/en5_i_restoreq.ncs and b/_module/ncs/en5_i_restoreq.ncs differ diff --git a/_module/ncs/en5_i_storeq.ncs b/_module/ncs/en5_i_storeq.ncs index 9f8d3fb..37c0cbf 100644 Binary files a/_module/ncs/en5_i_storeq.ncs and b/_module/ncs/en5_i_storeq.ncs differ diff --git a/_module/ncs/en5_jump_sp.ncs b/_module/ncs/en5_jump_sp.ncs index 13cde35..ce77ae4 100644 Binary files a/_module/ncs/en5_jump_sp.ncs and b/_module/ncs/en5_jump_sp.ncs differ diff --git a/_module/ncs/en5_jumpboss.ncs b/_module/ncs/en5_jumpboss.ncs index 9f68656..c979def 100644 Binary files a/_module/ncs/en5_jumpboss.ncs and b/_module/ncs/en5_jumpboss.ncs differ diff --git a/_module/ncs/en5_jumptst1.ncs b/_module/ncs/en5_jumptst1.ncs index 9f68656..c979def 100644 Binary files a/_module/ncs/en5_jumptst1.ncs and b/_module/ncs/en5_jumptst1.ncs differ diff --git a/_module/ncs/en5_levelup.ncs b/_module/ncs/en5_levelup.ncs index 161ef28..eb42c90 100644 Binary files a/_module/ncs/en5_levelup.ncs and b/_module/ncs/en5_levelup.ncs differ diff --git a/_module/ncs/en5_loading.ncs b/_module/ncs/en5_loading.ncs index 983bdba..8fe4f27 100644 Binary files a/_module/ncs/en5_loading.ncs and b/_module/ncs/en5_loading.ncs differ diff --git a/_module/ncs/en5_modenter.ncs b/_module/ncs/en5_modenter.ncs index 815d30b..d4c9737 100644 Binary files a/_module/ncs/en5_modenter.ncs and b/_module/ncs/en5_modenter.ncs differ diff --git a/_module/ncs/en5_onspawn.ncs b/_module/ncs/en5_onspawn.ncs index 9a58cd0..771be8b 100644 Binary files a/_module/ncs/en5_onspawn.ncs and b/_module/ncs/en5_onspawn.ncs differ diff --git a/_module/ncs/en5_openrndshop.ncs b/_module/ncs/en5_openrndshop.ncs index 9eb86a7..84785a1 100644 Binary files a/_module/ncs/en5_openrndshop.ncs and b/_module/ncs/en5_openrndshop.ncs differ diff --git a/_module/ncs/en5_openshop.ncs b/_module/ncs/en5_openshop.ncs index 4af1640..d0b50e0 100644 Binary files a/_module/ncs/en5_openshop.ncs and b/_module/ncs/en5_openshop.ncs differ diff --git a/_module/ncs/en5_respawn.ncs b/_module/ncs/en5_respawn.ncs index 199b6ab..64bfd6e 100644 Binary files a/_module/ncs/en5_respawn.ncs and b/_module/ncs/en5_respawn.ncs differ diff --git a/_module/ncs/en5_rest.ncs b/_module/ncs/en5_rest.ncs index 5af9021..eca8821 100644 Binary files a/_module/ncs/en5_rest.ncs and b/_module/ncs/en5_rest.ncs differ diff --git a/_module/ncs/en5_rndtreas_b2.ncs b/_module/ncs/en5_rndtreas_b2.ncs index 4b8ad1b..ddd60a7 100644 Binary files a/_module/ncs/en5_rndtreas_b2.ncs and b/_module/ncs/en5_rndtreas_b2.ncs differ diff --git a/_module/ncs/en5_rndtreas_bos.ncs b/_module/ncs/en5_rndtreas_bos.ncs index 8ad71c2..4c4d9fa 100644 Binary files a/_module/ncs/en5_rndtreas_bos.ncs and b/_module/ncs/en5_rndtreas_bos.ncs differ diff --git a/_module/ncs/en5_rndtreas_c.ncs b/_module/ncs/en5_rndtreas_c.ncs index 77658c6..82985a2 100644 Binary files a/_module/ncs/en5_rndtreas_c.ncs and b/_module/ncs/en5_rndtreas_c.ncs differ diff --git a/_module/ncs/en5_rndtreas_d.ncs b/_module/ncs/en5_rndtreas_d.ncs index e3847eb..4928bc8 100644 Binary files a/_module/ncs/en5_rndtreas_d.ncs and b/_module/ncs/en5_rndtreas_d.ncs differ diff --git a/_module/ncs/en5_rndtreas_low.ncs b/_module/ncs/en5_rndtreas_low.ncs index 790530d..51e2b80 100644 Binary files a/_module/ncs/en5_rndtreas_low.ncs and b/_module/ncs/en5_rndtreas_low.ncs differ diff --git a/_module/ncs/en5_rndtreas_q.ncs b/_module/ncs/en5_rndtreas_q.ncs index 8372623..a77ee29 100644 Binary files a/_module/ncs/en5_rndtreas_q.ncs and b/_module/ncs/en5_rndtreas_q.ncs differ diff --git a/_module/ncs/en5_rndtreas_sa.ncs b/_module/ncs/en5_rndtreas_sa.ncs index 540f8aa..9857e9c 100644 Binary files a/_module/ncs/en5_rndtreas_sa.ncs and b/_module/ncs/en5_rndtreas_sa.ncs differ diff --git a/_module/ncs/en5_rndtreas_sa4.ncs b/_module/ncs/en5_rndtreas_sa4.ncs index f828ede..0deaca2 100644 Binary files a/_module/ncs/en5_rndtreas_sa4.ncs and b/_module/ncs/en5_rndtreas_sa4.ncs differ diff --git a/_module/ncs/en5_rndtreasure.ncs b/_module/ncs/en5_rndtreasure.ncs index 4e5b224..09155cb 100644 Binary files a/_module/ncs/en5_rndtreasure.ncs and b/_module/ncs/en5_rndtreasure.ncs differ diff --git a/_module/ncs/en5_rndwpnarmor.ncs b/_module/ncs/en5_rndwpnarmor.ncs index 4b9463c..db5ea8a 100644 Binary files a/_module/ncs/en5_rndwpnarmor.ncs and b/_module/ncs/en5_rndwpnarmor.ncs differ diff --git a/_module/ncs/en5_sm_bh.ncs b/_module/ncs/en5_sm_bh.ncs index 4021774..a0d96e9 100644 Binary files a/_module/ncs/en5_sm_bh.ncs and b/_module/ncs/en5_sm_bh.ncs differ diff --git a/_module/ncs/en5_sm_md.ncs b/_module/ncs/en5_sm_md.ncs index cb8c2eb..d608a6c 100644 Binary files a/_module/ncs/en5_sm_md.ncs and b/_module/ncs/en5_sm_md.ncs differ diff --git a/_module/ncs/en5_solvequest.ncs b/_module/ncs/en5_solvequest.ncs index 6a6a1ca..4e50bb1 100644 Binary files a/_module/ncs/en5_solvequest.ncs and b/_module/ncs/en5_solvequest.ncs differ diff --git a/_module/ncs/en5_sp_areaenter.ncs b/_module/ncs/en5_sp_areaenter.ncs index 13a05be..f468aa6 100644 Binary files a/_module/ncs/en5_sp_areaenter.ncs and b/_module/ncs/en5_sp_areaenter.ncs differ diff --git a/_module/ncs/en5_talksit.ncs b/_module/ncs/en5_talksit.ncs index ce8f42d..ad2d8a4 100644 Binary files a/_module/ncs/en5_talksit.ncs and b/_module/ncs/en5_talksit.ncs differ diff --git a/_module/ncs/en5_test.ncs b/_module/ncs/en5_test.ncs index 0004526..d19c946 100644 Binary files a/_module/ncs/en5_test.ncs and b/_module/ncs/en5_test.ncs differ diff --git a/_module/ncs/en5_test2.ncs b/_module/ncs/en5_test2.ncs index 20728c5..fa39f62 100644 Binary files a/_module/ncs/en5_test2.ncs and b/_module/ncs/en5_test2.ncs differ diff --git a/_module/ncs/en5_trap.ncs b/_module/ncs/en5_trap.ncs index 4e29664..ef81b0f 100644 Binary files a/_module/ncs/en5_trap.ncs and b/_module/ncs/en5_trap.ncs differ diff --git a/_module/ncs/en5_wander.ncs b/_module/ncs/en5_wander.ncs index b2a9297..d1e89c7 100644 Binary files a/_module/ncs/en5_wander.ncs and b/_module/ncs/en5_wander.ncs differ diff --git a/_module/ncs/en6_areaenter.ncs b/_module/ncs/en6_areaenter.ncs index 82e0c09..9fd7b71 100644 Binary files a/_module/ncs/en6_areaenter.ncs and b/_module/ncs/en6_areaenter.ncs differ diff --git a/_module/ncs/en6_bartender_c1.ncs b/_module/ncs/en6_bartender_c1.ncs index a1e2815..e49c7d8 100644 Binary files a/_module/ncs/en6_bartender_c1.ncs and b/_module/ncs/en6_bartender_c1.ncs differ diff --git a/_module/ncs/en6_bartender_go.ncs b/_module/ncs/en6_bartender_go.ncs index 804f99f..a6772e8 100644 Binary files a/_module/ncs/en6_bartender_go.ncs and b/_module/ncs/en6_bartender_go.ncs differ diff --git a/_module/ncs/en6_c_final.ncs b/_module/ncs/en6_c_final.ncs index 2d10611..c5cfc15 100644 Binary files a/_module/ncs/en6_c_final.ncs and b/_module/ncs/en6_c_final.ncs differ diff --git a/_module/ncs/en6_champ.ncs b/_module/ncs/en6_champ.ncs index e0775f7..dc36c5d 100644 Binary files a/_module/ncs/en6_champ.ncs and b/_module/ncs/en6_champ.ncs differ diff --git a/_module/ncs/en6_chkbrag.ncs b/_module/ncs/en6_chkbrag.ncs index cf3a071..fe892f7 100644 Binary files a/_module/ncs/en6_chkbrag.ncs and b/_module/ncs/en6_chkbrag.ncs differ diff --git a/_module/ncs/en6_create_sring.ncs b/_module/ncs/en6_create_sring.ncs index d877036..d2770de 100644 Binary files a/_module/ncs/en6_create_sring.ncs and b/_module/ncs/en6_create_sring.ncs differ diff --git a/_module/ncs/en6_draw.ncs b/_module/ncs/en6_draw.ncs index 2683c6f..8f215c4 100644 Binary files a/_module/ncs/en6_draw.ncs and b/_module/ncs/en6_draw.ncs differ diff --git a/_module/ncs/en6_f100.ncs b/_module/ncs/en6_f100.ncs index e2af91c..6b600de 100644 Binary files a/_module/ncs/en6_f100.ncs and b/_module/ncs/en6_f100.ncs differ diff --git a/_module/ncs/en6_f150.ncs b/_module/ncs/en6_f150.ncs index ecc9d0d..6e88cf5 100644 Binary files a/_module/ncs/en6_f150.ncs and b/_module/ncs/en6_f150.ncs differ diff --git a/_module/ncs/en6_f50.ncs b/_module/ncs/en6_f50.ncs index ee9e846..b049e33 100644 Binary files a/_module/ncs/en6_f50.ncs and b/_module/ncs/en6_f50.ncs differ diff --git a/_module/ncs/en6_false.ncs b/_module/ncs/en6_false.ncs index 9418978..2a79a4e 100644 Binary files a/_module/ncs/en6_false.ncs and b/_module/ncs/en6_false.ncs differ diff --git a/_module/ncs/en6_fm_fa.ncs b/_module/ncs/en6_fm_fa.ncs index f7a6a3f..3282792 100644 Binary files a/_module/ncs/en6_fm_fa.ncs and b/_module/ncs/en6_fm_fa.ncs differ diff --git a/_module/ncs/en6_fm_h.ncs b/_module/ncs/en6_fm_h.ncs index 278ab0e..5d79070 100644 Binary files a/_module/ncs/en6_fm_h.ncs and b/_module/ncs/en6_fm_h.ncs differ diff --git a/_module/ncs/en6_fm_ic.ncs b/_module/ncs/en6_fm_ic.ncs index 3f32b57..74acc0c 100644 Binary files a/_module/ncs/en6_fm_ic.ncs and b/_module/ncs/en6_fm_ic.ncs differ diff --git a/_module/ncs/en6_fm_id.ncs b/_module/ncs/en6_fm_id.ncs index 77cd2b2..8d8ce84 100644 Binary files a/_module/ncs/en6_fm_id.ncs and b/_module/ncs/en6_fm_id.ncs differ diff --git a/_module/ncs/en6_fm_if.ncs b/_module/ncs/en6_fm_if.ncs index 05e6cfc..e940b47 100644 Binary files a/_module/ncs/en6_fm_if.ncs and b/_module/ncs/en6_fm_if.ncs differ diff --git a/_module/ncs/en6_fm_reg1.ncs b/_module/ncs/en6_fm_reg1.ncs index 6aecf24..9a787b2 100644 Binary files a/_module/ncs/en6_fm_reg1.ncs and b/_module/ncs/en6_fm_reg1.ncs differ diff --git a/_module/ncs/en6_fm_reg2.ncs b/_module/ncs/en6_fm_reg2.ncs index 6126b55..c67e1bf 100644 Binary files a/_module/ncs/en6_fm_reg2.ncs and b/_module/ncs/en6_fm_reg2.ncs differ diff --git a/_module/ncs/en6_fm_sr1.ncs b/_module/ncs/en6_fm_sr1.ncs index c7df181..6ad8ce6 100644 Binary files a/_module/ncs/en6_fm_sr1.ncs and b/_module/ncs/en6_fm_sr1.ncs differ diff --git a/_module/ncs/en6_fm_sr2.ncs b/_module/ncs/en6_fm_sr2.ncs index d8eda1e..ef426b2 100644 Binary files a/_module/ncs/en6_fm_sr2.ncs and b/_module/ncs/en6_fm_sr2.ncs differ diff --git a/_module/ncs/en6_fog_c1.ncs b/_module/ncs/en6_fog_c1.ncs index 325f2ef..dff67c2 100644 Binary files a/_module/ncs/en6_fog_c1.ncs and b/_module/ncs/en6_fog_c1.ncs differ diff --git a/_module/ncs/en6_fog_c2.ncs b/_module/ncs/en6_fog_c2.ncs index 503e0d8..39c35a7 100644 Binary files a/_module/ncs/en6_fog_c2.ncs and b/_module/ncs/en6_fog_c2.ncs differ diff --git a/_module/ncs/en6_fog_c3.ncs b/_module/ncs/en6_fog_c3.ncs index a2e935b..88d26ba 100644 Binary files a/_module/ncs/en6_fog_c3.ncs and b/_module/ncs/en6_fog_c3.ncs differ diff --git a/_module/ncs/en6_h_r_1.ncs b/_module/ncs/en6_h_r_1.ncs index 079841c..df2075c 100644 Binary files a/_module/ncs/en6_h_r_1.ncs and b/_module/ncs/en6_h_r_1.ncs differ diff --git a/_module/ncs/en6_info_mode0.ncs b/_module/ncs/en6_info_mode0.ncs index 30c719f..51cb64a 100644 Binary files a/_module/ncs/en6_info_mode0.ncs and b/_module/ncs/en6_info_mode0.ncs differ diff --git a/_module/ncs/en6_info_mode1.ncs b/_module/ncs/en6_info_mode1.ncs index be79236..09aab5a 100644 Binary files a/_module/ncs/en6_info_mode1.ncs and b/_module/ncs/en6_info_mode1.ncs differ diff --git a/_module/ncs/en6_info_mode_c0.ncs b/_module/ncs/en6_info_mode_c0.ncs index 0a68774..8d0d9fd 100644 Binary files a/_module/ncs/en6_info_mode_c0.ncs and b/_module/ncs/en6_info_mode_c0.ncs differ diff --git a/_module/ncs/en6_info_mode_c1.ncs b/_module/ncs/en6_info_mode_c1.ncs index 0af4a5f..46bb012 100644 Binary files a/_module/ncs/en6_info_mode_c1.ncs and b/_module/ncs/en6_info_mode_c1.ncs differ diff --git a/_module/ncs/en6_inherit_1.ncs b/_module/ncs/en6_inherit_1.ncs index f1535ca..246362d 100644 Binary files a/_module/ncs/en6_inherit_1.ncs and b/_module/ncs/en6_inherit_1.ncs differ diff --git a/_module/ncs/en6_inherit_2.ncs b/_module/ncs/en6_inherit_2.ncs index a7da80b..078d135 100644 Binary files a/_module/ncs/en6_inherit_2.ncs and b/_module/ncs/en6_inherit_2.ncs differ diff --git a/_module/ncs/en6_inherit_3.ncs b/_module/ncs/en6_inherit_3.ncs index a0032a1..4b70e8a 100644 Binary files a/_module/ncs/en6_inherit_3.ncs and b/_module/ncs/en6_inherit_3.ncs differ diff --git a/_module/ncs/en6_mq1_2_c4.ncs b/_module/ncs/en6_mq1_2_c4.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/en6_mq1_2_c4.ncs and b/_module/ncs/en6_mq1_2_c4.ncs differ diff --git a/_module/ncs/en6_mq1_3_c1.ncs b/_module/ncs/en6_mq1_3_c1.ncs index ba87041..56da509 100644 Binary files a/_module/ncs/en6_mq1_3_c1.ncs and b/_module/ncs/en6_mq1_3_c1.ncs differ diff --git a/_module/ncs/en6_mq1_3_c4.ncs b/_module/ncs/en6_mq1_3_c4.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/en6_mq1_3_c4.ncs and b/_module/ncs/en6_mq1_3_c4.ncs differ diff --git a/_module/ncs/en6_mq1_npc1_1_a.ncs b/_module/ncs/en6_mq1_npc1_1_a.ncs index 4880914..6aa9840 100644 Binary files a/_module/ncs/en6_mq1_npc1_1_a.ncs and b/_module/ncs/en6_mq1_npc1_1_a.ncs differ diff --git a/_module/ncs/en6_mq1_npc1_1_d.ncs b/_module/ncs/en6_mq1_npc1_1_d.ncs index f310a6d..4d18119 100644 Binary files a/_module/ncs/en6_mq1_npc1_1_d.ncs and b/_module/ncs/en6_mq1_npc1_1_d.ncs differ diff --git a/_module/ncs/en6_mq1_npc2_1_a.ncs b/_module/ncs/en6_mq1_npc2_1_a.ncs index ef69914..4b5ba35 100644 Binary files a/_module/ncs/en6_mq1_npc2_1_a.ncs and b/_module/ncs/en6_mq1_npc2_1_a.ncs differ diff --git a/_module/ncs/en6_mq1_npc2_1_d.ncs b/_module/ncs/en6_mq1_npc2_1_d.ncs index 0069d6a..d35b001 100644 Binary files a/_module/ncs/en6_mq1_npc2_1_d.ncs and b/_module/ncs/en6_mq1_npc2_1_d.ncs differ diff --git a/_module/ncs/en6_mq2_c1.ncs b/_module/ncs/en6_mq2_c1.ncs index fd1e9d0..98685f7 100644 Binary files a/_module/ncs/en6_mq2_c1.ncs and b/_module/ncs/en6_mq2_c1.ncs differ diff --git a/_module/ncs/en6_mq2_c2.ncs b/_module/ncs/en6_mq2_c2.ncs index f6350f3..fec185a 100644 Binary files a/_module/ncs/en6_mq2_c2.ncs and b/_module/ncs/en6_mq2_c2.ncs differ diff --git a/_module/ncs/en6_mq2_c4.ncs b/_module/ncs/en6_mq2_c4.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/en6_mq2_c4.ncs and b/_module/ncs/en6_mq2_c4.ncs differ diff --git a/_module/ncs/en6_mq2_c6.ncs b/_module/ncs/en6_mq2_c6.ncs index 57c5bc2..bc8f038 100644 Binary files a/_module/ncs/en6_mq2_c6.ncs and b/_module/ncs/en6_mq2_c6.ncs differ diff --git a/_module/ncs/en6_mq3_dth1.ncs b/_module/ncs/en6_mq3_dth1.ncs index e3ede7e..284bc58 100644 Binary files a/_module/ncs/en6_mq3_dth1.ncs and b/_module/ncs/en6_mq3_dth1.ncs differ diff --git a/_module/ncs/en6_mq5s_c1.ncs b/_module/ncs/en6_mq5s_c1.ncs index 39bbd18..0c46275 100644 Binary files a/_module/ncs/en6_mq5s_c1.ncs and b/_module/ncs/en6_mq5s_c1.ncs differ diff --git a/_module/ncs/en6_mq5s_c2.ncs b/_module/ncs/en6_mq5s_c2.ncs index 446d27c..4762ee6 100644 Binary files a/_module/ncs/en6_mq5s_c2.ncs and b/_module/ncs/en6_mq5s_c2.ncs differ diff --git a/_module/ncs/en6_mq6_ambush.ncs b/_module/ncs/en6_mq6_ambush.ncs index 017b400..b964151 100644 Binary files a/_module/ncs/en6_mq6_ambush.ncs and b/_module/ncs/en6_mq6_ambush.ncs differ diff --git a/_module/ncs/en6_mq6_ambush2.ncs b/_module/ncs/en6_mq6_ambush2.ncs index b615d39..e194162 100644 Binary files a/_module/ncs/en6_mq6_ambush2.ncs and b/_module/ncs/en6_mq6_ambush2.ncs differ diff --git a/_module/ncs/en6_mq6_c1.ncs b/_module/ncs/en6_mq6_c1.ncs index 412bd63..d13e8cb 100644 Binary files a/_module/ncs/en6_mq6_c1.ncs and b/_module/ncs/en6_mq6_c1.ncs differ diff --git a/_module/ncs/en6_mq6_dth.ncs b/_module/ncs/en6_mq6_dth.ncs index 024c84a..61b5a74 100644 Binary files a/_module/ncs/en6_mq6_dth.ncs and b/_module/ncs/en6_mq6_dth.ncs differ diff --git a/_module/ncs/en6_mq6_makeitem.ncs b/_module/ncs/en6_mq6_makeitem.ncs index 2036d48..f32a615 100644 Binary files a/_module/ncs/en6_mq6_makeitem.ncs and b/_module/ncs/en6_mq6_makeitem.ncs differ diff --git a/_module/ncs/en6_mq_1_c1.ncs b/_module/ncs/en6_mq_1_c1.ncs index ffe8292..8feb6dd 100644 Binary files a/_module/ncs/en6_mq_1_c1.ncs and b/_module/ncs/en6_mq_1_c1.ncs differ diff --git a/_module/ncs/en6_mq_1_c2.ncs b/_module/ncs/en6_mq_1_c2.ncs index f6350f3..fec185a 100644 Binary files a/_module/ncs/en6_mq_1_c2.ncs and b/_module/ncs/en6_mq_1_c2.ncs differ diff --git a/_module/ncs/en6_mq_1_c4.ncs b/_module/ncs/en6_mq_1_c4.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/en6_mq_1_c4.ncs and b/_module/ncs/en6_mq_1_c4.ncs differ diff --git a/_module/ncs/en6_mq_final_c1.ncs b/_module/ncs/en6_mq_final_c1.ncs index ba87041..56da509 100644 Binary files a/_module/ncs/en6_mq_final_c1.ncs and b/_module/ncs/en6_mq_final_c1.ncs differ diff --git a/_module/ncs/en6_mq_final_c2.ncs b/_module/ncs/en6_mq_final_c2.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/en6_mq_final_c2.ncs and b/_module/ncs/en6_mq_final_c2.ncs differ diff --git a/_module/ncs/en6_mq_final_c4.ncs b/_module/ncs/en6_mq_final_c4.ncs index f6350f3..fec185a 100644 Binary files a/_module/ncs/en6_mq_final_c4.ncs and b/_module/ncs/en6_mq_final_c4.ncs differ diff --git a/_module/ncs/en6_mqf_scroll.ncs b/_module/ncs/en6_mqf_scroll.ncs index 9528ce3..e8b7a77 100644 Binary files a/_module/ncs/en6_mqf_scroll.ncs and b/_module/ncs/en6_mqf_scroll.ncs differ diff --git a/_module/ncs/en6_ne_enter.ncs b/_module/ncs/en6_ne_enter.ncs index e318c3f..dfacd34 100644 Binary files a/_module/ncs/en6_ne_enter.ncs and b/_module/ncs/en6_ne_enter.ncs differ diff --git a/_module/ncs/en6_nofame.ncs b/_module/ncs/en6_nofame.ncs index f4703b2..09cff0f 100644 Binary files a/_module/ncs/en6_nofame.ncs and b/_module/ncs/en6_nofame.ncs differ diff --git a/_module/ncs/en6_noxp.ncs b/_module/ncs/en6_noxp.ncs index 5de2b5b..5238e82 100644 Binary files a/_module/ncs/en6_noxp.ncs and b/_module/ncs/en6_noxp.ncs differ diff --git a/_module/ncs/en6_randomshop.ncs b/_module/ncs/en6_randomshop.ncs index 4c5a8a7..9811fd2 100644 Binary files a/_module/ncs/en6_randomshop.ncs and b/_module/ncs/en6_randomshop.ncs differ diff --git a/_module/ncs/en6_runering.ncs b/_module/ncs/en6_runering.ncs index 8271d18..4b49050 100644 Binary files a/_module/ncs/en6_runering.ncs and b/_module/ncs/en6_runering.ncs differ diff --git a/_module/ncs/en6_rust_spawn.ncs b/_module/ncs/en6_rust_spawn.ncs index 00fc6ee..ea01f14 100644 Binary files a/_module/ncs/en6_rust_spawn.ncs and b/_module/ncs/en6_rust_spawn.ncs differ diff --git a/_module/ncs/en6_sm_av1.ncs b/_module/ncs/en6_sm_av1.ncs index a9f9775..f388cf9 100644 Binary files a/_module/ncs/en6_sm_av1.ncs and b/_module/ncs/en6_sm_av1.ncs differ diff --git a/_module/ncs/en6_sm_bf1.ncs b/_module/ncs/en6_sm_bf1.ncs index 16efe3e..f37303e 100644 Binary files a/_module/ncs/en6_sm_bf1.ncs and b/_module/ncs/en6_sm_bf1.ncs differ diff --git a/_module/ncs/en6_sm_bh1.ncs b/_module/ncs/en6_sm_bh1.ncs index ba1dfba..4b9c23e 100644 Binary files a/_module/ncs/en6_sm_bh1.ncs and b/_module/ncs/en6_sm_bh1.ncs differ diff --git a/_module/ncs/en6_sm_bs1.ncs b/_module/ncs/en6_sm_bs1.ncs index 1bf6a97..d84a474 100644 Binary files a/_module/ncs/en6_sm_bs1.ncs and b/_module/ncs/en6_sm_bs1.ncs differ diff --git a/_module/ncs/en6_sm_ef1.ncs b/_module/ncs/en6_sm_ef1.ncs index 34fc4b4..09e4bb7 100644 Binary files a/_module/ncs/en6_sm_ef1.ncs and b/_module/ncs/en6_sm_ef1.ncs differ diff --git a/_module/ncs/en6_sm_nc1.ncs b/_module/ncs/en6_sm_nc1.ncs index 0619ce3..d910897 100644 Binary files a/_module/ncs/en6_sm_nc1.ncs and b/_module/ncs/en6_sm_nc1.ncs differ diff --git a/_module/ncs/en6_sm_nh1.ncs b/_module/ncs/en6_sm_nh1.ncs index bb75d3b..a5e0dff 100644 Binary files a/_module/ncs/en6_sm_nh1.ncs and b/_module/ncs/en6_sm_nh1.ncs differ diff --git a/_module/ncs/en6_sm_rd1.ncs b/_module/ncs/en6_sm_rd1.ncs index 3dd3079..f5ef8bb 100644 Binary files a/_module/ncs/en6_sm_rd1.ncs and b/_module/ncs/en6_sm_rd1.ncs differ diff --git a/_module/ncs/en6_special.ncs b/_module/ncs/en6_special.ncs index 1e3aaa7..ea19c99 100644 Binary files a/_module/ncs/en6_special.ncs and b/_module/ncs/en6_special.ncs differ diff --git a/_module/ncs/en6_trigevent.ncs b/_module/ncs/en6_trigevent.ncs index 9f003f0..9601be1 100644 Binary files a/_module/ncs/en6_trigevent.ncs and b/_module/ncs/en6_trigevent.ncs differ diff --git a/_module/ncs/en6_unequip.ncs b/_module/ncs/en6_unequip.ncs index ac637f6..623c42d 100644 Binary files a/_module/ncs/en6_unequip.ncs and b/_module/ncs/en6_unequip.ncs differ diff --git a/_module/ncs/hc_chest.ncs b/_module/ncs/hc_chest.ncs index bb9ed0a..19dd52a 100644 Binary files a/_module/ncs/hc_chest.ncs and b/_module/ncs/hc_chest.ncs differ diff --git a/_module/ncs/hc_sd1.ncs b/_module/ncs/hc_sd1.ncs index 8c110be..39118a5 100644 Binary files a/_module/ncs/hc_sd1.ncs and b/_module/ncs/hc_sd1.ncs differ diff --git a/_module/ncs/hc_sd2.ncs b/_module/ncs/hc_sd2.ncs index d2db783..7382696 100644 Binary files a/_module/ncs/hc_sd2.ncs and b/_module/ncs/hc_sd2.ncs differ diff --git a/_module/ncs/mm_prc_spells.ncs b/_module/ncs/mm_prc_spells.ncs new file mode 100644 index 0000000..c6791e5 Binary files /dev/null and b/_module/ncs/mm_prc_spells.ncs differ diff --git a/_module/ncs/nc_merchant2.ncs b/_module/ncs/nc_merchant2.ncs index f465f02..bcad3df 100644 Binary files a/_module/ncs/nc_merchant2.ncs and b/_module/ncs/nc_merchant2.ncs differ diff --git a/_module/ncs/nh1_shop_gen.ncs b/_module/ncs/nh1_shop_gen.ncs index f4b5dc1..f350683 100644 Binary files a/_module/ncs/nh1_shop_gen.ncs and b/_module/ncs/nh1_shop_gen.ncs differ diff --git a/_module/ncs/nh1_shop_m.ncs b/_module/ncs/nh1_shop_m.ncs index 9c024a0..1548256 100644 Binary files a/_module/ncs/nh1_shop_m.ncs and b/_module/ncs/nh1_shop_m.ncs differ diff --git a/_module/ncs/nh1_shop_smith.ncs b/_module/ncs/nh1_shop_smith.ncs index 43adec0..fc3d091 100644 Binary files a/_module/ncs/nh1_shop_smith.ncs and b/_module/ncs/nh1_shop_smith.ncs differ diff --git a/_module/ncs/no_ai_atk.ncs b/_module/ncs/no_ai_atk.ncs index 7dcee86..8a84b1d 100644 Binary files a/_module/ncs/no_ai_atk.ncs and b/_module/ncs/no_ai_atk.ncs differ diff --git a/_module/ncs/no_ai_cmb.ncs b/_module/ncs/no_ai_cmb.ncs index 0cc63d6..dfcc537 100644 Binary files a/_module/ncs/no_ai_cmb.ncs and b/_module/ncs/no_ai_cmb.ncs differ diff --git a/_module/ncs/no_ai_cnv.ncs b/_module/ncs/no_ai_cnv.ncs index 4226c4f..bea99de 100644 Binary files a/_module/ncs/no_ai_cnv.ncs and b/_module/ncs/no_ai_cnv.ncs differ diff --git a/_module/ncs/no_ai_dam.ncs b/_module/ncs/no_ai_dam.ncs index b6e2c89..e2c1b0b 100644 Binary files a/_module/ncs/no_ai_dam.ncs and b/_module/ncs/no_ai_dam.ncs differ diff --git a/_module/ncs/no_ai_dis.ncs b/_module/ncs/no_ai_dis.ncs index 964d7cf..dc944ab 100644 Binary files a/_module/ncs/no_ai_dis.ncs and b/_module/ncs/no_ai_dis.ncs differ diff --git a/_module/ncs/no_ai_dth.ncs b/_module/ncs/no_ai_dth.ncs index c55ffba..01f78c4 100644 Binary files a/_module/ncs/no_ai_dth.ncs and b/_module/ncs/no_ai_dth.ncs differ diff --git a/_module/ncs/no_ai_hrt.ncs b/_module/ncs/no_ai_hrt.ncs index fb2195a..1391105 100644 Binary files a/_module/ncs/no_ai_hrt.ncs and b/_module/ncs/no_ai_hrt.ncs differ diff --git a/_module/ncs/no_ai_per.ncs b/_module/ncs/no_ai_per.ncs index 7317e74..b30b27f 100644 Binary files a/_module/ncs/no_ai_per.ncs and b/_module/ncs/no_ai_per.ncs differ diff --git a/_module/ncs/no_ai_spt.ncs b/_module/ncs/no_ai_spt.ncs index efdde41..b4fe723 100644 Binary files a/_module/ncs/no_ai_spt.ncs and b/_module/ncs/no_ai_spt.ncs differ diff --git a/_module/ncs/no_spn_en4cast1.ncs b/_module/ncs/no_spn_en4cast1.ncs index 4f6df6d..d8b15af 100644 Binary files a/_module/ncs/no_spn_en4cast1.ncs and b/_module/ncs/no_spn_en4cast1.ncs differ diff --git a/_module/ncs/no_spn_en4wiz1.ncs b/_module/ncs/no_spn_en4wiz1.ncs index 4ccc649..63c6619 100644 Binary files a/_module/ncs/no_spn_en4wiz1.ncs and b/_module/ncs/no_spn_en4wiz1.ncs differ diff --git a/_module/ncs/nw_c2_default1.ncs b/_module/ncs/nw_c2_default1.ncs index 6d8698b..b6db1e8 100644 Binary files a/_module/ncs/nw_c2_default1.ncs and b/_module/ncs/nw_c2_default1.ncs differ diff --git a/_module/ncs/nw_c2_default2.ncs b/_module/ncs/nw_c2_default2.ncs index b614520..04b4be7 100644 Binary files a/_module/ncs/nw_c2_default2.ncs and b/_module/ncs/nw_c2_default2.ncs differ diff --git a/_module/ncs/nw_c2_default3.ncs b/_module/ncs/nw_c2_default3.ncs index 0a38d65..0bf7d39 100644 Binary files a/_module/ncs/nw_c2_default3.ncs and b/_module/ncs/nw_c2_default3.ncs differ diff --git a/_module/ncs/nw_c2_default4.ncs b/_module/ncs/nw_c2_default4.ncs index afc4bbb..dff3c56 100644 Binary files a/_module/ncs/nw_c2_default4.ncs and b/_module/ncs/nw_c2_default4.ncs differ diff --git a/_module/ncs/nw_c2_default5.ncs b/_module/ncs/nw_c2_default5.ncs index 68fb1fb..756dfe8 100644 Binary files a/_module/ncs/nw_c2_default5.ncs and b/_module/ncs/nw_c2_default5.ncs differ diff --git a/_module/ncs/nw_c2_default6.ncs b/_module/ncs/nw_c2_default6.ncs index 0cf2666..29d0f03 100644 Binary files a/_module/ncs/nw_c2_default6.ncs and b/_module/ncs/nw_c2_default6.ncs differ diff --git a/_module/ncs/nw_c2_default8.ncs b/_module/ncs/nw_c2_default8.ncs index ef9f912..4b4975d 100644 Binary files a/_module/ncs/nw_c2_default8.ncs and b/_module/ncs/nw_c2_default8.ncs differ diff --git a/_module/ncs/nw_c2_defaultb.ncs b/_module/ncs/nw_c2_defaultb.ncs index c5a933b..de2ce37 100644 Binary files a/_module/ncs/nw_c2_defaultb.ncs and b/_module/ncs/nw_c2_defaultb.ncs differ diff --git a/_module/ncs/nw_c2_defaulte.ncs b/_module/ncs/nw_c2_defaulte.ncs index b95ac13..1078e70 100644 Binary files a/_module/ncs/nw_c2_defaulte.ncs and b/_module/ncs/nw_c2_defaulte.ncs differ diff --git a/_module/ncs/nw_c2_dropin9.ncs b/_module/ncs/nw_c2_dropin9.ncs index 0dd9f6a..6482b5b 100644 Binary files a/_module/ncs/nw_c2_dropin9.ncs and b/_module/ncs/nw_c2_dropin9.ncs differ diff --git a/_module/ncs/nw_ch_ac1.ncs b/_module/ncs/nw_ch_ac1.ncs new file mode 100644 index 0000000..0fed426 Binary files /dev/null and b/_module/ncs/nw_ch_ac1.ncs differ diff --git a/_module/ncs/nw_ch_ac2.ncs b/_module/ncs/nw_ch_ac2.ncs new file mode 100644 index 0000000..7804256 Binary files /dev/null and b/_module/ncs/nw_ch_ac2.ncs differ diff --git a/_module/ncs/nw_ch_ac3.ncs b/_module/ncs/nw_ch_ac3.ncs new file mode 100644 index 0000000..505123a Binary files /dev/null and b/_module/ncs/nw_ch_ac3.ncs differ diff --git a/_module/ncs/nw_ch_ac4.ncs b/_module/ncs/nw_ch_ac4.ncs new file mode 100644 index 0000000..7ad4d92 Binary files /dev/null and b/_module/ncs/nw_ch_ac4.ncs differ diff --git a/_module/ncs/nw_ch_ac5.ncs b/_module/ncs/nw_ch_ac5.ncs new file mode 100644 index 0000000..84bde86 Binary files /dev/null and b/_module/ncs/nw_ch_ac5.ncs differ diff --git a/_module/ncs/nw_ch_ac6.ncs b/_module/ncs/nw_ch_ac6.ncs new file mode 100644 index 0000000..0b242be Binary files /dev/null and b/_module/ncs/nw_ch_ac6.ncs differ diff --git a/_module/ncs/nw_ch_ac8.ncs b/_module/ncs/nw_ch_ac8.ncs new file mode 100644 index 0000000..e0d98c1 Binary files /dev/null and b/_module/ncs/nw_ch_ac8.ncs differ diff --git a/_module/ncs/nw_ch_aca.ncs b/_module/ncs/nw_ch_aca.ncs new file mode 100644 index 0000000..2d53649 Binary files /dev/null and b/_module/ncs/nw_ch_aca.ncs differ diff --git a/_module/ncs/nw_ch_acb.ncs b/_module/ncs/nw_ch_acb.ncs new file mode 100644 index 0000000..d9235bc Binary files /dev/null and b/_module/ncs/nw_ch_acb.ncs differ diff --git a/_module/ncs/nw_ch_ace.ncs b/_module/ncs/nw_ch_ace.ncs new file mode 100644 index 0000000..31d065b Binary files /dev/null and b/_module/ncs/nw_ch_ace.ncs differ diff --git a/_module/ncs/nw_ch_summon_9.ncs b/_module/ncs/nw_ch_summon_9.ncs new file mode 100644 index 0000000..06bda0f Binary files /dev/null and b/_module/ncs/nw_ch_summon_9.ncs differ diff --git a/_module/ncs/nw_o2_boss.ncs b/_module/ncs/nw_o2_boss.ncs index 586fa99..0c1105f 100644 Binary files a/_module/ncs/nw_o2_boss.ncs and b/_module/ncs/nw_o2_boss.ncs differ diff --git a/_module/ncs/nw_o2_classweap.ncs b/_module/ncs/nw_o2_classweap.ncs index 100d8c1..83378b7 100644 Binary files a/_module/ncs/nw_o2_classweap.ncs and b/_module/ncs/nw_o2_classweap.ncs differ diff --git a/_module/ncs/nw_o2_generalhig.ncs b/_module/ncs/nw_o2_generalhig.ncs index 5bbe734..a2c8928 100644 Binary files a/_module/ncs/nw_o2_generalhig.ncs and b/_module/ncs/nw_o2_generalhig.ncs differ diff --git a/_module/ncs/nw_o2_generallow.ncs b/_module/ncs/nw_o2_generallow.ncs index cd69b64..cc4ab6d 100644 Binary files a/_module/ncs/nw_o2_generallow.ncs and b/_module/ncs/nw_o2_generallow.ncs differ diff --git a/_module/ncs/nw_o2_generalmed.ncs b/_module/ncs/nw_o2_generalmed.ncs index 2fec0ac..74c9f3e 100644 Binary files a/_module/ncs/nw_o2_generalmed.ncs and b/_module/ncs/nw_o2_generalmed.ncs differ diff --git a/_module/ncs/nw_s3_balordeth.ncs b/_module/ncs/nw_s3_balordeth.ncs index 89769a5..e6e6d28 100644 Binary files a/_module/ncs/nw_s3_balordeth.ncs and b/_module/ncs/nw_s3_balordeth.ncs differ diff --git a/_module/ncs/p_enter.ncs b/_module/ncs/p_enter.ncs index a481934..b8fb6e8 100644 Binary files a/_module/ncs/p_enter.ncs and b/_module/ncs/p_enter.ncs differ diff --git a/_module/ncs/pc_savebuffs.ncs b/_module/ncs/pc_savebuffs.ncs new file mode 100644 index 0000000..4becfad Binary files /dev/null and b/_module/ncs/pc_savebuffs.ncs differ diff --git a/_module/ncs/pe_buffing.ncs b/_module/ncs/pe_buffing.ncs new file mode 100644 index 0000000..1bfa628 Binary files /dev/null and b/_module/ncs/pe_buffing.ncs differ diff --git a/_module/ncs/pe_crafting.ncs b/_module/ncs/pe_crafting.ncs new file mode 100644 index 0000000..bdd5ebf Binary files /dev/null and b/_module/ncs/pe_crafting.ncs differ diff --git a/_module/ncs/pe_debug.ncs b/_module/ncs/pe_debug.ncs new file mode 100644 index 0000000..62a7072 Binary files /dev/null and b/_module/ncs/pe_debug.ncs differ diff --git a/_module/ncs/pe_henchmen.ncs b/_module/ncs/pe_henchmen.ncs new file mode 100644 index 0000000..f6def9a Binary files /dev/null and b/_module/ncs/pe_henchmen.ncs differ diff --git a/_module/ncs/pi_buffing.ncs b/_module/ncs/pi_buffing.ncs new file mode 100644 index 0000000..d604999 Binary files /dev/null and b/_module/ncs/pi_buffing.ncs differ diff --git a/_module/ncs/pi_crafting.ncs b/_module/ncs/pi_crafting.ncs new file mode 100644 index 0000000..4b55c22 Binary files /dev/null and b/_module/ncs/pi_crafting.ncs differ diff --git a/_module/ncs/pi_debug.ncs b/_module/ncs/pi_debug.ncs new file mode 100644 index 0000000..e0375a1 Binary files /dev/null and b/_module/ncs/pi_debug.ncs differ diff --git a/_module/ncs/pi_henchmen.ncs b/_module/ncs/pi_henchmen.ncs new file mode 100644 index 0000000..038a6d1 Binary files /dev/null and b/_module/ncs/pi_henchmen.ncs differ diff --git a/_module/ncs/qdb_c_qt1.ncs b/_module/ncs/qdb_c_qt1.ncs index a3c2799..d344e6e 100644 Binary files a/_module/ncs/qdb_c_qt1.ncs and b/_module/ncs/qdb_c_qt1.ncs differ diff --git a/_module/ncs/qdb_c_qt2.ncs b/_module/ncs/qdb_c_qt2.ncs index e4a8271..27bbd2f 100644 Binary files a/_module/ncs/qdb_c_qt2.ncs and b/_module/ncs/qdb_c_qt2.ncs differ diff --git a/_module/ncs/qdb_c_qt_o.ncs b/_module/ncs/qdb_c_qt_o.ncs index bf58b35..d84a3e4 100644 Binary files a/_module/ncs/qdb_c_qt_o.ncs and b/_module/ncs/qdb_c_qt_o.ncs differ diff --git a/_module/ncs/qdb_chk_goto1.ncs b/_module/ncs/qdb_chk_goto1.ncs index 060a6be..ff03700 100644 Binary files a/_module/ncs/qdb_chk_goto1.ncs and b/_module/ncs/qdb_chk_goto1.ncs differ diff --git a/_module/ncs/qdb_chk_goto2.ncs b/_module/ncs/qdb_chk_goto2.ncs index 688184f..d1729d7 100644 Binary files a/_module/ncs/qdb_chk_goto2.ncs and b/_module/ncs/qdb_chk_goto2.ncs differ diff --git a/_module/ncs/qdb_chk_gotoacpt.ncs b/_module/ncs/qdb_chk_gotoacpt.ncs index 060a6be..ff03700 100644 Binary files a/_module/ncs/qdb_chk_gotoacpt.ncs and b/_module/ncs/qdb_chk_gotoacpt.ncs differ diff --git a/_module/ncs/qdb_chk_r_accept.ncs b/_module/ncs/qdb_chk_r_accept.ncs index 0aaa021..7886a6c 100644 Binary files a/_module/ncs/qdb_chk_r_accept.ncs and b/_module/ncs/qdb_chk_r_accept.ncs differ diff --git a/_module/ncs/qdb_chk_steptype.ncs b/_module/ncs/qdb_chk_steptype.ncs index 5b3bc79..27ef851 100644 Binary files a/_module/ncs/qdb_chk_steptype.ncs and b/_module/ncs/qdb_chk_steptype.ncs differ diff --git a/_module/ncs/qdb_chknextstep.ncs b/_module/ncs/qdb_chknextstep.ncs index f48340f..9399649 100644 Binary files a/_module/ncs/qdb_chknextstep.ncs and b/_module/ncs/qdb_chknextstep.ncs differ diff --git a/_module/ncs/qdb_cs_boss.ncs b/_module/ncs/qdb_cs_boss.ncs index 15af3e9..07478d1 100644 Binary files a/_module/ncs/qdb_cs_boss.ncs and b/_module/ncs/qdb_cs_boss.ncs differ diff --git a/_module/ncs/qdb_cs_ccamp.ncs b/_module/ncs/qdb_cs_ccamp.ncs index 0800a62..aab60e7 100644 Binary files a/_module/ncs/qdb_cs_ccamp.ncs and b/_module/ncs/qdb_cs_ccamp.ncs differ diff --git a/_module/ncs/qdb_cs_cdelivery.ncs b/_module/ncs/qdb_cs_cdelivery.ncs index bd08a9e..ba9146a 100644 Binary files a/_module/ncs/qdb_cs_cdelivery.ncs and b/_module/ncs/qdb_cs_cdelivery.ncs differ diff --git a/_module/ncs/qdb_cs_citem.ncs b/_module/ncs/qdb_cs_citem.ncs index 9202b8e..4687a57 100644 Binary files a/_module/ncs/qdb_cs_citem.ncs and b/_module/ncs/qdb_cs_citem.ncs differ diff --git a/_module/ncs/qdb_cs_cspot.ncs b/_module/ncs/qdb_cs_cspot.ncs index 25ddf4b..d5aa160 100644 Binary files a/_module/ncs/qdb_cs_cspot.ncs and b/_module/ncs/qdb_cs_cspot.ncs differ diff --git a/_module/ncs/qdb_cs_pqd.ncs b/_module/ncs/qdb_cs_pqd.ncs index a328654..308ef6d 100644 Binary files a/_module/ncs/qdb_cs_pqd.ncs and b/_module/ncs/qdb_cs_pqd.ncs differ diff --git a/_module/ncs/qdb_listcamps.ncs b/_module/ncs/qdb_listcamps.ncs index 1b5c61c..15498c9 100644 Binary files a/_module/ncs/qdb_listcamps.ncs and b/_module/ncs/qdb_listcamps.ncs differ diff --git a/_module/ncs/qdb_qline1.ncs b/_module/ncs/qdb_qline1.ncs index 23ae117..8ff59e8 100644 Binary files a/_module/ncs/qdb_qline1.ncs and b/_module/ncs/qdb_qline1.ncs differ diff --git a/_module/ncs/qdb_qline2.ncs b/_module/ncs/qdb_qline2.ncs index 6a38a5f..bbeb2cd 100644 Binary files a/_module/ncs/qdb_qline2.ncs and b/_module/ncs/qdb_qline2.ncs differ diff --git a/_module/ncs/qdb_qline3.ncs b/_module/ncs/qdb_qline3.ncs index be49156..effa5ef 100644 Binary files a/_module/ncs/qdb_qline3.ncs and b/_module/ncs/qdb_qline3.ncs differ diff --git a/_module/ncs/qdb_qline4.ncs b/_module/ncs/qdb_qline4.ncs index 0a4609f..ce44154 100644 Binary files a/_module/ncs/qdb_qline4.ncs and b/_module/ncs/qdb_qline4.ncs differ diff --git a/_module/ncs/qdb_qline5.ncs b/_module/ncs/qdb_qline5.ncs index d2e0217..98fb887 100644 Binary files a/_module/ncs/qdb_qline5.ncs and b/_module/ncs/qdb_qline5.ncs differ diff --git a/_module/ncs/qdb_qline6.ncs b/_module/ncs/qdb_qline6.ncs index 797f3cd..09f5d4f 100644 Binary files a/_module/ncs/qdb_qline6.ncs and b/_module/ncs/qdb_qline6.ncs differ diff --git a/_module/ncs/qdb_qline7.ncs b/_module/ncs/qdb_qline7.ncs index 47f12d1..07deb8a 100644 Binary files a/_module/ncs/qdb_qline7.ncs and b/_module/ncs/qdb_qline7.ncs differ diff --git a/_module/ncs/qdb_qline8.ncs b/_module/ncs/qdb_qline8.ncs index d638131..30e2089 100644 Binary files a/_module/ncs/qdb_qline8.ncs and b/_module/ncs/qdb_qline8.ncs differ diff --git a/_module/ncs/qdb_qline9.ncs b/_module/ncs/qdb_qline9.ncs index b93124a..b8252ad 100644 Binary files a/_module/ncs/qdb_qline9.ncs and b/_module/ncs/qdb_qline9.ncs differ diff --git a/_module/ncs/qdb_qresp1.ncs b/_module/ncs/qdb_qresp1.ncs index 422b6f2..137dbd0 100644 Binary files a/_module/ncs/qdb_qresp1.ncs and b/_module/ncs/qdb_qresp1.ncs differ diff --git a/_module/ncs/qdb_qresp2.ncs b/_module/ncs/qdb_qresp2.ncs index d40bdf1..4d62a26 100644 Binary files a/_module/ncs/qdb_qresp2.ncs and b/_module/ncs/qdb_qresp2.ncs differ diff --git a/_module/ncs/qdb_qresp3.ncs b/_module/ncs/qdb_qresp3.ncs index 05b75f2..f454219 100644 Binary files a/_module/ncs/qdb_qresp3.ncs and b/_module/ncs/qdb_qresp3.ncs differ diff --git a/_module/ncs/qdb_qresp4.ncs b/_module/ncs/qdb_qresp4.ncs index d3c9c46..3056180 100644 Binary files a/_module/ncs/qdb_qresp4.ncs and b/_module/ncs/qdb_qresp4.ncs differ diff --git a/_module/ncs/qdb_qresp5.ncs b/_module/ncs/qdb_qresp5.ncs index 6a71f27..50dd589 100644 Binary files a/_module/ncs/qdb_qresp5.ncs and b/_module/ncs/qdb_qresp5.ncs differ diff --git a/_module/ncs/qdb_qresp6.ncs b/_module/ncs/qdb_qresp6.ncs index 24c74e4..b9fed9a 100644 Binary files a/_module/ncs/qdb_qresp6.ncs and b/_module/ncs/qdb_qresp6.ncs differ diff --git a/_module/ncs/qdb_qresp7.ncs b/_module/ncs/qdb_qresp7.ncs index 670955e..74d5162 100644 Binary files a/_module/ncs/qdb_qresp7.ncs and b/_module/ncs/qdb_qresp7.ncs differ diff --git a/_module/ncs/qdb_qresp8.ncs b/_module/ncs/qdb_qresp8.ncs index 924771a..d97020f 100644 Binary files a/_module/ncs/qdb_qresp8.ncs and b/_module/ncs/qdb_qresp8.ncs differ diff --git a/_module/ncs/qdb_testquest.ncs b/_module/ncs/qdb_testquest.ncs index 971f388..d808bad 100644 Binary files a/_module/ncs/qdb_testquest.ncs and b/_module/ncs/qdb_testquest.ncs differ diff --git a/_module/ncs/qp_ability_cha.ncs b/_module/ncs/qp_ability_cha.ncs index fccd2ba..9982b9a 100644 Binary files a/_module/ncs/qp_ability_cha.ncs and b/_module/ncs/qp_ability_cha.ncs differ diff --git a/_module/ncs/qp_ability_con.ncs b/_module/ncs/qp_ability_con.ncs index 69b7af4..584da98 100644 Binary files a/_module/ncs/qp_ability_con.ncs and b/_module/ncs/qp_ability_con.ncs differ diff --git a/_module/ncs/qp_ability_dex.ncs b/_module/ncs/qp_ability_dex.ncs index d3ab25f..4f9c9ba 100644 Binary files a/_module/ncs/qp_ability_dex.ncs and b/_module/ncs/qp_ability_dex.ncs differ diff --git a/_module/ncs/qp_ability_int.ncs b/_module/ncs/qp_ability_int.ncs index 70f2121..be01c1a 100644 Binary files a/_module/ncs/qp_ability_int.ncs and b/_module/ncs/qp_ability_int.ncs differ diff --git a/_module/ncs/qp_ability_str.ncs b/_module/ncs/qp_ability_str.ncs index a17592d..a05d491 100644 Binary files a/_module/ncs/qp_ability_str.ncs and b/_module/ncs/qp_ability_str.ncs differ diff --git a/_module/ncs/qp_ability_wis.ncs b/_module/ncs/qp_ability_wis.ncs index c4e7bed..0be6400 100644 Binary files a/_module/ncs/qp_ability_wis.ncs and b/_module/ncs/qp_ability_wis.ncs differ diff --git a/_module/ncs/qp_ac.ncs b/_module/ncs/qp_ac.ncs index dd7866f..66262ea 100644 Binary files a/_module/ncs/qp_ac.ncs and b/_module/ncs/qp_ac.ncs differ diff --git a/_module/ncs/qp_bonusacid.ncs b/_module/ncs/qp_bonusacid.ncs index 009a7e9..324fc8b 100644 Binary files a/_module/ncs/qp_bonusacid.ncs and b/_module/ncs/qp_bonusacid.ncs differ diff --git a/_module/ncs/qp_bonuscold.ncs b/_module/ncs/qp_bonuscold.ncs index ec41fb1..7796e30 100644 Binary files a/_module/ncs/qp_bonuscold.ncs and b/_module/ncs/qp_bonuscold.ncs differ diff --git a/_module/ncs/qp_bonusele.ncs b/_module/ncs/qp_bonusele.ncs index 0c3364e..c8824ac 100644 Binary files a/_module/ncs/qp_bonusele.ncs and b/_module/ncs/qp_bonusele.ncs differ diff --git a/_module/ncs/qp_bonusfire.ncs b/_module/ncs/qp_bonusfire.ncs index e6c9742..1580a05 100644 Binary files a/_module/ncs/qp_bonusfire.ncs and b/_module/ncs/qp_bonusfire.ncs differ diff --git a/_module/ncs/qp_bonussonic.ncs b/_module/ncs/qp_bonussonic.ncs index 85e8604..0d6ab30 100644 Binary files a/_module/ncs/qp_bonussonic.ncs and b/_module/ncs/qp_bonussonic.ncs differ diff --git a/_module/ncs/qp_death.ncs b/_module/ncs/qp_death.ncs index fad2c8a..8c31fbe 100644 Binary files a/_module/ncs/qp_death.ncs and b/_module/ncs/qp_death.ncs differ diff --git a/_module/ncs/qp_dmgred_1.ncs b/_module/ncs/qp_dmgred_1.ncs index 2952b63..3180091 100644 Binary files a/_module/ncs/qp_dmgred_1.ncs and b/_module/ncs/qp_dmgred_1.ncs differ diff --git a/_module/ncs/qp_dmgred_2.ncs b/_module/ncs/qp_dmgred_2.ncs index e2642ce..79dd9e1 100644 Binary files a/_module/ncs/qp_dmgred_2.ncs and b/_module/ncs/qp_dmgred_2.ncs differ diff --git a/_module/ncs/qp_enhancement.ncs b/_module/ncs/qp_enhancement.ncs index 45c4085..9f41a0c 100644 Binary files a/_module/ncs/qp_enhancement.ncs and b/_module/ncs/qp_enhancement.ncs differ diff --git a/_module/ncs/qp_evasion.ncs b/_module/ncs/qp_evasion.ncs index 175c269..9ea744b 100644 Binary files a/_module/ncs/qp_evasion.ncs and b/_module/ncs/qp_evasion.ncs differ diff --git a/_module/ncs/qp_fear.ncs b/_module/ncs/qp_fear.ncs index f5202c9..ea9a3de 100644 Binary files a/_module/ncs/qp_fear.ncs and b/_module/ncs/qp_fear.ncs differ diff --git a/_module/ncs/qp_freedom.ncs b/_module/ncs/qp_freedom.ncs index 5ad139b..beb1e0e 100644 Binary files a/_module/ncs/qp_freedom.ncs and b/_module/ncs/qp_freedom.ncs differ diff --git a/_module/ncs/qp_haste.ncs b/_module/ncs/qp_haste.ncs index 5e5a102..66e2f9b 100644 Binary files a/_module/ncs/qp_haste.ncs and b/_module/ncs/qp_haste.ncs differ diff --git a/_module/ncs/qp_hspell_blind.ncs b/_module/ncs/qp_hspell_blind.ncs index c362847..7a2108b 100644 Binary files a/_module/ncs/qp_hspell_blind.ncs and b/_module/ncs/qp_hspell_blind.ncs differ diff --git a/_module/ncs/qp_hspell_bolt.ncs b/_module/ncs/qp_hspell_bolt.ncs index d465ab0..22324f1 100644 Binary files a/_module/ncs/qp_hspell_bolt.ncs and b/_module/ncs/qp_hspell_bolt.ncs differ diff --git a/_module/ncs/qp_hspell_gtouch.ncs b/_module/ncs/qp_hspell_gtouch.ncs index 456e40e..99230fe 100644 Binary files a/_module/ncs/qp_hspell_gtouch.ncs and b/_module/ncs/qp_hspell_gtouch.ncs differ diff --git a/_module/ncs/qp_hspell_loop.ncs b/_module/ncs/qp_hspell_loop.ncs index 33ff1ed..38c0122 100644 Binary files a/_module/ncs/qp_hspell_loop.ncs and b/_module/ncs/qp_hspell_loop.ncs differ diff --git a/_module/ncs/qp_hspell_missl1.ncs b/_module/ncs/qp_hspell_missl1.ncs index 55e3728..7328151 100644 Binary files a/_module/ncs/qp_hspell_missl1.ncs and b/_module/ncs/qp_hspell_missl1.ncs differ diff --git a/_module/ncs/qp_hspell_missl2.ncs b/_module/ncs/qp_hspell_missl2.ncs index ca03ebb..13f0f1e 100644 Binary files a/_module/ncs/qp_hspell_missl2.ncs and b/_module/ncs/qp_hspell_missl2.ncs differ diff --git a/_module/ncs/qp_hspell_missl3.ncs b/_module/ncs/qp_hspell_missl3.ncs index 921b570..3891eb0 100644 Binary files a/_module/ncs/qp_hspell_missl3.ncs and b/_module/ncs/qp_hspell_missl3.ncs differ diff --git a/_module/ncs/qp_hspell_touch.ncs b/_module/ncs/qp_hspell_touch.ncs index 470bf7f..d942175 100644 Binary files a/_module/ncs/qp_hspell_touch.ncs and b/_module/ncs/qp_hspell_touch.ncs differ diff --git a/_module/ncs/qp_immcrit.ncs b/_module/ncs/qp_immcrit.ncs index 65b6b22..dbdafbc 100644 Binary files a/_module/ncs/qp_immcrit.ncs and b/_module/ncs/qp_immcrit.ncs differ diff --git a/_module/ncs/qp_immharm.ncs b/_module/ncs/qp_immharm.ncs index 2e2846d..cc2b6ee 100644 Binary files a/_module/ncs/qp_immharm.ncs and b/_module/ncs/qp_immharm.ncs differ diff --git a/_module/ncs/qp_itemcon2.ncs b/_module/ncs/qp_itemcon2.ncs index 0389f21..605a484 100644 Binary files a/_module/ncs/qp_itemcon2.ncs and b/_module/ncs/qp_itemcon2.ncs differ diff --git a/_module/ncs/qp_keen.ncs b/_module/ncs/qp_keen.ncs index 3950b63..c113621 100644 Binary files a/_module/ncs/qp_keen.ncs and b/_module/ncs/qp_keen.ncs differ diff --git a/_module/ncs/qp_light.ncs b/_module/ncs/qp_light.ncs index 7def50c..c69745a 100644 Binary files a/_module/ncs/qp_light.ncs and b/_module/ncs/qp_light.ncs differ diff --git a/_module/ncs/qp_redacid.ncs b/_module/ncs/qp_redacid.ncs index f9462ac..88220ce 100644 Binary files a/_module/ncs/qp_redacid.ncs and b/_module/ncs/qp_redacid.ncs differ diff --git a/_module/ncs/qp_redcold.ncs b/_module/ncs/qp_redcold.ncs index 95bbcde..776c0f6 100644 Binary files a/_module/ncs/qp_redcold.ncs and b/_module/ncs/qp_redcold.ncs differ diff --git a/_module/ncs/qp_redele.ncs b/_module/ncs/qp_redele.ncs index 9e00136..35e7177 100644 Binary files a/_module/ncs/qp_redele.ncs and b/_module/ncs/qp_redele.ncs differ diff --git a/_module/ncs/qp_redfire.ncs b/_module/ncs/qp_redfire.ncs index cf84216..2db4e69 100644 Binary files a/_module/ncs/qp_redfire.ncs and b/_module/ncs/qp_redfire.ncs differ diff --git a/_module/ncs/qp_redmagic.ncs b/_module/ncs/qp_redmagic.ncs index 681d1f9..f5af32d 100644 Binary files a/_module/ncs/qp_redmagic.ncs and b/_module/ncs/qp_redmagic.ncs differ diff --git a/_module/ncs/qp_redneg.ncs b/_module/ncs/qp_redneg.ncs index e95bb3e..1d3a3f4 100644 Binary files a/_module/ncs/qp_redneg.ncs and b/_module/ncs/qp_redneg.ncs differ diff --git a/_module/ncs/qp_regen.ncs b/_module/ncs/qp_regen.ncs index 53dc95e..68d7316 100644 Binary files a/_module/ncs/qp_regen.ncs and b/_module/ncs/qp_regen.ncs differ diff --git a/_module/ncs/qp_spell_adead.ncs b/_module/ncs/qp_spell_adead.ncs index d7c26b3..646088d 100644 Binary files a/_module/ncs/qp_spell_adead.ncs and b/_module/ncs/qp_spell_adead.ncs differ diff --git a/_module/ncs/qp_spell_aglory.ncs b/_module/ncs/qp_spell_aglory.ncs index 2e7ad52..a7a234f 100644 Binary files a/_module/ncs/qp_spell_aglory.ncs and b/_module/ncs/qp_spell_aglory.ncs differ diff --git a/_module/ncs/qp_spell_cltng.ncs b/_module/ncs/qp_spell_cltng.ncs index 7d60f1e..75f2bbf 100644 Binary files a/_module/ncs/qp_spell_cltng.ncs and b/_module/ncs/qp_spell_cltng.ncs differ diff --git a/_module/ncs/qp_spell_cser.ncs b/_module/ncs/qp_spell_cser.ncs index 2bdbada..51d7574 100644 Binary files a/_module/ncs/qp_spell_cser.ncs and b/_module/ncs/qp_spell_cser.ncs differ diff --git a/_module/ncs/qp_spell_cundead.ncs b/_module/ncs/qp_spell_cundead.ncs index 7a5078e..1e5420c 100644 Binary files a/_module/ncs/qp_spell_cundead.ncs and b/_module/ncs/qp_spell_cundead.ncs differ diff --git a/_module/ncs/qp_spell_eshield.ncs b/_module/ncs/qp_spell_eshield.ncs index 854d3a7..927cbc9 100644 Binary files a/_module/ncs/qp_spell_eshield.ncs and b/_module/ncs/qp_spell_eshield.ncs differ diff --git a/_module/ncs/qp_spell_heal.ncs b/_module/ncs/qp_spell_heal.ncs index e54aec5..454ba9b 100644 Binary files a/_module/ncs/qp_spell_heal.ncs and b/_module/ncs/qp_spell_heal.ncs differ diff --git a/_module/ncs/qp_spell_invis.ncs b/_module/ncs/qp_spell_invis.ncs index cdfa80b..115c9b9 100644 Binary files a/_module/ncs/qp_spell_invis.ncs and b/_module/ncs/qp_spell_invis.ncs differ diff --git a/_module/ncs/qp_spell_missle.ncs b/_module/ncs/qp_spell_missle.ncs index ae15622..60bcf3d 100644 Binary files a/_module/ncs/qp_spell_missle.ncs and b/_module/ncs/qp_spell_missle.ncs differ diff --git a/_module/ncs/qp_spell_wcry.ncs b/_module/ncs/qp_spell_wcry.ncs index df798ff..612ebf4 100644 Binary files a/_module/ncs/qp_spell_wcry.ncs and b/_module/ncs/qp_spell_wcry.ncs differ diff --git a/_module/ncs/qp_spellresist.ncs b/_module/ncs/qp_spellresist.ncs index bc878f6..7b80a9e 100644 Binary files a/_module/ncs/qp_spellresist.ncs and b/_module/ncs/qp_spellresist.ncs differ diff --git a/_module/ncs/qp_vregen.ncs b/_module/ncs/qp_vregen.ncs index 7e35954..dad1130 100644 Binary files a/_module/ncs/qp_vregen.ncs and b/_module/ncs/qp_vregen.ncs differ diff --git a/_module/ncs/qst1_accept.ncs b/_module/ncs/qst1_accept.ncs index 9e9e0fe..61d3729 100644 Binary files a/_module/ncs/qst1_accept.ncs and b/_module/ncs/qst1_accept.ncs differ diff --git a/_module/ncs/qst1_done.ncs b/_module/ncs/qst1_done.ncs index b10d2eb..ea57d34 100644 Binary files a/_module/ncs/qst1_done.ncs and b/_module/ncs/qst1_done.ncs differ diff --git a/_module/ncs/qst1_setup.ncs b/_module/ncs/qst1_setup.ncs index 7b4dc22..e660b39 100644 Binary files a/_module/ncs/qst1_setup.ncs and b/_module/ncs/qst1_setup.ncs differ diff --git a/_module/ncs/qst_accept.ncs b/_module/ncs/qst_accept.ncs index 8364c80..72a962c 100644 Binary files a/_module/ncs/qst_accept.ncs and b/_module/ncs/qst_accept.ncs differ diff --git a/_module/ncs/qst_bless.ncs b/_module/ncs/qst_bless.ncs index 8f60bb3..eb9c6e7 100644 Binary files a/_module/ncs/qst_bless.ncs and b/_module/ncs/qst_bless.ncs differ diff --git a/_module/ncs/qst_bless_done.ncs b/_module/ncs/qst_bless_done.ncs index 8bf94ee..1ace2ab 100644 Binary files a/_module/ncs/qst_bless_done.ncs and b/_module/ncs/qst_bless_done.ncs differ diff --git a/_module/ncs/qst_bless_temp.ncs b/_module/ncs/qst_bless_temp.ncs index 4c65e3c..263ce8b 100644 Binary files a/_module/ncs/qst_bless_temp.ncs and b/_module/ncs/qst_bless_temp.ncs differ diff --git a/_module/ncs/qst_c_accepted.ncs b/_module/ncs/qst_c_accepted.ncs index 9829e1e..43498d1 100644 Binary files a/_module/ncs/qst_c_accepted.ncs and b/_module/ncs/qst_c_accepted.ncs differ diff --git a/_module/ncs/qst_c_blessing.ncs b/_module/ncs/qst_c_blessing.ncs index c8a1024..2dd533c 100644 Binary files a/_module/ncs/qst_c_blessing.ncs and b/_module/ncs/qst_c_blessing.ncs differ diff --git a/_module/ncs/qst_c_boss.ncs b/_module/ncs/qst_c_boss.ncs index e9e47d5..2b83f63 100644 Binary files a/_module/ncs/qst_c_boss.ncs and b/_module/ncs/qst_c_boss.ncs differ diff --git a/_module/ncs/qst_c_complete2.ncs b/_module/ncs/qst_c_complete2.ncs index 2e7afc6..83de793 100644 Binary files a/_module/ncs/qst_c_complete2.ncs and b/_module/ncs/qst_c_complete2.ncs differ diff --git a/_module/ncs/qst_c_favor.ncs b/_module/ncs/qst_c_favor.ncs index 67b7c6b..e6deede 100644 Binary files a/_module/ncs/qst_c_favor.ncs and b/_module/ncs/qst_c_favor.ncs differ diff --git a/_module/ncs/qst_c_notonqst.ncs b/_module/ncs/qst_c_notonqst.ncs index c00a288..593dcc0 100644 Binary files a/_module/ncs/qst_c_notonqst.ncs and b/_module/ncs/qst_c_notonqst.ncs differ diff --git a/_module/ncs/qst_c_onqst.ncs b/_module/ncs/qst_c_onqst.ncs index 9dce612..06f98c3 100644 Binary files a/_module/ncs/qst_c_onqst.ncs and b/_module/ncs/qst_c_onqst.ncs differ diff --git a/_module/ncs/qst_c_overall.ncs b/_module/ncs/qst_c_overall.ncs index d5e92d9..2f1366e 100644 Binary files a/_module/ncs/qst_c_overall.ncs and b/_module/ncs/qst_c_overall.ncs differ diff --git a/_module/ncs/qst_c_prisoner.ncs b/_module/ncs/qst_c_prisoner.ncs index 5a88f82..6e367a4 100644 Binary files a/_module/ncs/qst_c_prisoner.ncs and b/_module/ncs/qst_c_prisoner.ncs differ diff --git a/_module/ncs/qst_c_quickstep.ncs b/_module/ncs/qst_c_quickstep.ncs index 6f4f2ca..102c4e3 100644 Binary files a/_module/ncs/qst_c_quickstep.ncs and b/_module/ncs/qst_c_quickstep.ncs differ diff --git a/_module/ncs/qst_c_response.ncs b/_module/ncs/qst_c_response.ncs index 5384d3e..badc918 100644 Binary files a/_module/ncs/qst_c_response.ncs and b/_module/ncs/qst_c_response.ncs differ diff --git a/_module/ncs/qst_c_s1.ncs b/_module/ncs/qst_c_s1.ncs index 4d7a540..5e9a40e 100644 Binary files a/_module/ncs/qst_c_s1.ncs and b/_module/ncs/qst_c_s1.ncs differ diff --git a/_module/ncs/qst_c_s2.ncs b/_module/ncs/qst_c_s2.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/qst_c_s2.ncs and b/_module/ncs/qst_c_s2.ncs differ diff --git a/_module/ncs/qst_c_s3.ncs b/_module/ncs/qst_c_s3.ncs index 7467470..b5fbf27 100644 Binary files a/_module/ncs/qst_c_s3.ncs and b/_module/ncs/qst_c_s3.ncs differ diff --git a/_module/ncs/qst_c_s4.ncs b/_module/ncs/qst_c_s4.ncs index f238397..72eeb6a 100644 Binary files a/_module/ncs/qst_c_s4.ncs and b/_module/ncs/qst_c_s4.ncs differ diff --git a/_module/ncs/qst_c_special1.ncs b/_module/ncs/qst_c_special1.ncs index e4e7d9d..b401361 100644 Binary files a/_module/ncs/qst_c_special1.ncs and b/_module/ncs/qst_c_special1.ncs differ diff --git a/_module/ncs/qst_c_special2.ncs b/_module/ncs/qst_c_special2.ncs index 2dc0064..8b72e49 100644 Binary files a/_module/ncs/qst_c_special2.ncs and b/_module/ncs/qst_c_special2.ncs differ diff --git a/_module/ncs/qst_c_v1.ncs b/_module/ncs/qst_c_v1.ncs index f84d4bd..cc361b2 100644 Binary files a/_module/ncs/qst_c_v1.ncs and b/_module/ncs/qst_c_v1.ncs differ diff --git a/_module/ncs/qst_c_v2.ncs b/_module/ncs/qst_c_v2.ncs index 04ec4d4..4241303 100644 Binary files a/_module/ncs/qst_c_v2.ncs and b/_module/ncs/qst_c_v2.ncs differ diff --git a/_module/ncs/qst_c_v3.ncs b/_module/ncs/qst_c_v3.ncs index dd8dd75..9b22c89 100644 Binary files a/_module/ncs/qst_c_v3.ncs and b/_module/ncs/qst_c_v3.ncs differ diff --git a/_module/ncs/qst_checkmobs.ncs b/_module/ncs/qst_checkmobs.ncs index 806c0a6..17b3c5f 100644 Binary files a/_module/ncs/qst_checkmobs.ncs and b/_module/ncs/qst_checkmobs.ncs differ diff --git a/_module/ncs/qst_chk_r_0.ncs b/_module/ncs/qst_chk_r_0.ncs index 4fa3008..832694e 100644 Binary files a/_module/ncs/qst_chk_r_0.ncs and b/_module/ncs/qst_chk_r_0.ncs differ diff --git a/_module/ncs/qst_chk_r_1.ncs b/_module/ncs/qst_chk_r_1.ncs index 2c34007..48f9675 100644 Binary files a/_module/ncs/qst_chk_r_1.ncs and b/_module/ncs/qst_chk_r_1.ncs differ diff --git a/_module/ncs/qst_chk_r_2.ncs b/_module/ncs/qst_chk_r_2.ncs index f971f1a..dd864ac 100644 Binary files a/_module/ncs/qst_chk_r_2.ncs and b/_module/ncs/qst_chk_r_2.ncs differ diff --git a/_module/ncs/qst_chk_r_3.ncs b/_module/ncs/qst_chk_r_3.ncs index 1f1ac37..cbcfb9c 100644 Binary files a/_module/ncs/qst_chk_r_3.ncs and b/_module/ncs/qst_chk_r_3.ncs differ diff --git a/_module/ncs/qst_chk_r_4.ncs b/_module/ncs/qst_chk_r_4.ncs index ea986af..04723a1 100644 Binary files a/_module/ncs/qst_chk_r_4.ncs and b/_module/ncs/qst_chk_r_4.ncs differ diff --git a/_module/ncs/qst_chk_r_5.ncs b/_module/ncs/qst_chk_r_5.ncs index 9b0952c..54ffd0b 100644 Binary files a/_module/ncs/qst_chk_r_5.ncs and b/_module/ncs/qst_chk_r_5.ncs differ diff --git a/_module/ncs/qst_chkoverall.ncs b/_module/ncs/qst_chkoverall.ncs index 824371e..812a945 100644 Binary files a/_module/ncs/qst_chkoverall.ncs and b/_module/ncs/qst_chkoverall.ncs differ diff --git a/_module/ncs/qst_clearqst.ncs b/_module/ncs/qst_clearqst.ncs index 73db081..7be01fe 100644 Binary files a/_module/ncs/qst_clearqst.ncs and b/_module/ncs/qst_clearqst.ncs differ diff --git a/_module/ncs/qst_cnvsetup.ncs b/_module/ncs/qst_cnvsetup.ncs index 45d86d6..646bf9d 100644 Binary files a/_module/ncs/qst_cnvsetup.ncs and b/_module/ncs/qst_cnvsetup.ncs differ diff --git a/_module/ncs/qst_cq_d_4.ncs b/_module/ncs/qst_cq_d_4.ncs index 1dc5c45..10d31f2 100644 Binary files a/_module/ncs/qst_cq_d_4.ncs and b/_module/ncs/qst_cq_d_4.ncs differ diff --git a/_module/ncs/qst_cq_done_1_h1.ncs b/_module/ncs/qst_cq_done_1_h1.ncs index 15b77b4..6fb3f9e 100644 Binary files a/_module/ncs/qst_cq_done_1_h1.ncs and b/_module/ncs/qst_cq_done_1_h1.ncs differ diff --git a/_module/ncs/qst_cq_done_2_h1.ncs b/_module/ncs/qst_cq_done_2_h1.ncs index f1e9ee6..c81c308 100644 Binary files a/_module/ncs/qst_cq_done_2_h1.ncs and b/_module/ncs/qst_cq_done_2_h1.ncs differ diff --git a/_module/ncs/qst_custom_sa.ncs b/_module/ncs/qst_custom_sa.ncs index c687bed..32d7a48 100644 Binary files a/_module/ncs/qst_custom_sa.ncs and b/_module/ncs/qst_custom_sa.ncs differ diff --git a/_module/ncs/qst_custom_sa_t3.ncs b/_module/ncs/qst_custom_sa_t3.ncs index 5e0ed51..a93deba 100644 Binary files a/_module/ncs/qst_custom_sa_t3.ncs and b/_module/ncs/qst_custom_sa_t3.ncs differ diff --git a/_module/ncs/qst_customsetup.ncs b/_module/ncs/qst_customsetup.ncs index 3047b74..18d77a2 100644 Binary files a/_module/ncs/qst_customsetup.ncs and b/_module/ncs/qst_customsetup.ncs differ diff --git a/_module/ncs/qst_don_minrwd.ncs b/_module/ncs/qst_don_minrwd.ncs index da65020..792b6e6 100644 Binary files a/_module/ncs/qst_don_minrwd.ncs and b/_module/ncs/qst_don_minrwd.ncs differ diff --git a/_module/ncs/qst_done.ncs b/_module/ncs/qst_done.ncs index 482c9ed..20df7f8 100644 Binary files a/_module/ncs/qst_done.ncs and b/_module/ncs/qst_done.ncs differ diff --git a/_module/ncs/qst_done_minevil.ncs b/_module/ncs/qst_done_minevil.ncs index e20f526..cba8af3 100644 Binary files a/_module/ncs/qst_done_minevil.ncs and b/_module/ncs/qst_done_minevil.ncs differ diff --git a/_module/ncs/qst_done_qst6q4.ncs b/_module/ncs/qst_done_qst6q4.ncs index 408a993..7eca666 100644 Binary files a/_module/ncs/qst_done_qst6q4.ncs and b/_module/ncs/qst_done_qst6q4.ncs differ diff --git a/_module/ncs/qst_done_refuse.ncs b/_module/ncs/qst_done_refuse.ncs index 3dd177f..a99236c 100644 Binary files a/_module/ncs/qst_done_refuse.ncs and b/_module/ncs/qst_done_refuse.ncs differ diff --git a/_module/ncs/qst_enchant_temp.ncs b/_module/ncs/qst_enchant_temp.ncs index 10dda14..6811ae0 100644 Binary files a/_module/ncs/qst_enchant_temp.ncs and b/_module/ncs/qst_enchant_temp.ncs differ diff --git a/_module/ncs/qst_favor.ncs b/_module/ncs/qst_favor.ncs index 751aae7..dfac6a2 100644 Binary files a/_module/ncs/qst_favor.ncs and b/_module/ncs/qst_favor.ncs differ diff --git a/_module/ncs/qst_good_accept.ncs b/_module/ncs/qst_good_accept.ncs index 51fcfb8..a28b052 100644 Binary files a/_module/ncs/qst_good_accept.ncs and b/_module/ncs/qst_good_accept.ncs differ diff --git a/_module/ncs/qst_hasboss.ncs b/_module/ncs/qst_hasboss.ncs index e9e47d5..2b83f63 100644 Binary files a/_module/ncs/qst_hasboss.ncs and b/_module/ncs/qst_hasboss.ncs differ diff --git a/_module/ncs/qst_hasitem.ncs b/_module/ncs/qst_hasitem.ncs index 51c5f7a..60f9262 100644 Binary files a/_module/ncs/qst_hasitem.ncs and b/_module/ncs/qst_hasitem.ncs differ diff --git a/_module/ncs/qst_hasitem_npc1.ncs b/_module/ncs/qst_hasitem_npc1.ncs index 914514b..ddf1b13 100644 Binary files a/_module/ncs/qst_hasitem_npc1.ncs and b/_module/ncs/qst_hasitem_npc1.ncs differ diff --git a/_module/ncs/qst_hasitem_npc2.ncs b/_module/ncs/qst_hasitem_npc2.ncs index 0ec8220..2777139 100644 Binary files a/_module/ncs/qst_hasitem_npc2.ncs and b/_module/ncs/qst_hasitem_npc2.ncs differ diff --git a/_module/ncs/qst_hasitem_npc3.ncs b/_module/ncs/qst_hasitem_npc3.ncs index d6e81d1..ddecd13 100644 Binary files a/_module/ncs/qst_hasitem_npc3.ncs and b/_module/ncs/qst_hasitem_npc3.ncs differ diff --git a/_module/ncs/qst_hasitem_r1.ncs b/_module/ncs/qst_hasitem_r1.ncs index c24c144..be3e5ea 100644 Binary files a/_module/ncs/qst_hasitem_r1.ncs and b/_module/ncs/qst_hasitem_r1.ncs differ diff --git a/_module/ncs/qst_hasitem_r2.ncs b/_module/ncs/qst_hasitem_r2.ncs index 827344c..1dbf61c 100644 Binary files a/_module/ncs/qst_hasitem_r2.ncs and b/_module/ncs/qst_hasitem_r2.ncs differ diff --git a/_module/ncs/qst_hasitem_r3.ncs b/_module/ncs/qst_hasitem_r3.ncs index c2a4f4e..3da5307 100644 Binary files a/_module/ncs/qst_hasitem_r3.ncs and b/_module/ncs/qst_hasitem_r3.ncs differ diff --git a/_module/ncs/qst_implement.ncs b/_module/ncs/qst_implement.ncs index d50522c..5fb0eb4 100644 Binary files a/_module/ncs/qst_implement.ncs and b/_module/ncs/qst_implement.ncs differ diff --git a/_module/ncs/qst_linedone.ncs b/_module/ncs/qst_linedone.ncs index 1b34733..b17db37 100644 Binary files a/_module/ncs/qst_linedone.ncs and b/_module/ncs/qst_linedone.ncs differ diff --git a/_module/ncs/qst_main_1.ncs b/_module/ncs/qst_main_1.ncs index a58b3a5..55851b2 100644 Binary files a/_module/ncs/qst_main_1.ncs and b/_module/ncs/qst_main_1.ncs differ diff --git a/_module/ncs/qst_mq1_1_accept.ncs b/_module/ncs/qst_mq1_1_accept.ncs index 2d3fcd1..56b5e9b 100644 Binary files a/_module/ncs/qst_mq1_1_accept.ncs and b/_module/ncs/qst_mq1_1_accept.ncs differ diff --git a/_module/ncs/qst_mq1_1_done.ncs b/_module/ncs/qst_mq1_1_done.ncs index cc018cb..5ab5386 100644 Binary files a/_module/ncs/qst_mq1_1_done.ncs and b/_module/ncs/qst_mq1_1_done.ncs differ diff --git a/_module/ncs/qst_mq1_2_accept.ncs b/_module/ncs/qst_mq1_2_accept.ncs index 35d9b18..5232fb1 100644 Binary files a/_module/ncs/qst_mq1_2_accept.ncs and b/_module/ncs/qst_mq1_2_accept.ncs differ diff --git a/_module/ncs/qst_mq1_2_c3.ncs b/_module/ncs/qst_mq1_2_c3.ncs index 62ecf72..72070f8 100644 Binary files a/_module/ncs/qst_mq1_2_c3.ncs and b/_module/ncs/qst_mq1_2_c3.ncs differ diff --git a/_module/ncs/qst_mq1_2_done.ncs b/_module/ncs/qst_mq1_2_done.ncs index f3b2f51..3615b36 100644 Binary files a/_module/ncs/qst_mq1_2_done.ncs and b/_module/ncs/qst_mq1_2_done.ncs differ diff --git a/_module/ncs/qst_mq1_3_accept.ncs b/_module/ncs/qst_mq1_3_accept.ncs index b790838..37033a6 100644 Binary files a/_module/ncs/qst_mq1_3_accept.ncs and b/_module/ncs/qst_mq1_3_accept.ncs differ diff --git a/_module/ncs/qst_mq1_3_done.ncs b/_module/ncs/qst_mq1_3_done.ncs index 988793a..958271f 100644 Binary files a/_module/ncs/qst_mq1_3_done.ncs and b/_module/ncs/qst_mq1_3_done.ncs differ diff --git a/_module/ncs/qst_mq1_3_tkn1.ncs b/_module/ncs/qst_mq1_3_tkn1.ncs index 279f17c..2081027 100644 Binary files a/_module/ncs/qst_mq1_3_tkn1.ncs and b/_module/ncs/qst_mq1_3_tkn1.ncs differ diff --git a/_module/ncs/qst_mq1_c3.ncs b/_module/ncs/qst_mq1_c3.ncs index 867262e..cfaa703 100644 Binary files a/_module/ncs/qst_mq1_c3.ncs and b/_module/ncs/qst_mq1_c3.ncs differ diff --git a/_module/ncs/qst_mq2_1_accept.ncs b/_module/ncs/qst_mq2_1_accept.ncs index d911ee4..bb2b09d 100644 Binary files a/_module/ncs/qst_mq2_1_accept.ncs and b/_module/ncs/qst_mq2_1_accept.ncs differ diff --git a/_module/ncs/qst_mq2_accept.ncs b/_module/ncs/qst_mq2_accept.ncs index 2ca23d9..3a7791a 100644 Binary files a/_module/ncs/qst_mq2_accept.ncs and b/_module/ncs/qst_mq2_accept.ncs differ diff --git a/_module/ncs/qst_mq2_c3.ncs b/_module/ncs/qst_mq2_c3.ncs index 62ecf72..72070f8 100644 Binary files a/_module/ncs/qst_mq2_c3.ncs and b/_module/ncs/qst_mq2_c3.ncs differ diff --git a/_module/ncs/qst_mq2_done.ncs b/_module/ncs/qst_mq2_done.ncs index 932510a..1eeac21 100644 Binary files a/_module/ncs/qst_mq2_done.ncs and b/_module/ncs/qst_mq2_done.ncs differ diff --git a/_module/ncs/qst_mq_1_c_5.ncs b/_module/ncs/qst_mq_1_c_5.ncs index f29b760..a121637 100644 Binary files a/_module/ncs/qst_mq_1_c_5.ncs and b/_module/ncs/qst_mq_1_c_5.ncs differ diff --git a/_module/ncs/qst_mq_final_a.ncs b/_module/ncs/qst_mq_final_a.ncs index 3f2b6d2..f2bea15 100644 Binary files a/_module/ncs/qst_mq_final_a.ncs and b/_module/ncs/qst_mq_final_a.ncs differ diff --git a/_module/ncs/qst_mq_final_d.ncs b/_module/ncs/qst_mq_final_d.ncs index 45104c1..8676b0a 100644 Binary files a/_module/ncs/qst_mq_final_d.ncs and b/_module/ncs/qst_mq_final_d.ncs differ diff --git a/_module/ncs/qst_mq_final_su.ncs b/_module/ncs/qst_mq_final_su.ncs index 7c7c4d9..b5cf699 100644 Binary files a/_module/ncs/qst_mq_final_su.ncs and b/_module/ncs/qst_mq_final_su.ncs differ diff --git a/_module/ncs/qst_noitem.ncs b/_module/ncs/qst_noitem.ncs index 3f7e972..e0a8531 100644 Binary files a/_module/ncs/qst_noitem.ncs and b/_module/ncs/qst_noitem.ncs differ diff --git a/_module/ncs/qst_quickstep.ncs b/_module/ncs/qst_quickstep.ncs index 8ca33b7..bde3751 100644 Binary files a/_module/ncs/qst_quickstep.ncs and b/_module/ncs/qst_quickstep.ncs differ diff --git a/_module/ncs/qst_setup.ncs b/_module/ncs/qst_setup.ncs index 9cad4f0..b9d879b 100644 Binary files a/_module/ncs/qst_setup.ncs and b/_module/ncs/qst_setup.ncs differ diff --git a/_module/ncs/qst_setupquests.ncs b/_module/ncs/qst_setupquests.ncs index 6b47180..a1d9a57 100644 Binary files a/_module/ncs/qst_setupquests.ncs and b/_module/ncs/qst_setupquests.ncs differ diff --git a/_module/ncs/qst_special_done.ncs b/_module/ncs/qst_special_done.ncs index 13cda30..94e3c92 100644 Binary files a/_module/ncs/qst_special_done.ncs and b/_module/ncs/qst_special_done.ncs differ diff --git a/_module/ncs/qst_test.ncs b/_module/ncs/qst_test.ncs index daef2e8..435479f 100644 Binary files a/_module/ncs/qst_test.ncs and b/_module/ncs/qst_test.ncs differ diff --git a/_module/ncs/rc1_areaenter.ncs b/_module/ncs/rc1_areaenter.ncs index 3c13675..92eca02 100644 Binary files a/_module/ncs/rc1_areaenter.ncs and b/_module/ncs/rc1_areaenter.ncs differ diff --git a/_module/ncs/rd_false.ncs b/_module/ncs/rd_false.ncs index 9418978..2a79a4e 100644 Binary files a/_module/ncs/rd_false.ncs and b/_module/ncs/rd_false.ncs differ diff --git a/_module/ncs/t1_2_accept.ncs b/_module/ncs/t1_2_accept.ncs index 722f9bd..626b74e 100644 Binary files a/_module/ncs/t1_2_accept.ncs and b/_module/ncs/t1_2_accept.ncs differ diff --git a/_module/ncs/t1_2_done.ncs b/_module/ncs/t1_2_done.ncs index 2b773b1..8fe9563 100644 Binary files a/_module/ncs/t1_2_done.ncs and b/_module/ncs/t1_2_done.ncs differ diff --git a/_module/ncs/t1_2_setup.ncs b/_module/ncs/t1_2_setup.ncs index 328198c..f1d98a8 100644 Binary files a/_module/ncs/t1_2_setup.ncs and b/_module/ncs/t1_2_setup.ncs differ diff --git a/_module/ncs/t1_3_accept.ncs b/_module/ncs/t1_3_accept.ncs index b26aa46..f238c4a 100644 Binary files a/_module/ncs/t1_3_accept.ncs and b/_module/ncs/t1_3_accept.ncs differ diff --git a/_module/ncs/t1_3_c.ncs b/_module/ncs/t1_3_c.ncs index de186c7..7402d70 100644 Binary files a/_module/ncs/t1_3_c.ncs and b/_module/ncs/t1_3_c.ncs differ diff --git a/_module/ncs/t1_3_done.ncs b/_module/ncs/t1_3_done.ncs index 9821553..39fb2db 100644 Binary files a/_module/ncs/t1_3_done.ncs and b/_module/ncs/t1_3_done.ncs differ diff --git a/_module/ncs/t1_3_setup.ncs b/_module/ncs/t1_3_setup.ncs index 520246c..1c37cc0 100644 Binary files a/_module/ncs/t1_3_setup.ncs and b/_module/ncs/t1_3_setup.ncs differ diff --git a/_module/ncs/t1_accept.ncs b/_module/ncs/t1_accept.ncs index 90b3004..8e3ce96 100644 Binary files a/_module/ncs/t1_accept.ncs and b/_module/ncs/t1_accept.ncs differ diff --git a/_module/ncs/t1_c.ncs b/_module/ncs/t1_c.ncs index a1ffd80..e4ac348 100644 Binary files a/_module/ncs/t1_c.ncs and b/_module/ncs/t1_c.ncs differ diff --git a/_module/ncs/t1_done.ncs b/_module/ncs/t1_done.ncs index 9ff1c26..3bd7717 100644 Binary files a/_module/ncs/t1_done.ncs and b/_module/ncs/t1_done.ncs differ diff --git a/_module/ncs/t1_setup.ncs b/_module/ncs/t1_setup.ncs index efe432c..2c9c662 100644 Binary files a/_module/ncs/t1_setup.ncs and b/_module/ncs/t1_setup.ncs differ diff --git a/_module/ncs/t2_2_accept.ncs b/_module/ncs/t2_2_accept.ncs index 722f9bd..626b74e 100644 Binary files a/_module/ncs/t2_2_accept.ncs and b/_module/ncs/t2_2_accept.ncs differ diff --git a/_module/ncs/t2_2_done.ncs b/_module/ncs/t2_2_done.ncs index de63a9a..d930e76 100644 Binary files a/_module/ncs/t2_2_done.ncs and b/_module/ncs/t2_2_done.ncs differ diff --git a/_module/ncs/t2_2_setup.ncs b/_module/ncs/t2_2_setup.ncs index 6c76e80..2f886de 100644 Binary files a/_module/ncs/t2_2_setup.ncs and b/_module/ncs/t2_2_setup.ncs differ diff --git a/_module/ncs/t2_3_accept.ncs b/_module/ncs/t2_3_accept.ncs index 69c6df6..2f75978 100644 Binary files a/_module/ncs/t2_3_accept.ncs and b/_module/ncs/t2_3_accept.ncs differ diff --git a/_module/ncs/t2_3_c.ncs b/_module/ncs/t2_3_c.ncs index d936599..a44e001 100644 Binary files a/_module/ncs/t2_3_c.ncs and b/_module/ncs/t2_3_c.ncs differ diff --git a/_module/ncs/t2_3_done.ncs b/_module/ncs/t2_3_done.ncs index 397dd8a..219c7fa 100644 Binary files a/_module/ncs/t2_3_done.ncs and b/_module/ncs/t2_3_done.ncs differ diff --git a/_module/ncs/t2_3_setup.ncs b/_module/ncs/t2_3_setup.ncs index 5ef8c48..e2c3c2f 100644 Binary files a/_module/ncs/t2_3_setup.ncs and b/_module/ncs/t2_3_setup.ncs differ diff --git a/_module/ncs/t2_c.ncs b/_module/ncs/t2_c.ncs index d087275..3350b05 100644 Binary files a/_module/ncs/t2_c.ncs and b/_module/ncs/t2_c.ncs differ diff --git a/_module/ncs/t2_done.ncs b/_module/ncs/t2_done.ncs index 579b9b2..b02e27f 100644 Binary files a/_module/ncs/t2_done.ncs and b/_module/ncs/t2_done.ncs differ diff --git a/_module/ncs/t2_setup.ncs b/_module/ncs/t2_setup.ncs index 40601d3..1cafe0f 100644 Binary files a/_module/ncs/t2_setup.ncs and b/_module/ncs/t2_setup.ncs differ diff --git a/_module/ncs/t3_2_accept.ncs b/_module/ncs/t3_2_accept.ncs index 722f9bd..626b74e 100644 Binary files a/_module/ncs/t3_2_accept.ncs and b/_module/ncs/t3_2_accept.ncs differ diff --git a/_module/ncs/t3_2_done.ncs b/_module/ncs/t3_2_done.ncs index 1e55d13..3b659d0 100644 Binary files a/_module/ncs/t3_2_done.ncs and b/_module/ncs/t3_2_done.ncs differ diff --git a/_module/ncs/t3_2_setup.ncs b/_module/ncs/t3_2_setup.ncs index de95813..5345469 100644 Binary files a/_module/ncs/t3_2_setup.ncs and b/_module/ncs/t3_2_setup.ncs differ diff --git a/_module/ncs/t3_3_accept.ncs b/_module/ncs/t3_3_accept.ncs index 346edd0..9d7fabf 100644 Binary files a/_module/ncs/t3_3_accept.ncs and b/_module/ncs/t3_3_accept.ncs differ diff --git a/_module/ncs/t3_3_c.ncs b/_module/ncs/t3_3_c.ncs index c9b1865..fc204b8 100644 Binary files a/_module/ncs/t3_3_c.ncs and b/_module/ncs/t3_3_c.ncs differ diff --git a/_module/ncs/t3_3_done.ncs b/_module/ncs/t3_3_done.ncs index b9a6652..22a41d9 100644 Binary files a/_module/ncs/t3_3_done.ncs and b/_module/ncs/t3_3_done.ncs differ diff --git a/_module/ncs/t3_3_setup.ncs b/_module/ncs/t3_3_setup.ncs index 4fb27b0..3921f0c 100644 Binary files a/_module/ncs/t3_3_setup.ncs and b/_module/ncs/t3_3_setup.ncs differ diff --git a/_module/ncs/t3_accept.ncs b/_module/ncs/t3_accept.ncs index 90b3004..8e3ce96 100644 Binary files a/_module/ncs/t3_accept.ncs and b/_module/ncs/t3_accept.ncs differ diff --git a/_module/ncs/t3_c.ncs b/_module/ncs/t3_c.ncs index b46bf90..f53505d 100644 Binary files a/_module/ncs/t3_c.ncs and b/_module/ncs/t3_c.ncs differ diff --git a/_module/ncs/t3_done.ncs b/_module/ncs/t3_done.ncs index 03a72df..72b46f7 100644 Binary files a/_module/ncs/t3_done.ncs and b/_module/ncs/t3_done.ncs differ diff --git a/_module/ncs/t3_setup.ncs b/_module/ncs/t3_setup.ncs index 1d5e455..55426f1 100644 Binary files a/_module/ncs/t3_setup.ncs and b/_module/ncs/t3_setup.ncs differ diff --git a/_module/ncs/theme_accept.ncs b/_module/ncs/theme_accept.ncs index 90b3004..8e3ce96 100644 Binary files a/_module/ncs/theme_accept.ncs and b/_module/ncs/theme_accept.ncs differ diff --git a/_module/ncs/theme_t1_accept.ncs b/_module/ncs/theme_t1_accept.ncs index 90b3004..8e3ce96 100644 Binary files a/_module/ncs/theme_t1_accept.ncs and b/_module/ncs/theme_t1_accept.ncs differ diff --git a/_module/ncs/theme_t2_accept.ncs b/_module/ncs/theme_t2_accept.ncs index 722f9bd..626b74e 100644 Binary files a/_module/ncs/theme_t2_accept.ncs and b/_module/ncs/theme_t2_accept.ncs differ diff --git a/_module/ncs/tm1_fountain.ncs b/_module/ncs/tm1_fountain.ncs index 6cbd628..c3e08b4 100644 Binary files a/_module/ncs/tm1_fountain.ncs and b/_module/ncs/tm1_fountain.ncs differ diff --git a/_module/ncs/tst_death.ncs b/_module/ncs/tst_death.ncs index 072ccb1..8c5a43f 100644 Binary files a/_module/ncs/tst_death.ncs and b/_module/ncs/tst_death.ncs differ diff --git a/_module/ncs/tst_fog.ncs b/_module/ncs/tst_fog.ncs index afc66cf..30b43d6 100644 Binary files a/_module/ncs/tst_fog.ncs and b/_module/ncs/tst_fog.ncs differ diff --git a/_module/ncs/tst_miname.ncs b/_module/ncs/tst_miname.ncs index bfa54dd..3d8ae39 100644 Binary files a/_module/ncs/tst_miname.ncs and b/_module/ncs/tst_miname.ncs differ diff --git a/_module/ncs/tst_openstore.ncs b/_module/ncs/tst_openstore.ncs index 89eeaf0..c4be916 100644 Binary files a/_module/ncs/tst_openstore.ncs and b/_module/ncs/tst_openstore.ncs differ diff --git a/_module/nss/0c_assoc_actions.nss b/_module/nss/0c_assoc_actions.nss new file mode 100644 index 0000000..d5b1867 --- /dev/null +++ b/_module/nss/0c_assoc_actions.nss @@ -0,0 +1,200 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_assoc_actions + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Conversation script that sets modes or allows oAssociate to do actions from a + conversation. + Param "sAction" +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oPC = GetPCSpeaker(); + object oAssociate = OBJECT_SELF; + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + object oArea = GetArea(oAssociate); + string sAction = GetScriptParam("sAction"); + // Scout ahead is done int 0e_ch_1_hb (heartbeat script). + if(sAction == "Scout") + { + if(ai_GetAIMode(oAssociate, AI_MODE_SCOUT_AHEAD)) + { + ai_ClearCreatureActions(); + ai_HaveCreatureSpeak(oAssociate, 6, ":29:35:46:10"); + ai_SetAIMode(oAssociate, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SendMessages(GetName(oAssociate) + " has stopped patrolling ahead.", AI_COLOR_YELLOW, oPC); + } + else + { + ai_ClearCreatureActions(); + ai_HaveCreatureSpeak(oAssociate, 6, ":29:35:46:22:"); + ai_SetAIMode(oAssociate, AI_MODE_SCOUT_AHEAD, TRUE); + ai_SendMessages(GetName(oAssociate) + " is now patrolling ahead.", AI_COLOR_YELLOW, oPC); + ai_ScoutAhead(oAssociate); + } + } + else if(sAction == "BasicTactics") + { + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, ""); + ai_SetAssociateAIScript(oAssociate, FALSE); + } + else if(sAction == "AmbushTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_ambusher"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_ambusher"); + } + else if(sAction == "DefensiveTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_defensive"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_defensive"); + } + else if(sAction == "RangedTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_ranged"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_ranged"); + } + else if(sAction == "Taunt") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_taunter"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_taunter"); + } + else if(sAction == "CounterSpell") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_cntrspell"); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, "ai_a_cntrspell"); + } + else if(sAction == "PeaceTactics") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, "ai_a_peaceful"); + } + else if(sAction == "AttackTactics") + { + if(ai_GetAIMode(oAssociate, AI_MODE_CHECK_ATTACK)) + { + ai_SetAIMode(oAssociate, AI_MODE_CHECK_ATTACK, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_CHECK_ATTACK, TRUE); + } + else if(sAction == "FollowCloser") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sAction == "FollowFarther") ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sAction == "Pickup") ai_Loot(oPC, oAssociate, sAssociateType); + else if(sAction == "HealSelf") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 1); + else if(sAction == "HealAllies") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 2); + else if(sAction == "HealOutMinus") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sAction == "HealOutPlus") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sAction == "HealInMinus") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sAction == "HealInPlus") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sAction == "Traps") ai_Traps(oPC, oAssociate, sAssociateType); + else if(sAction == "Locks") ai_Locks(oPC, oAssociate, sAssociateType, 1); + else if(sAction == "Bash") ai_Locks(oPC, oAssociate, sAssociateType, 2); + else if(sAction == "Search") ai_Search(oPC, oAssociate, sAssociateType); + else if(sAction == "Stealth") ai_Stealth(oPC, oAssociate, sAssociateType); + else if(sAction == "NoMagic") ai_UseMagic(oPC, oAssociate, sAssociateType); + else if(sAction == "DefensiveCasting") ai_UseOffensiveMagic(oPC, oAssociate, TRUE, FALSE, sAssociateType); + else if(sAction == "OffensiveCasting") ai_UseOffensiveMagic(oPC, oAssociate, FALSE, TRUE, sAssociateType); + else if(sAction == "MagicMinus") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sAction == "MagicPlus") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sAction == "Speaking") + { + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) + { + ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, TRUE); + } + else if(sAction == "Ranged") + { + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) + { + ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, TRUE); + } + else if(sAction == "AtkAssociates") + { + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) + { + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, FALSE); + } + else ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, TRUE); + } + else if(sAction == "BuffFirst") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER, TRUE); + } + else if(sAction == "RestBuffing") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST, TRUE); + } + else if(sAction == "Dispel") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL, TRUE); + } + else if(sAction == "MagicItems") + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) + { + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, FALSE); + } + else ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, TRUE); + } + else if(sAction == "Identify") + { + ai_IdentifyAllVsKnowledge(oAssociate, oPC, oPC); + return; + } + else if(sAction == "GiveUnIdentifiedItems") + { + ai_ClearCreatureActions(); + object oItem = GetFirstItemInInventory(oAssociate); + while(oItem != OBJECT_INVALID) + { + if(!GetIdentified(oItem)) ActionGiveItem(oItem, oPC); + oItem = GetNextItemInInventory(oAssociate); + } + return; + } + else if(sAction == "GiveMagicItems") + { + ai_ClearCreatureActions(); + itemproperty ipItemProp; + object oItem = GetFirstItemInInventory(oAssociate); + while(oItem != OBJECT_INVALID) + { + ipItemProp = GetFirstItemProperty(oItem); + if(GetIsItemPropertyValid(ipItemProp)) ActionGiveItem(oItem, oPC); + oItem = GetNextItemInInventory(oAssociate); + } + return; + } + else if(sAction == "GetHenchTokens") + { + int nCount, nCntr = 1; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID && nCntr <= AI_MAX_HENCHMAN) + { + if(oHenchman == OBJECT_INVALID) break; + if(oHenchman != oAssociate) + { + SetCustomToken(77101 + nCount, GetName(oHenchman)); + nCount++; + } + oHenchman = GetHenchman(oPC, ++nCntr); + } + ai_SetupAllyTargets(oAssociate, oPC); + return; + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} diff --git a/_module/nss/0c_cast_polymorp.nss b/_module/nss/0c_cast_polymorp.nss new file mode 100644 index 0000000..9d10420 --- /dev/null +++ b/_module/nss/0c_cast_polymorp.nss @@ -0,0 +1,15 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_cast_polymorp + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to have a henchman cast a polymorph spell. + int nSpell is the spell to cast. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_items" +void main() +{ + object oHenchman = OBJECT_SELF; + int nSpell = StringToInt (GetScriptParam ("nSpell")); + ActionCastSpellAtObject (nSpell, oHenchman, 255, TRUE); +} + diff --git a/_module/nss/0c_fire_henchmen.nss b/_module/nss/0c_fire_henchmen.nss new file mode 100644 index 0000000..5505be9 --- /dev/null +++ b/_module/nss/0c_fire_henchmen.nss @@ -0,0 +1,15 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_fire_henchmen + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script to fire/remove henchman for higher. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oHenchman = OBJECT_SELF; + ai_ClearCreatureActions(); + ai_FireHenchman (GetPCSpeaker(), oHenchman); + PlayVoiceChat (VOICE_CHAT_GOODBYE, oHenchman); +} + diff --git a/_module/nss/0c_get_convo.nss b/_module/nss/0c_get_convo.nss new file mode 100644 index 0000000..4e86741 --- /dev/null +++ b/_module/nss/0c_get_convo.nss @@ -0,0 +1,24 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_get_convo + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script that leaves the current conversation and starts a new + conversation with oCreature using the linked conversation instead of the + ai_Henchman conversation. + + Allows use of ai_conversation for henchman in other modules. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +#include "nw_inc_gff" +void BeginOriginalHenchmanConversation(string sDialog, object oPC) +{ + if(AI_DEBUG) ai_Debug("0c_get_convo", "14", "sDialog: (" + sDialog + ")"); + BeginConversation(sDialog, oPC); +} +void main() +{ + ai_ClearCreatureActions(); + // Need to check special dialogs for HOTU henchman. + string sDialog = GetDialogFileToUse(GetLastSpeaker()); + DelayCommand(0.0, BeginOriginalHenchmanConversation(sDialog, GetPCSpeaker())); +} diff --git a/_module/nss/0c_get_henchman.nss b/_module/nss/0c_get_henchman.nss new file mode 100644 index 0000000..e0952d5 --- /dev/null +++ b/_module/nss/0c_get_henchman.nss @@ -0,0 +1,25 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_get_henchman + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script that adds oCreature to oPC's party as a henchman + while giving a random message. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oPC = GetPCSpeaker(); + AddHenchman(oPC, oCreature); + int nVoice; + switch(d4()) + { + case 1: nVoice = VOICE_CHAT_CANDO; break; + case 2: nVoice = VOICE_CHAT_CHEER; break; + case 3: nVoice = VOICE_CHAT_GOODIDEA; break; + case 4: nVoice = VOICE_CHAT_LAUGH; break; + } + PlayVoiceChat(nVoice, oCreature); +} + + diff --git a/_module/nss/0c_h_cast_spell.nss b/_module/nss/0c_h_cast_spell.nss new file mode 100644 index 0000000..40868d8 --- /dev/null +++ b/_module/nss/0c_h_cast_spell.nss @@ -0,0 +1,12 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_cast_spell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action taken script that sets the specified spell to be cast. + Param + nSpell - the spell to cast. +*/////////////////////////////////////////////////////////////////////////////// +void main() +{ + SetLocalInt (OBJECT_SELF, "0_SPELL_TO_CAST", StringToInt (GetScriptParam ("nSpell"))); +} diff --git a/_module/nss/0c_henchmenspell.nss b/_module/nss/0c_henchmenspell.nss new file mode 100644 index 0000000..f77728d --- /dev/null +++ b/_module/nss/0c_henchmenspell.nss @@ -0,0 +1,82 @@ +/*/////////////////////////////////////////////////////////////////////////////// + Script: 0c_henchmenspell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Action script to cast a specific spell for a henchman. + + Script Param + nTarget (INT) : 0 = ALL, 1 PC, 2 Caster, 3-6 = oPC's Henchman, 7 = PC's Familiar + 8 = PC's Animal Companion, 9 = PC's Summon. + nBuffType = 1 all 2 short 3 long, 4 healing, 5 lay on hands. + If nBuffType is 0 then it will cast a specific spell from + Variable "0_SPELL_TO_CAST". Use script: 0c_h_spell_cast spell to set the spell. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +float ai_UseLayOnHands(object oTarget, object oPC, float fDelay, object oCaster); +void main() +{ + object oTarget, oPC = GetPCSpeaker(); + object oCreature = OBJECT_SELF; + float fDelay; + int nTarget = StringToInt(GetScriptParam("nTarget")); + int nBuffType = StringToInt(GetScriptParam("nBuffType")); + // Cast a group of buff spells based on nBuffType and nTarget or a single spell. + if(nBuffType < 4) + { + // Cast a specific spell. + if(nBuffType == 0) + { + int nSpell = GetLocalInt(oCreature, "0_SPELL_TO_CAST"); + // These are buff spells so Acid fog (index 0) is not a valid spell. + if(nSpell > 0) + { + ai_ClearCreatureActions(); + object oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nTarget)); + if(AI_DEBUG) ai_Debug("0c_henchmenspell", "36", " nTarget: " + IntToString(nTarget) + " oTarget: " + GetName(oTarget)); + if(oTarget != OBJECT_INVALID && ai_CheckAndCastSpell(oCreature, nSpell, 0, 0.0f, oTarget, oPC)) + { + DeleteLocalInt(oCreature, "0_SPELL_TO_CAST"); + } + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_CANTDO, oCreature); + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages("I cannot cast " + sSpellName + ".", AI_COLOR_RED, oPC); + } + } + } + // Cast a creatures buff spells on nTarget. + else ai_CastBuffs(oCreature, nBuffType, nTarget, oPC); + } + // Cast Healing spells. + else if(nBuffType == 4) + { + ai_SetupAllyTargets(oCreature, oPC); + oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nTarget)); + ai_TryHealing(oCreature, oTarget); + } + // Use lay on hands. + else if(nBuffType == 5) + { + ai_SetupAllyTargets(oCreature, oPC); + oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nTarget)); + ai_UseLayOnHands(oTarget, oPC, 0.0f, oCreature); + } + else if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_CUSS, oCreature); +} +float ai_UseLayOnHands(object oTarget, object oPC, float fDelay, object oCreature) +{ + int nHpLost = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(!nHpLost) + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_CANTDO, oCreature); + ai_SendMessages(GetName(oTarget) + " does not need healed.", AI_COLOR_RED, oPC); + } + else + { + ai_SendMessages(GetName(oCreature) + " is laying hands on " + GetName(oTarget), AI_COLOR_GREEN, oPC); + ActionUseFeat(FEAT_LAY_ON_HANDS, oTarget); + fDelay += 6.0f; + } + return fDelay; +} diff --git a/_module/nss/0c_if_a_magic_m.nss b/_module/nss/0c_if_a_magic_m.nss new file mode 100644 index 0000000..7ef4832 --- /dev/null +++ b/_module/nss/0c_if_a_magic_m.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_a_magic_m + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the henchmen has a specific + associate magic mode. + Param: + nMode - The mode to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + int nMode = StringToInt(GetScriptParam("nMode")); + return ai_GetMagicMode (oHenchman, nMode); +} diff --git a/_module/nss/0c_if_ass_convo.nss b/_module/nss/0c_if_ass_convo.nss new file mode 100644 index 0000000..12cb19b --- /dev/null +++ b/_module/nss/0c_if_ass_convo.nss @@ -0,0 +1,132 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_ass_convo + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that has the henchman tell the player what options + have been selected. + + sOption will decide what the henchman says. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oPC = GetPCSpeaker(); + object oAssociate = OBJECT_SELF; + string sParam = GetScriptParam("sOption"); + if(sParam == "BaseMode") + { + string sBaseMode = "I'm ready to attack."; + string sVolume = " While shouting when I see things."; + // Lets get which base mode the henchman is in. + if(ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND)) sBaseMode = "I'm holding here."; + else if(ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER)) sBaseMode = "I'm defending you."; + else if(ai_GetAIMode(oAssociate, AI_MODE_FOLLOW)) sBaseMode = "I'm following you."; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_peaceful") sBaseMode = "I will not fight the enemy!"; + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) sVolume = " While not speaking unless spoken to."; + SetCustomToken(AI_BASE_CUSTOM_TOKEN, sBaseMode + sVolume); + } + else if(sParam == "CombatTactics") + { + string sRangedUse = "", sCombatTactic = "I'm using my best judgement in combat "; + string sAtkAssociates = ""; + string sTargets = "against all enemies and "; + // Lets get which base mode the henchman is in. + if(ai_GetAIMode(oAssociate, AI_MODE_CHECK_ATTACK)) sTargets = "against enemies I can handle and "; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_ambusher") sCombatTactic = "I'm using ambush tactics "; + else if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_defensive") sCombatTactic = "I'm using defensive tactics "; + else if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_taunter") sCombatTactic = "I'm ready to taunt "; + else if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_cntrspell") sCombatTactic = "I'm ready to counter spell "; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_peaceful") + { + sCombatTactic = "I will not fight the enemy!"; + sTargets = ""; + } + else + { + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) sRangedUse = "will not use a ranged weapon."; + else sRangedUse = "will use a ranged weapon."; + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) sAtkAssociates = " I will also ignore familiars, companions, and summons."; + else sAtkAssociates = " I will also attack familiars, companions, and summons."; + } + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 1, sCombatTactic + sTargets + sRangedUse + sAtkAssociates); + } + else if(sParam == "Plans") + { + float fFollowRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE); + string sFollowRange = FloatToString(fFollowRange, 0, 0); + string sDistance = "I'm following from " + sFollowRange + " meters away while"; + string sStealth, sSearch, sPickup; + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sPickup = " picking up items"; + else sPickup = " not picking up any items"; + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sStealth = " in stealth"; + else sStealth = ""; + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sSearch = " and searching"; + else sSearch = ""; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 2, sDistance + sPickup + sStealth + sSearch + "."); + } + else if(sParam == "Healing") + { + string sHealingIn = IntToString(GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT)) + "%"; + string sHealingOut = IntToString(GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT)) + "%"; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 4, "I'm healing our allies if they go below " + + sHealingIn + " health in combat and " + sHealingOut + " out of combat."); + } + else if(sParam == "Spells") + { + string sCastingLevel = "[" + IntToString(GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT)) + "] "; + string sCasting = "I'm casting"; + string sType = " spells I choose."; + string sBuff = " I'll also targeting anyone that needs it "; + string sDispel = "while using Dispel spells."; + string sMagicItems = " Lastly I'll use any magic items I have."; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER)) sBuff = " Ofcourse I'll target you first "; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_STOP_DISPEL)) sDispel = "while not using Dispel spells."; + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_a_cntrspell") + { + sCasting = "I'm ready to counter spell our enemies."; + sType = ""; + sBuff = ""; + sDispel = ""; + } + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC)) + { + sCasting = "I'm not use any magic."; + sType = ""; + sBuff = ""; + sDispel = ""; + } + else if(ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) sType = " defensive spells only."; + else if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) + { + sType = " offensive spells only."; + sBuff = ""; + } + else if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) sMagicItems = " Finally I'll not use magic items."; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 5, sCastingLevel + sCasting + sType + sBuff + sDispel+ sMagicItems); + } + else if(sParam == "Objects") + { + int bTraps = ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS); + int bLocks = ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS); + int bBash = ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS); + string sText = "I'm going to ignore all traps and locks."; + if(bTraps && bLocks && bBash) + { + sText = "I'm disarming all the traps and am either picking or bashing any of the locks we find."; + } + else if(bTraps && bLocks) sText = "I'm going to disarm all the traps and I'll pick all the locks we encounter."; + else if(bTraps && bBash) sText = "I shall disarm all the traps and will bash any locks we come across."; + else if(bTraps) sText = "I will disarm all the traps I can but will leave any locks for you to deal with."; + else if(bLocks && bBash) sText = "I will leave the traps for you but will either pick or bash any locks we see."; + else if(bLocks) sText = "I'll keep my distance from any traps we see, but will pick the locks found."; + else if(bBash) sText = "I'll let you mess with the traps, but I'll bash any locks that are out there."; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 3, sText); + } + else if(sParam == "RestBuffing") + { + string sRestBuffing = ""; + if(!ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) sRestBuffing = "not "; + SetCustomToken(AI_BASE_CUSTOM_TOKEN + 10, "After we rest I am " + sRestBuffing + "casting my long buff spells on us."); + } + return TRUE; +} diff --git a/_module/nss/0c_if_assoc_mode.nss b/_module/nss/0c_if_assoc_mode.nss new file mode 100644 index 0000000..342bfff --- /dev/null +++ b/_module/nss/0c_if_assoc_mode.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_assoc_mode + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the henchmen has a specific + associate mode. + Param: + nMode - The mode to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + int nMode = StringToInt(GetScriptParam("nMode")); + // This conversation line turns off picking up any items. + if (nMode == -1) + { + if(ai_SetAIMode (oHenchman, AI_MODE_PICKUP_ITEMS)) return TRUE; + return FALSE; + } + return ai_GetAIMode (oHenchman, nMode); +} diff --git a/_module/nss/0c_if_cntrspell.nss b/_module/nss/0c_if_cntrspell.nss new file mode 100644 index 0000000..a0a5c87 --- /dev/null +++ b/_module/nss/0c_if_cntrspell.nss @@ -0,0 +1,17 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_cntrspell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the server allows a henchman to + use counterspell and if they don't have the counterspell ai script set. + Param: + sAIScript - The special combat script to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + return (AI_COUNTERSPELLING_ON && + ai_CheckClassType(oHenchman, AI_CLASS_TYPE_CASTER) && + GetLocalString(oHenchman, AI_COMBAT_SCRIPT) != "ai_a_cntrspell"); +} diff --git a/_module/nss/0c_if_com_script.nss b/_module/nss/0c_if_com_script.nss new file mode 100644 index 0000000..34d8370 --- /dev/null +++ b/_module/nss/0c_if_com_script.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_com_script + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the caller does have an ai combat + script set to sAIScript. + Param: + sAIScript - The special combat script to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + string sAIScript = GetScriptParam("sAIScript"); + string sAICombatScript = GetLocalString (OBJECT_SELF, AI_COMBAT_SCRIPT); + return (sAIScript == sAICombatScript); +} diff --git a/_module/nss/0c_if_convo.nss b/_module/nss/0c_if_convo.nss new file mode 100644 index 0000000..83e1db4 --- /dev/null +++ b/_module/nss/0c_if_convo.nss @@ -0,0 +1,21 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_if_convo + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if oCreature has a linked conversation. + Only checks for Henchman. + Allows use of ai_conversation for henchman in other modules. +*/////////////////////////////////////////////////////////////////////////////// +#include "nw_inc_gff" +#include "0i_messages" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + if(GetAssociateType(oHenchman) == ASSOCIATE_TYPE_HENCHMAN) + { + json jHenchman = ObjectToJson(oHenchman); + string sConversation = JsonGetString(GffGetResRef(jHenchman, "Conversation")); + if(sConversation != "") return TRUE; + } + return FALSE; +} diff --git a/_module/nss/0c_if_has_assoc.nss b/_module/nss/0c_if_has_assoc.nss new file mode 100644 index 0000000..cd16680 --- /dev/null +++ b/_module/nss/0c_if_has_assoc.nss @@ -0,0 +1,18 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_assoc + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if caller has the specified feat + to summon either a companion or a familiar and they are not summoned. + Param + sAssociate - "Familiar" or "Companion" +*/////////////////////////////////////////////////////////////////////////////// +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + string sAssociate = GetScriptParam("sAssociate"); + if(sAssociate == "Familiar" && GetHasFeat(FEAT_SUMMON_FAMILIAR, oHenchman) && + GetAssociate(ASSOCIATE_TYPE_FAMILIAR) == OBJECT_INVALID) return TRUE; + return (sAssociate == "Companion" && GetHasFeat(FEAT_ANIMAL_COMPANION, oHenchman) && + GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION) == OBJECT_INVALID); +} diff --git a/_module/nss/0c_if_has_class.nss b/_module/nss/0c_if_has_class.nss new file mode 100644 index 0000000..1251c0a --- /dev/null +++ b/_module/nss/0c_if_has_class.nss @@ -0,0 +1,28 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_class + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if conversation owner has a + specified class. Multiple classes maybe selected. + Param + nClass# - the class to look for use nClass1, nClass2, nClass3 for each one to check. +*/////////////////////////////////////////////////////////////////////////////// +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + int nCntr = 1; + int nClass; + string sClass; + while(nCntr < 10) + { + sClass = GetScriptParam("nClass" + IntToString(nCntr)); + if(sClass != "") + { + nClass = StringToInt(sClass); + if(GetLevelByClass(nClass, oHenchman)) return TRUE; + nCntr++; + } + else break; + } + return FALSE; +} diff --git a/_module/nss/0c_if_has_feat.nss b/_module/nss/0c_if_has_feat.nss new file mode 100644 index 0000000..fc111d8 --- /dev/null +++ b/_module/nss/0c_if_has_feat.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_feat + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if they have a specific feat. + Param: + sTarget - either "OBJECT_SELF", or "PCSpeaker", blanks defaults to "PCSpeaker" + nFeat - the feat number from Feats.2da + bNot - if 1 TRUE then this returns true for the target not having the feat. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +int StartingConditional() +{ + string sTarget = GetScriptParam("sTarget"); + int nFeat = StringToInt(GetScriptParam("nFeat")); + int bNot = StringToInt(GetScriptParam("bNot")); + object oCreature; + if(sTarget == "OBJECT_SELF") oCreature = OBJECT_SELF; + else if(sTarget == "" || sTarget == "PCSpeaker") oCreature = GetPCSpeaker(); + if(bNot) return !GetHasFeat(nFeat, oCreature); + return (GetHasFeat(nFeat ,oCreature) || ai_GetIsDungeonMaster(oCreature)); +} diff --git a/_module/nss/0c_if_has_spell.nss b/_module/nss/0c_if_has_spell.nss new file mode 100644 index 0000000..02004ff --- /dev/null +++ b/_module/nss/0c_if_has_spell.nss @@ -0,0 +1,26 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_has_spell + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if caster can cast the specified spell. + Param + nSpell# - the spell to look for nSpell1, sSpell2, nSpell3 for each spell to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_spells" +int StartingConditional() +{ + object oCaster = OBJECT_SELF; + int nCnt = 1; + int nSpell; + string sSpell; + while(nCnt < 20) + { + sSpell = GetScriptParam("nSpell" + IntToString(nCnt)); + if(sSpell == "") return FALSE; + nSpell = StringToInt(sSpell); + if(GetHasSpell(nSpell, oCaster)) return TRUE; + //else if(ai_GetKnownSpell(oCaster, nSpell)) return TRUE; + nCnt++; + } + return FALSE; +} diff --git a/_module/nss/0c_if_hen_leave.nss b/_module/nss/0c_if_hen_leave.nss new file mode 100644 index 0000000..e2b2bbd --- /dev/null +++ b/_module/nss/0c_if_hen_leave.nss @@ -0,0 +1,12 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_hen_leave + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if allowing the player to remove a henchman + is activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + return AI_REMOVE_HENCHMAN_ON; +} diff --git a/_module/nss/0c_if_hen_target.nss b/_module/nss/0c_if_hen_target.nss new file mode 100644 index 0000000..cab5510 --- /dev/null +++ b/_module/nss/0c_if_hen_target.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_assoc_mode + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see the ally targets have been set for + this number target. + nTarget (INT) : 0 = ALL, 1 PC, 2 Caster, 3-6 = oPC's Henchman, 7 = PC's Familiar + 8 = PC's Animal Companion, 9 = PC's Summon. + Param: + nTarget - The target to check and see if they are set. +*/////////////////////////////////////////////////////////////////////////////// +int StartingConditional() +{ + string sTarget = GetScriptParam("nTarget"); + return GetIsObjectValid(GetLocalObject(OBJECT_SELF, "AI_ALLY_TARGET_" + sTarget)); +} diff --git a/_module/nss/0c_if_identify.nss b/_module/nss/0c_if_identify.nss new file mode 100644 index 0000000..b593baf --- /dev/null +++ b/_module/nss/0c_if_identify.nss @@ -0,0 +1,17 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_identify + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the henchmen has a better lore + skill than the speaker. + Also checks AI_IDENTIFY_ON to see if the server wants them to help. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + if (!AI_IDENTIFY_ON && !ai_CanISpeak (oHenchman)) return FALSE; + int nHenchmanLore = GetSkillRank(SKILL_LORE, oHenchman); + int nMasterLore = GetSkillRank(SKILL_LORE, GetMaster(oHenchman)); + return (nHenchmanLore > nMasterLore); +} diff --git a/_module/nss/0c_if_not_master.nss b/_module/nss/0c_if_not_master.nss new file mode 100644 index 0000000..7052205 --- /dev/null +++ b/_module/nss/0c_if_not_master.nss @@ -0,0 +1,15 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_not_master + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks if the speaker is the master of this + henchman. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_constants" +int StartingConditional() +{ + string sInput = GetScriptParam("sInput"); + if(sInput == "Can_Hire_Henchman" && AI_ALLOW_TAKING_HENCHMAN) return !GetIsObjectValid(GetMaster()); + else if(sInput == "Cannot_Hire_Henchman") return !GetIsObjectValid(GetMaster()); + return FALSE; +} diff --git a/_module/nss/0c_if_open_inven.nss b/_module/nss/0c_if_open_inven.nss new file mode 100644 index 0000000..2755c99 --- /dev/null +++ b/_module/nss/0c_if_open_inven.nss @@ -0,0 +1,13 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_open_equip + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks if opening a henchmans inventory + is activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + if(GetAssociateType(OBJECT_SELF) != ASSOCIATE_TYPE_HENCHMAN) return FALSE; + return AI_OPEN_INVENTORY; +} diff --git a/_module/nss/0c_if_pickuploot.nss b/_module/nss/0c_if_pickuploot.nss new file mode 100644 index 0000000..f4edfdb --- /dev/null +++ b/_module/nss/0c_if_pickuploot.nss @@ -0,0 +1,12 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_pickuploot + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if having associates picking up loot is + activated on this server. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + return AI_PICKUP_LOOT; +} diff --git a/_module/nss/0c_if_polymorph.nss b/_module/nss/0c_if_polymorph.nss new file mode 100644 index 0000000..e2317f6 --- /dev/null +++ b/_module/nss/0c_if_polymorph.nss @@ -0,0 +1,11 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_polymorph +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the caller is polymorphed. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + if (GetLocalInt(OBJECT_SELF, AI_NORMAL_FORM) != 0) return TRUE; + return FALSE; +} diff --git a/_module/nss/0c_if_scout.nss b/_module/nss/0c_if_scout.nss new file mode 100644 index 0000000..d35ba43 --- /dev/null +++ b/_module/nss/0c_if_scout.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_scout + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that check if scouting is activated on this server. + + Script Param: nTRUE - + if set to 1 then it will pass TRUE if they are in scout mode. + if set to 0 then it will pass TRUE if they are NOT in scout mode. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + int nTRUE = StringToInt(GetScriptParam("nTRUE")); + return AI_SCOUT_AHEAD_ON && ai_GetAIMode(OBJECT_SELF, AI_MODE_SCOUT_AHEAD) == nTRUE; +} diff --git a/_module/nss/0c_if_skillrank.nss b/_module/nss/0c_if_skillrank.nss new file mode 100644 index 0000000..e0d7729 --- /dev/null +++ b/_module/nss/0c_if_skillrank.nss @@ -0,0 +1,18 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_SkillRank + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that checks to see if the caller's skill ranks + are above or equal to the param value. + Param: + nSkill - the skill number for the skill. See skills.2da. + nRank - the rank required. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +int StartingConditional() +{ + string sSkill = GetScriptParam("nSkill"); + if(sSkill == "") return FALSE; + int nRank = StringToInt(GetScriptParam("nRank")); + return (GetSkillRank(StringToInt(sSkill)) >= nRank); +} diff --git a/_module/nss/0c_if_taunt.nss b/_module/nss/0c_if_taunt.nss new file mode 100644 index 0000000..3e0fde6 --- /dev/null +++ b/_module/nss/0c_if_taunt.nss @@ -0,0 +1,15 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_if_taunt + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the server allows a henchman to + taunt and if they have the don't have the taunt ai script set. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + object oHenchman = OBJECT_SELF; + return (AI_TAUNTING_ON && + GetSkillRank(SKILL_TAUNT, oHenchman) > ai_GetCharacterLevels(oHenchman) && + GetLocalString(oHenchman, AI_COMBAT_SCRIPT) != "ai_a_taunter"); +} diff --git a/_module/nss/0c_listhenchman.nss b/_module/nss/0c_listhenchman.nss new file mode 100644 index 0000000..802f100 --- /dev/null +++ b/_module/nss/0c_listhenchman.nss @@ -0,0 +1,19 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_cast_polymorp + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to setup the tokens for the henchman in the speakers party + except for who they are talking to. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +void main() +{ + object oSpeaker = OBJECT_SELF; + object oPC = GetPCSpeaker(); + int nCntr = 1; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID) + { + if(oHenchman != oSpeaker) SetCustomToken(77100 + nCntr, GetName(oHenchman)); + oHenchman = GetHenchman(oPC, ++nCntr); + } +} diff --git a/_module/nss/0c_no_com_script.nss b/_module/nss/0c_no_com_script.nss new file mode 100644 index 0000000..ca5c386 --- /dev/null +++ b/_module/nss/0c_no_com_script.nss @@ -0,0 +1,27 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0c_no_com_script + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Text Appears When script that returns TRUE the caller does not have an ai combat + script set to sAIScript. + if sAIScript is blank then if its equal to all of them. + Param: sAIScripts:"ai_a_ambusher", "ai_a_defensive", "ai_a_taunter", "ai_coward". + sAIScript - The special combat script to check. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +int StartingConditional() +{ + string sAIScript = GetScriptParam("sAIScript"); + string sAICombatScript = GetLocalString (OBJECT_SELF, AI_COMBAT_SCRIPT); + // This is the value for do your own thing in combat! + if (sAIScript == "") + { + return (sAICombatScript == "ai_a_ambusher" || + sAICombatScript == "ai_a_defensive" || + sAICombatScript == "ai_a_ranged" || + sAICombatScript == "ai_a_taunter" || + sAICombatScript == "ai_a_cntrspell" || + sAICombatScript == "ai_a_peaceful"); + } + return (sAIScript != sAICombatScript); +} diff --git a/_module/nss/0c_remove_effect.nss b/_module/nss/0c_remove_effect.nss new file mode 100644 index 0000000..aa95a0c --- /dev/null +++ b/_module/nss/0c_remove_effect.nss @@ -0,0 +1,14 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script:0c_remove_effect + Programmer:Philos +//////////////////////////////////////////////////////////////////////////////// + Actions Taken script that removes an effect from OBJECT_SELF. + Param: nEffect - the EFFECT_TYPE_* number to remove. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_spells" +void main () +{ + int nEffect = StringToInt (GetScriptParam ("nEffectType")); + ai_RemoveASpecificEffect (OBJECT_SELF, nEffect); +} + diff --git a/_module/nss/0c_summon_assoc.nss b/_module/nss/0c_summon_assoc.nss new file mode 100644 index 0000000..19544de --- /dev/null +++ b/_module/nss/0c_summon_assoc.nss @@ -0,0 +1,17 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_summon_assoc + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to have the caller summon either an animal companion or + familiar associate. + + Param + sAssociate - which associate to summon. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + string sAssociate = GetScriptParam ("sAssociate"); + if (sAssociate == "Familiar") SummonFamiliar (); + else if (sAssociate == "Companion") SummonAnimalCompanion (); +} diff --git a/_module/nss/0c_use_feat.nss b/_module/nss/0c_use_feat.nss new file mode 100644 index 0000000..ec3ddcc --- /dev/null +++ b/_module/nss/0c_use_feat.nss @@ -0,0 +1,15 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0c_summon_assoc + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Conversation script to have the caller use nFeat from the feat.2da. + + Param + nFeat - Feat number from the feat.2da. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + int nFeat = StringToInt (GetScriptParam ("nFeat")); + ActionUseFeat(nFeat, OBJECT_SELF); +} diff --git a/_module/nss/0e_animations.nss b/_module/nss/0e_animations.nss new file mode 100644 index 0000000..0fbb1a6 --- /dev/null +++ b/_module/nss/0e_animations.nss @@ -0,0 +1,26 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_animations + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster Ambient Animations and Walk Waypoint code. + This code uses the Bioware systems, but can be rewritten to use what ever you + want! + This is called in the nw_c2_default1 - monster heartbeat script. +*/////////////////////////////////////////////////////////////////////////////// +#include "x0_i0_anims" +#include "0i_actions" +void main() +{ + if(!IsInConversation (OBJECT_SELF)) + { + if(GetWalkCondition(NW_WALK_FLAG_CONSTANT)) WalkWayPoints(); + if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)) PlayMobileAmbientAnimations_NonAvian(); + else if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)) PlayMobileAmbientAnimations_Avian(); + else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)) PlayImmobileAmbientAnimations(); + else if(GetLocalInt(GetModule(), AI_RULE_WANDER) && GetStandardFactionReputation(STANDARD_FACTION_HOSTILE) > 89) + { + ai_AmbientAnimations(); + } + } + +} diff --git a/_module/nss/0e_c2_1_hb.nss b/_module/nss/0e_c2_1_hb.nss new file mode 100644 index 0000000..05fbfc2 --- /dev/null +++ b/_module/nss/0e_c2_1_hb.nss @@ -0,0 +1,16 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_c2_1_hb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnHeartbeat script; + This will usually fire every 6 seconds (1 game round). + + I am reverting the AI script back to the games default scripts for efficiency. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + SetLocalInt(OBJECT_SELF, AI_ONSPAWN_EVENT, TRUE); + ai_ChangeEventScriptsForMonster(OBJECT_SELF); + ExecuteScript("nw_c2_default1"); +} diff --git a/_module/nss/0e_c2_7_ondeath.nss b/_module/nss/0e_c2_7_ondeath.nss new file mode 100644 index 0000000..7d9570e --- /dev/null +++ b/_module/nss/0e_c2_7_ondeath.nss @@ -0,0 +1,34 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_c2_7_ondeath + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnDeath script; + This fires when the creature dies. +*//////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + object oCreature = OBJECT_SELF; + // Added code to allow for permanent associates in the battle! + object oModule = GetModule(); + if(AI_DEBUG) ai_Debug("0e_c2_7_ondeath", "14", "AI_RULE_PERM_ASSOC: " + IntToString(GetLocalInt(oModule, AI_RULE_PERM_ASSOC))); + if(GetLocalInt(oModule, AI_RULE_PERM_ASSOC)) + { + object oAssociate; + int nIndex; + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oCreature); + if(oAssociate != OBJECT_INVALID) + { + SetIsDestroyable(FALSE, FALSE, FALSE, oAssociate); + DelayCommand(0.1, ChangeToStandardFaction(oAssociate, STANDARD_FACTION_HOSTILE)); + DelayCommand(3.0, SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate)); + } + } + } + if(GetLocalInt(oModule, AI_RULE_CORPSES_STAY)) SetIsDestroyable(FALSE, FALSE, TRUE); + ai_ClearCombatState(oCreature); + ExecuteScript(GetLocalString(oCreature, "AI_ON_DEATH")); +} + diff --git a/_module/nss/0e_ch_1_hb.nss b/_module/nss/0e_ch_1_hb.nss new file mode 100644 index 0000000..d04eeb8 --- /dev/null +++ b/_module/nss/0e_ch_1_hb.nss @@ -0,0 +1,14 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_1_hb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiar, Companion) OnHeart beat script when out of combat; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + SetLocalInt(OBJECT_SELF, AI_ONSPAWN_EVENT, TRUE); + ai_ChangeEventScriptsForAssociate(OBJECT_SELF); + ExecuteScript("nw_ch_ac1"); +} diff --git a/_module/nss/0e_ch_7_ondeath.nss b/_module/nss/0e_ch_7_ondeath.nss new file mode 100644 index 0000000..8997e84 --- /dev/null +++ b/_module/nss/0e_ch_7_ondeath.nss @@ -0,0 +1,45 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_7_ondeath + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate OnSpawn script; + This fires when an associate dies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +void main() +{ + object oCreature = OBJECT_SELF; + // Added code to allow for permanent associates in the battle! + if(AI_DEBUG) ai_Debug("0e_ch_7_ondeath", "13", GetName(oCreature) + " has died!"); + object oModule = GetModule(); + if(GetLocalInt(oModule, AI_RULE_PERM_ASSOC)) + { + object oAssociate; + int nIndex; + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oCreature); + if(oAssociate != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0e_ch_7_ondeath", "24", GetName(oAssociate) + " being set to permanent!"); + SetIsDestroyable(FALSE, FALSE, FALSE, oAssociate); + DelayCommand(0.1, ChangeToStandardFaction(oAssociate, STANDARD_FACTION_HOSTILE)); + DelayCommand(3.0, SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate)); + } + } + } + // Remove the widget! + object oPC = GetMaster(oCreature); + if(oPC != OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0e_ch_7_ondeath", "35", GetName(oPC) + " Removing associates widget!"); + NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oCreature) + AI_WIDGET_NUI)); + DelayCommand(0.5, ai_CheckXPPartyScale(oCreature)); + DelayCommand(2.0, ai_ClearCreatureActions(TRUE)); + } + DelayCommand(2.0, ai_ClearCombatState(oCreature)); + ChangeToStandardFaction(oCreature, STANDARD_FACTION_DEFENDER); + if(AI_DEBUG) ai_Debug("0e_ch_7_ondeath", "42", "Execute second OnDeath script: " + GetLocalString(oCreature, "AI_ON_DEATH")); + ExecuteScript(GetLocalString(oCreature, "AI_ON_DEATH"), oCreature); +} + diff --git a/_module/nss/0e_do_combat_rnd.nss b/_module/nss/0e_do_combat_rnd.nss new file mode 100644 index 0000000..f1cb9c0 --- /dev/null +++ b/_module/nss/0e_do_combat_rnd.nss @@ -0,0 +1,22 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_do_combat_rnd + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Used to execute a combat round just after the current action is over. + Note: Do not use with an attack action since it will continue until + the attacked enemy is dead. We end attack actions with a ClearAllActions + command and would also end this one so it will not work with attack actions. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("0e_do_combat_rnd", "14", GetName(oCreature) + " is calculating a new round." + + "nAction: " + IntToString(GetCurrentAction(oCreature))); + if(ai_GetIsInCombat(oCreature)) + { + if(GetAssociateType(oCreature) == ASSOCIATE_TYPE_NONE && + !ai_GetIsCharacter(oCreature)) ai_DoMonsterCombatRound(oCreature); + else if(ai_CanIAttack(oCreature)) ai_DoAssociateCombatRound(oCreature); + } +} diff --git a/_module/nss/0e_gui_events.nss b/_module/nss/0e_gui_events.nss new file mode 100644 index 0000000..401c825 --- /dev/null +++ b/_module/nss/0e_gui_events.nss @@ -0,0 +1,60 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_gui_events + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + OnPlayerGUIEvent event script + Used to allow PEPS to gain control of specific GUI events. + +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_gui_events" +#include "0i_menus" +void main() +{ + object oPC = GetLastGuiEventPlayer(); + int nEventType = GetLastGuiEventType(); + int nEventInt = GetLastGuiEventInteger(); + //object oEventObject = GetLastGuiEventObject(); + switch(nEventType) + { + case GUIEVENT_EFFECTICON_CLICK: + { + if(ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT)) + { + ai_CreateEffectChatReport(oPC, nEventInt); + return; + } + int nToken = NuiFindWindow(oPC, AI_EFFECT_ICON_NUI); + json jData; + if(nToken) + { + jData = NuiGetUserData(oPC, nToken); + int nOldEffectIcon = JsonGetInt(JsonArrayGet(jData, 1)); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + if(nOldEffectIcon == nEventInt) return; + } + ai_CreateEffectIconMenu(oPC, nEventInt); + } + case GUIEVENT_PARTYBAR_PORTRAIT_CLICK: + { + object oAssociate = GetLastGuiEventObject(); + if(GetMaster(oAssociate) == oPC) + { + // If all the Command buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028) + { + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(IsWindowClosed(oPC, sAssociateType + AI_COMMAND_NUI)) + { + ai_CreateAssociateCommandNUI(oPC, oAssociate); + } + IsWindowClosed(oPC, sAssociateType + AI_NUI); + IsWindowClosed(oPC, sAssociateType + AI_LOOTFILTER_NUI); + IsWindowClosed(oPC, sAssociateType + AI_COPY_NUI); + IsWindowClosed(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_MEMORIZE_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_KNOWN_NUI); + } + } + } + } +} diff --git a/_module/nss/0e_nui.nss b/_module/nss/0e_nui.nss new file mode 100644 index 0000000..17717bd --- /dev/null +++ b/_module/nss/0e_nui.nss @@ -0,0 +1,2049 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_nui + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Menu event script + sEvent: close, click, mousedown, mouseup, watch (if bindwatch is set). +/*////////////////////////////////////////////////////////////////////////////// +#include "nw_inc_gff" +#include "x0_i0_assoc" +#include "0i_menus" +#include "0i_module" +#include "0i_player_target" +// Save a window ID to the database. +void ai_SaveWindowLocation(object oPC, int nToken, string sAssociateType, string sWindowID); +// Sets the Widget Buttons state to sElem Checkbox state. +void ai_SetWidgetButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem); +// Flips an AI Buttons state to sElem Checkbox state. +void ai_SetAIButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem); +// Flips the flag for the loot filter to sElem Checkbox state. +void ai_SetLootFilterToCheckbox(object oPC, object oAssociate, int nFilterBit, int nToken, string sElem); +// Sets an associates companion type. Cannot set companion for a player! +void ai_SetCompanionType(object oPC, object oAssociate, int nToken, int nCompanionType); +// Sets an associates companion name. Cannot set companion for a player! +void ai_SetCompanionName(object oPC, object oAssociate, int nToken, int nCompanionType); +// Sets an associates AI script via a combo box. +void ai_SetAIScript(object oPC, object oAssociate, int nToken); +// Increments/Decrements the Perception Range use variable for the AI. +void ai_PercRangeIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType, int nToken); +// Saves an associates perception range changed on the button. +void ai_Perc_Range(object oPC, object oAssociate, int nToken, string sAssociateType); +// Changes Perception Distance Rule for monsters. +void ai_RulePercDistInc(object oPC, object oModule, int nIncrement, int nToken); +// Adds a spell to a json AI restricted spell list then returns jRules. +// bRestrict = TRUE will add to the list FALSE will remove it from the list. +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE); +// Adds a henchman back into the players party. +object ai_AddHenchman(object oPC, json jHenchman, location lLocation, int nFamiliar, int nCompanion); + +void ai_SaveWindowLocation(object oPC, int nToken, string sAssociateType, string sWindowID) +{ + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) jLocations = JsonObject(); + json jWindow = JsonObjectGet(jLocations, sWindowID); + if(JsonGetType(jWindow) == JSON_TYPE_NULL) jWindow = JsonObject(); + jWindow = JsonObjectSet(jWindow, "x", JsonFloat(fX)); + jWindow = JsonObjectSet(jWindow, "y", JsonFloat(fY)); + jLocations = JsonObjectSet(jLocations, sWindowID, jWindow); + //SendMessageToPC(oPC, "0e_nui, 52, sAssociateType: " + sAssociateType + + // " sWindowID: " + sWindowID + + // " jLocations: " + JsonDump(jLocations, 1)); + ai_SetAssociateDbJson(oPC, sAssociateType, "locations", jLocations); +} +void ai_ToggleAssociateWidgetOnOff(object oPC, int nToken, object oAssociate, string sAssociateType) +{ + string sText, sText2, sName = GetName(oAssociate); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int bWidget = !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType, bWidget); + NuiSetBind(oPC, nToken, "btn_widget_onoff", JsonBool (!bWidget)); + if(bWidget) + { + sText = "on"; + sText2 = "Off"; + IsWindowClosed(oPC, sAssociateType + AI_WIDGET_NUI); + } + else + { + sText = "off"; + sText2 = "On"; + ai_CreateWidgetNUI(oPC, oAssociate); + } + NuiSetBind(oPC, nToken, "btn_widget_onoff_label", JsonString("Widget " + sText2)); + NuiSetBind(oPC, nToken, "btn_widget_onoff_tooltip", JsonString(" Turn " + sName + " widget " + sText)); +} +void main() +{ + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + string sWndId = NuiGetWindowId(oPC, nToken); + //SendMessageToPC(oPC, "0e_nui , 64 sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " nIndex: " + IntToString(nIndex) + + // " oPC: " + GetName(oPC)); + // Get if the menu has an associate attached. + json jData = NuiGetUserData(oPC, nToken); + object oAssociate = StringToObject(JsonGetString(JsonArrayGet(jData, 0))); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(ai_GetIsDungeonMaster(oPC)) + { + if(!NuiFindWindow(oPC, "dm" + AI_WIDGET_NUI)) + { + ai_SendMessages(GetName(oPC) + " is now a Dungeon Master! Loading Dungeon Master widget.", AI_COLOR_YELLOW, oPC); + ai_CheckDMStart(oPC); + } + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + return; + } + if(!ai_GetIsCharacter(oAssociate) && !GetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE") && + (oAssociate == OBJECT_INVALID || GetMaster(oAssociate) != oPC)) + { + ai_SendMessages(GetName(oAssociate) + " is no longer in your party!", AI_COLOR_RED, oPC); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + return; + } + if(sAssociateType == "") return; + //************************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + // If the widget is locked then don't save. + if(sWndId == sAssociateType + AI_WIDGET_NUI && + ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType)) return; + ai_SaveWindowLocation(oPC, nToken, sAssociateType, sWndId); + return; + } + //************************************************************************** + // Main AI events. + if(sWndId == AI_MAIN_NUI) + { + //if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_plugin_manager") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreatePluginNUI(oPC); + } + else if(sElem == "btn_action_ghost") + { + // We set ghost mode differently for each AI. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + if(GetLocalInt(oPC, sGhostModeVarname)) + { + DeleteLocalInt(oPC, sGhostModeVarname); + ai_SendMessages("Action Ghost mode is turned off when using commands.", AI_COLOR_YELLOW, oPC); + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + } + else + { + SetLocalInt(oPC, sGhostModeVarname, TRUE); + ai_SendMessages("Action Ghost mode is turned on when using commands.", AI_COLOR_YELLOW, oPC); + } + } + else + { + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST)) + { + ai_SetAIMode(oPC, AI_MODE_ACTION_GHOST, FALSE); + ai_SendMessages("Action Ghost mode is turned off when using commands.", AI_COLOR_YELLOW, oPC); + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID && !ai_GetAIMode(oAssociate, AI_MODE_GHOST)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID && !ai_GetAIMode(oAssociate, AI_MODE_GHOST)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + } + } + else + { + ai_SetAIMode(oPC, AI_MODE_ACTION_GHOST); + ai_SendMessages("Action Ghost mode is turned on when using commands.", AI_COLOR_YELLOW, oPC); + } + aiSaveAssociateModesToDb(oPC, oPC); + } + } + else if(sElem == "btn_effect_icon") + { + if(ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT)) + { + ai_SetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT, FALSE); + ai_SendMessages("All effect icons will be reported in a menu at the top of the screen.", AI_COLOR_YELLOW, oPC); + } + else + { + ai_SetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT); + ai_SendMessages("All effect icons will be reported in the chat screen.", AI_COLOR_YELLOW, oPC); + } + aiSaveAssociateModesToDb(oPC, oPC); + } + if(sElem == "btn_default_xp") + { + int nDefaultXP = GetLocalInt(GetModule(), AI_RULE_DEFAULT_XP_SCALE); + SetModuleXPScale(nDefaultXP); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(IntToString(nDefaultXP))); + } + } + if(sEvent == "watch") + { + string sPreElem = GetStringLeft(sElem, 4); + if(sPreElem == "txt_") + { + object oModule = GetModule(); + json jRules = ai_GetCampaignDbJson("rules"); + string sText = JsonGetString(NuiGetBind(oPC, nToken, sElem)); + if(sElem == "txt_max_henchman") + { + int nMaxHenchmen = StringToInt(sText); + if(nMaxHenchmen < 1) nMaxHenchmen = 1; + if(nMaxHenchmen > AI_MAX_HENCHMAN) + { + nMaxHenchmen = AI_MAX_HENCHMAN; + ai_SendMessages("The maximum henchmen for this mod is " + IntToString(AI_MAX_HENCHMAN) + "!", AI_COLOR_RED, oPC); + } + SetMaxHenchmen(nMaxHenchmen); + SetLocalInt(oModule, AI_RULE_MAX_HENCHMAN, nMaxHenchmen); + jRules = JsonObjectSet(jRules, AI_RULE_MAX_HENCHMAN, JsonInt(nMaxHenchmen)); + ai_SendMessages("Maximum henchmen has been changed to " + IntToString(nMaxHenchmen), AI_COLOR_YELLOW, oPC); + } + else if(sElem == "txt_ai_difficulty") + { + int nChance = StringToInt(sText); + if(nChance < 0) nChance = 0; + else if(nChance > 100) nChance = 100; + SetLocalInt(oModule, AI_RULE_AI_DIFFICULTY, nChance); + jRules = JsonObjectSet(jRules, AI_RULE_AI_DIFFICULTY, JsonInt(nChance)); + } + else if(sElem == "txt_perception_distance") + { + float fDistance = StringToFloat(sText); + if(fDistance < 10.0) fDistance = 10.0; + else if(fDistance > 60.0) fDistance = 60.0; + SetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE, fDistance); + jRules = JsonObjectSet(jRules, AI_RULE_PERCEPTION_DISTANCE, JsonFloat(fDistance)); + } + else if(sElem == "txt_inc_enc") + { + float fNumber = StringToFloat(sText); + if(fNumber < 0.0) fNumber = 0.0; + else if(fNumber > 9.0) fNumber = 9.0; + SetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS, fNumber); + jRules = JsonObjectSet(jRules, AI_INCREASE_ENC_MONSTERS, JsonFloat(fNumber)); + } + else if(sElem == "txt_inc_hp") + { + int nNumber = StringToInt(sText); + if(nNumber < 0) nNumber = 0; + else if(nNumber > 500) nNumber = 500; + SetLocalInt(oModule, AI_INCREASE_MONSTERS_HP, nNumber); + jRules = JsonObjectSet(jRules, AI_INCREASE_MONSTERS_HP, JsonInt(nNumber)); + } + else if(sElem == "txt_wander_distance") + { + float fDistance = StringToFloat(sText); + if(fDistance < 0.0) fDistance = 0.0; + else if(fDistance > 99.0) fDistance = 99.0; + SetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE, fDistance); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER_DISTANCE, JsonFloat(fDistance)); + } + else if(sElem == "txt_xp_scale") + { + int nNumber = StringToInt(sText); + if(nNumber < 0) nNumber = 0; + else if(nNumber > 200) nNumber = 200; + SetModuleXPScale(nNumber); + return; + } + ai_SetCampaignDbJson("rules", jRules); + } + else if(sPreElem == "chbx") + { + object oModule = GetModule(); + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + json jRules = ai_GetCampaignDbJson("rules"); + if(sElem == "chbx_moral_check") + { + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_MORAL_CHECKS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_monsters_check") + { + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_BUFF_MONSTERS, JsonInt(bCheck)); + NuiSetBind(oPC, nToken, "chbx_full_buff_event", JsonBool(bCheck)); + } + else if(sElem == "chbx_full_buff_check") + { + SetLocalInt(oModule, AI_RULE_FULL_BUFF_MONSTERS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_FULL_BUFF_MONSTERS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_summons_check") + { + SetLocalInt(oModule, AI_RULE_PRESUMMON, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PRESUMMON, JsonInt(bCheck)); + } + else if(sElem == "chbx_ambush_monsters_check") + { + SetLocalInt(oModule, AI_RULE_AMBUSH, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_AMBUSH, JsonInt(bCheck)); + } + else if(sElem == "chbx_companions_check") + { + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_SUMMON_COMPANIONS, JsonInt(bCheck)); + } + else if(sElem == "chbx_advanced_movement_check") + { + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ADVANCED_MOVEMENT, JsonInt(bCheck)); + } + else if(sElem == "chbx_ilr_check") + { + SetLocalInt(oModule, AI_RULE_ILR, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ILR, JsonInt(bCheck)); + } + else if(sElem == "chbx_umd_check") + { + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ALLOW_UMD, JsonInt(bCheck)); + } + else if(sElem == "chbx_use_healingkits_check") + { + SetLocalInt(oModule, AI_RULE_HEALERSKITS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_HEALERSKITS, JsonInt(bCheck)); + } + else if(sElem == "chbx_perm_assoc_check") + { + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PERM_ASSOC, JsonInt(bCheck)); + } + else if(sElem == "chbx_corpses_stay_check") + { + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(bCheck)); + } + else if(sElem == "chbx_wander_check") + { + SetLocalInt(oModule, AI_RULE_WANDER, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER, JsonInt(bCheck)); + NuiSetBind(oPC, nToken, "txt_wander_distance_event", JsonBool(bCheck)); + } + else if(sElem == "chbx_open_doors_check") + { + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_OPEN_DOORS, JsonInt(bCheck)); + } + else if(sElem == "chbx_party_scale_check") + { + if(bCheck) + { + SetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP, GetModuleXPScale()); + ai_CheckXPPartyScale(oPC); + } + else + { + SetModuleXPScale(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + } + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PARTY_SCALE, JsonInt(bCheck)); + string sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oPC, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + sText = IntToString(GetModuleXPScale()); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(sText)); + } + else if(sElem == "chbx_darkness_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 159); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 688); // WildShape_Darkness + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 159, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 688, FALSE); // WildShape_Darkness + } + } + else if(sElem == "chbx_dispels_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION); + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION, FALSE); + } + } + else if(sElem == "chbx_timestop_check") + { + if(bCheck) jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP); + else jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP, FALSE); + } + ai_SetCampaignDbJson("rules", jRules); + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oPC, GetModule(), 1, nToken); + } + else if(nMouseScroll == -1.0) // Scroll down + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oPC, GetModule(), -1, nToken); + } + } + return; + } + //************************************************************************** + // Associate Command events. + if(sWndId == sAssociateType + AI_COMMAND_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_ai_menu") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateAssociateAINUI(oPC, oAssociate); + } + if(sElem == "btn_vertical_widget") + { + int bVertical = !ai_GetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType); + ai_SetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType, bVertical); + if(oPC == oAssociate || + (oPC != oAssociate && !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType))) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + else if(sElem == "btn_main_menu") + { + if(ai_GetIsCharacter(oAssociate)) ai_CreateAIMainNUI(oPC); + } + else if(sElem == "btn_widget_onoff") + { + ai_ToggleAssociateWidgetOnOff(oPC, nToken, oAssociate, sAssociateType); + } + else if(sElem == "btn_widget_lock") + { + int bLocked = !ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType); + ai_SetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType, bLocked); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + else if(sElem == "btn_copy_settings") + { + ai_CreateCopySettingsNUI(oPC, oAssociate); + } + else if(sElem == "btn_cmd_action") ai_Action(oPC, oAssociate); + else if(sElem == "btn_cmd_guard") ai_DoCommand(oPC, oAssociate, 1); + else if(sElem == "btn_cmd_hold") ai_DoCommand(oPC, oAssociate, 3); + else if(sElem == "btn_cmd_search") ai_DoCommand(oPC, oAssociate, 5); + else if(sElem == "btn_cmd_stealth") ai_DoCommand(oPC, oAssociate, 6); + else if(sElem == "btn_cmd_attack") ai_DoCommand(oPC, oAssociate, 4); + else if(sElem == "btn_cmd_follow") ai_DoCommand(oPC, oAssociate, 2); + else if(sElem == "btn_follow_target") ai_FollowTarget(oPC, oAssociate); + else if(sElem == "btn_cmd_ai_script") ai_AIScript(oPC, oAssociate, sAssociateType, nToken); + else if(sElem == "btn_cmd_place_trap") ai_HavePCPlaceTrap(oPC, oAssociate); + else if(sElem == "btn_quick_widget") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate); + } + else if(sElem == "btn_spell_memorize") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateSpellMemorizationNUI(oPC, oAssociate); + } + else if(sElem == "btn_spell_known") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateSpellKnownNUI(oPC, oAssociate); + } + else if(sElem == "btn_buff_short") + { + ai_Buff_Button(oPC, oAssociate, 2, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_long") + { + ai_Buff_Button(oPC, oAssociate, 3, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_all") + { + ai_Buff_Button(oPC, oAssociate, 1, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_rest") ai_Buff_Button(oPC, oAssociate, 0, sAssociateType); + else if(sElem == "btn_jump_to") ai_JumpToPC(oPC, oAssociate); + else if(sElem == "btn_ghost_mode") ai_GhostMode(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_camera") ai_ChangeCameraView(oPC, oAssociate); + else if(sElem == "btn_inventory") ai_OpenInventory(oAssociate, oPC); + else if(sElem == "btn_familiar_name") ai_SetCompanionName(oPC, oAssociate, nToken, ASSOCIATE_TYPE_FAMILIAR); + else if(sElem == "btn_companion_name") ai_SetCompanionName(oPC, oAssociate, nToken, ASSOCIATE_TYPE_ANIMALCOMPANION); + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oPC, sElem); + else if(sElem == "btn_toggle_assoc_widget") + { + int bWidgetOff = !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc"); + string sAssocType, sText; + if(bWidgetOff) sText = " Associate Widgets [Off]"; + else sText = " Associate Widgets [On]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_toggle_assoc_widget_tooltip", sText); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc", bWidgetOff); + object oAssoc = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + int nIndex; + object oHenchman; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oHenchman != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oHenchman); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oHenchman, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oHenchman); + } + } + } + } + else if(sEvent == "watch") + { + if(sElem == "txt_familiar_name") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, sElem)); + if(sName != "") NuiSetBind(oPC, nToken, "btn_familiar_name_event", JsonBool(TRUE)); + else NuiSetBind(oPC, nToken, "btn_familiar_name_event", JsonBool(FALSE)); + } + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } + else if(sElem == "chbx_buff_rest_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_REST, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_toggle_assoc_widget_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_ASSOC_WIDGETS_OFF, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_action_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_guard_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_hold_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_search_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_stealth_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_attack_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_follow_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_ai_script_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cmd_place_trap_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_quick_widget_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_follow_target_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_buff_short_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_buff_long_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_buff_all_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_jump_to_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ghost_mode_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_camera_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_inventory_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_familiar_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_companion_check") ai_SetWidgetButtonToCheckbox(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "cmb_familiar_selected") ai_SetCompanionType(oPC, oAssociate, nToken, ASSOCIATE_TYPE_FAMILIAR); + else if(sElem == "cmb_companion_selected") ai_SetCompanionType(oPC, oAssociate, nToken, ASSOCIATE_TYPE_ANIMALCOMPANION); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + // Follow range is only changed on non-pc's + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_buff_long") ai_DelaySpellSpeed(oPC, oAssociate, 0.1, sAssociateType); + else if(sElem == "btn_buff_short") ai_DelaySpellSpeed(oPC, oAssociate, 0.1, sAssociateType); + else if(sElem == "btn_buff_all") ai_DelaySpellSpeed(oPC, oAssociate, 0.1, sAssociateType); + } + else if(nMouseScroll == -1.0) // Scroll down + { + // Follow range is only changed on non-pc's + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_buff_long") ai_DelaySpellSpeed(oPC, oAssociate, -0.1, sAssociateType); + else if(sElem == "btn_buff_short") ai_DelaySpellSpeed(oPC, oAssociate, -0.1, sAssociateType); + else if(sElem == "btn_buff_all") ai_DelaySpellSpeed(oPC, oAssociate, -0.1, sAssociateType); + } + } + return; + } + //************************************************************************** + // Associate AI events. + if(sWndId == sAssociateType + AI_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_command_menu") + { + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_CreateAssociateCommandNUI(oPC, oAssociate); + } + if(sElem == "btn_main_menu") + { + if(ai_GetIsCharacter(oAssociate)) ai_CreateAIMainNUI(oPC); + } + else if(sElem == "btn_loot_filter") + { + ai_CreateLootFilterNUI(oPC, oAssociate); + } + else if(sElem == "btn_ai") + { + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") ai_TurnOff(oPC, oAssociate, sAssociateType); + else ai_TurnOn(oPC, oAssociate, sAssociateType); + } + else if(sElem == "btn_quiet") ai_ReduceSpeech(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ranged") AssignCommand(oAssociate, ai_Ranged(oPC, oAssociate, sAssociateType)); + else if(sElem == "btn_equip_weapon") ai_EquipWeapons(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_search") ai_Search(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_stealth") ai_Stealth(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoor(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_traps") ai_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_pick_locks") ai_Locks(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_bash_locks") ai_Locks(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_magic") ai_UseMagic(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_magic_items") ai_UseMagicItems(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_def_magic") ai_UseOffensiveMagic(oPC, oAssociate, TRUE, FALSE, sAssociateType); + else if(sElem == "btn_off_magic") ai_UseOffensiveMagic(oPC, oAssociate, FALSE, TRUE, sAssociateType); + else if(sElem == "btn_spontaneous") ai_Spontaneous(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_heals_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_healp_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_cure_onoff") ai_Cure_OnOff(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_loot") ai_Loot(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_assoc") ai_Ignore_Associates(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_traps") ai_Ignore_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_perc_range") ai_Perc_Range(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_ai_script") ai_SaveAIScript(oPC, oAssociate, nToken); + } + else if(sEvent == "watch") + { + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + if(sElem == "chbx_ai_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_quiet_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ranged_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_equip_weapon_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_search_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_stealth_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_open_door_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_traps_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_pick_locks_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_bash_locks_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_magic_level_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_spontaneous_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_magic_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_magic_items_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_def_magic_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_off_magic_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_heal_out_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_heal_in_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_heals_onoff_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_healp_onoff_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_cure_onoff_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_loot_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_LOOT, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ignore_assoc_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_ignore_traps_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "chbx_perc_range_check") ai_SetAIButtonToCheckbox(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType, nToken, sElem); + else if(sElem == "cmb_ai_script_selected") ai_SetAIScript(oPC, oAssociate, nToken); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, 1, sAssociateType, nToken); + } + else if(nMouseScroll == -1.0) // Scroll down + { + if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, -1, sAssociateType, nToken); + } + } + return; + } + //************************************************************************** + // Associate Widget events. + if(sWndId == sAssociateType + AI_WIDGET_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_open_main") + { + // If all the Command buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028) + { + if(IsWindowClosed(oPC, sAssociateType + AI_COMMAND_NUI)) + { + ai_CreateAssociateCommandNUI(oPC, oAssociate); + } + IsWindowClosed(oPC, sAssociateType + AI_NUI); + IsWindowClosed(oPC, sAssociateType + AI_LOOTFILTER_NUI); + IsWindowClosed(oPC, sAssociateType + AI_COPY_NUI); + IsWindowClosed(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_MEMORIZE_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_KNOWN_NUI); + if(ai_GetIsCharacter(oAssociate)) + { + IsWindowClosed(oPC, AI_MAIN_NUI); + IsWindowClosed(oPC, AI_PLUGIN_NUI); + } + } + } + else if(sElem == "btn_ai") + { + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") + { + ai_TurnOff(oPC, oAssociate, sAssociateType); + } + else ai_TurnOn(oPC, oAssociate, sAssociateType); + } + else if(sElem == "btn_quiet") ai_ReduceSpeech(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ranged") AssignCommand(oAssociate, ai_Ranged(oPC, oAssociate, sAssociateType)); + else if(sElem == "btn_equip_weapon") ai_EquipWeapons(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_search") ai_Search(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_stealth") ai_Stealth(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoor(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_traps") ai_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_pick_locks") ai_Locks(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_bash_locks") ai_Locks(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_magic_minus") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sElem == "btn_magic_plus") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sElem == "btn_magic") ai_UseMagic(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_magic_items") ai_UseMagicItems(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_def_magic") ai_UseOffensiveMagic(oPC, oAssociate, TRUE, FALSE, sAssociateType); + else if(sElem == "btn_off_magic") ai_UseOffensiveMagic(oPC, oAssociate, FALSE, TRUE, sAssociateType); + else if(sElem == "btn_cure_onoff") ai_Cure_OnOff(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_loot") ai_Loot(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_assoc") ai_Ignore_Associates(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_ignore_traps") ai_Ignore_Traps(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_perc_range") ai_Perc_Range(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_spontaneous") ai_Spontaneous(oPC, oAssociate, sAssociateType); + else if(sElem == "btn_buff_short") + { + ai_Buff_Button(oPC, oAssociate, 2, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_long") + { + ai_Buff_Button(oPC, oAssociate, 3, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_all") + { + ai_Buff_Button(oPC, oAssociate, 1, sAssociateType); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + } + else if(sElem == "btn_buff_rest") ai_Buff_Button(oPC, oAssociate, 0, sAssociateType); + else if(sElem == "btn_jump_to") ai_JumpToPC(oPC, oAssociate); + else if(sElem == "btn_ghost_mode") ai_GhostMode(oPC, oAssociate, nToken, sAssociateType); + else if(sElem == "btn_camera") ai_ChangeCameraView(oPC, oAssociate); + else if(sElem == "btn_inventory") ai_OpenInventory(oAssociate, oPC); + else if(sElem == "btn_familiar") + { + if(GetHasFeat(FEAT_SUMMON_FAMILIAR, oAssociate)) + { + DecrementRemainingFeatUses(oAssociate, FEAT_SUMMON_FAMILIAR); + SummonFamiliar(oAssociate); + } + } + else if(sElem == "btn_companion") + { + if(GetHasFeat(FEAT_ANIMAL_COMPANION, oAssociate)) + { + DecrementRemainingFeatUses(oAssociate, FEAT_ANIMAL_COMPANION); + SummonAnimalCompanion(oAssociate); + } + } + else if(sElem == "btn_heals_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 1); + else if(sElem == "btn_healp_onoff") ai_Heal_OnOff(oPC, oAssociate, sAssociateType, 2); + else if(sElem == "btn_cmd_action") ai_Action(oPC, oAssociate); + else if(sElem == "btn_cmd_guard") ai_DoCommand(oPC, oAssociate, 1); + else if(sElem == "btn_cmd_hold") ai_DoCommand(oPC, oAssociate, 3); + else if(sElem == "btn_cmd_search") ai_DoCommand(oPC, oAssociate, 5); + else if(sElem == "btn_cmd_stealth") ai_DoCommand(oPC, oAssociate, 6); + else if(sElem == "btn_cmd_attack") ai_DoCommand(oPC, oAssociate, 4); + else if(sElem == "btn_cmd_follow") ai_DoCommand(oPC, oAssociate, 2); + else if(sElem == "btn_cmd_ai_script") ai_AIScript(oPC, oAssociate, sAssociateType, nToken); + else if(sElem == "btn_cmd_place_trap") ai_HavePCPlaceTrap(oPC, oAssociate); + else if(sElem == "btn_follow_target") ai_FollowTarget(oPC, oAssociate); + else if(sElem == "btn_update_widget") ai_UpdateAssociateWidget(oPC, oAssociate); + else if(GetStringLeft(sElem, 15) == "btn_exe_plugin_") ai_Plugin_Execute(oPC, sElem); + else if(GetStringLeft(sElem, 11) == "btn_widget_") ai_SelectWidgetSpellTarget(oPC, oAssociate, sElem); + else if(sElem == "btn_toggle_assoc_widget") + { + int bWidgetOff = !ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc"); + string sAssocType, sText; + if(bWidgetOff) sText = "Associate Widgets [Off]"; + else sText = "Associate Widgets [On]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_toggle_assoc_widget_tooltip", sText); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc", bWidgetOff); + object oAssoc = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + oAssoc = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oAssoc); + } + int nIndex; + object oHenchman; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oHenchman != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oHenchman); + ai_SetWidgetButton(oPC, BTN_WIDGET_OFF, oHenchman, sAssocType, bWidgetOff); + if(bWidgetOff) IsWindowClosed(oPC, sAssocType + AI_WIDGET_NUI); + else ai_CreateWidgetNUI(oPC, oHenchman); + } + } + } + } + if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, 1, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, 5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, 1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, 1, sAssociateType, -1); + else if(sElem == "btn_buff_long") ai_DelaySpellSpeed(oPC, oAssociate, 0.1, sAssociateType); + else if(sElem == "btn_buff_short") ai_DelaySpellSpeed(oPC, oAssociate, 0.1, sAssociateType); + else if(sElem == "btn_buff_all") ai_DelaySpellSpeed(oPC, oAssociate, 0.1, sAssociateType); + } + if(nMouseScroll == -1.0) // Scroll down + { + if(sElem == "btn_cmd_follow" && + oPC != oAssociate) ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_follow_target") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_magic_plus") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + if(sElem == "btn_magic_level") ai_MagicIncrement(oPC, oAssociate, -1, sAssociateType); + else if(sElem == "btn_pick_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_bash_locks") ai_LockRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_traps") ai_TrapRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_open_door") ai_OpenDoorIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_heal_out") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_OUT_OF_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_heal_in") ai_Heal_Button(oPC, oAssociate, -5, AI_HEAL_IN_COMBAT_LIMIT, sAssociateType); + else if(sElem == "btn_loot") ai_LootRangeIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(sElem == "btn_perc_range") ai_PercRangeIncrement(oPC, oAssociate, -1, sAssociateType, -1); + else if(sElem == "btn_buff_long") ai_DelaySpellSpeed(oPC, oAssociate, -0.1, sAssociateType); + else if(sElem == "btn_buff_short") ai_DelaySpellSpeed(oPC, oAssociate, -0.1, sAssociateType); + else if(sElem == "btn_buff_all") ai_DelaySpellSpeed(oPC, oAssociate, -0.1, sAssociateType); + } + } + if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + AssignCommand(oPC, PlaySound("gui_button")); + if(sElem == "btn_open_main") + { + // If all the AI buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMAIAccessVarname) != 203423743) + { + if(IsWindowClosed(oPC, sAssociateType + AI_NUI)) + { + ai_CreateAssociateAINUI(oPC, oAssociate); + } + } + IsWindowClosed(oPC, sAssociateType + AI_COMMAND_NUI); + IsWindowClosed(oPC, sAssociateType + AI_LOOTFILTER_NUI); + IsWindowClosed(oPC, sAssociateType + AI_COPY_NUI); + IsWindowClosed(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_MEMORIZE_NUI); + IsWindowClosed(oPC, sAssociateType + AI_SPELL_KNOWN_NUI); + if(ai_GetIsCharacter(oAssociate)) + { + IsWindowClosed(oPC, AI_MAIN_NUI); + IsWindowClosed(oPC, AI_PLUGIN_NUI); + } + } + else if(sElem == "btn_follow_range") ai_FollowIncrement(oPC, oAssociate, -1.0, sAssociateType); + else if(GetStringLeft(sElem, 11) == "btn_widget_") + { + if(GetStringLength(sElem) == 13) nIndex = StringToInt(GetStringRight(sElem, 2)); + else nIndex = StringToInt(GetStringRight(sElem, 1)); + json jAIData = ai_GetAssociateDbJson(oPC, ai_GetAssociateType(oPC, oAssociate), "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jSpell = JsonArrayGet(jWidget, nIndex); + ai_CreateDescriptionNUI(oPC, jSpell); + } + } + } + return; + } + //************************************************************************** + // Associate Loot events. + if(sWndId == sAssociateType + AI_LOOTFILTER_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_set_all") + { + SetLocalInt(oPC, "AI_BLOCK_CHECKS", TRUE); + SetLocalInt(oAssociate, sLootFilterVarname, 65535); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + NuiSetBind(oPC, nToken, "chbx_" + IntToString(nIndex) + "_check", JsonBool (TRUE)); + } + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, 1, JsonInt(65535)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + DelayCommand(1.0, DeleteLocalInt(oPC, "AI_BLOCK_CHECKS")); + } + else if(sElem == "btn_clear_all") + { + SetLocalInt(oPC, "AI_BLOCK_CHECKS", TRUE); + SetLocalInt(oAssociate, sLootFilterVarname, 0); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + NuiSetBind(oPC, nToken, "chbx_" + IntToString(nIndex) + "_check", JsonBool (FALSE)); + } + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, 1, JsonInt(0)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + DelayCommand(1.0, DeleteLocalInt(oPC, "AI_BLOCK_CHECKS")); + } + } + else if(sEvent == "watch") + { + if(GetStringLeft(sElem, 5) == "chbx_") + { + if(GetLocalInt(oPC, "AI_BLOCK_CHECKS")) return; + if(sElem == "chbx_give_loot_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_GIVE_TO_PC, nToken, sElem); + else if(sElem == "chbx_2_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_PLOT, nToken, sElem); + else if(sElem == "chbx_3_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_ARMOR, nToken, sElem); + else if(sElem == "chbx_4_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BELTS, nToken, sElem); + else if(sElem == "chbx_5_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BOOTS, nToken, sElem); + else if(sElem == "chbx_6_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_CLOAKS, nToken, sElem); + else if(sElem == "chbx_7_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_GEMS, nToken, sElem); + else if(sElem == "chbx_8_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_GLOVES, nToken, sElem); + else if(sElem == "chbx_9_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_HEADGEAR, nToken, sElem); + else if(sElem == "chbx_10_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_JEWELRY, nToken, sElem); + else if(sElem == "chbx_11_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_MISC, nToken, sElem); + else if(sElem == "chbx_12_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_POTIONS, nToken, sElem); + else if(sElem == "chbx_13_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_SCROLLS, nToken, sElem); + else if(sElem == "chbx_14_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_SHIELDS, nToken, sElem); + else if(sElem == "chbx_15_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_WANDS_RODS_STAVES, nToken, sElem); + else if(sElem == "chbx_16_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_WEAPONS, nToken, sElem); + else if(sElem == "chbx_17_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_ARROWS, nToken, sElem); + else if(sElem == "chbx_18_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BOLTS, nToken, sElem); + else if(sElem == "chbx_19_check") ai_SetLootFilterToCheckbox(oPC, oAssociate, AI_LOOT_BULLETS, nToken, sElem); + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + int nLootFilter = GetLocalInt(oAssociate, sLootFilterVarname); + jLootFilter = JsonArraySet(jLootFilter, 1, JsonInt(nLootFilter)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + } + else if(GetStringLeft(sElem, 4) == "txt_") + { + if(sElem == "txt_max_weight") + { + int nMaxWeight = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, sElem))); + if(nMaxWeight > 1000) nMaxWeight = 1000; + if(nMaxWeight < 1) nMaxWeight = 1; + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, nMaxWeight); + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, 0, JsonInt(nMaxWeight)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + return; + } + if(GetStringLeft(sElem, 9) == "txt_gold_") + { + int nAmount = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, sElem))); + int nIndex; + if(GetStringLength(sElem) == 11) nIndex = StringToInt(GetStringRight(sElem, 2)); + else nIndex = StringToInt(GetStringRight(sElem, 1)); + SetLocalInt(oAssociate, AI_MIN_GOLD_ + IntToString(nIndex), nAmount); + json jLootFilter = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + jLootFilter = JsonArraySet(jLootFilter, nIndex, JsonInt(nAmount)); + ai_SetAssociateDbJson(oPC, sAssociateType, "lootfilters", jLootFilter); + } + } + } + return; + } + //************************************************************************** + // Associate Paste events. + if(sWndId == sAssociateType + AI_COPY_NUI) + { + if(sEvent == "click") + { + int nIndex, nAssociateType = GetAssociateType(oAssociate); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + object oAssoc; + string sAssocType; + json jModes = ai_GetAssociateDbJson(oPC, sAssociateType, "modes"); + json jButtons = ai_GetAssociateDbJson(oPC, sAssociateType, "buttons"); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jLootFilters = ai_GetAssociateDbJson(oPC, sAssociateType, "lootfilters"); + string sCombatScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + string sDefaultScript = GetLocalString(oAssociate, AI_DEFAULT_SCRIPT); + if(sElem == "btn_paste_all") + { + // Check all non-henchman associates. + for(nIndex = 2; nIndex < 6; nIndex++) + { + if(nAssociateType != nIndex) + { + oAssoc = GetAssociate(nIndex, oPC); + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + if(oAssoc != OBJECT_INVALID) + { + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + } + } + } + // Check all of our henchman. + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + } + else break; + } + ai_SendMessages(GetName(oAssociate) + "'s settings have been copied to all associates.", AI_COLOR_GREEN, oPC); + return; + } + else if(GetStringLeft(sElem, 18) == "btn_paste_henchman") + { + int nIndex = StringToInt(GetStringRight(sElem, 1)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + ai_SendMessages(GetName(oAssociate) + "'s settings have been copied to " + GetName(oAssoc) + ".", AI_COLOR_GREEN, oPC); + } + return; + } + else if(sElem == "btn_paste_familiar") nIndex = ASSOCIATE_TYPE_FAMILIAR; + else if(sElem == "btn_paste_companion") nIndex = ASSOCIATE_TYPE_ANIMALCOMPANION; + else if(sElem == "btn_paste_summons") nIndex = ASSOCIATE_TYPE_SUMMONED; + else if(sElem == "btn_paste_dominated") nIndex = ASSOCIATE_TYPE_DOMINATED; + if(nIndex > 1 && nIndex < 6) + { + oAssoc = GetAssociate(nIndex, oPC); + sAssocType = ai_GetAssociateType(oPC, oAssoc); + ai_SetAssociateDbJson(oPC, sAssocType, "modes", jModes); + ai_SetAssociateDbJson(oPC, sAssocType, "buttons", jButtons); + ai_SetAssociateDbJson(oPC, sAssocType, "aidata", jAIData); + ai_SetAssociateDbJson(oPC, sAssocType, "lootfilters", jLootFilters); + SetLocalString(oAssoc, AI_COMBAT_SCRIPT, sCombatScript); + SetLocalString(oAssoc, AI_DEFAULT_SCRIPT, sDefaultScript); + if(oAssoc != OBJECT_INVALID) + { + // Clear the creatures Perception distance so we can + // repopulate the local variables. + SetLocalFloat(oAssoc, AI_ASSOC_PERCEPTION_DISTANCE, 0.0); + ai_CheckAssociateData(oPC, oAssoc, sAssocType); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssoc, sAssocType)) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssocType + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssoc)); + } + ai_SendMessages(GetName(oAssociate) + "'s settings have been copied to " + GetName(oAssoc) + ".", AI_COLOR_GREEN, oPC); + } + } + } + return; + } + //************************************************************************** + // Plugins events. + if(sWndId == AI_PLUGIN_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_load_plugins") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_buffing"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_crafting"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_forcerest"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_fast_travel"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_henchmen"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_mod_set"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_debug"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "pi_test"); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + } + if(sElem == "btn_load_m_mods") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, "mm_prc_spells"); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + } + if(sElem == "btn_check_plugins") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jPlugin, 1)) < 3) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(TRUE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } + if(sElem == "btn_clear_plugins") + { + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jPlugin, 1)) < 3) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(FALSE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } + else if(sElem == "btn_add_plugin") + { + string sScript = JsonGetString(NuiGetBind (oPC, nToken, "txt_plugin")); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = ai_Plugin_Add(oPC, jPlugins, sScript); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + } + else if(GetStringLeft(sElem, 18) == "btn_remove_plugin_") + { + int nIndex = StringToInt(GetStringRight(sElem, 1)); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugins = JsonArrayDel(jPlugins, nIndex); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreatePluginNUI(oPC)); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oPC, sElem); + } + else if(sEvent == "watch") + { + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } + } + return; + } + //************************************************************************** + // Quick Use Widget events. + if(sWndId == sAssociateType + AI_QUICK_WIDGET_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 10) == "btn_class_") // Changes the class. + { + string sClassPosition = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 0, JsonInt(StringToInt(sClassPosition))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate)); + } + else if(GetStringLeft(sElem, 10) == "btn_level_") // Changes the level. + { + string sLevel; + if(GetStringLength(sElem) == 12) sLevel = GetStringRight(sElem, 2); + else sLevel = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 1, JsonInt(StringToInt(sLevel))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateQuickWidgetSelectionNUI(oPC, oAssociate)); + } + else if(sElem == "btn_text_spell") // Adds abilities to quick use widget. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + if(JsonGetType(jWidget) == JSON_TYPE_NULL) + { + jWidget = JsonArray(); + if(JsonGetLength(jSpells) == 2) jSpells = JsonArrayInsert(jSpells, JsonArray()); + } + int nWidgetLength = JsonGetLength(jWidget); + if(nWidgetLength < 20) + { + json jData = NuiGetUserData(oPC, nToken); + json jQuickListArray = JsonArrayGet(jData, 1); + json jSpell = JsonArrayGet(jQuickListArray, nIndex); + jWidget = JsonArrayInsert(jWidget, jSpell); + jSpells = JsonArraySet(jSpells, 2, jWidget); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + ai_PopulateWidgetList(oPC, oAssociate, nToken, jWidget); + } + else ai_SendMessages("The quick widget can only have 20 abilities or spells!", AI_COLOR_RED, oPC); + } + else if(sElem == "btn_info_spell") + { + json jQuickListArray = JsonArrayGet(jData, 1); + json jSpell = JsonArrayGet(jQuickListArray, nIndex); + ai_CreateDescriptionNUI(oPC, jSpell); + } + else if(GetStringLeft(sElem, 11) == "btn_widget_") // Removes ability from quick use widget + { + string sIndex; + if(GetStringLength(sElem) == 13) sIndex = GetStringRight(sElem, 2); + else sIndex = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + jWidget = JsonArrayDel(jWidget, StringToInt(sIndex)); + jSpells = JsonArraySet(jSpells, 2, jWidget); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + ai_PopulateWidgetList(oPC, oAssociate, nToken, jWidget); + } + } + else if(sEvent == "close") + { + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + int nUIToken = NuiFindWindow(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + } + return; + } + //************************************************************************** + // Spell Memorization events. + if(sWndId == sAssociateType + AI_SPELL_MEMORIZE_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 10) == "btn_class_") // Changes the class. + { + string sClassPosition = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 0, JsonInt(StringToInt(sClassPosition))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellMemorizationNUI(oPC, oAssociate)); + } + else if(GetStringLeft(sElem, 10) == "btn_level_") // Changes the level. + { + string sLevel = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 1, JsonInt(StringToInt(sLevel))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellMemorizationNUI(oPC, oAssociate)); + } + else if(sElem == "btn_text_spell") // Adds spell to memorization. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + string sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + string sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + int nSlot; + int nMaxMemorizationSlot = GetMemorizedSpellCountByLevel(oAssociate, nClass, nLevel); + string sSlot; + while(nSlot < nMaxMemorizationSlot) + { + if(GetMemorizedSpellId(oAssociate, nClass, nLevel, nSlot) == -1) + { + SetMemorizedSpell(oAssociate, nClass, nLevel, nSlot, nSpell, FALSE); + sSlot = IntToString(nSlot); + NuiSetBind(oPC, nToken, "btn_memorized_" + sSlot + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sSlot + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sSlot + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + return; + } + nSlot++; + } + if(nSlot >= nMaxMemorizationSlot) ai_SendMessages("All spell memorization slots are full!", AI_COLOR_RED, oPC); + } + else if(sElem == "btn_info_spell") + { + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + ai_CreateDescriptionNUI(oPC, JsonArray(), nSpell); + } + else if(GetStringLeft(sElem, 14) == "btn_memorized_") // Remove memorized spell. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + string sSlot = GetStringRight(sElem, 1); + ClearMemorizedSpell(oAssociate, nClass, nLevel, StringToInt(sSlot)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sSlot + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_memorized_" + sSlot + "_tooltip", JsonString("")); + NuiSetBind(oPC, nToken, "btn_memorized_" + sSlot + "_event", JsonBool(FALSE)); + } + } + else if(sEvent == "close") + { + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + int nUIToken = NuiFindWindow(oPC, sAssociateType + AI_QUICK_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + } + return; + } + //************************************************************************** + // Spell Known events. + if(sWndId == sAssociateType + AI_SPELL_KNOWN_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 10) == "btn_class_") // Changes the class. + { + string sClassPosition = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 0, JsonInt(StringToInt(sClassPosition))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellKnownNUI(oPC, oAssociate)); + } + else if(GetStringLeft(sElem, 10) == "btn_level_") // Changes the level. + { + string sLevel = GetStringRight(sElem, 1); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + jSpells = JsonArraySet(jSpells, 1, JsonInt(StringToInt(sLevel))); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ai_CreateSpellKnownNUI(oPC, oAssociate)); + } + else if(sElem == "btn_text_spell") // Adds spell to known list. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + // Get the correct class array. + int bAddList, nClassIndex = 0; + json jClass = JsonArrayGet(jClassList, nClassIndex); + while(JsonGetInt(GffGetInt(jClass, "Class")) != nClass) + { + jClass = JsonArrayGet(jClassList, ++nClassIndex); + } + string sLevel = IntToString(nLevel); + json jSpell, jKnownList = GffGetList(jClass, "KnownList" + sLevel); + if(JsonGetType(jKnownList) == JSON_TYPE_NULL) + { + bAddList = TRUE; + jKnownList = JsonArray(); + } + int nMaxKnownSlots, nSlot; + string sClass, sName, sSpellIcon, sSlot; + string sSpellKnownTable = Get2DAString("classes", "SpellKnownTable", nClass); + if(sSpellKnownTable != "") nMaxKnownSlots = StringToInt(Get2DAString(sSpellKnownTable, "SpellLevel" + sLevel, GetLevelByClass(nClass, oAssociate) - 1)); + else nMaxKnownSlots = 20; + while(nSlot < nMaxKnownSlots) + { + jSpell = JsonArrayGet(jKnownList, nSlot); + if(JsonGetType(jSpell) == JSON_TYPE_NULL) + { + jSpell = GffAddWord(JsonObject(), "Spell", nSpell); + jSpell = JsonObjectSet(jSpell, "__struct_id", JsonInt(3)); + jKnownList = JsonArrayInsert(jKnownList, jSpell); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSlot = IntToString(nSlot); + NuiSetBind(oPC, nToken, "btn_known_" + sSlot + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_known_" + sSlot + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_known_" + sSlot + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + sLevel + ")")); + SetLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE", TRUE); + break; + } + else if(JsonGetInt(GffGetWord(jSpell, "Spell")) == nSpell) + { + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(sName + " is already in the known spell list!", AI_COLOR_RED, oPC); + return; + } + nSlot++; + } + if(nSlot >= nMaxKnownSlots) + { + ai_SendMessages("All known spell slots are full!", AI_COLOR_RED, oPC); + return; + } + if(bAddList) jClass = GffAddList(jClass, "KnownList" + sLevel, jKnownList); + else jClass = GffReplaceList(jClass, "KnownList" + sLevel, jKnownList); + jClassList = JsonArraySet(jClassList, nClassIndex, jClass); + SetLocalJson(oAssociate, AI_CLASS_LIST_JSON, jClassList); + } + else if(sElem == "btn_info_spell") + { + json jSpellArray = JsonArrayGet(jData, 1); + int nSpell = JsonGetInt(JsonArrayGet(jSpellArray, nIndex)); + ai_CreateDescriptionNUI(oPC, JsonArray(), nSpell); + } + else if(GetStringLeft(sElem, 10) == "btn_known_") // Remove a known spell. + { + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + int nClass = GetClassByPosition(JsonGetInt(JsonArrayGet(jSpells, 0)), oAssociate); + int nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + string sIndex = GetStringRight(sElem, 1); + // Check to see if there is a spell in this slot. + string sImageName = JsonGetString(NuiGetBind(oPC, nToken, "btn_known_" + sIndex + "_image")); + if(sImageName == "ctl_cg_btn_splvl") return; + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + // Get the correct class array. + int nClassIndex = 0; + json jClass = JsonArrayGet(jClassList, nClassIndex); + while(JsonGetInt(GffGetInt(jClass, "Class")) != nClass) + { + jClass = JsonArrayGet(jClassList, ++nClassIndex); + } + string sLevel = IntToString(nLevel); + json jKnownList = GffGetList(jClass, "KnownList" + sLevel); + jKnownList = JsonArrayDel(jKnownList, StringToInt(sIndex)); + jClass = GffReplaceList(jClass, "KnownList" + sLevel, jKnownList); + jClassList = JsonArraySet(jClassList, nClassIndex, jClass); + SetLocalJson(oAssociate, AI_CLASS_LIST_JSON, jClassList); + SetLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE", TRUE); + // Relist all known spells so they match the index. + int nMaxKnownSlots, nSpell; + string sName, sSpellIcon, sClass = IntToString(nClass); + string sSpellKnownTable = Get2DAString("classes", "SpellKnownTable", nClass); + json jSpell; + if(sSpellKnownTable != "") nMaxKnownSlots = StringToInt(Get2DAString(sSpellKnownTable, "SpellLevel" + IntToString(nLevel), GetLevelByClass(nClass, oAssociate) - 1)); + else nMaxKnownSlots = 20; + nIndex = 0; + while(nIndex < 20) + { + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(TRUE)); + if(nIndex < nMaxKnownSlots) + { + jSpell = JsonArrayGet(jKnownList, nIndex); + if(JsonGetType(jSpell) == JSON_TYPE_NULL) + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" Empty known spell slot")); + } + else + { + nSpell = JsonGetInt(GffGetWord(jSpell, "Spell")); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //nMetaMagic = 255; + //nDomain = 0; + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, -1, -1, -1, nMetaMagic, nDomain); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } + } + } + else if(sEvent == "close") + { + if(GetLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE")) + { + RemoveHenchman(oPC, oAssociate); + ChangeToStandardFaction(oAssociate, STANDARD_FACTION_DEFENDER); + json jHenchman = ObjectToJson(oAssociate, TRUE); + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + jHenchman = GffReplaceList(jHenchman, "ClassList", jClassList); + location lLocation = GetLocation(oAssociate); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + AssignCommand(oAssociate, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oAssociate); + oAssociate = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion); + DeleteLocalJson(oAssociate, AI_CLASS_LIST_JSON); + DeleteLocalInt(oAssociate, "AI_KNOWN_SPELL_CHANGE"); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + } + } + return; + } + //************************************************************************** + // Spell Description events. + if(sWndId == AI_SPELL_DESCRIPTION_NUI) + { + if(sEvent == "click" && sElem == "btn_ok") DelayCommand(0.0, NuiDestroy(oPC, nToken)); + } + //************************************************************************** + // Effect Icon NUI events. + if(sWndId == AI_EFFECT_ICON_NUI) + { + if(sEvent == "click") + { + if(GetStringLeft(sElem, 18) == "btn_remove_effect_") + { + int nEffectIndex = StringToInt(GetStringRight(sElem, GetStringLength(sElem) - 18)); + json jEffectID = JsonArrayGet(jData, 2); + string sEffectLinkID = JsonGetString(JsonArrayGet(jEffectID, nEffectIndex)); + int nIndex; + effect eEffect = GetFirstEffect(oPC); + while(GetIsEffectValid(eEffect)) + { + if(GetEffectLinkId(eEffect) == sEffectLinkID) + { + RemoveEffect(oPC, eEffect); + int nEffectIconToken = NuiFindWindow(oPC, AI_EFFECT_ICON_NUI); + if(nEffectIconToken) DelayCommand(0.0, NuiDestroy(oPC, nEffectIconToken)); + } + nIndex++; + eEffect = GetNextEffect(oPC); + } + } + } + else if(sEvent == "mousedown") + { + AssignCommand(oPC, PlaySound("gui_button")); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + } + } +} +void ai_SetWidgetButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + ai_SetWidgetButton(oPC, nButton, oAssociate, sAssociateType, bCheck); +} +void ai_SetAIButtonToCheckbox(object oPC, int nButton, object oAssociate, string sAssociateType, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + ai_SetAIButton(oPC, nButton, oAssociate, sAssociateType, bCheck); +} +void ai_SetLootFilterToCheckbox(object oPC, object oAssociate, int nFilterBit, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + ai_SetLootFilter(oAssociate, nFilterBit, bCheck); +} +void ai_AddAssociate(object oPC, int nToken, json jAssociate, location lLocation, int nFamiliar, int nCompanion, int nRange = 0) +{ + object oAssociate = JsonToObject(jAssociate, lLocation, OBJECT_INVALID, TRUE); + //ChangeToStandardFaction(oAssociate, STANDARD_FACTION_COMMONER); + //SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 50, oAssociate); + //SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 50, oAssociate); + //SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 50, oAssociate); + //SetStandardFactionReputation(STANDARD_FACTION_HOSTILE, 0, oAssociate); + AddHenchman(oPC, oAssociate); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(!ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType) || oPC == oAssociate) + { + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + } + if(nRange) SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, nRange); + if(nFamiliar) SummonFamiliar(oAssociate); + if(nCompanion) SummonAnimalCompanion(oAssociate); +} +void ai_SetCompanionType(object oPC, object oAssociate, int nToken, int nAssociateType) +{ + if(ai_GetIsCharacter(oAssociate)) return; + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + int nSelection; + // Need to remove the henchman before we copy them to keep factions correct. + ai_FireHenchman(oPC, oAssociate); + json jAssociate = ObjectToJson(oAssociate, TRUE); + if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) + { + nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_familiar_selected")); + jAssociate = GffReplaceInt(jAssociate, "FamiliarType", nSelection); + } + else if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) + { + nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_companion_selected")); + jAssociate = GffReplaceInt(jAssociate, "CompanionType", nSelection); + } + //ai_Debug("0e_nui", "916", JsonDump(jAssociate, 1)); + location lLocation = GetLocation(oAssociate); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate); + DestroyObject(oAssociate); + DelayCommand(0.1, ai_AddAssociate(oPC, nToken, jAssociate, lLocation, nFamiliar, nCompanion)); +} +void ai_SetCompanionName(object oPC, object oAssociate, int nToken, int nAssociateType) +{ + if(ai_GetIsCharacter(oAssociate)) return; + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + string sAssociateType; + string sName; + // Need to remove the henchman before we copy them to keep factions correct. + ai_FireHenchman(oPC, oAssociate); + json jAssociate = ObjectToJson(oAssociate, TRUE); + if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) + { + sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_familiar_name")); + jAssociate = GffReplaceString(jAssociate, "FamiliarName", sName); + } + else if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) + { + sAssociateType = "txt_companion_name"; + sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_companion_name")); + jAssociate = GffReplaceString(jAssociate, "FamiliarName", sName); + } + location lLocation = GetLocation(oAssociate); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate); + DestroyObject(oAssociate); + DelayCommand(0.1, ai_AddAssociate(oPC, nToken, jAssociate, lLocation, nFamiliar, nCompanion)); +} +void ai_SetAIScript(object oPC, object oAssociate, int nToken) +{ + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_ai_script_selected")); + if(nSelection == 0) return; + string sScript = sScript = ResManFindPrefix("ai_a_", RESTYPE_NCS, nSelection); + NuiSetBind(oPC, nToken, "txt_ai_script", JsonString(sScript)); + string sOldScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript != sOldScript) + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 8)) == JSON_TYPE_NULL) jAIData = JsonArrayInsert(jAIData, JsonString(sScript)); + else jAIData = JsonArraySet(jAIData, 8, JsonString(sScript)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + ai_SendMessages(GetName(oAssociate) + " is now using " + sScript + " AI script!", AI_COLOR_GREEN, oPC); + } + else ai_SendMessages(GetName(oAssociate) + " is already using this script! Did not change AI script.", AI_COLOR_RED, oPC); +} +void ai_PercRangeIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType, int nToken) +{ + int nAdjustment = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU"); + nAdjustment += nIncrement; + if(nAdjustment < 8 || nAdjustment > 11) return; + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU", nAdjustment); + json jAssociate = ObjectToJson(oAssociate, TRUE); + int nHenchPercRange = JsonGetInt(GffGetByte(jAssociate, "PerceptionRange")); + string sText, sInfo; + if(nAdjustment == nHenchPercRange) + { + if(nAdjustment == 8) sText = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + else if(nAdjustment == 9) sText = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + else if(nAdjustment == 10) sText = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + else sText = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + sInfo = " "; + } + else + { + if(nAdjustment == 8) sText = " !!! Click the Perception Range button to set to short range !!!"; + else if(nAdjustment == 9) sText = " !!! Click the Perception Range button to set to medium range !!!"; + else if(nAdjustment == 10) sText = " !!! Click the Perception Range button to set to long range !!!"; + else sText = " !!! Click the Perception Range button to set to the default range !!!"; + sInfo = sText; + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_perc_range_tooltip", sText); + if(nToken > -1) NuiSetBind (oPC, nToken, "lbl_info_label", JsonString(sInfo)); +} +void ai_Perc_Range(object oPC, object oAssociate, int nToken, string sAssociateType) +{ + if(ai_GetIsCharacter(oAssociate)) return; + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + int nBtnPercRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU"); + string sText, sText2; + float fRange = 25.0; + if(nBtnPercRange == 8) + { + sText = "short"; + sText2 = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + fRange = 15.0; + } + else if(nBtnPercRange == 9) + { + sText = "medium"; + sText2 = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + } + else if(nBtnPercRange == 10) + { + sText = "long"; + sText2 = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + fRange = 40.0; + } + else if(nBtnPercRange == 11) + { + sText = "default"; + sText2 = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + } + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, fRange); + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, nBtnPercRange); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 7, JsonInt(nBtnPercRange)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + // Need to remove the henchman before we copy them to keep factions correct. + ai_FireHenchman(oPC, oAssociate); + json jAssociate = ObjectToJson(oAssociate, TRUE); + int nHenchPercRange = JsonGetInt(GffGetByte(jAssociate, "PerceptionRange")); + if(nBtnPercRange == nHenchPercRange) + { + ai_SendMessages(GetName(oAssociate) + " already has this perception set.", AI_COLOR_YELLOW, oPC); + AddHenchman(oPC, oAssociate); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + return; + } + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_NUI))); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_perc_range_tooltip", sText2); + ai_SendMessages(GetName(oAssociate) + " has updated their perception range to " + sText + ".", AI_COLOR_YELLOW, oPC); + location lLocation = GetLocation(oAssociate); + jAssociate = GffReplaceByte(jAssociate, "PerceptionRange", nBtnPercRange); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oAssociate); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oAssociate); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + SetIsDestroyable(TRUE, FALSE, FALSE, oAssociate); + DestroyObject(oAssociate); + DelayCommand(0.1, ai_AddAssociate(oPC, nToken, jAssociate, lLocation, nFamiliar, nCompanion, nBtnPercRange)); +} +void ai_RulePercDistInc(object oPC, object oModule, int nIncrement, int nToken) +{ + int nAdjustment = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE) + nIncrement; + if(nAdjustment < 8 || nAdjustment > 11) return; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, nAdjustment); + string sText; + if(nAdjustment == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nAdjustment == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nAdjustment == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oPC, nToken, "lbl_perc_dist_label", JsonString(sText)); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_MON_PERC_DISTANCE, JsonInt(nAdjustment)); + ai_SetCampaignDbJson("rules", jRules); +} +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE) +{ + object oModule = GetModule(); + json jRSpells = GetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS); + if(JsonGetType(jRSpells) == JSON_TYPE_NULL) jRSpells = JsonArray(); + int nIndex, nMaxIndex = JsonGetLength(jRSpells); + if(bRestrict) + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) return jRules; + nIndex++; + } + jRSpells = JsonArrayInsert(jRSpells, JsonInt(nSpell)); + } + else + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) + { + jRSpells = JsonArrayDel(jRSpells, nIndex); + break; + } + nIndex++; + } + } + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, jRSpells); + return JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, jRSpells); +} +object ai_AddHenchman(object oPC, json jHenchman, location lLocation, int nFamiliar, int nCompanion) +{ + jHenchman = GffReplaceResRef(jHenchman, "ScriptSpawn", ""); + object oHenchman = JsonToObject(jHenchman, lLocation, OBJECT_INVALID, TRUE); + AddHenchman(oPC, oHenchman); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + string sAssociateType = ai_GetAssociateType(oPC, oHenchman); + NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI)); + if(nFamiliar) SummonFamiliar(oHenchman); + if(nCompanion) SummonAnimalCompanion(oHenchman); + return oHenchman; +} + diff --git a/_module/nss/0e_nui_dm.nss b/_module/nss/0e_nui_dm.nss new file mode 100644 index 0000000..4a1dea0 --- /dev/null +++ b/_module/nss/0e_nui_dm.nss @@ -0,0 +1,716 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_nui_dm + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Menu event script + sEvent: close, click, mousedown, mouseup, watch (if bindwatch is set). +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_menus" +#include "0i_menus_dm" +void ai_SetDMWidgetButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_SetDMWAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_SetDMAIAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_SetDMAIAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem); +void ai_RulePercDistInc(object oDM, object oModule, int nIncrement, int nToken); +// Adds a spell to a json AI restricted spell list then returns jRules. +// bRestrict = TRUE will add to the list FALSE will remove it from the list. +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE); +// Adds a selected creature to the group. +void ai_SelectToGroup(object oDM, string sElem); +// Does a selected action for nGroup. +void ai_DMSelectAction(object oDM, string sElem); +// Changes if the group will run (nSpeed: 1) or walk (nSpeed: 0). +void ai_DMChangeMoveSpeed(object oDM, string sElem, int nSpeed); +void main() +{ + object oDM = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + string sWndId = NuiGetWindowId(oDM, nToken); + //if(AI_DEBUG) ai_Debug ("0e_nui", "58", "sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " oPC: " + GetName(oPC)); + //WriteTimestampedLogEntry("0e_nui, 58, sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " oDM: " + GetName(oDM)); + if(ai_GetIsCharacter(oDM)) + { + if(!NuiFindWindow(oDM, "pc" + AI_WIDGET_NUI)) + { + ai_SendMessages(GetName(oDM) + " is now a Player! Loading player widget.", AI_COLOR_YELLOW, oDM); + ai_CreateWidgetNUI(oDM, oDM); + } + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + return; + } + //************************************************************************** + string sName = ai_RemoveIllegalCharacters(GetName(oDM)); + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt(oDM, AI_NO_NUI_SAVE)) return; + SaveMenuToCampaignDb(oDM, nToken, sWndId); + } + //************************************************************************** + // Widget events. + if(sWndId == "dm" + AI_WIDGET_NUI) + { + //if(GetLocalInt(oDM, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_open_main") + { + if(IsWindowClosed(oDM, "dm" + AI_COMMAND_NUI)) ai_CreateDMCommandNUI(oDM); + IsWindowClosed(oDM, "dm" + AI_MAIN_NUI); + } + else if(sElem == "btn_camera") ai_SelectCameraView(oDM); + else if(sElem == "btn_inventory") ai_SelectOpenInventory(oDM); + else if(GetStringLeft(sElem, 13) == "btn_cmd_group") + { + ai_DMSelectAction(oDM, sElem); + } + else if(GetStringLeft(sElem, 15) == "btn_exe_plugin_") ai_Plugin_Execute(oDM, sElem, TRUE); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 1); + } + if(nMouseScroll == -1.0) // Scroll down + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 0); + } + } + else if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(sElem == "btn_open_main") + { + if(IsWindowClosed(oDM, "dm" + AI_MAIN_NUI)) ai_CreateDMOptionsNUI(oDM); + } + else if(GetStringLeft(sElem, 13) == "btn_cmd_group") + { + ai_SelectToGroup(oDM, sElem); + } + } + } + } + else if(sWndId == "dm" + AI_COMMAND_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_widget_lock") + { + if(ai_GetDMWidgetButton(oDM, BTN_DM_WIDGET_LOCK)) + { + ai_SendMessages(GetName(oDM) + " AI widget unlocked.", AI_COLOR_YELLOW, oDM); + ai_SetDMWidgetButton(oDM, BTN_DM_WIDGET_LOCK, FALSE); + } + else + { + ai_SendMessages(GetName(oDM) + " AI widget locked.", AI_COLOR_YELLOW, oDM); + ai_SetDMWidgetButton(oDM, BTN_DM_WIDGET_LOCK, TRUE); + } + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(sElem == "btn_main_menu") + { + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMOptionsNUI(oDM)); + } + else if(sElem == "btn_camera") ai_SelectCameraView(oDM); + else if(sElem == "btn_inventory") ai_SelectOpenInventory(oDM); + else if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMSelectAction(oDM, sElem); + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oDM, sElem, 1); + } + else if(sEvent == "watch") + { + if(sElem == "chbx_cmd_group1_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP1, nToken, sElem); + else if(sElem == "chbx_cmd_group2_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP2, nToken, sElem); + else if(sElem == "chbx_cmd_group3_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP3, nToken, sElem); + else if(sElem == "chbx_cmd_group4_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP4, nToken, sElem); + else if(sElem == "chbx_cmd_group5_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP5, nToken, sElem); + else if(sElem == "chbx_cmd_group6_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_GROUP6, nToken, sElem); + else if(sElem == "chbx_camera_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_CAMERA, nToken, sElem); + else if(sElem == "chbx_inventory_check") ai_SetDMWidgetButtonToCheckbox(oDM, BTN_DM_CMD_INVENTORY, nToken, sElem); + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugins = ai_GetCampaignDbJson("plugins", sName, AI_DM_TABLE); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetCampaignDbJson("plugins", jPlugins, sName, AI_DM_TABLE); + } + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 1); + } + if(nMouseScroll == -1.0) // Scroll down + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") ai_DMChangeMoveSpeed(oDM, sElem, 0); + } + } + else if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(GetStringLeft(sElem, 13) == "btn_cmd_group") + { + ai_SelectToGroup(oDM, sElem); + } + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + } + else if(nMouseScroll == -1.0) // Scroll down + { + } + } + } + //************************************************************************** + // Main AI events. + if(sWndId == "dm" + AI_MAIN_NUI) + { + if(sEvent == "click") + { + if(sElem == "btn_plugin_manager") + { + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + } + if(sElem == "btn_widget_manager") + { + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMWidgetManagerNUI(oDM)); + } + } + if(sEvent == "watch") + { + if(sElem == "txt_max_henchman") + { + int nMaxHenchmen = StringToInt(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(nMaxHenchmen < 1) nMaxHenchmen = 1; + if(nMaxHenchmen > AI_MAX_HENCHMAN) + { + nMaxHenchmen = AI_MAX_HENCHMAN; + ai_SendMessages("The maximum henchmen for this mod is " + IntToString(AI_MAX_HENCHMAN) + "!", AI_COLOR_RED, oDM); + } + SetMaxHenchmen(nMaxHenchmen); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_MAX_HENCHMAN, JsonInt(nMaxHenchmen)); + ai_SetCampaignDbJson("rules", jRules); + ai_SendMessages("Maximum henchmen has been changed to " + IntToString(nMaxHenchmen), AI_COLOR_YELLOW, oDM); + } + else if(sElem == "txt_ai_difficulty") + { + int nChance = StringToInt(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(nChance < 0) nChance = 0; + else if(nChance > 100) nChance = 100; + SetLocalInt(GetModule(), AI_RULE_AI_DIFFICULTY, nChance); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_AI_DIFFICULTY, JsonInt(nChance)); + ai_SetCampaignDbJson("rules", jRules); + } + else if(sElem == "txt_perception_distance") + { + float fDistance = StringToFloat(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(fDistance < 10.0) fDistance = 10.0; + else if(fDistance > 60.0) fDistance = 60.0; + SetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE, fDistance); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_PERCEPTION_DISTANCE, JsonFloat(fDistance)); + ai_SetCampaignDbJson("rules", jRules); + } + else if(sElem == "txt_inc_hp") + { + int nNumber = StringToInt(JsonGetString(NuiGetBind(oDM, nToken, sElem))); + if(nNumber < 0) nNumber = 0; + else if(nNumber > 500) nNumber = 500; + SetLocalInt(GetModule(), AI_INCREASE_MONSTERS_HP, nNumber); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_INCREASE_MONSTERS_HP, JsonInt(nNumber)); + ai_SetCampaignDbJson("rules", jRules); + } + else if(GetStringLeft(sElem, 4) == "chbx") + { + object oModule = GetModule(); + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + json jRules = ai_GetCampaignDbJson("rules"); + if(sElem == "chbx_moral_check") + { + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_MORAL_CHECKS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_monsters_check") + { + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_BUFF_MONSTERS, JsonInt(bCheck)); + } + else if(sElem == "chbx_full_buff_check") + { + SetLocalInt(oModule, AI_RULE_FULL_BUFF_MONSTERS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_FULL_BUFF_MONSTERS, JsonInt(bCheck)); + } + else if(sElem == "chbx_buff_summons_check") + { + SetLocalInt(oModule, AI_RULE_PRESUMMON, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PRESUMMON, JsonInt(bCheck)); + } + else if(sElem == "chbx_ambush_monsters_check") + { + SetLocalInt(oModule, AI_RULE_AMBUSH, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_AMBUSH, JsonInt(bCheck)); + } + else if(sElem == "chbx_companions_check") + { + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_SUMMON_COMPANIONS, JsonInt(bCheck)); + } + else if(sElem == "chbx_advanced_movement_check") + { + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ADVANCED_MOVEMENT, JsonInt(bCheck)); + } + else if(sElem == "chbx_ilr_check") + { + SetLocalInt(oModule, AI_RULE_ILR, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ILR, JsonInt(bCheck)); + } + else if(sElem == "chbx_umd_check") + { + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_ALLOW_UMD, JsonInt(bCheck)); + } + else if(sElem == "chbx_use_healingkits_check") + { + SetLocalInt(oModule, AI_RULE_HEALERSKITS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_HEALERSKITS, JsonInt(bCheck)); + } + else if(sElem == "chbx_perm_assoc_check") + { + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PERM_ASSOC, JsonInt(bCheck)); + } + else if(sElem == "chbx_corpses_stay_check") + { + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(bCheck)); + } + else if(sElem == "chbx_wander_check") + { + SetLocalInt(oModule, AI_RULE_WANDER, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(bCheck)); + } + else if(sElem == "chbx_open_doors_check") + { + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_OPEN_DOORS, JsonInt(bCheck)); + } + else if(sElem == "chbx_party_scale_check") + { + if(bCheck) + { + SetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP, GetModuleXPScale()); + ai_CheckXPPartyScale(oDM); + } + else + { + SetModuleXPScale(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + } + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, bCheck); + jRules = JsonObjectSet(jRules, AI_RULE_PARTY_SCALE, JsonInt(bCheck)); + string sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oDM, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + sText = IntToString(GetModuleXPScale()); + NuiSetBind(oDM, nToken, "txt_xp_scale", JsonString(sText)); + } + else if(sElem == "chbx_darkness_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 159); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS); + jRules = ai_AddRestrictedSpell(jRules, 688); // WildShape_Darkness + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 159, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELLABILITY_AS_DARKNESS, FALSE); + jRules = ai_AddRestrictedSpell(jRules, 688, FALSE); // WildShape_Darkness + } + } + else if(sElem == "chbx_dispels_check") + { + if(bCheck) + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION); + } + else + { + jRules = ai_AddRestrictedSpell(jRules, SPELL_LESSER_DISPEL, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_DISPEL_MAGIC, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_GREATER_DISPELLING, FALSE); + jRules = ai_AddRestrictedSpell(jRules, SPELL_MORDENKAINENS_DISJUNCTION, FALSE); + } + } + else if(sElem == "chbx_timestop_check") + { + if(bCheck) jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP); + else jRules = ai_AddRestrictedSpell(jRules, SPELL_TIME_STOP, FALSE); + } + ai_SetCampaignDbJson("rules", jRules); + } + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + if(nMouseScroll == 1.0) // Scroll up + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oDM, GetModule(), 1, nToken); + } + else if(nMouseScroll == -1.0) // Scroll down + { + // Follow range is only changed on non-pc's + if(sElem == "lbl_perc_dist") ai_RulePercDistInc(oDM, GetModule(), -1, nToken); + } + } + } + //************************************************************************** + // Plugins events. + if(sWndId == "dmai_plugin_nui") + { + string sName = ai_RemoveIllegalCharacters(GetName(oDM)); + json jPlugins = ai_GetCampaignDbJson("plugins"); + if(sEvent == "click") + { + if(sElem == "btn_load_plugins") + { + string sScript = JsonGetString(NuiGetBind (oDM, nToken, "txt_plugin")); + if(JsonGetType(JsonArrayGet(jPlugins, 0)) == JSON_TYPE_NULL) jPlugins = JsonArray(); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_buffing"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_forcerest"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_henchmen"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_crafting"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_mod_set"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_debug"); + jPlugins = ai_Plugin_Add(oDM, jPlugins, "pi_test"); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + if(sElem == "btn_check_plugins") + { + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(TRUE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + if(sElem == "btn_clear_plugins") + { + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(FALSE)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(sElem == "btn_add_plugin") + { + string sScript = JsonGetString(NuiGetBind (oDM, nToken, "txt_plugin")); + if(JsonGetType(JsonArrayGet(jPlugins, 0)) == JSON_TYPE_NULL) jPlugins = JsonArray(); + jPlugins = ai_Plugin_Add(oDM, jPlugins, sScript); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + } + else if(GetStringLeft(sElem, 18) == "btn_remove_plugin_") + { + int nIndex = StringToInt(GetStringRight(sElem, 1)); + jPlugins = JsonArrayDel(jPlugins, nIndex); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMPluginManagerNUI(oDM)); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + else if(GetStringLeft(sElem, 11) == "btn_plugin_") ai_Plugin_Execute(oDM, sElem, 2); + } + else if(sEvent == "watch") + { + if(GetStringLeft(sElem, 12) == "chbx_plugin_" && GetStringRight(sElem, 6) == "_check") + { + int nIndex = StringToInt(GetSubString(sElem, 12, 1)); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + jPlugin = JsonArraySet(jPlugin, 1, JsonBool(bCheck)); + jPlugins = JsonArraySet(jPlugins, nIndex, jPlugin); + ai_SetCampaignDbJson("plugins", jPlugins); + DelayCommand(0.0, NuiDestroy(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI))); + DelayCommand(0.1, ai_CreateDMWidgetNUI(oDM)); + } + } + } + if(sWndId == "dm_widget_manager_nui") + { + //SendMessageToDM(oDM, "sEvent: " + sEvent + " sElem: " + sElem); + if(sEvent == "click") + { + if(sElem == "btn_clear_buttons") + { + object oModule = GetModule(); + SetLocalInt(oModule, sDMWidgetAccessVarname, 0); + SetLocalInt(oModule, sDMAIAccessVarname, 0); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(0)); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(0)); + ai_SetCampaignDbJson("rules", jRules); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMWidgetManagerNUI(oDM)); + return; + } + else if(sElem == "btn_check_buttons") + { + object oModule = GetModule(); + SetLocalInt(oModule, sDMWidgetAccessVarname, 7340028); + SetLocalInt(oModule, sDMAIAccessVarname, 203423743); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(7340028)); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(203423743)); + ai_SetCampaignDbJson("rules", jRules); + DelayCommand(0.0, NuiDestroy(oDM, nToken)); + DelayCommand(0.1, ai_CreateDMWidgetManagerNUI(oDM)); + return; + } + SetLocalInt(oDM, "CHBX_SKIP", TRUE); + DelayCommand(2.0, DeleteLocalInt(oDM, "CHBX_SKIP")); + if(sElem == "btn_cmd_action") NuiSetBind(oDM, nToken, "chbx_cmd_action_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_ACTION))); + else if(sElem == "btn_cmd_guard") NuiSetBind(oDM, nToken, "chbx_cmd_guard_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_GUARD))); + else if(sElem == "btn_cmd_hold") NuiSetBind(oDM, nToken, "chbx_cmd_hold_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_HOLD))); + else if(sElem == "btn_cmd_attack") NuiSetBind(oDM, nToken, "chbx_cmd_attack_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_ATTACK))); + else if(sElem == "btn_cmd_follow") NuiSetBind(oDM, nToken, "chbx_cmd_follow_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_FOLLOW))); + else if(sElem == "btn_follow_target") NuiSetBind(oDM, nToken, "chbx_follow_target_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_FOLLOW_TARGET))); + else if(sElem == "btn_cmd_search") NuiSetBind(oDM, nToken, "chbx_cmd_search_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_SEARCH))); + else if(sElem == "btn_cmd_stealth") NuiSetBind(oDM, nToken, "chbx_cmd_stealth_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_STEALTH))); + else if(sElem == "btn_cmd_ai_script") NuiSetBind(oDM, nToken, "chbx_cmd_ai_script_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT))); + else if(sElem == "btn_cmd_place_trap") NuiSetBind(oDM, nToken, "chbx_cmd_place_trap_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_PLACE_TRAP))); + else if(sElem == "btn_quick_widget") NuiSetBind(oDM, nToken, "chbx_quick_widget_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_SPELL_WIDGET))); + else if(sElem == "btn_spell_memorize") NuiSetBind(oDM, nToken, "chbx_spell_memorize_check", JsonBool(!ai_GetDMWAccessButton(BTN_DM_CMD_MEMORIZE))); + else if(sElem == "btn_buff_short") NuiSetBind(oDM, nToken, "chbx_buff_short_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_SHORT))); + else if(sElem == "btn_buff_long") NuiSetBind(oDM, nToken, "chbx_buff_long_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_LONG))); + else if(sElem == "btn_buff_all") NuiSetBind(oDM, nToken, "chbx_buff_all_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_ALL))); + else if(sElem == "btn_buff_rest") NuiSetBind(oDM, nToken, "chbx_buff_rest_check", JsonBool(!ai_GetDMWAccessButton(BTN_BUFF_REST))); + else if(sElem == "btn_jump_to") NuiSetBind(oDM, nToken, "chbx_jump_to_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_JUMP_TO))); + else if(sElem == "btn_ghost_mode") NuiSetBind(oDM, nToken, "chbx_ghost_mode_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_GHOST_MODE))); + else if(sElem == "btn_camera") NuiSetBind(oDM, nToken, "chbx_camera_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_CAMERA))); + else if(sElem == "btn_inventory") NuiSetBind(oDM, nToken, "chbx_inventory_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_INVENTORY))); + else if(sElem == "btn_familiar") NuiSetBind(oDM, nToken, "chbx_familiar_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_FAMILIAR))); + else if(sElem == "btn_companion") NuiSetBind(oDM, nToken, "chbx_companion_check", JsonBool(!ai_GetDMWAccessButton(BTN_CMD_COMPANION))); + else if(sElem == "btn_ai") NuiSetBind(oDM, nToken, "chbx_ai_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_FOR_PC))); + else if(sElem == "btn_quiet") NuiSetBind(oDM, nToken, "chbx_quiet_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_REDUCE_SPEECH))); + else if(sElem == "btn_ranged") NuiSetBind(oDM, nToken, "chbx_ranged_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_USE_RANGED))); + else if(sElem == "btn_search") NuiSetBind(oDM, nToken, "chbx_search_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_USE_SEARCH))); + else if(sElem == "btn_stealth") NuiSetBind(oDM, nToken, "chbx_stealth_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_USE_STEALTH))); + else if(sElem == "btn_open_door") NuiSetBind(oDM, nToken, "chbx_open_door_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_OPEN_DOORS))); + else if(sElem == "btn_traps") NuiSetBind(oDM, nToken, "chbx_traps_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_REMOVE_TRAPS))); + else if(sElem == "btn_pick_locks") NuiSetBind(oDM, nToken, "chbx_pick_locks_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_PICK_LOCKS))); + else if(sElem == "btn_bash_locks") NuiSetBind(oDM, nToken, "chbx_bash_locks_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_BASH_LOCKS))); + else if(sElem == "btn_magic_level") NuiSetBind(oDM, nToken, "chbx_magic_level_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_MAGIC_LEVEL))); + else if(sElem == "btn_spontaneous") NuiSetBind(oDM, nToken, "chbx_spontaneous_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_NO_SPONTANEOUS))); + else if(sElem == "btn_magic") NuiSetBind(oDM, nToken, "chbx_magic_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_USE))); + else if(sElem == "btn_magic_items") NuiSetBind(oDM, nToken, "chbx_magic_items_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_ITEM_USE))); + else if(sElem == "btn_def_magic") NuiSetBind(oDM, nToken, "chbx_def_magic_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_DEF_MAGIC_USE))); + else if(sElem == "btn_off_magic") NuiSetBind(oDM, nToken, "chbx_off_magic_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_OFF_MAGIC_USE))); + else if(sElem == "btn_heal_out") NuiSetBind(oDM, nToken, "chbx_heal_out_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_HEAL_OUT))); + else if(sElem == "btn_heal_in") NuiSetBind(oDM, nToken, "chbx_heal_in_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_HEAL_IN))); + else if(sElem == "btn_heals_onoff") NuiSetBind(oDM, nToken, "chbx_heals_onoff_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_STOP_SELF_HEALING))); + else if(sElem == "btn_healp_onoff") NuiSetBind(oDM, nToken, "chbx_healp_onoff_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_STOP_PARTY_HEALING))); + else if(sElem == "btn_loot") NuiSetBind(oDM, nToken, "chbx_loot_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_LOOT))); + else if(sElem == "btn_ignore_assoc") NuiSetBind(oDM, nToken, "chbx_ignore_assoc_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_IGNORE_ASSOCIATES))); + else if(sElem == "btn_ignore_traps") NuiSetBind(oDM, nToken, "chbx_ignore_traps_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_IGNORE_TRAPS))); + else if(sElem == "btn_perc_range") NuiSetBind(oDM, nToken, "chbx_perc_range_check", JsonBool(!ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE))); + } + if(sEvent == "watch") + { + if(GetLocalInt(oDM, "CHBX_SKIP")) return; + if(sElem == "chbx_cmd_action_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_ACTION, nToken, sElem); + else if(sElem == "chbx_cmd_guard_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_GUARD, nToken, sElem); + else if(sElem == "chbx_cmd_hold_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_HOLD, nToken, sElem); + else if(sElem == "chbx_cmd_attack_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_ATTACK, nToken, sElem); + else if(sElem == "chbx_cmd_follow_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_FOLLOW, nToken, sElem); + else if(sElem == "chbx_follow_target_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_FOLLOW_TARGET, nToken, sElem); + else if(sElem == "chbx_cmd_search_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_SEARCH, nToken, sElem); + else if(sElem == "chbx_cmd_stealth_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_STEALTH, nToken, sElem); + else if(sElem == "chbx_cmd_ai_script_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_AI_SCRIPT, nToken, sElem); + else if(sElem == "chbx_cmd_place_trap_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_PLACE_TRAP, nToken, sElem); + else if(sElem == "chbx_quick_widget_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_SPELL_WIDGET, nToken, sElem); + else if(sElem == "chbx_spell_memorize_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_DM_CMD_MEMORIZE, nToken, sElem); + else if(sElem == "chbx_buff_short_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_SHORT, nToken, sElem); + else if(sElem == "chbx_buff_long_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_LONG, nToken, sElem); + else if(sElem == "chbx_buff_all_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_ALL, nToken, sElem); + else if(sElem == "chbx_buff_rest_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_BUFF_REST, nToken, sElem); + else if(sElem == "chbx_jump_to_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_JUMP_TO, nToken, sElem); + else if(sElem == "chbx_ghost_mode_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_GHOST_MODE, nToken, sElem); + else if(sElem == "chbx_camera_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_CAMERA, nToken, sElem); + else if(sElem == "chbx_inventory_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_INVENTORY, nToken, sElem); + else if(sElem == "chbx_familiar_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_FAMILIAR, nToken, sElem); + else if(sElem == "chbx_companion_check") ai_SetDMWAccessButtonToCheckbox(oDM, BTN_CMD_COMPANION, nToken, sElem); + else if(sElem == "chbx_ai_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_FOR_PC, nToken, sElem); + else if(sElem == "chbx_quiet_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_REDUCE_SPEECH, nToken, sElem); + else if(sElem == "chbx_ranged_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_USE_RANGED, nToken, sElem); + else if(sElem == "chbx_search_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_USE_SEARCH, nToken, sElem); + else if(sElem == "chbx_stealth_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_USE_STEALTH, nToken, sElem); + else if(sElem == "chbx_open_door_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_OPEN_DOORS, nToken, sElem); + else if(sElem == "chbx_traps_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_REMOVE_TRAPS, nToken, sElem); + else if(sElem == "chbx_pick_locks_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_PICK_LOCKS, nToken, sElem); + else if(sElem == "chbx_bash_locks_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_BASH_LOCKS, nToken, sElem); + else if(sElem == "chbx_magic_level_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_MAGIC_LEVEL, nToken, sElem); + else if(sElem == "chbx_spontaneous_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_NO_SPONTANEOUS, nToken, sElem); + else if(sElem == "chbx_magic_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_NO_MAGIC_USE, nToken, sElem); + else if(sElem == "chbx_magic_items_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_NO_MAGIC_ITEM_USE, nToken, sElem); + else if(sElem == "chbx_def_magic_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_DEF_MAGIC_USE, nToken, sElem); + else if(sElem == "chbx_off_magic_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_OFF_MAGIC_USE, nToken, sElem); + else if(sElem == "chbx_heal_out_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_HEAL_OUT, nToken, sElem); + else if(sElem == "chbx_heal_in_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_HEAL_IN, nToken, sElem); + else if(sElem == "chbx_heals_onoff_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_STOP_SELF_HEALING, nToken, sElem); + else if(sElem == "chbx_healp_onoff_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_STOP_PARTY_HEALING, nToken, sElem); + else if(sElem == "chbx_loot_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_LOOT, nToken, sElem); + else if(sElem == "chbx_ignore_assoc_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_IGNORE_ASSOCIATES, nToken, sElem); + else if(sElem == "chbx_ignore_traps_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_IGNORE_TRAPS, nToken, sElem); + else if(sElem == "chbx_perc_range_check") ai_SetDMAIAccessButtonToCheckbox(oDM, BTN_AI_PERC_RANGE, nToken, sElem); + } + } +} +void ai_SetDMWidgetButtonToCheckbox(object oDM, int nButton, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + ai_SetDMWidgetButton(oDM, nButton, bCheck); +} +void ai_SetDMWAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + ai_SetDMWAccessButton(nButton, bCheck); +} +void ai_SetDMAIAccessButtonToCheckbox(object oDM, int nButton, int nToken, string sElem) +{ + int bCheck = JsonGetInt(NuiGetBind(oDM, nToken, sElem)); + ai_SetDMAIAccessButton(nButton, bCheck); +} +void ai_RulePercDistInc(object oDM, object oModule, int nIncrement, int nToken) +{ + int nAdjustment = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE) + nIncrement; + if(nAdjustment < 8 || nAdjustment > 11) return; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, nAdjustment); + string sText; + if(nAdjustment == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nAdjustment == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nAdjustment == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oDM, nToken, "lbl_perc_dist_label", JsonString(sText)); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_MON_PERC_DISTANCE, JsonInt(nAdjustment)); + ai_SetCampaignDbJson("rules", jRules); +} +json ai_AddRestrictedSpell(json jRules, int nSpell, int bRestrict = TRUE) +{ + object oModule = GetModule(); + json jRSpells = GetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS); + int nIndex, nMaxIndex = JsonGetLength(jRSpells); + if(bRestrict) + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) return jRules; + nIndex++; + } + jRSpells = JsonArrayInsert(jRSpells, JsonInt(nSpell)); + } + else + { + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) + { + jRSpells = JsonArrayDel(jRSpells, nIndex); + break; + } + nIndex++; + } + } + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, jRSpells); + return JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, jRSpells); +} +void ai_SelectToGroup(object oDM, string sElem) +{ + string sGroup = GetStringRight(sElem, 1); + SetLocalString(oDM, AI_TARGET_MODE, "DM_SELECT_GROUP" + sGroup); + ai_SendMessages("Select a creature to add to group " + sGroup + ". Selecting yourself will clear group1.", AI_COLOR_YELLOW, oDM); + EnterTargetingMode(oDM, OBJECT_TYPE_CREATURE, MOUSECURSOR_PICKUP, MOUSECURSOR_PICKUP_DOWN); +} +void ai_DMSelectAction(object oDM, string sElem) +{ + string sGroup = GetStringRight(sElem, 1); + SetLocalString(oDM, AI_TARGET_MODE, "DM_ACTION_GROUP" + sGroup); + ai_SendMessages(GetName(oDM) + " select an action for group" + sGroup + ".", AI_COLOR_YELLOW, oDM); + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_DMChangeMoveSpeed(object oDM, string sElem, int nSpeed) +{ + string sGroup = GetStringRight(sElem, 1); + json jGroup = GetLocalJson(oDM, "DM_GROUP" + sGroup); + if(JsonGetType(jGroup) == JSON_TYPE_NULL) + { + ai_SendMessages("This group does not contain any creatures!", AI_COLOR_RED, oDM); + return; + } + jGroup = JsonArraySet(jGroup, 0, JsonInt(nSpeed)); + SetLocalJson(oDM, "DM_GROUP" + sGroup, jGroup); + object oLeader = GetObjectByUUID(JsonGetString(JsonArrayGet(jGroup, 1))); + string sName = GetName(oLeader); + string sText = " " + sName + "'s group"; + if(nSpeed == 0) sText += " [Walk]"; + else sText += " [Run]"; + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText)); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText)); +} diff --git a/_module/nss/0e_onclientload.nss b/_module/nss/0e_onclientload.nss new file mode 100644 index 0000000..5f211f4 --- /dev/null +++ b/_module/nss/0e_onclientload.nss @@ -0,0 +1,19 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_onclientload + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnClientLoad script; + This will fire when the client is loading. + + If you have your own OnClientLoad event script just take the below + script lines and add them into your OnClientLoad script. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_menus_dm" +#include "0i_module" +void main() +{ + object oCreature = OBJECT_SELF; + // This can be moved to the OnClientLoad script event of your module. + if(ai_GetIsCharacter(oCreature)) ai_CheckPCStart(oCreature); + else if(ai_GetIsDungeonMaster(oCreature)) ai_CheckDMStart(oCreature); +} diff --git a/_module/nss/0e_player_target.nss b/_module/nss/0e_player_target.nss new file mode 100644 index 0000000..0e3b5be --- /dev/null +++ b/_module/nss/0e_player_target.nss @@ -0,0 +1,185 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: 0e_player_target + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + OnPlayerTarget event script + Used to allow player targeting while passing any module player targeting + script through to work as intended. + + We Use a string variable upon the player using the targeting mode to define the + action of the target. + AI_TARGET_MODE is the constant used. + AI_TARGET_ASSOCIATE is the associate that triggered the target mode. + + AI_TARGET_MODE_ON defines if the player is in target mode for a henchman instead of the PC. +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_player_target" +void main() +{ + object oPC = GetLastPlayerToSelectTarget(); + // Get any plugin target scripts and run it instead of this one. + string sPluginTargetScript = GetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT); + if(sPluginTargetScript != "") + { + DeleteLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT); + ExecuteScript(sPluginTargetScript, oPC); + // Remove the plugin script as it must be set each time the plugin uses the target event. + } + else + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oAssociate = GetLocalObject(oPC, AI_TARGET_ASSOCIATE); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + DeleteLocalString(oPC, AI_TARGET_MODE); + // ********************* Exiting Target Actions ************************ + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + if(sTargetMode == "ASSOCIATE_ACTION_ALL") + { + ai_SendMessages("You have exited selecting an action for the party.", AI_COLOR_YELLOW, oPC); + ai_RemoveAllActionMode(oPC); + return; + } + else if(sTargetMode == "ASSOCIATE_ACTION") + { + ai_SendMessages("You have exited selecting an action for " + GetName(oAssociate) + ".", AI_COLOR_YELLOW, oPC); + // Clean up any PC AI being turned on as well as variables. + DeleteLocalObject(oPC, AI_TARGET_ASSOCIATE); + DeleteLocalInt(oPC, AI_TARGET_MODE_ON); + DeleteLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE); + // Make sure the camera goes back to the player since we are leaving henchmen control. + if(GetLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE") != OBJECT_INVALID) + { + DeleteLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE"); + AttachCamera(oPC, oPC); + if(!GetLocalInt(GetModule(), AI_USING_PRC)) ai_TurnOff(oPC, oPC, "pc"); + } + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, FALSE); + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && !ai_GetAIMode(oPC, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + ExecuteScript("nw_ch_ac1", oAssociate); + return; + } + else if(sTargetMode == "ASSOCIATE_GET_TRAP") + { + ai_SendMessages(GetName(oAssociate) + " has exited selecing a trap!", AI_COLOR_YELLOW, oPC); + if(GetLocalInt(oPC, AI_TARGET_MODE_ON)) ai_EnterAssociateTargetMode(oPC, GetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE)); + return; + } + else if(sTargetMode == "ASSOCIATE_PLACE_TRAP") + { + ai_SendMessages(GetName(oAssociate) + " has exited placing the trap!", AI_COLOR_YELLOW, oPC); + if(GetLocalInt(oPC, AI_TARGET_MODE_ON)) ai_EnterAssociateTargetMode(oPC, GetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE)); + return; + } + else if(sTargetMode == "DM_SELECT_CAMERA_VIEW") + { + AttachCamera(oPC, oPC); + ai_SendMessages(GetName(oPC) + " has defaulted camera view back to the player!", AI_COLOR_YELLOW, oPC); + return; + } + // If these actions are canceled and we are in target mode with a henchmen + // then turn target mode back on for that henchmen. + else if(sTargetMode == "ASSOCIATE_USE_ITEM" || + sTargetMode == "ASSOCIATE_USE_FEAT" || + sTargetMode == "ASSOCIATE_CAST_SPELL" || + sTargetMode == "ASSOCIATE_FOLLOW_TARGET") + { + if(GetLocalInt(oPC, AI_TARGET_MODE_ON)) ai_EnterAssociateTargetMode(oPC, GetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE)); + return; + } + } + // ************************* Targeted Actions ************************** + else + { + // This action makes an associates move to vTarget. + if(sTargetMode == "ASSOCIATE_ACTION_ALL") + { + ai_ActionAllAssociates(oPC, oTarget, lLocation); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION_ALL"); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + else if(sTargetMode == "ASSOCIATE_ACTION") + { + AssignCommand(oAssociate, ai_ActionAssociate(oPC, oTarget, lLocation)); + return; + } + else if(sTargetMode == "ASSOCIATE_FOLLOW_TARGET") + { + ai_SelectFollowTarget(oPC, oAssociate, oTarget); + return; + } + else if(sTargetMode == "ASSOCIATE_GET_TRAP") + { + ai_SelectTrap(oPC, oAssociate, oTarget); + return; + } + else if(sTargetMode == "ASSOCIATE_PLACE_TRAP") + { + AssignCommand(oAssociate, ai_PlaceTrap(oPC, lLocation)); + return; + } + else if(sTargetMode == "ASSOCIATE_USE_ITEM") + { + if(oTarget == GetArea(oPC)) oTarget = OBJECT_INVALID; + ai_UseWidgetItem(oPC, oAssociate, oTarget, lLocation); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + if(GetLocalInt(oPC, AI_TARGET_MODE_ON)) ai_EnterAssociateTargetMode(oPC, GetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE)); + return; + } + else if(sTargetMode == "ASSOCIATE_USE_FEAT") + { + if(oTarget == GetArea(oPC)) oTarget = OBJECT_INVALID; + ai_UseWidgetFeat(oPC, oAssociate, oTarget, lLocation); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + if(GetLocalInt(oPC, AI_TARGET_MODE_ON)) ai_EnterAssociateTargetMode(oPC, GetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE)); + return; + } + else if(sTargetMode == "ASSOCIATE_CAST_SPELL") + { + if(oTarget == GetArea(oPC)) oTarget = OBJECT_INVALID; + ai_CastWidgetSpell(oPC, oAssociate, oTarget, lLocation); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + if(GetLocalInt(oPC, AI_TARGET_MODE_ON)) ai_EnterAssociateTargetMode(oPC, GetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE)); + return; + } + else if(sTargetMode == "DM_SELECT_CAMERA_VIEW") + { + AttachCamera(oPC, oTarget); + ai_SendMessages(GetName(oPC) + " has changed the camera view to " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + return; + } + else if(sTargetMode == "DM_SELECT_OPEN_INVENTORY") + { + if(LineOfSightObject(oPC, oTarget)) + { + OpenInventory(oTarget, oPC); + ai_SendMessages("You have opened the inventory of "+ GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + } + else ai_SendMessages(GetName(oTarget) + " is not in your line of sight!", AI_COLOR_YELLOW, oPC); + return; + } + else if(GetStringLeft(sTargetMode, 15) == "DM_SELECT_GROUP") + { + ai_AddToGroup(oPC, oTarget, sTargetMode); + return; + } + else if(GetStringLeft(sTargetMode, 15) == "DM_ACTION_GROUP") + { + ai_DMAction(oPC, oTarget, lLocation, sTargetMode); + return; + } + } + // Get saved module player target script and execute it for pass through compatibility. + ExecuteScript(GetLocalString(GetModule(), AI_MODULE_TARGET_EVENT)); + } +} diff --git a/_module/nss/0e_prc_ch_events.nss b/_module/nss/0e_prc_ch_events.nss new file mode 100644 index 0000000..3028e9c --- /dev/null +++ b/_module/nss/0e_prc_ch_events.nss @@ -0,0 +1,78 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0e_prc_ch_events +//////////////////////////////////////////////////////////////////////////////// + associate event handler while using the PRC. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +#include "x0_i0_assoc" +void main() +{ + object oCreature = OBJECT_SELF; + int nEvent = GetCurrentlyRunningEvent(); + //WriteTimestampedLogEntry("0e_prc_ch_events [13] " + GetName(oCreature) + " nEvent: " + IntToString(nEvent)); + switch (nEvent) + { + case EVENT_SCRIPT_CREATURE_ON_HEARTBEAT: + { + if(GetLocalInt(oCreature, "CohortID")) ExecuteScript("prc_ai_coh_hb"); + ExecuteScript("nw_ch_ac1", oCreature); + ExecuteScript("prc_npc_hb", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_NOTICE: + { + ExecuteScript("nw_ch_ac2", oCreature); + ExecuteScript("prc_npc_percep", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DIALOGUE: + { + //if(GetLocalInt(oCreature, "CohortID")) ExecuteScript("prc_ai_coh_conv"); + ExecuteScript("nw_ch_ac4", oCreature); + //ExecuteScript("prc_npc_conv", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED: + { + ExecuteScript("nw_ch_ac5", oCreature); + ExecuteScript("prc_npc_physatt", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DAMAGED: + { + ExecuteScript("nw_ch_ac6", oCreature); + ExecuteScript("prc_npc_damaged", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT: + { + ExecuteScript("nw_ch_acb", oCreature); + ExecuteScript("prc_npc_spellat", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND: + { + ExecuteScript("nw_ch_ac3", oCreature); + ExecuteScript("prc_npc_combat", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR: + { + ExecuteScript("nw_ch_ace", oCreature); + ExecuteScript("prc_npc_blocked", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_RESTED: + { + ExecuteScript("nw_ch_aca", oCreature); + //ExecuteScript("prc_npc_rested", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DISTURBED: + { + ExecuteScript("nw_ch_ac8", oCreature); + ExecuteScript("prc_npc_disturb", oCreature); + break; + } + } +} diff --git a/_module/nss/0e_prc_id_events.nss b/_module/nss/0e_prc_id_events.nss new file mode 100644 index 0000000..2d80300 --- /dev/null +++ b/_module/nss/0e_prc_id_events.nss @@ -0,0 +1,317 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0e_prc_id_events +//////////////////////////////////////////////////////////////////////////////// + Infinite Dungeons monster event handler while using the PRC. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +#include "x0_i0_assoc" +// Followers special heartbeat script. +void ai_hen_id1_heart(object oCreature); +// Followers special conversation script. +void ai_hen_id1_convo(object oCreature, int nMatch); +// Followers special perception script. +void ai_hen_id1_percept(object oCreature); +// Followers special end of round script. +void ai_hen_id1_endcombat(object oCreature, int bFollower); +// Followers special castat script. +void ai_hen_id1_castat(object oCreature); + +void main() +{ + object oCreature = OBJECT_SELF; + int nEvent = GetCurrentlyRunningEvent(); + int bFollower = GetLocalInt(oCreature, "bFollower"); + switch (nEvent) + { + case EVENT_SCRIPT_CREATURE_ON_HEARTBEAT: + { + if(bFollower) + { + if(GetImmortal(oCreature)) SetImmortal(oCreature, FALSE); + ai_hen_id1_heart(oCreature); + } + else + { + ExecuteScript("nw_c2_default1", oCreature); + ExecuteScript("prc_npc_hb", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_NOTICE: + { + if(bFollower) ai_hen_id1_percept(oCreature); + else + { + ExecuteScript("nw_c2_default2", oCreature); + ExecuteScript("prc_npc_percep", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_DIALOGUE: + { + int nMatch = GetListenPatternNumber(); + if(nMatch == -1) + { + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature) || + GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + ai_ClearCreatureActions(); + string sConversation = GetLocalString(oCreature, "sConversation"); + if(sConversation != "") BeginConversation(sConversation); + else BeginConversation(); + } + if(bFollower) ai_hen_id1_convo(oCreature, nMatch); + else + { + //ExecuteScript("nw_c2_default4", oCreature); + ExecuteScript("prc_npc_conv", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED: + { + if(bFollower) ExecuteScript("nw_ch_ac5", oCreature); + else + { + ExecuteScript("nw_c2_default5", oCreature); + ExecuteScript("prc_npc_physatt", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_DAMAGED: + { + if(bFollower) ExecuteScript("nw_ch_ac6", oCreature); + else + { + ExecuteScript("nw_c2_default6", oCreature); + ExecuteScript("prc_npc_damaged", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT: + { + if(bFollower) ai_hen_id1_castat(oCreature); + else + { + ExecuteScript("nw_c2_defaultb", oCreature); + ExecuteScript("prc_npc_spellat", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND: + { + if(bFollower) ai_hen_id1_endcombat(oCreature, bFollower); + else + { + ExecuteScript("nw_c2_default3", oCreature); + ExecuteScript("prc_npc_combat", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR: + { + if(bFollower) ExecuteScript("nw_ch_ace", oCreature); + else + { + ExecuteScript("nw_c2_defaulte", oCreature); + ExecuteScript("prc_npc_blocked", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_RESTED: + { + if(bFollower) ExecuteScript("nw_ch_aca", oCreature); + else ExecuteScript("prc_npc_rested", oCreature); + break; + } + case EVENT_SCRIPT_CREATURE_ON_DISTURBED: + { + if(bFollower) ExecuteScript("nw_ch_ac8", oCreature); + else + { + ExecuteScript("nw_c2_default8", oCreature); + ExecuteScript("prc_npc_disturb", oCreature); + } + break; + } + case EVENT_SCRIPT_CREATURE_ON_DEATH: + { + if(bFollower) ExecuteScript("nw_ch_ac7", oCreature); + else + { + ExecuteScript("nw_c2_default7", oCreature); + } + break; + } + } +} + +void ai_hen_id1_heart(object oCreature) +{ + // Sometimes they slip out of this mode! + if(GetAssociateState(NW_ASC_MODE_DYING, oCreature) && + GetCommandable()) + { + ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 65.0); + SetCommandable(FALSE); + } + ExecuteScript("nw_ch_ac1", oCreature); +} +void ai_hen_id1_convo(object oCreature, int nMatch) +{ + if(nMatch == ASSOCIATE_COMMAND_INVENTORY) + { + // * cannot modify disabled equipment + if(!GetLocalInt(OBJECT_SELF, "X2_JUST_A_DISABLEEQUIP")) + { + OpenInventory(oCreature, GetLastSpeaker()); + } + // * feedback as to why + else SendMessageToPCByStrRef(GetMaster(), 100895); + return; + } + else if(nMatch == ASSOCIATE_COMMAND_LEAVEPARTY) + { + object oMaster = GetMaster(); + string sTag = GetTag(GetArea(oMaster)); + // * henchman cannot be kicked out in the reaper realm + // * Followers can never be kicked out + if (sTag == "GatesofCania" || GetIsFollower(oCreature)) return; + if(GetIsObjectValid(oMaster)) + { + ai_ClearCreatureActions(); + if(GetAssociateType(oCreature) == ASSOCIATE_TYPE_HENCHMAN) + { + string sConversation = GetLocalString(oCreature, "sConversation"); + if (sConversation == "id1_plotgiver") + { + string sVariable = GetLocalString(oCreature, "sVariable"); + object oDungeon = GetLocalObject(GetModule(), "oCurrentDungeon"); + SetLocalInt(oDungeon, "b" + sVariable + "Gone", FALSE); + } + RemoveHenchman(oMaster); + DestroyObject(oCreature); + } + } + return; + } + ExecuteScript("nw_ch_ac4", oCreature); +} +void ai_hen_id1_percept(object oCreature) +{ + // If henchman is dying and Player disappears then force a respawn of the henchman + if (GetIsHenchmanDying(oCreature)) + { + // The henchman must be removed otherwise their corpse will follow the player + object oOldMaster = GetMaster(); + object oPC = GetLastPerceived(); + int bVanish = GetLastPerceptionVanished(); + if(GetIsObjectValid(oPC) && bVanish) + { + if (oPC == oOldMaster) + { + RemoveHenchman(oPC, oCreature); + // Only in chapter 1 + if(GetTag(GetModule()) == "x0_module1") + { + SetCommandable(TRUE); + DoRespawn(oPC, oCreature); // Should teleport henchman back + } + } + } + } + ExecuteScript("nw_ch_ac2", oCreature); +} +void ai_hen_id1_endcombat(object oCreature, int bFollower) +{ + if (ai_GetIsInCombat(oCreature)) + { + int nNum; + int nLine; + string sString; + int nCreature; + int bIntelligent; + int nRandom = d100(); + // chance of a oneliner + int nOnelinerPercentage = GetLocalInt(GetModule(), "nFlagCombatOneLinerFrequencyValue"); + if(nRandom <= nOnelinerPercentage) + { + string sCreature = GetLocalString(oCreature, "sVariable"); + // if the current creature is hostile towards PCs + if(sCreature != "") + { + object oDungeon = GetLocalObject(GetModule(), "oCurrentDungeon"); + if(GetIsReactionTypeHostile(GetFirstPC())) + { + nCreature = GetLocalInt(oDungeon, "n" + sCreature); + bIntelligent = GetLocalInt(oDungeon, "bListCreature" + IntToString(nCreature) + "Intelligent"); + if(bIntelligent) + { + nNum = GetLocalInt(GetModule(), "nLinesHostileNum"); + nLine = Random(nNum) + 1; + if(nLine > 0) + { + sString = GetLocalString(GetModule(), "sLinesHostile" + IntToString(nLine)); + SpeakString(sString, TALKVOLUME_SHOUT); + } + } + } + else + { + nCreature = GetLocalInt(oDungeon, "n" + sCreature); + bIntelligent = GetLocalInt(oDungeon, "bListCreature" + IntToString(nCreature) + "Intelligent"); + if(bIntelligent) + { + nNum = GetLocalInt(GetModule(), "nLinesAlliesNum"); + nLine = Random(nNum) + 1; + if (nLine > 0) + { + sString = GetLocalString(GetModule(), "sLinesAllies" + IntToString(nLine)); + SpeakString(sString, TALKVOLUME_SHOUT); + } + } + } + } + } + } + if(bFollower) ExecuteScript("nw_ch_ac3", oCreature); + else ExecuteScript("nw_c2_default3", oCreature); +} +void ai_hen_id1_castat(object oCreature) +{ + if(!GetLastSpellHarmful()) + { + int nSpell = GetLastSpell(); + if(nSpell == SPELL_RAISE_DEAD || nSpell == SPELL_RESURRECTION) + { + object oCaster = GetLastSpellCaster(); + // Restore merchant faction to neutral + SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 100, oCaster); + SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 100, oCaster); + SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 100, oCaster); + ClearPersonalReputation(oCaster, oCreature); + AssignCommand(oCreature, SurrenderToEnemies()); + AssignCommand(oCreature, ai_ClearCreatureActions(TRUE)); + // Reset henchmen attack state - Oct 28 (BK) + ai_SetAIMode(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + // Oct 30 - If player previously hired this hench + // then just have them rejoin automatically + if(GetPlayerHasHired(oCaster, oCreature)) + { + // Feb 11, 2004 - Jon: Don't fire the HireHenchman function if the + // henchman is already oCaster's associate. Fixes a silly little problem + // that occured when you try to raise a henchman who wasn't actually dead. + if(GetMaster(oCreature)!= oCaster) HireHenchman(oCaster, oCreature, TRUE); + } + else + { + string sFile = GetDialogFileToUse(oCaster); + AssignCommand(oCaster, ActionStartConversation(oCreature, sFile)); + } + } + } + ExecuteScript("nw_ch_acb", oCreature); +} diff --git a/_module/nss/0i_actions.nss b/_module/nss/0i_actions.nss new file mode 100644 index 0000000..586c9a1 --- /dev/null +++ b/_module/nss/0i_actions.nss @@ -0,0 +1,2400 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_actions +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for action in and out of combat. + + Detect Mode: + Passive(default) mode + * Trap detection radius: 5ft + * Trap detection rate: every 6 seconds + * Trap detection roll: d20 + 1/2 skill + * Spot/Listen roll: d10 + 1/2 skill + + Active(Detect) mode + * Trap detection radius: 10ft + * Trap detection rate: every 3 seconds + * Trap detection roll: d20 + skill + * Spot/Listen roll: d20 + skill + + Stealth checks + * Player detects stealth: 5 times per second. + * Player rolls for hide/move silently & spot/listen: every 6 seconds. + * NPC detects stealth: 4 seconds + * NPC rolls for hide/move silently & spot/listen: every 6 seconds. + + Listen/Move Silently: + * Cannot detect silenced creatures. + * Cannot detect sanctuaried creatures. + * Can only detect invisible (or when your blind) creatures within max attack range. + * Listen checks are made each round for success and failur. + * Outdoors: Objects between you and the target gives a +5 DC for every 40cm of thickness. + * Indoors: No Line of sight and the target is within 40 meters gives a +2 DC. + * +10 DC in combat for the target. + * +5 DC if the target is standing still. + * -5 DC if the listener is standing still. + * +1 DC for every 3 meters of distance to the target. + * Relative size modifiers for both: Tiny +8, Small +4, Medium 0, Larget -4, Huge -8. + * Favored enemy bonuses. + + Spot/Hide: + * Cannot spot invisible creatures. + * Cannot spot any creatures while blinded. + * Night time: Spotter has not light or darkvision +5 DC. + * Night time: Target has a light no them -10 DC. + * +5 DC if target is behind the spotter. + * +10 DC if the spotter are in combat. + * +5 DC if the target is standing still. + * -5 DC if the spotter is standing still. + * Relative size modifiers for both: Tiny +8, Small +4, Medium 0, Larget -4, Huge -8. + * Favored enemy bonuses. + +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_talents" +#include "x0_inc_henai" +#include "X0_I0_ANIMS" +// Chooses an action in combat and executes it for oCreature that is an associate. +void ai_DoAssociateCombatRound(object oCreature, object oTarget = OBJECT_INVALID); +// Sets variables and states for oAssociate to start combat. +void ai_StartAssociateCombat(object oAssociate, object oTarget = OBJECT_INVALID); +// Chooses an action in combat and executes it for oCreature that is a monster. +void ai_DoMonsterCombatRound(object oCreature); +// Sets variables and states for oMonster to start combat. +void ai_StartMonsterCombat(object oMonster); +// Return the distance that is set for how close we should follow our master. +float ai_GetFollowDistance(object oCreature); +// Returns TRUE if the caller's distance is greater than fDistance from who they +// are following. Unless they are cowardly or in stand ground mode. +// This will also force the caller to move towards them. +int ai_StayClose(object oCreature); +// Returns TRUE if oCreature becomes invisible or hides. +int ai_TryToBecomeInvisible(object oCreature); +// Returns TRUE if oCreature continues to bash a door. +int ai_BashDoorCheck(object oCreature); +// Returns TRUE if we find an hidden creature within battle and do an action. +// If oCreature is too far away they will run upto 14 meters of the invisible creature. +// If oCreature is close they will attempt to cast a spell or search for them. +// bMonster needs to be set for monsters otherwise we do associate perception checks. +// fRange is how close we want to get to hidden targets. +int ai_SearchForHiddenCreature(object oCreature, int bMonster, object oHidden = OBJECT_INVALID, float fRange = 1.0); +// Returns TRUE if oCreature fails a moral check. +// We only make moral checks once we are below AI_HEALTH_WOUNDED health percent. +// If we are at AI_HEALTH_BLOODY hp percent then add + AI_MORAL_INC_DC to the Check. +int ai_MoralCheck(object oCreature); +// Returns TRUE if oCreature is in and nSpell is a dangerous Area Of Effect. +// Used in the on spell cast at scripts. [nw_c2_defaultb and nw_ch_acb]. +int ai_GetInAOEReaction(object oCreature, object oCaster, int nSpell); +// Have the associate speak a random voice from VOICE_CHAT_*. +// nRoll is the number to roll. If nRoll is 0 then it will SpeakString(sVoiceChatArray); +// sVoiceChatArray is an array of VOICE_CHAT_* numbers over nRoll. +// example(4, ":3:4:8:7:") will roll a d4() picking from 3,4,8,7 of VOICE_CHAT_*. +// if nRoll is higher than the number of VOICE_CHAT_* then it will not speak. +void ai_HaveCreatureSpeak(object oCreature, int nRoll, string sVoiceChatArray, int bImportant = FALSE); +// Returns if a spell talent was used. +// This is a common set of AI scripts ran on associate spell casters. +int ai_CheckForAssociateSpellTalent(object oAssociate, int nInMelee, int nMaxLevel, int nRound = 0); +// Targets the best creature oCreature it can see. +// This checks all physcal attack talents starting with ranged attacks then melee. +// Using TALENT_CATEGORY_HARMFUL_MELEE [22] talents. +// If no talents are used it will do either a ranged attack or a melee attack. +void ai_DoPhysicalAttackOnBest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Targets the nearest creature oCreature it can see. +// This checks all physcal attack talents starting with ranged attacks then melee. +// Using TALENT_CATEGORY_HARMFUL_MELEE [22] talents. +// If no talents are used it will do either a ranged attack or a melee attack. +void ai_DoPhysicalAttackOnNearest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Targets the weakest creature oCreature can see. +// This checks all physcal attack talents starting with ranged attacks then melee. +// Using TALENT_CATEGORY_HARMFUL_MELEE [22] talents. +// If no talents are used it will do either a ranged attack or a melee attack. +void ai_DoPhysicalAttackOnLowestCR(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns TRUE if they equip a melee weapon, FALSE if they don't. +// This also calls for the next combat round. +int ai_InCombatEquipBestMeleeWeapon(object oCreature); +// Returns TRUE if they equip a ranged weapon, FALSE if they don't. +// This also calls for the next combat round. +int ai_InCombatEquipBestRangedWeapon(object oCreature); +// Action wrapper for ai_TryHealing. +void ai_ActionTryHealing(object oCreature, object oTarget); +// Returns TRUE if oCreature heals oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_TryHealing(object oCreature, object oTarget, int bForce = FALSE); +// oCreature will move into the area looking for creatures. +void ai_ScoutAhead(object oCreature); +// Have oCreature search one object, may continue from that object. +void ai_SearchObject(object oCreature, object oObject, object oMaster, int bOnce = FALSE); +// Returns TRUE if oCreature disarms oTrap. +// bForce if TRUE, oCreature will try to disarm the trap even if they have tried before. +int ai_ReactToTrap(object oCreature, object oTrap, int bForce = FALSE); +// Returns TRUE if oCreature opens oLocked object. +// This will make oCreature open oLocked either by picking or casting a spell. +// bForce if TRUE, oCreature will try to pick the lock even if they have tried before. +int ai_AttemptToByPassLock(object oCreature, object oLocked, int bForce = FALSE); +// Returns TRUE if oCreature opens oDoor. +// bForce if TRUE, oCreature will try to open the door even if they have tried before. +int ai_AttemptToOpenDoor(object oCreature, object oDoor, int bForce = FALSE); +// Action for Checking nearby objects for traps, locks and loot. +void ai_ActionCheckNearbyObjects(object oCreature); +// oCreature will check nearby objects and see what they should do based upon +// selected actions by the player. +int ai_CheckNearbyObjects(object oCreature); +// Used to determine special behaviors for oCeature. +void ai_DetermineSpecialBehavior(object oCreature); +// The target object flees to the specified way point and then destroys itself, +// to be respawned at a later point. For unkillable sign post characters +// who are not meant to fight back. +void ai_ActivateFleeToExit(object oCreature); +// Returns TRUE if oCreature should flee to an exit. +int ai_GetFleeToExit(object oCreature); +// Does random animation in a close distance for creatures. +void ai_AmbientAnimations(); + +void ai_DoAssociateCombatRound(object oCreature, object oTarget = OBJECT_INVALID) +{ + object oMaster = GetMaster(oCreature); + if(GetLocalInt(oMaster, AI_TARGET_MODE_ON) && GetLocalObject(oMaster, AI_TARGET_MODE_ASSOCIATE) == oCreature) return; + if(ai_StayClose(oCreature)) return; + // Is the target our Player has locked in dead? If so then clear it. + if(GetIsDead(GetLocalObject(oCreature, AI_PC_LOCKED_TARGET))) DeleteLocalObject(oCreature, AI_PC_LOCKED_TARGET); + // Setup the combat state for this round of combat. + object oNearestEnemy = ai_SetCombatState(oCreature); + // If we are in standground mode we only fight if the enemy is near us. + if(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND) && + ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID) oNearestEnemy = OBJECT_INVALID; + // If we found an Enemy or we have a Target then continue into the combat round. + if(oNearestEnemy != OBJECT_INVALID || oTarget != OBJECT_INVALID) + { + // In combat we should stop searching. + if(GetActionMode(oCreature, ACTION_MODE_DETECT) && !GetHasFeat(FEAT_KEEN_SENSE)) + { + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + ai_SetCombatRound(oCreature); + string sAI = GetLocalString(oCreature, AI_COMBAT_SCRIPT); + if(AI_DEBUG) ai_Debug("0i_actions", "167", " AI not Coward/Peaceful: " + + IntToString(sAI != "ai_coward" && sAI != "ai_a_peaceful")); + // If we are using a normal AI script and are polymorphed we should use + // the polymorph AI script. + if(sAI != "ai_coward" && sAI != "ai_a_peaceful") + { + if(AI_DEBUG) + { + ai_Debug("0i_actions", "181", "Should we use polymorph? Current: " + + IntToString(GetAppearanceType(oCreature)) + " Normal: " + IntToString(ai_GetNormalAppearance(oCreature))); + if(ai_GetIsHidden(oCreature)) + { + ai_Debug("0i_actions", "185", "We are hidden!" + + " Can they see us? " + IntToString(ai_GetNearestIndexThatSeesUs(oCreature))); + } + } + if(ai_GetIsHidden(oCreature) && !ai_GetNearestIndexThatSeesUs(oCreature)) sAI = "ai_a_invisible"; + else if(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature)) + { + sAI = "ai_a_polymorphed"; + if(!GetLocalInt(oCreature, AI_POLYMORPHED)) + { + SetLocalInt(oCreature, AI_POLYMORPHED, TRUE); + ai_ClearTalents(oCreature); + ai_SetCreatureSpecialAbilityTalents(oCreature, FALSE, FALSE, FALSE); + } + } + } + if(sAI == "") sAI = "ai_a_default"; + if(AI_DEBUG) ai_Debug("0i_actions", "190", "********** " + GetName (oCreature) + " **********"); + if(AI_DEBUG) ai_Debug("0i_actions", "191", "********** " + sAI + " **********"); + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Counter_Start(); + // Execute this creatures AI routine. + ExecuteScript(sAI, oCreature); + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + " has finalized round action."); + return; + } + // We have exhausted our check for an enemy. Combat is over. + if(AI_DEBUG) ai_Debug("0i_actions", "200", "---------- " + GetName (OBJECT_SELF) + "'s combat has ended! ----------"); + ai_ClearCombatState(oCreature); + // Run the heartbeat script so we start doing our actions out of combat. + ExecuteScript("nw_ch_ac1", oCreature); +} +void ai_StartAssociateCombat(object oAssociate, object oTarget = OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "217", "---------- " + GetName(oAssociate) + " is starting combat! ----------"); + //ai_SetCreatureTalentsByLevel(oAssociate, FALSE); + ai_SetCreatureTalents(oAssociate, FALSE); + ai_CheckXPPartyScale(oAssociate); + ai_DoAssociateCombatRound(oAssociate, oTarget); +} +void ai_DoMonsterCombatRound(object oMonster) +{ + object oNearestEnemy = ai_SetCombatState(oMonster); + if(oNearestEnemy != OBJECT_INVALID) + { + if(GetActionMode(oMonster, ACTION_MODE_DETECT) && !GetHasFeat(FEAT_KEEN_SENSE, oMonster)) + SetActionMode(oMonster, ACTION_MODE_DETECT, FALSE); + ai_SetCombatRound(oMonster); + string sAI = GetLocalString(oMonster, AI_COMBAT_SCRIPT); + if(sAI != "ai_coward") + { + if(AI_DEBUG) ai_Debug("0i_actions", "235", "Should we use polymorph? Current: " + + IntToString(GetAppearanceType(oMonster)) + " Normal: " + IntToString(ai_GetNormalAppearance(oMonster))); + if(ai_GetIsHidden(oMonster)) + { + if(AI_DEBUG) ai_Debug("0i_actions", "239", "We are hidden!" + + " Can they see us? " + IntToString(ai_GetNearestIndexThatSeesUs(oMonster))); + } + if(ai_GetIsHidden(oMonster) && !ai_GetNearestIndexThatSeesUs(oMonster)) sAI = "ai_invisible"; + else if(GetAppearanceType(oMonster) != ai_GetNormalAppearance(oMonster)) + { + sAI = "ai_polymorphed"; + if(!GetLocalInt(oMonster, AI_POLYMORPHED)) + { + SetLocalInt(oMonster, AI_POLYMORPHED, TRUE); + ai_ClearTalents(oMonster); + ai_SetCreatureSpecialAbilityTalents(oMonster, TRUE, FALSE, FALSE); + } + } + } + if(sAI == "") sAI = "ai_default"; + if(AI_DEBUG) ai_Debug("0i_actions", "230", "********** " + GetName (oMonster) + " **********"); + if(AI_DEBUG) ai_Debug("0i_actions", "231", "********** " + sAI + " **********"); + // We clear actions here and setup multiple actions to the queue for oCreature. + ai_ClearCreatureActions(); + ai_Counter_Start(); + ExecuteScript(sAI, oMonster); + ai_Counter_End(GetName(oMonster) + " is ending round calculations."); + return; + } + // Check to see if we just didn't see the enemies. + if(GetLocalInt(oMonster, AI_ENEMY_NUMBERS) && + ai_SearchForHiddenCreature(oMonster, TRUE)) return; + // We have exhausted our check for an enemy. Combat is over. + ai_EndCombatRound(oMonster); + ai_ClearCombatState(oMonster); + // Run the heartbeat script so we start doing our actions out of combat. + ExecuteScript("nw_c2_default1", oMonster); + if(AI_DEBUG) ai_Debug("0i_actions", "247", GetName(oMonster) + "'s combat has ended!"); + return; +} +void ai_StartMonsterCombat(object oMonster) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "264", "---------- " + GetName(oMonster) + " is starting combat! ----------"); + ai_SetCreatureTalents(oMonster, TRUE); + ai_DoMonsterCombatRound(oMonster); +} +float ai_GetFollowDistance(object oCreature) +{ + // Also check for size of creature and adjust based on that. + float fDistance = StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oCreature))); + return GetLocalFloat(oCreature, AI_FOLLOW_RANGE) + fDistance; +} +int ai_StayClose(object oCreature) +{ + if(ai_GetIsCharacter(oCreature) || + ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND) || + GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_a_peaceful" || + GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_coward") return FALSE; + object oMaster = GetMaster(oCreature); + // We stay within our perception range of who we are following. + float fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) + { + fPerceptionDistance = GetLocalFloat(oMaster, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) fPerceptionDistance = 25.0; + } + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + if(AI_DEBUG) ai_Debug("0i_associates", "214", "Distance from who we are following in combat." + + " oFollowing: " + FloatToString(GetDistanceBetween(oTarget, oCreature), 0, 2) + " fPerceptionDistance: " + FloatToString(fPerceptionDistance, 0, 2)); + if(GetDistanceBetween(oTarget, oCreature) < fPerceptionDistance) return FALSE; + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("0i_associates", "218", "We are too far away! Move back to our master."); + ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oCreature)); + return TRUE; +} +int ai_TryToBecomeInvisible(object oCreature) +{ + // If we are invisible then we don't need to check this. + if(!ai_GetIsHidden(oCreature)) return FALSE; + // If we are not invisible lets try. + int nDarkness; + if(GetHasSpell(SPELL_DARKNESS, oCreature) && ai_GetHasEffectType(oCreature, EFFECT_TYPE_ULTRAVISION)) nDarkness = TRUE; + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature) || GetHasSpell(SPELL_INVISIBILITY, oCreature) || + GetHasSpell(SPELL_INVISIBILITY_SPHERE, oCreature) ||(nDarkness) || + GetHasSpell(SPELL_SANCTUARY, oCreature) || GetHasSpell(SPELL_ETHEREALNESS, oCreature) || + GetHasSpell(799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/) || + GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature) == TRUE) + { + // This bit ported directly from Jasperre + // Can anyone see me?(has spell effects of X) + // The point of this is to see if its even worthwhile to go invisbile + // or will it be immediately dispeled. + object oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCreature, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_TRUE_SEEING); + if(oSeeMe == OBJECT_INVALID) + { + oSeeMe = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oCreature, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN, CREATURE_TYPE_HAS_SPELL_EFFECT, SPELL_SEE_INVISIBILITY); + } + if(oSeeMe == OBJECT_INVALID) + { + // Check non-invisibility options first. Since they can be used + // while near enemies. + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + // Go into stealth mode + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + if(AI_DEBUG) ai_Debug("0i_actions", "207", "Using HIDE_IN_PLAIN_SIGHT!"); + return TRUE; + } + if(nDarkness) + { + ai_SetLastAction(oCreature, SPELL_DARKVISION); + ActionCastSpellAtObject(SPELL_DARKVISION, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_ETHEREALNESS, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_ETHEREALNESS); + ActionCastSpellAtObject(SPELL_ETHEREALNESS, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_SANCTUARY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_SANCTUARY); + ActionCastSpellAtObject(SPELL_SANCTUARY, oCreature); + return TRUE; + } + // Get the nearest Enemy and how close they are. + // Use this to keep invisibility from being spammed in melee. + object oEnemy = ai_GetNearestEnemy(oCreature); + if(GetDistanceBetween(oCreature, oEnemy) > AI_RANGE_MELEE) + { + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_IMPROVED_INVISIBILITY); + ActionCastSpellAtObject(SPELL_IMPROVED_INVISIBILITY, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_INVISIBILITY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_INVISIBILITY); + ActionCastSpellAtObject(SPELL_INVISIBILITY, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_INVISIBILITY_SPHERE, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_INVISIBILITY_SPHERE); + ActionCastSpellAtObject(SPELL_INVISIBILITY_SPHERE, oCreature); + return TRUE; + } + if(GetHasSpell(799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/, oCreature)) + { + ai_SetLastAction(oCreature, 799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/); + ActionCastSpellAtObject(799/*SPELLABILITY_VAMPIRE_INVISIBILITY*/, oCreature); + return TRUE; + } + } + } + } + return FALSE; +} +int ai_SearchForHiddenCreature(object oCreature, int bMonster, object oInvisible = OBJECT_INVALID, float fRange = 1.0) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "358", GetName(oCreature) + " is searching for an invisible creature (" + + GetName(oInvisible) + ")."); + if(oInvisible == OBJECT_INVALID) + { + // Have we seen anyone go invisible? + oInvisible = GetLocalObject(oCreature, AI_IS_INVISIBLE); + if(oInvisible == OBJECT_INVALID || GetIsDead(oInvisible)) + { + oInvisible = ai_GetNearestEnemy(oCreature, 1, 7, PERCEPTION_HEARD_AND_NOT_SEEN); + if(oInvisible == OBJECT_INVALID) oInvisible = ai_GetNearestEnemy(oCreature); + } + } + float fPerceptionDistance, fDistance; + // Check to see if the creature is invisible because we cannot hurt them with our weapon. + // If so we need to stay away from them! Maybe add weapon swapping code later? + if(AI_DEBUG) ai_Debug("0i_actions", "415", GetName(oCreature) + "IsWeaponEffective? " + + IntToString(GetIsWeaponEffective(oInvisible)) + " oInvisible: " + GetName(oInvisible)); + /*if(!GetIsWeaponEffective(oInvisible)) + { + ai_HaveCreatureSpeak(oCreature, 20, ":21:47:7:"); + fDistance = GetDistanceBetween(oCreature, oInvisible); + if(fDistance < AI_RANGE_LONG) ActionMoveAwayFromObject(oInvisible, TRUE, AI_RANGE_LONG); + return TRUE; + } */ + if(bMonster) + { + fDistance = GetDistanceBetween(oCreature, oInvisible); + fPerceptionDistance = GetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE); + } + else + { + // We want to use the distance between the PC and target not us. + object oMaster = GetMaster(); + if(oMaster != OBJECT_INVALID) fDistance = GetDistanceBetween(oMaster, oInvisible); + else fDistance = GetDistanceBetween(oCreature, oInvisible); + fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) fPerceptionDistance = 20.0; + } + if(AI_DEBUG) ai_Debug("0i_actions", "383", "Is invisible: " + GetName(oInvisible) + + " fDistance: " + FloatToString(fDistance, 0, 2) + + " fPerceptionDistance: " + FloatToString(fPerceptionDistance, 0, 2)); + // Might need to end combat at this point? + if(fDistance > fPerceptionDistance) return FALSE; + // If we are close enough then lets look for them. + if(fDistance < AI_RANGE_LONG) + { + // nHidden 1 = Invisible effects, 2 = Darkness effects, 3 = Sanctuary effects, 4 Stealth. + int nHidden = ai_GetIsHidden(oInvisible); + if(nHidden) + { + // They have a magical effect! Is there a spell we can use to see? + if(nHidden < 4) + { + if(AI_DEBUG) ai_Debug("0i_actions", "399", " They are using magic to hide: " + + IntToString(nHidden)); + // True Seeing pierces all types of magical hiding. + if(GetHasSpell(SPELL_TRUE_SEEING, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_TRUE_SEEING); + ActionCastSpellAtObject(SPELL_TRUE_SEEING, oCreature); + return TRUE; + } + if(nHidden == 1 || nHidden == 3) // Invisibility or Ethereal effect. + { + if(GetHasSpell(SPELL_SEE_INVISIBILITY, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_SEE_INVISIBILITY); + ActionCastSpellAtObject(SPELL_SEE_INVISIBILITY, oCreature); + return TRUE; + } + if(GetHasSpell(SPELL_INVISIBILITY_PURGE, oCreature)) + { + ai_SetLastAction(oCreature, SPELL_INVISIBILITY_PURGE); + ActionCastSpellAtObject(SPELL_INVISIBILITY_PURGE, oCreature); + return TRUE; + } + } + if(nHidden == 2) // Darkness spell effect. + { + if(GetHasSpell(SPELL_DARKVISION)) + { + ai_SetLastAction(oCreature, SPELL_DARKVISION); + ActionCastSpellAtObject(SPELL_DARKVISION, oCreature); + return TRUE; + } + } + // To be able to attack a magically hidden foe we have to be + // with in melee attack range. Cannot hear Ethereal foes! + // We will automatically hear them once we are within range. + // We also walk so we don't give attacks of opportunity. + if(nHidden < 3) + { + if(AI_DEBUG) ai_Debug("0i_actions", "437", " We have no spells to counter with. Moving up to attack!"); + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + ActionMoveToObject(oInvisible); + ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING)); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else // They are using stealth! + { + if(AI_DEBUG) ai_Debug("0i_actions", "447", " Using Detect mode and moving up."); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + // We use to move to the object but that is creepy! + //ActionMoveToObject(oInvisible, FALSE, fRange); + ActionMoveToLocation(GetLocation(oInvisible), FALSE); + ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING)); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else // They are not hidden, then that means we can hear them but not see them. + // Probably behind a wall or door. + { + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + // We use to move to the object but that is creepy! + //ActionMoveToObject(oInvisible, FALSE, fRange); + ActionMoveToLocation(GetLocation(oInvisible), FALSE); + ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING)); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else // We need to get closer to start looking for them. + { + if(AI_DEBUG) ai_Debug("0i_actions", "469", "Moving towards invisible creature from a distance: " + GetName(oInvisible)); + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + // We use to move to the object but that is creepy! + //ActionMoveToObject(oInvisible, TRUE, 14.0); + ActionMoveToLocation(GetLocation(oInvisible), FALSE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(ai_GetIsInCombat(oCreature)) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_MoralCheck(object oCreature) +{ + // If we are immune to fear then we are immune to MoralChecks! + // Constructs and Undead are also immune to fear. + int nRaceType = GetRacialType(oCreature); + if(!GetLocalInt(GetModule(), AI_RULE_MORAL_CHECKS) || GetIsImmune(oCreature, IMMUNITY_TYPE_FEAR) || + nRaceType == RACIAL_TYPE_UNDEAD || + nRaceType == RACIAL_TYPE_CONSTRUCT || + ai_GetIsCharacter(oCreature)) return FALSE; + int nAssociateType = GetAssociateType(oCreature); + //if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR || nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION || + // nAssociateType == ASSOCIATE_TYPE_SUMMONED) return FALSE; + // Moral DC is AI_WOUNDED_MORAL_DC - The number of allies. + // or AI_BLOODY_MORAL_DC - number of allies. + int nDC; + int nHpPercent = ai_GetPercHPLoss(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + // We only make moral checks if we are below half hitpoints and the Difficulty should be adjusted to -10 at 0. + if(nHpPercent <= AI_HEALTH_WOUNDED) + { + // Debug code to look for multiple moral checks at once by one creature? + //if(GetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE) == "") + //{ + // SetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE, GetName(oCreature)); + // ai_Debug("0i_actions", "424", GetName(oCreature) + " starting debug mode to test Moral checks!"); + //} + if(nHpPercent <= AI_HEALTH_BLOODY) nDC = AI_BLOODY_MORAL_DC; + else nDC = AI_WOUNDED_MORAL_DC; + nDC = nDC - GetLocalInt(oCreature, AI_ALLY_NUMBERS); + if(nDC < 1) nDC = 1; + if(AI_DEBUG) ai_Debug("0i_talents", "367", "Moral check DC: " + IntToString(nDC) + "."); + //SendMessageToPC(GetFirstPC(), "0i_talents, 431, " + GetName(oCreature) + " Moral check DC: " + IntToString(nDC) + "."); + if(!WillSave(oCreature, nDC, SAVING_THROW_TYPE_FEAR, oNearestEnemy)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "370", "Moral check failed, we are fleeing!"); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_coward"); + effect eVFX = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVFX, oCreature, 6.0f); + ActionMoveAwayFromObject(oNearestEnemy, TRUE, AI_RANGE_LONG); + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d4(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_FLEE, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_GUARDME, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_HELP, oCreature); + else if(nRoll == 4 && nHpPercent < 100) PlayVoiceChat(VOICE_CHAT_HEALME, oCreature); + } + return TRUE; + } + if(nDC >= 11 && !ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d6(); + // Cry out when you are overwhelmed! + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_CUSS, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_BADIDEA, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_ENEMIES, oCreature); + } + } + return FALSE; +} +int ai_GetInAOEReaction(object oCreature, object oCaster, int nSpell) +{ + switch(nSpell) + { + case SPELL_ACID_FOG: + case SPELL_CLOUDKILL: + case SPELL_CREEPING_DOOM: + { + // Nothing but bad times with these spells. + return TRUE; + } + case SPELL_STORM_OF_VENGEANCE: + { + // This only harms our enemies! + return (oCaster != oCreature && GetIsEnemy(oCaster, oCreature)); + } + // They should only flee Silence if they want to cast a spell! + //case SPELL_SILENCE: + case SPELL_BLADE_BARRIER: + case SPELL_WALL_OF_FIRE: + case SPELL_INCENDIARY_CLOUD: + { + // Check reflex feats and saves. + return (!GetHasFeat(FEAT_EVASION, oCreature) && + !GetHasFeat(FEAT_IMPROVED_EVASION, oCreature) && + GetReflexSavingThrow(oCreature) < 21 + d6()); + } + case SPELL_STINKING_CLOUD: + { + // Do we have a high fortitude save? 20 + 5 + return (GetFortitudeSavingThrow(oCreature) < 20 + d6()); + } + case SPELL_GREASE: + case SPELL_ENTANGLE: + case SPELL_VINE_MINE_ENTANGLE: + case SPELL_WEB: + { + // Do we have a high reflex save? d20 + 1 + return (!GetHasFeat(FEAT_WOODLAND_STRIDE, oCreature) && + !GetLocalInt(oCreature, "X2_L_IS_INCORPOREAL") && + GetReflexSavingThrow(oCreature) < 15 + d6()); + } + case SPELL_EVARDS_BLACK_TENTACLES: + { + // Small creatures are immune and can they hit me? d20 + 8 + caster lvl(7) + return (GetCreatureSize(oCreature) > 2 && + GetAC(oCreature) < 30 + d6()); + } + case SPELL_CLOUD_OF_BEWILDERMENT: + { + // Do we have a high fortitude save? 20 + 2 + return (GetFortitudeSavingThrow(oCreature) < 17 + d6()); + } + case SPELL_MIND_FOG: + case SPELL_STONEHOLD: + { + // Do we have a high enough will save? 20 + 6 + return (GetWillSavingThrow(oCreature) < 21 + d6()); + } + case SPELL_SPIKE_GROWTH: + case SPELL_VINE_MINE_HAMPER_MOVEMENT: + { + // Do we have a high reflex save? d20 + 3 + return (GetReflexSavingThrow(oCreature) < 18 + d6()); + } + } + return FALSE; +} +void ai_HaveCreatureSpeak(object oCreature, int nRoll, string sVoiceChatArray, int bImportant = FALSE) +{ + if(ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK) && !bImportant) return; + if(nRoll == 0) + { + // Some races shouldn't talk. + int nRacialType = GetRacialType(oCreature); + if(nRacialType == RACIAL_TYPE_ANIMAL || nRacialType == RACIAL_TYPE_BEAST || + nRacialType == RACIAL_TYPE_MAGICAL_BEAST || nRacialType == RACIAL_TYPE_OOZE || + nRacialType == RACIAL_TYPE_UNDEAD || nRacialType == RACIAL_TYPE_VERMIN) return; + SpeakString(sVoiceChatArray); + return; + } + nRoll = Random(nRoll); + string sVoice = ai_GetStringArray(sVoiceChatArray, nRoll); + if(sVoice != "") PlayVoiceChat(StringToInt(sVoice), oCreature); +} +int ai_CheckForAssociateSpellTalent(object oAssociate, int nInMelee, int nMaxLevel, int nRound = 0) +{ + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oAssociate, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return TRUE; + if(ai_UseCreatureTalent(oAssociate, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return TRUE; + } + if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) return FALSE; + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oAssociate); + return ai_TryDefensiveTalents(oAssociate, nInMelee, nMaxLevel, nRound, oTarget); +} +void ai_DoPhysicalAttackOnBest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + talent tUse; + object oTarget; + if(AI_DEBUG) ai_Debug("0i_actions", "496", "Check for ranged attack on nearest enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("0i_actions", "525", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "536", "Do melee attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} +void ai_DoPhysicalAttackOnNearest(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + talent tUse; + object oTarget; + if(AI_DEBUG) ai_Debug("0i_actions", "496", "Check for ranged attack on nearest enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("0i_actions", "525", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "536", "Do melee attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} +void ai_DoPhysicalAttackOnLowestCR(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "533", "Check for ranged attack on weakest enemy!"); + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the weaker targets. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "559", GetName(OBJECT_SELF) + " does ranged attack on weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("0i_actions", "571", "Check for melee attack on weakest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "577", GetName(OBJECT_SELF) + " does melee attack against weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} +int ai_InCombatEquipBestMeleeWeapon(object oCreature) +{ + if(ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature))) return FALSE; + if(ai_EquipBestMeleeWeapon(oCreature)) + { + // We delay 1 second since ActionEquip is not an action we can check for. + // This keeps event scripts from clearing before we actually equip. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 2); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_InCombatEquipBestRangedWeapon(object oCreature) +{ + if(ai_EquipBestRangedWeapon(oCreature)) + { + // We delay 1 second since ActionEquip is not an action we can check for. + // This keeps event scripts from clearing before we actually equip. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 1); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_CheckItemForHealing(object oCreature, object oTarget, object oItem, int nHpLost, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "629", "Checking Item properties on " + GetName(oItem)); + int nIprpSubType, nSpell, nLevel, nIPType; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return FALSE; + // Check for cast spell property and add them to the talent list. + int nIndex; + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(AI_DEBUG) ai_Debug("0i_actions", "639", "ItempropertyType(15): " + IntToString(GetItemPropertyType(ipProp))); + nIPType = GetItemPropertyType(ipProp); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + if(ai_ShouldWeCastThisCureSpell(nSpell, nHpLost)) + { + // We have established that we can use the item if it is equiped. + if(!bEquiped) ai_CheckIfCanUseItem(oCreature, oItem); + // Get how they use the item (charges or uses per day). + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + int nCharges = GetItemCharges(oItem); + if(AI_DEBUG) ai_Debug("0i_actions", "654", "Item charges: " + IntToString(nCharges)); + if(nUses == 6 && nCharges < 1 || nUses == 5 && nCharges < 3 || + nUses == 4 && nCharges < 5 || nUses == 3 && nCharges < 7 || + nUses == 2 && nCharges < 9) return FALSE; + } + else if(nUses > 7 && nUses < 13) + { + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_actions", "662", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) return FALSE; + } + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_actions", "667", GetName(oCreature) + " is using " + GetName(oItem) + " on " + GetName(oTarget) + "."); + ActionUseItemOnObject(oItem, ipProp, oTarget, nIprpSubType); + return TRUE; + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + return FALSE; +} +int ai_HealSickness(object oCreature, object oTarget, object oPC, int nSickness, int bForce = FALSE) +{ + // If the player is not forcing a check. + if(!bForce) + { + // Is Casting Cure spells off? + if(ai_GetMagicMode(oCreature, AI_MAGIC_CURE_SPELLS_OFF)) return FALSE; + // Do we have no magic on? + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) return FALSE; + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + // Check for spells. + if(nSickness == AI_ALLY_IS_DISEASED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "717", "Attempting to remove disease."); + if(ai_CheckAndCastSpell(oCreature, SPELL_REMOVE_DISEASE, 0, 0.0, oTarget)) return TRUE; + } + else if(nSickness == AI_ALLY_IS_POISONED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "726", "Attempting to remove poison."); + if(ai_CheckAndCastSpell(oCreature, SPELL_NEUTRALIZE_POISON, 0, 0.0, oTarget)) return TRUE; + } + else if(nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "735", "Attempting to remove ability score drain."); + if(ai_CheckAndCastSpell(oCreature, SPELL_LESSER_RESTORATION, 0, 0.0, oTarget)) return TRUE; + if(ai_CheckAndCastSpell(oCreature, SPELL_RESTORATION, 0, 0.0, oTarget)) return TRUE; + if(ai_CheckAndCastSpell(oCreature, SPELL_GREATER_RESTORATION, 0, 0.0, oTarget)) return TRUE; + } + else return FALSE; + // Check for healing kits. + if(!GetLocalInt(GetModule(), AI_RULE_HEALERSKITS)) return FALSE; + int nIprpSubType, nSpell; + itemproperty ipProp; + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + int nBaseItemType = GetBaseItemType(oItem); + if(nBaseItemType == BASE_ITEM_HEALERSKIT && + (nSickness == AI_ALLY_IS_DISEASED || + nSickness == AI_ALLY_IS_POISONED)) + { + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(GetItemPropertyType(ipProp) == ITEM_PROPERTY_HEALERS_KIT) + { + if(AI_DEBUG) ai_Debug("0i_actions", "772", "Attempting to remove (" + IntToString(nSickness) + ") with a healing kit."); + if(ai_GetIsCharacter(oPC)) ai_SendMessages(GetName(oCreature) + " uses " + GetName(oItem) + " on " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + } + else if(nBaseItemType == BASE_ITEM_POTIONS || + nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == FEAT_BREW_POTION) + { + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + if(AI_DEBUG) ai_Debug("0i_actions", "789", "Checking potion, " + IntToString(nSpell)); + if(nSpell == SPELL_REMOVE_DISEASE && nSickness == AI_ALLY_IS_DISEASED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Remove Disease."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_NEUTRALIZE_POISON && nSickness == AI_ALLY_IS_POISONED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Neturalize Poison."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_LESSER_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "781", "Using a potion of Lesser Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "791", "Using a potion of Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + } + else if(nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL || + nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == BASE_ITEM_MAGICSTAFF) + { + if(ai_CheckIfCanUseItem(oCreature, oItem)) + { + ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + if(nSpell == SPELL_REMOVE_DISEASE && nSickness == AI_ALLY_IS_DISEASED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Remove Disease."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_NEUTRALIZE_POISON && nSickness == AI_ALLY_IS_POISONED) + { + if(AI_DEBUG) ai_Debug("0i_actions", "786", "Using a potion of Neturalize Poison."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_LESSER_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "781", "Using a potion of Lesser Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + if(nSpell == SPELL_RESTORATION && nSickness == AI_ALLY_IS_WEAK) + { + if(AI_DEBUG) ai_Debug("0i_actions", "791", "Using a potion of Restoration."); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + } + } + } + oItem = GetNextItemInInventory(oCreature); + } + return FALSE; +} +int ai_UseHealingItem(object oCreature, object oTarget, object oPC) +{ + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS)) return FALSE; + string sSlots; + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + itemproperty ipProp; + // Cycle through all the creatures equiped items. + int nSlot; + object oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID && + ai_CheckItemForHealing(oCreature, oTarget, oItem, nDamage, TRUE)) return TRUE; + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_actions", "696", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") + { + int nBaseItemType = GetBaseItemType(oItem); + // Lets not use up our healing kits on minor damage. + if(nBaseItemType == BASE_ITEM_HEALERSKIT) + { + if(!GetLocalInt(GetModule(), AI_RULE_HEALERSKITS)) return FALSE; + ipProp = GetFirstItemProperty(oItem); + if(GetItemPropertyType(ipProp) == ITEM_PROPERTY_HEALERS_KIT) + { + if(ai_GetIsCharacter(oPC)) ai_SendMessages(GetName(oCreature) + " uses " + GetName(oItem) + " on " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + ActionUseItemOnObject(oItem, ipProp, oTarget); + return TRUE; + } + } + // Do we want Player AI and Associates to use potions on others? + //else if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + // nBaseItemType == BASE_ITEM_POTIONS) + //{ + // if(oCaster == oTarget) + // { + // if(ai_CheckItemForHealing(oCreature, oTarget, oItem, nDamage)) return TRUE; + // } + //} + else if(ai_CheckItemForHealing(oCreature, oTarget, oItem, nDamage)) return TRUE; + } + } + oItem = GetNextItemInInventory(oCreature); + } + return FALSE; +} +void ai_ActionTryHealing(object oCreature, object oTarget) +{ + ai_TryHealing(oCreature, oTarget, TRUE); +} +int ai_TryHealing(object oCreature, object oTarget, int bForce = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "1136", "Try healing: oCreature: " + GetName(oCreature) + + " oTarget: " + GetName(oTarget) + " No Party Healing: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) + + " No Self Healing: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF)) + + " AI_I_AM_BEING_HEALED: " + IntToString(GetLocalInt(oTarget, "AI_I_AM_BEING_HEALED")) + + " Undead: " + IntToString(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)); + // If the player is not forcing a check. + if(!bForce) + { + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + // Limits the number of times a wounded creature will ask for help. + if(GetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT") > 3) return FALSE; + // This keeps everyone from healing the same character in one round and over healing! + if(oCreature == oTarget) DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + else if(GetLocalInt(oTarget, "AI_I_AM_BEING_HEALED")) return FALSE; + if(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF) && + oCreature != oTarget) return FALSE; + if(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF) && + oCreature == oTarget) return FALSE; + int nHpLost = ai_GetPercHPLoss(oTarget); + // If the player is forcing a heal then we always heal. + if(bForce && nHpLost < 100) nHpLost = 0; + if(AI_DEBUG) ai_Debug("0i_actions", "1160", "nHpLost: " + IntToString(nHpLost) + + " limit: " + IntToString(ai_GetHealersHpLimit(oTarget, FALSE))); + // Check to see if we need poison, disease, or ability drain removed. + int nEffectType; + effect eEffect = GetFirstEffect(oTarget); + while(GetIsEffectValid(eEffect)) + { + nEffectType = GetEffectType(eEffect); + if(AI_DEBUG) ai_Debug("0i_actions", "1168", "Checking to cure(31/32/39) nEffectType: " + IntToString(nEffectType)); + if(nEffectType == EFFECT_TYPE_DISEASE) + { + if(AI_DEBUG) ai_Debug("0i_actions", "1171", GetName(oTarget) + " is diseased!"); + if(ai_HealSickness(oCreature, oTarget, ai_GetPlayerMaster(oCreature), AI_ALLY_IS_DISEASED, bForce)) return TRUE; + if(oCreature == oTarget) + { + if(!Random(20)) ai_HaveCreatureSpeak(oCreature, 5, ":43:4:14:15:16:"); + SpeakString(AI_I_AM_DISEASED, TALKVOLUME_SILENT_TALK); + } + } + else if(nEffectType == EFFECT_TYPE_POISON) + { + if(AI_DEBUG) ai_Debug("0i_actions", "1181", GetName(oTarget) + " is poisoned!"); + if(ai_HealSickness(oCreature, oTarget, ai_GetPlayerMaster(oCreature), AI_ALLY_IS_POISONED, bForce)) return TRUE; + if(oCreature == oTarget) + { + if(!Random(20)) ai_HaveCreatureSpeak(oCreature, 6, ":43:4:14:15:16:19:"); + SpeakString(AI_I_AM_POISONED, TALKVOLUME_SILENT_TALK); + } + } + else if(nEffectType == EFFECT_TYPE_ABILITY_DECREASE) + { + if(AI_DEBUG) ai_Debug("0i_actions", "1191", GetName(oTarget) + " is weak!"); + if(ai_HealSickness(oCreature, oTarget, ai_GetPlayerMaster(oCreature), AI_ALLY_IS_WEAK, bForce)) return TRUE; + if(oCreature == oTarget) + { + if(!Random(20)) ai_HaveCreatureSpeak(oCreature, 3, ":43:4:5:"); + SpeakString(AI_I_AM_WEAK, TALKVOLUME_SILENT_TALK); + } + } + eEffect = GetNextEffect(oTarget); + } + // Everything below here is for healing. + if(nHpLost >= ai_GetHealersHpLimit(oTarget, FALSE)) return FALSE; + // Undead require inflict spells to heal! + object oMaster = ai_GetPlayerMaster(oCreature); + if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) + { + // Do we have no magic on? + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + int nClass, nPosition = 1; + string sMemorized; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClass = GetClassByPosition(nPosition, oCreature); + if(AI_DEBUG) ai_Debug("0i_actions", "753", "nClass: " + IntToString(nClass)); + if(nClass == CLASS_TYPE_INVALID) break; + sMemorized = Get2DAString("classes", "MemorizesSpells", nClass); + // If Memorized column is "" then they are not a caster. + if(sMemorized != "") + { + if(sMemorized == "1") + { + if(ai_CastMemorizedInflict(oCreature, oTarget, oMaster, nClass)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + } + else if(ai_CastKnownInflict(oCreature, oTarget, oMaster, nClass)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + } + nPosition++; + } + } + // We can't heal ourselves! Can any of our allies? Lets ask. + if(oCreature == oTarget) + { + SetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT", GetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT") + 1); + SpeakString(AI_I_AM_WOUNDED, TALKVOLUME_SILENT_TALK); + } + return FALSE; + } + // Do they have Lay on Hands? + if(GetHasFeat(FEAT_LAY_ON_HANDS, oCreature)) + { + int nCanHeal = GetAbilityModifier(ABILITY_CHARISMA, oCreature) * ai_GetCharacterLevels(oCreature); + if(nCanHeal <= nHpLost) + { + ai_UseFeat(oCreature, FEAT_LAY_ON_HANDS, oTarget); + return TRUE; + } + } + // Do we have no magic on? + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + int nClass, nPosition = 1; + string sMemorized; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClass = GetClassByPosition(nPosition, oCreature); + if(AI_DEBUG) ai_Debug("0i_actions", "753", "nClass: " + IntToString(nClass)); + if(nClass == CLASS_TYPE_INVALID) break; + sMemorized = Get2DAString("classes", "MemorizesSpells", nClass); + // If Memorized column is "" then they are not a caster. + if(sMemorized != "") + { + if(sMemorized == "1") + { + if(ai_CastMemorizedHealing(oCreature, oTarget, oMaster, nClass)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + } + else if(ai_CastKnownHealing(oCreature, oTarget, oMaster, nClass)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + } + nPosition++; + } + } + // We have exhausted all attempts to use normal healing spells. + if(ai_UseHealingItem(oCreature, oTarget, oMaster)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + // Final attempt to heal oTarget, check for Spontaneous cure spells. + if(ai_CastSpontaneousCure(oCreature, oTarget, oMaster)) + { + SetLocalInt(oTarget, "AI_I_AM_BEING_HEALED", TRUE); + return TRUE; + } + // We can't heal ourselves! Can any of our allies? Lets ask. + if(oCreature == oTarget) + { + SetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT", GetLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT") + 1); + SpeakString(AI_I_AM_WOUNDED, TALKVOLUME_SILENT_TALK); + } + return FALSE; +} +int ai_PerceiveEnemy(object oCreature, object oEnemy) +{ + float fDistance = GetDistanceBetween(oCreature, oEnemy); + if(fDistance < 50.0) + { + // Game is in meters, so 1 foot = 3.333 meter + // penalty is -1 per 10' so divide it by 10 to use 0.3333f + int nDC = 10 + FloatToInt(fDistance * 0.3333f); + // Check to see if the creature is hiding and add the creatures checks. + int nEnemyMoveSilent, nEnemyHide; + if(GetStealthMode(oEnemy)) + { + nEnemyMoveSilent =(d20() + GetSkillRank(SKILL_MOVE_SILENTLY, oEnemy)); + nEnemyHide =(d20() + GetSkillRank(SKILL_HIDE, oEnemy)); + } + if(GetIsSkillSuccessful (oCreature, SKILL_SPOT, nDC + nEnemyHide)) return TRUE; + if(GetIsSkillSuccessful (oCreature, SKILL_LISTEN, nDC + nEnemyMoveSilent)) return TRUE; + } + return FALSE; +} +void ai_ScoutAhead(object oCreature) +{ + object oPerceived; + object oEnemy = ai_GetNearestEnemy(oCreature, 1, -1, -1, -1, -1, TRUE); + // We see them so fight! + if(oEnemy != OBJECT_INVALID) + { + if(ai_PerceiveEnemy(oCreature, oEnemy)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d10(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_ENEMIES, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_FOLLOWME, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_LOOKHERE, oCreature); + } + ActionMoveToObject(oEnemy, TRUE, AI_RANGE_LONG); + return; + } + // There are enemies here so lets go to them. + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d3(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_BADIDEA, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_SEARCH, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_FOLLOWME, oCreature); + } + ActionMoveToObject(oEnemy, TRUE, AI_RANGE_CLOSE); + } + } + // There are no more enemies, but we must look like we are patroling so + // go to encounter points. + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + int nRoll = d10(); + if(nRoll == 1) PlayVoiceChat(VOICE_CHAT_BADIDEA, oCreature); + else if(nRoll == 2) PlayVoiceChat(VOICE_CHAT_SEARCH, oCreature); + else if(nRoll == 3) PlayVoiceChat(VOICE_CHAT_FOLLOWME, oCreature); + } + // No enemy so lets get a spawn point! + object oSpawnPoint = GetNearestObjectByTag("ip_encounter", oCreature, d6()); + ActionMoveToObject(oSpawnPoint, TRUE, AI_RANGE_CLOSE); + } +} +int ai_ShouldIPickItUp(object oCreature, object oItem) +{ + int nMinGold; + if(GetResRef(oItem) == "nw_it_gold001") return TRUE; + int nBaseItem = GetBaseItemType(oItem); + if(GetPlotFlag(oItem)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_PLOT)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_2"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_ARMOR) + { + if (ai_GetLootFilter(oCreature, AI_LOOT_ARMOR)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_3"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BELT) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BELTS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_4"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BOOTS) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BOOTS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_5"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_CLOAK) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_CLOAKS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_6"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_GEM) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_GEMS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_7"); + else return FALSE; + } + else if((nBaseItem == BASE_ITEM_BRACER|| nBaseItem == BASE_ITEM_GLOVES)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_GLOVES)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_8"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_HELMET) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_HEADGEAR)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_9"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_AMULET || nBaseItem == BASE_ITEM_RING) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_JEWELRY)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_10"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BLANK_POTION || nBaseItem == BASE_ITEM_POTIONS || + nBaseItem == BASE_ITEM_ENCHANTED_POTION) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_POTIONS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_12"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BLANK_SCROLL || nBaseItem == BASE_ITEM_SCROLL || + nBaseItem == BASE_ITEM_ENCHANTED_SCROLL || nBaseItem == BASE_ITEM_SPELLSCROLL) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_SCROLLS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_13"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BLANK_WAND || nBaseItem == BASE_ITEM_ENCHANTED_WAND || + nBaseItem == BASE_ITEM_MAGICWAND || nBaseItem == BASE_ITEM_MAGICROD || + nBaseItem == BASE_ITEM_MAGICSTAFF) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_WANDS_RODS_STAVES)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_15"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_ARROW) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_ARROWS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_17"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BOLT) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BOLTS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_18"); + else return FALSE; + } + else if(nBaseItem == BASE_ITEM_BULLET) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_BULLETS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_19"); + else return FALSE; + } + else if(ai_GetIsWeapon(oItem)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_WEAPONS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_16"); + else return FALSE; + } + else if(ai_GetIsShield(oItem)) + { + if(ai_GetLootFilter(oCreature, AI_LOOT_SHIELDS)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_14"); + else return FALSE; + } + else if(ai_GetLootFilter(oCreature, AI_LOOT_MISC)) nMinGold = GetLocalInt(oCreature, "AI_MIN_GOLD_11"); + else return FALSE; + // Check if it is too heavy. + int nItemWeight = GetWeight(oItem); + if(AI_DEBUG) ai_Debug("0i_actions", "1146", GetName(oItem) + " nItemWeight: " + + IntToString(nItemWeight) + " Max Weight: " + IntToString(GetLocalInt(oCreature, AI_MAX_LOOT_WEIGHT) * 10)); + if(nItemWeight > GetLocalInt(oCreature, AI_MAX_LOOT_WEIGHT) * 10) return FALSE; + // Check if it is not valuable enough. + int bID = GetIdentified(oItem); + if(!bID) SetIdentified(oItem, TRUE); + int nItemValue = GetGoldPieceValue(oItem); + if(!bID) SetIdentified(oItem, FALSE); + if(AI_DEBUG) ai_Debug("0i_actions", "998", GetName(oItem) + " nMinGold: " + IntToString(nMinGold) + " nItemValue: " + + IntToString(nItemValue) + " bID: " + IntToString(bID)); + if(nMinGold > nItemValue) return FALSE; + return TRUE; +} +void ai_TakeItemMessage(object oCreature, object oObject, object oItem, object oMaster) +{ + int bId = GetIdentified(oItem); + int nCreatureSkill = GetSkillRank(SKILL_LORE, oCreature); + int nMasterSkill = GetSkillRank(SKILL_LORE, oMaster); + if(nCreatureSkill + nMasterSkill > 0) + { + if(nCreatureSkill > nMasterSkill) ai_IdentifyItemVsKnowledge(oCreature, oItem); + else ai_IdentifyItemVsKnowledge(oMaster, oItem); + } + if(!ai_GetIsCharacter(oCreature)) + { + if(GetIdentified(oItem)) + { + if(bId) ai_SendMessages(GetName(oCreature) + " has found a " + GetName(oItem) + " from the " + GetName(oObject) + ".", AI_COLOR_GRAY, oMaster); + else ai_SendMessages(GetName(oCreature) + " has found and identified " + GetName(oItem) + " from the " + GetName(oObject) + ".", AI_COLOR_GREEN, oMaster); + } + else if(!ai_GetIsCharacter(oCreature)) + { + string sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + ai_SendMessages(GetName(oCreature) + " has found a " + sBaseName + " from the " + GetName(oObject) + ".", AI_COLOR_GRAY, oMaster); + } + } + else if(GetIdentified(oItem) && !bId) + { + ai_SendMessages(GetName(oCreature) + " has identified " + GetName(oItem) + " from the " + GetName(oObject) + ".", AI_COLOR_GREEN, oMaster); + } + if(GetPlotFlag(oItem)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) PlayVoiceChat(VOICE_CHAT_LOOKHERE, oCreature); + } +} +void ai_SearchObject(object oCreature, object oObject, object oMaster, int bOnce = FALSE) +{ + ai_Debug("0i_actions", "966", GetName(OBJECT_SELF) + " is opening " + GetName(oObject)); + string sTag = GetTag(oCreature); + AssignCommand(oObject, ActionPlayAnimation(ANIMATION_PLACEABLE_OPEN)); + if(GetIsTrapped(oObject)) DoPlaceableObjectAction(oObject, PLACEABLE_ACTION_USE); + SetLocalInt(oObject, "AI_LOOTED_" + sTag, TRUE); + // Big Hack to allow NPC's to loot! + string sLootScript = GetEventScript(oObject, EVENT_SCRIPT_PLACEABLE_ON_OPEN); + //ai_Debug("0i_actions", "972", "Loot script: " + sLootScript); + if(sLootScript != "") + { + // Used in Original Campaign, and SOU for loot scripts to get treasure to work. + SetLocalObject(oObject, "AI_GET_LAST_OPENED_BY", oMaster); + ExecuteScript(sLootScript, oObject); + } + AssignCommand(oObject, ActionWait(2.0f)); + AssignCommand(oObject, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE)); + int nItemType, nGold; + object oItem = GetFirstItemInInventory(oObject); + //ai_Debug("0i_actions", "983", "Found: " + GetName(oItem) + " ResRef: " + GetResRef(oItem) + + // " in " + GetName(oObject)); + while(oItem != OBJECT_INVALID) + { + ai_Debug("0i_actions", "987", "Found: " + GetName(oItem) + " ResRef: " + GetResRef(oItem)); + if(ai_ShouldIPickItUp(oCreature, oItem)) + { + ai_Debug("0i_actions", "1002", "Taking: " + GetName(oItem)); + if(GetResRef(oItem) == "nw_it_gold001") + { + if(!ai_GetIsCharacter(oCreature)) + { + int nGold = GetItemStackSize(oItem); + DestroyObject(oItem); + ActionDoCommand(GiveGoldToCreature(oMaster, nGold)); + ActionDoCommand(ai_SendMessages(GetName(oCreature) + " has retrieved " + IntToString(nGold) + + " gold from the " + GetName(oObject) + ".", AI_COLOR_GRAY, oMaster)); + } + else AssignCommand(oCreature, ActionTakeItem(oItem, oObject)); + } + // Check if they are a henchman, companions and familiars give all items to the pc. + else if(!ai_GetLootFilter(oCreature, AI_LOOT_GIVE_TO_PC) && + GetAssociateType(oCreature) == ASSOCIATE_TYPE_HENCHMAN && + !GetPlotFlag(oItem)) + { + if(GetBaseItemFitsInInventory(GetBaseItemType(oItem), oCreature)) + { + ActionDoCommand(ai_TakeItemMessage(oCreature, oObject, oItem, oMaster)); + ActionTakeItem(oItem, oObject); + } + else + { + if(GetIdentified(oItem)) SpeakString("My inventory is full! I cannot pick up the " + GetName(oItem) + "."); + else + { + string sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + SpeakString("My inventory is full! I cannot pick up the " + sBaseName + "."); + } + } + } + else + { + if(GetBaseItemFitsInInventory(GetBaseItemType(oItem), oMaster)) + { + //ai_Debug("0i_actions", "1010", "Giving to master: " + GetName(oItem)); + ActionDoCommand(ai_TakeItemMessage(oCreature, oObject, oItem, oMaster)); + AssignCommand(oObject, ActionGiveItem(oItem, oMaster)); + } + else + { + if(GetIdentified(oItem)) SpeakString("Your inventory is full! You cannot take the " + GetName(oItem) + "."); + else + { + string sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + SpeakString("Your inventory is full! You cannot take the " + sBaseName + "."); + } + } + } + } + oItem = GetNextItemInInventory(oObject); + //ai_Debug("0i_actions", "1016", GetName(oItem) + " is the next item."); + } + //ai_Debug("0i_actions", "1018", "Setting object as looted. Check for a new Placeable."); + if(!bOnce) ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature)); +} +int ai_IsContainerLootable(object oCreature, object oObject) +{ + string sTag = GetTag(oCreature); + //ai_Debug("0i_actions", "1303", GetName(oObject) + " (sTag " + GetTag(oObject) + ") " + + // "has inventory: " + IntToString(GetHasInventory(oObject)) + " Has been looted: " + + // IntToString(GetLocalInt(oObject, "AI_LOOTED_" + sTag)) + " Is Useable? " + + // IntToString(GetUseableFlag(oObject))); + if(!GetHasInventory(oObject) || !GetUseableFlag(oObject)) return FALSE; + // This associate has already looted this object, skip. + if(GetLocalInt(oObject, "AI_LOOTED_" + sTag) || ai_GetIsCharacter(oObject)) return FALSE; + return TRUE; +} +int ai_AttempToCastKnockSpell(object oCreature, object oLocked) +{ + if(GetHasSpell(SPELL_KNOCK, oCreature) && + (GetIsDoorActionPossible(oLocked, DOOR_ACTION_KNOCK) || + GetIsPlaceableObjectActionPossible(oLocked, PLACEABLE_ACTION_KNOCK)) && + ai_GetIsInLineOfSight(oCreature, oLocked)) + { + SetLocalInt(oLocked, AI_OBJECT_IN_USE, TRUE); + DelayCommand(6.0, DeleteLocalInt(oLocked, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionWait(1.0)); + AssignCommand(oCreature, ActionCastSpellAtObject(SPELL_KNOCK, oLocked)); + AssignCommand(oCreature, ActionWait(1.0)); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oLocked, AI_OBJECT_IN_USE))); + return TRUE; + } + return FALSE; +} +int ai_ReactToTrap(object oCreature, object oTrap, int bForce = FALSE) +{ + int nTrapDC = GetTrapDisarmDC(oTrap); + if(AI_DEBUG) ai_Debug("0i_actions", "1520", "Reacting to trap on " + GetName(oTrap) + + " bForce: " + IntToString(bForce) + " nTrapDC: " + IntToString(nTrapDC) + + " [AI_OBJECT_IN_USE: " + IntToString(GetLocalInt(oTrap, AI_OBJECT_IN_USE)) + "]."); + if(nTrapDC == 0) return FALSE; + string sTag = GetTag(oCreature); + if(bForce || ai_GetAIMode(oCreature, AI_MODE_DISARM_TRAPS)) + { + if(GetTrapDisarmable(oTrap)) + { + if(GetLocalInt(oTrap, AI_OBJECT_IN_USE)) return FALSE; + // We must have ranks in disable traps to actually disable the trap! + if(GetSkillRank(SKILL_DISABLE_TRAP, oCreature, TRUE)) + { + int nSkill = GetSkillRank(SKILL_DISABLE_TRAP, oCreature); + if(AI_DEBUG) ai_Debug("0i_actions", "1534", "nSkill: " + IntToString(nSkill) + + " + 20 = " + IntToString(nSkill + 20) + " nTrapDC: " + IntToString(nTrapDC)); + if(nSkill + 20 >= nTrapDC) + { + SetLocalInt(oTrap, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oTrap, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionUseSkill(SKILL_DISABLE_TRAP, oTrap, 0)); + // Let them know we did it! + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 6, ":44:42:31:35:"))); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oTrap, AI_OBJECT_IN_USE))); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + if(GetHasSpell(SPELL_FIND_TRAPS, oCreature)) + { + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionCastSpellAtObject(SPELL_FIND_TRAPS, oTrap)); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + } + if(GetLocalInt(oTrap, "AI_CANNOT_TRAP_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + //StrRef(40551) "I cannot disarm this trap!" + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, GetStringByStrRef(40551))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oTrap, "AI_CANNOT_TRAP_" + sTag, TRUE); + return FALSE; + } + if(GetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + ai_HaveCreatureSpeak(oCreature, 0, "I'm not skilled enough to disable the trap!", TRUE); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag, TRUE); + return FALSE; + } + if(GetObjectType(oTrap) == OBJECT_TYPE_TRIGGER) + { + object oMaster = ai_GetPlayerMaster(oCreature); + if(oMaster != OBJECT_INVALID && !ai_GetIsCharacter(oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_IGNORE_TRAPS)) + { + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, TRUE); + ai_SetAIMode(oCreature, AI_MODE_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + aiSaveAssociateModesToDb(oMaster, oCreature); + if(ai_IsInCombatRound(oCreature)) ai_ClearCombatState(oCreature); + ai_ClearCreatureActions(TRUE); + ai_SendMessages(GetName(oCreature) + " has went into hold mode after seeing a trap!", AI_COLOR_YELLOW, oMaster); + return TRUE; + } + } + if(ai_GetAIMode(oCreature, AI_MODE_PICKUP_ITEMS)) + { + if(GetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag) && !bForce) return FALSE; + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oTrap) + " is trapped!", TRUE)); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oTrap, "AI_SAW_TRAP_" + sTag, TRUE); + } + return FALSE; +} +int ai_AttemptToByPassLock(object oCreature, object oLocked, int bForce = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "1446", "Attempting to bypass lock on " + + GetName(oLocked) + " [AI_OBJECT_IN_USE: " + + IntToString(GetLocalInt(oLocked, AI_OBJECT_IN_USE)) + "]" + + " bForce: " + IntToString(bForce)); + if(GetLocalInt(oLocked, AI_OBJECT_IN_USE)) return FALSE; + string sTag = GetTag(oCreature); + // Attempt to cast knock because its always safe to cast it, even on a trapped object. + if(ai_AttempToCastKnockSpell(oLocked, oCreature)) return TRUE; + // First, let's see if we notice that it's trapped + if(GetTrapDetectedBy(oCreature, oLocked)) + { + // Ick! Try and disarm the trap first + if(ai_ReactToTrap(oCreature, oLocked, bForce)) return TRUE; + } + if(GetLockKeyRequired(oLocked)) + { + // We might be able to open this. + string sKeyTag = GetLockKeyTag(oLocked); + // Do we have the key? + object oKey = ai_GetCreatureHasItem(oCreature, sKeyTag, FALSE); + if(AI_DEBUG) ai_Debug("0i_actions", "1469", "Requires a Key! sKeyTag: " + + sKeyTag + " Has key oKey: " + GetName(oKey)); + if(oKey != OBJECT_INVALID) + { + int nObjectType = GetObjectType(oLocked); + if(nObjectType == OBJECT_TYPE_DOOR) return ai_AttemptToOpenDoor(oCreature, oLocked, bForce); + else if (nObjectType == OBJECT_TYPE_PLACEABLE) + { + SetLocalInt(oLocked, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oLocked, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ActionUnlockObject(oLocked)); + // Let them know we did it! + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 6, ":44:42:31:35:")); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oLocked, AI_OBJECT_IN_USE))); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + } + else + { + if(GetLocalInt(oLocked, "AI_LOCKED_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oLocked) + " is special! It requires a special key to open."))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + } + if(bForce || ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS)) + { + // We must have ranks in open locks to actually open the lock! + if(GetSkillRank(SKILL_OPEN_LOCK, oCreature, TRUE)) + { + int nSkill = GetSkillRank(SKILL_OPEN_LOCK, oCreature); + int nLockDC = GetLockUnlockDC(oLocked); + object oPicks = ai_GetBestPicks(oCreature, nLockDC); + int nPickBonus = GetLocalInt(oPicks, "AI_BONUS"); + if(AI_DEBUG) ai_Debug("0i_actions", "1497", "I have picks: " + GetName(oPicks) + + " nSkill :" + IntToString(nSkill) + " nPickBonus: " + + IntToString(nPickBonus) + " + 20 = " + + IntToString(nSkill + nPickBonus + 20) + + " nLockDC: " + IntToString(nLockDC)); + if(nSkill + 20 + nPickBonus >= nLockDC) + { + SetLocalInt(oLocked, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oLocked, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionWait(1.0)); + AssignCommand(oCreature, ActionUseSkill(SKILL_OPEN_LOCK, oLocked, 0, oPicks)); + AssignCommand(oCreature, ActionWait(1.0)); + // Let them know we did it! + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":44:42:26:31:35:")); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oLocked, AI_OBJECT_IN_USE))); + // Continue checking for traps, locks, and loot. + AssignCommand(oCreature, ActionDoCommand(ai_ActionCheckNearbyObjects(oCreature))); + return TRUE; + } + else if(!GetLocalInt(oLocked, "AI_LOCKED_" + sTag)) + { + // Let them know we can't get this done! + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "I'm not skilled enough to pick the lock on this " + GetName(oLocked) + "!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + } + } + if(bForce || ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) + { + //AssignCommand(oCreature, ai_ClearCreatureActions()); + // Check to make sure we are not using a ranged weapon. + if(!ai_GetIsRangeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature))) + { + if(ai_CheckClassType(oCreature, CLASS_TYPE_MONK)) ai_EquipBestMonkMeleeWeapon(oCreature); + else ai_EquipBestMeleeWeapon(oCreature); + AssignCommand(oCreature, ActionWait(1.0)); + if(ai_TryImprovedPowerAttackFeat(oCreature, oLocked)) return TRUE; + if(ai_TryPowerAttackFeat(oCreature, oLocked)) return TRUE; + if(ai_TryFlurryOfBlowsFeat(oCreature, oLocked)) return TRUE; + AssignCommand(oCreature, ActionAttack(oLocked)); + return TRUE; + } + if(GetLocalInt(oLocked, "AI_LOCKED_" + sTag) && !bForce) return FALSE; + // Let them know we can't get this done!. + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "I cannot bash this " + GetName(oLocked) + " open!", TRUE))); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + if(bForce || ai_GetAIMode(oCreature, AI_MODE_PICKUP_ITEMS)) + { + if(GetLocalInt(oLocked, "AI_LOCKED_" + sTag) && !bForce) return FALSE; + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oLocked) + " is locked!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oLocked, "AI_LOCKED_" + sTag, TRUE); + } + return FALSE; +} +int ai_AttemptToOpenDoor(object oCreature, object oDoor, int bForce = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_actions", "1542", "Attempting to open " + + GetName(oDoor) + " [AI_OBJECT_IN_USE: " + + IntToString(GetLocalInt(oDoor, AI_OBJECT_IN_USE)) + "] " + + " IsOpen: " + IntToString(GetIsOpen(oDoor)) + + " Plot: " + IntToString(GetPlotFlag(oDoor)) + "."); + if(!ai_GetAIMode(oCreature, AI_MODE_OPEN_DOORS) && !bForce) return FALSE; + if(GetLocalInt(oDoor, AI_OBJECT_IN_USE)) return FALSE; + if(GetIsOpen(oDoor)) return FALSE; + string sTag = GetTag(oCreature); + if(GetIsTrapped(oDoor)) + { + if(GetTrapDetectedBy(oDoor, GetMaster(oCreature))) SetTrapDetectedBy(oDoor, oCreature); + if(GetTrapDetectedBy(oDoor, oCreature)) + { + if(GetLocalInt(oDoor, "AI_SAW_TRAP_" + sTag)) return FALSE; + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oDoor) + " is trapped!", TRUE)); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oDoor, "AI_SAW_TRAP_" + sTag, TRUE); + return FALSE; + } + } + if(GetLocked(oDoor)) + { + if(GetLocalInt(oDoor, "AI_LOCKED_" + sTag)) return FALSE; + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oDoor) + " is locked!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oDoor, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + SetLocalInt(oDoor, AI_OBJECT_IN_USE, TRUE); + DelayCommand(18.0, DeleteLocalInt(oDoor, AI_OBJECT_IN_USE)); + AssignCommand(oCreature, ActionOpenDoor(oDoor, TRUE)); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oDoor, AI_OBJECT_IN_USE))); + return TRUE; +} +void ai_ActionCheckNearbyObjects(object oCreature) +{ + if(ai_GetIsBusy(oCreature)) return; + ai_CheckNearbyObjects(oCreature); +} +int ai_CheckNearbyObjects(object oCreature) +{ + object oMaster = ai_GetPlayerMaster(oCreature); + location lMaster = GetLocation(oMaster); + int nObjectType, bIgnore; + int nFilter = OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER | OBJECT_TYPE_ITEM; + float fLockRange, fDoorRange, fLootRange, fObjectDistance; + float fTrapRange = GetLocalFloat(oCreature, AI_TRAP_CHECK_RANGE); + if(ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS) || + ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) fLockRange = GetLocalFloat(oCreature, AI_LOCK_CHECK_RANGE); + if(ai_GetAIMode(oCreature, AI_MODE_PICKUP_ITEMS)) fLootRange = GetLocalFloat(oCreature, AI_LOOT_CHECK_RANGE); + if(ai_GetAIMode(oCreature, AI_MODE_OPEN_DOORS)) fDoorRange = GetLocalFloat(oCreature, AI_OPEN_DOORS_RANGE); + if(AI_DEBUG && fTrapRange != 0.0) ai_Debug("0i_actions", "1579", " Checking " + FloatToString(fTrapRange, 0, 0) + " foot area for traps."); + if(AI_DEBUG && fLootRange != 0.0) ai_Debug("0i_actions", "1580", " Checking " + FloatToString(fLootRange, 0, 0) + " foot area for traps."); + if(AI_DEBUG && fLockRange != 0.0) ai_Debug("0i_actions", "1581", " Checking " + FloatToString(fLockRange, 0, 0) + " foot area for locks."); + if(AI_DEBUG && fDoorRange != 0.0) ai_Debug("0i_actions", "1582", " Checking " + FloatToString(fDoorRange, 0, 0) + " foot area for doors."); + float fLongestRange = fTrapRange; + vector vCreature = GetPositionFromLocation(GetLocation(oCreature)); + if(fLongestRange < fLootRange) fLongestRange = fLootRange; + if(fLongestRange < fLockRange) fLongestRange = fLockRange; + if(fLongestRange < fDoorRange) fLongestRange = fDoorRange; + object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fLongestRange, lMaster, TRUE, nFilter); + while(oObject != OBJECT_INVALID) + { + fObjectDistance = GetDistanceBetween(oMaster, oObject); + if(AI_DEBUG) ai_Debug("0i_actions", "1651", "Checking Nearby Objects: " + + GetName(oObject) + " fDistance: " + FloatToString(fObjectDistance, 0, 2)); + if(GetTrapDetectedBy(oObject, oCreature)) + { + if(fTrapRange >= fObjectDistance) + { + if(ai_ReactToTrap(oCreature, oObject)) return TRUE; + } + } + if(GetLocked(oObject)) + { + if(fLockRange >= fObjectDistance) + { + if(ai_AttemptToByPassLock(oCreature, oObject)) return TRUE; + } + } + nObjectType = GetObjectType(oObject); + if(fDoorRange >= fObjectDistance && nObjectType == OBJECT_TYPE_DOOR) + { + if(ai_AttemptToOpenDoor(oCreature, oObject)) return TRUE; + } + if(fLootRange >= fObjectDistance) + { + if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + if(!GetLocalInt(oObject, AI_OBJECT_IN_USE) && + ai_IsContainerLootable(oCreature, oObject)) + { + if(GetLocked(oObject)) + { + string sTag = GetTag(oCreature); + if(GetLocalInt(oObject, "AI_LOCKED_" + sTag)) return FALSE; + AssignCommand(oCreature, ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oObject) + " is locked!", TRUE))); + ActionDoCommand(ai_HaveCreatureSpeak(oCreature, 8, ":47:30:43:5:36:")); + SetLocalInt(oObject, "AI_LOCKED_" + sTag, TRUE); + return FALSE; + } + ai_ClearCreatureActions(); + ActionMoveToObject(oObject, TRUE); + AssignCommand(oCreature, ActionDoCommand(ai_SearchObject(oCreature, oObject, oMaster))); + return TRUE; + } + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + if(ai_ShouldIPickItUp(oCreature, oObject)) + { + ActionPickUpItem(oObject); + return TRUE; + } + } + } + oObject = GetNextObjectInShape(SHAPE_SPHERE, fLongestRange, lMaster, TRUE, nFilter); + } + return FALSE; +} +void ai_DetermineSpecialBehavior(object oCreature) +{ + object oTarget = ai_GetNearestEnemy(oCreature, 1, 7, 7, -1, -1, TRUE); + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE)) + { + if(ai_GetIsInCombat(oCreature)) ai_DoMonsterCombatRound(oTarget); + // * if not attacking, then wander. + else + { + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionRandomWalk()); + return; + } + } + else if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) + { + if(GetIsObjectValid(ai_GetAttackedTarget(oCreature, TRUE, TRUE))) + { + if(oTarget != OBJECT_INVALID && GetDistanceBetween(oCreature, oTarget) <= 6.0) + { + if(!GetIsFriend(oTarget)) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_coward"); + ActionMoveAwayFromObject(oTarget, TRUE, AI_RANGE_LONG); + } + } + } + } + else if(!IsInConversation(OBJECT_SELF)) + { + AssignCommand(oCreature, ai_ClearCreatureActions()); + AssignCommand(oCreature, ActionRandomWalk()); + return; + } + } +} +//This function is used only because ActionDoCommand can only accept void functions +void ai_CreateSignPostNPC(string sTag, location lLocal) +{ + CreateObject(OBJECT_TYPE_CREATURE, sTag, lLocal); +} +void ai_ActivateFleeToExit(object oCreature) +{ + //minor optimizations - only grab these variables when actually needed + //can make for larger code, but it's faster + //object oExitWay = GetWaypointByTag("EXIT_" + GetTag(OBJECT_SELF)); + //location lLocal = GetLocalLocation(OBJECT_SELF, "NW_GENERIC_START_POINT"); + //string sTag = GetTag(OBJECT_SELF); + int nPlot = GetLocalInt(oCreature, "NW_GENERIC_MASTER"); + if(nPlot & NW_FLAG_TELEPORT_RETURN || nPlot & NW_FLAG_TELEPORT_LEAVE) + { + effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCreature); + if(nPlot & NW_FLAG_TELEPORT_RETURN) + { + location lLocal = GetLocalLocation(oCreature, "NW_GENERIC_START_POINT"); + string sTag = GetTag(oCreature); + DelayCommand(6.0, AssignCommand(oCreature, ActionDoCommand(ai_CreateSignPostNPC(sTag, lLocal)))); + } + AssignCommand(oCreature, ActionDoCommand(DestroyObject(oCreature, 0.75))); + } + else + { + if(nPlot & NW_FLAG_ESCAPE_LEAVE) + { + object oExitWay = GetWaypointByTag("EXIT_" + GetTag(oCreature)); + ActionMoveToObject(oExitWay, TRUE); + AssignCommand(oCreature, ActionDoCommand(DestroyObject(oCreature, 1.0))); + } + else if(nPlot & NW_FLAG_ESCAPE_RETURN) + { + string sTag = GetTag(oCreature); + object oExitWay = GetWaypointByTag("EXIT_" + sTag); + ActionMoveToObject(oExitWay, TRUE); + location lLocal = GetLocalLocation(oCreature, "NW_GENERIC_START_POINT"); + DelayCommand(6.0, AssignCommand(oCreature, ActionDoCommand(ai_CreateSignPostNPC(sTag, lLocal)))); + AssignCommand(oCreature, ActionDoCommand(DestroyObject(oCreature, 1.0))); + } + } +} +int ai_GetFleeToExit(object oCreature) +{ + int nPlot = GetLocalInt(oCreature, "NW_GENERIC_MASTER"); + if(nPlot & NW_FLAG_ESCAPE_RETURN) return TRUE; + else if(nPlot & NW_FLAG_ESCAPE_LEAVE) return TRUE; + else if(nPlot & NW_FLAG_TELEPORT_RETURN) return TRUE; + else if(nPlot & NW_FLAG_TELEPORT_LEAVE) return TRUE; + return FALSE; +} +void ai_ActionInitialization() +{ + SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE); + SetAnimationCondition(NW_ANIM_FLAG_INITIALIZED); + SetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION", GetLocation(OBJECT_SELF)); +} +// Start interacting with a placeable object +void ai_ActionStartInteracting(object oPlaceable) +{ + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING); + ActionMoveToObject(oPlaceable, FALSE, DISTANCE_TINY); + ActionDoCommand(SetFacingPoint(GetPosition(oPlaceable))); + SetCurrentInteractionTarget(oPlaceable); + AnimActionPlayRandomInteractAnimation(oPlaceable); +} + +void ai_ActionStopInteracting() +{ + AnimActionRandomMoveAway(GetCurrentInteractionTarget(), DISTANCE_LARGE); + SetCurrentInteractionTarget(OBJECT_INVALID); + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING, FALSE); + AnimActionTurnAround(); + AnimActionPlayRandomAnimation(); +} + +// Start talking with a friend +void ai_ActionStartTalking(object oFriend, int nHDiff=0) +{ + object oMe = OBJECT_SELF; + ActionMoveToObject(oFriend, FALSE, DISTANCE_TINY); + AnimActionPlayRandomGreeting(nHDiff); + AssignCommand(oFriend, ActionMoveToObject(oMe, FALSE, DISTANCE_TINY)); + AssignCommand(oFriend, AnimActionPlayRandomGreeting(0 - nHDiff)); + SetCurrentFriend(oFriend); + AssignCommand(oFriend, SetCurrentFriend(oMe)); + ActionDoCommand(SetFacingPoint(GetPosition(oFriend))); + AssignCommand(oFriend, ActionDoCommand(SetFacingPoint(GetPosition(oMe)))); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, TRUE, oFriend); +} +void ai_ActionStopTalking(object oFriend, int nHDiff=0) +{ + object oMe = OBJECT_SELF; + AnimActionPlayRandomGoodbye(nHDiff); + AnimActionRandomMoveAway(oFriend, DISTANCE_LARGE); + AssignCommand(oFriend, AnimActionPlayRandomGoodbye(0 - nHDiff)); + AssignCommand(oFriend, AnimActionRandomMoveAway(oMe, DISTANCE_HUGE)); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, FALSE); + SetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, FALSE, oFriend); +} +object ai_GetRandomFriend(float fMaxDistance) +{ + object oCreature = OBJECT_SELF; + location lStartLocation = GetLocalLocation(oCreature, "ANIM_START_LOCATION"); + object oFriend = GetNearestCreature(CREATURE_TYPE_REPUTATION, + REPUTATION_TYPE_FRIEND, + oCreature, d2(), + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN); + //SendMessageToPC(GetFirstPC(), " 0i_actions, 1748 oFriend: " + GetName(oFriend) + + // " AnimationCondition: " + IntToString(GetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE, oFriend)) + + // " Conversation: " + IntToString(IsInConversation(oFriend)) + + // " Combat: " + IntToString(GetIsInCombat(oFriend)) + + // " Distance: " + FloatToString(GetDistanceBetweenLocations(GetLocation(oFriend), lStartLocation), 0,0 )); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + if(GetIsObjectValid(oFriend) + && !GetIsPC(oFriend) + && !GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oFriend) + && !IsInConversation(oFriend) + && !GetIsInCombat(oFriend) + && GetDistanceBetweenLocations(GetLocation(oFriend), lStartLocation) <= fMaxDistance) + { + return oFriend; + } + + return OBJECT_INVALID; +} +int ai_ActionFindFriend(float fMaxDistance) +{ + // Try and find a friend to talk to. + object oFriend = ai_GetRandomFriend(fMaxDistance); + //SendMessageToPC(GetFirstPC(), GetName(oFriend) + " TALKING: " + IntToString(GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oFriend))); + if(GetIsObjectValid(oFriend) && !GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING, oFriend)) + { + int nHDiff = GetHitDice(OBJECT_SELF) - GetHitDice(oFriend); + ai_ActionStartTalking(oFriend, nHDiff); + return TRUE; + } + return FALSE; +} +object ai_GetRandomObjectbyTag(string sTag, float fMaxDistance) +{ + int nIndex; + if(fMaxDistance < DISTANCE_MEDIUM) nIndex = d4(); + else if (fMaxDistance < DISTANCE_HUGE) nIndex = d8(); + else nIndex = d10(); + location lStartLocation = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + object oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, nIndex); + while(nIndex > 0) + { + if(GetTag(oObject) == sTag && + GetDistanceBetweenLocations(GetLocation(oObject), lStartLocation) <= fMaxDistance) break; + oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, --nIndex); + } + if(GetIsObjectValid(oObject)) + return oObject; + return OBJECT_INVALID; +} +int ai_ActionSitInChair(float fMaxDistance) +{ + object oChair = GetRandomObjectByTag("Chair", fMaxDistance); + if (GetIsObjectValid(oChair) && + !GetIsObjectValid(GetSittingCreature(oChair))) + { + ActionSit(oChair); + SetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING); + return TRUE; + } + return FALSE; +} +object ai_GetRandomUseableObject(float fMaxDistance) +{ + int nIndex; + if(fMaxDistance < DISTANCE_MEDIUM) nIndex = d2(); + else if (fMaxDistance < DISTANCE_HUGE) nIndex = d4(); + else nIndex = d6(); + location lStartLocation = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + object oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, nIndex); + while(nIndex > 0) + { + if(GetUseableFlag(oObject) && !GetLocked(oObject) && + GetDistanceBetweenLocations(GetLocation(oObject), lStartLocation) <= fMaxDistance) break; + oObject = GetNearestObjectToLocation(OBJECT_TYPE_PLACEABLE, lStartLocation, --nIndex); + } + if(GetIsObjectValid(oObject)) + return oObject; + return OBJECT_INVALID; +} +int ai_ActionFindPlaceable(float fMaxDistance) +{ + object oPlaceable = ai_GetRandomUseableObject(fMaxDistance); + if(GetIsObjectValid(oPlaceable)) + { + ai_ActionStartInteracting(oPlaceable); + return 1; + } + return 0; +} +int ai_ActionCheckDoor(float fMaxDistance) +{ + int nIndex = 1; + object oCreature = OBJECT_SELF; + location lStartLocation = GetLocalLocation(oCreature, "ANIM_START_LOCATION"); + if(fMaxDistance > 20.0) fMaxDistance = 20.0; + object oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oCreature); + while(oDoor != OBJECT_INVALID) + { + if(GetDistanceBetweenLocations(GetLocation(oDoor), lStartLocation) <= fMaxDistance) + { + // Make sure everyone doesn't run to close or open the same door. + if(!GetLocalInt(oDoor, "DOOR_INTERACTION")) + { + if(GetIsOpen(oDoor)) + { + //SendMessageToPC(GetFirstPC(), GetName(oCreature) + + // " Closing " + GetName(oDoor) + "."); + SetLocalInt(oDoor, "DOOR_INTERACTION", TRUE); + ActionCloseDoor(oDoor); + AssignCommand(oDoor, ActionDoCommand(SetLocalInt(oDoor, "DOOR_INTERACTION", FALSE))); + return TRUE; + } + else if(GetLocalInt(GetModule(), AI_RULE_OPEN_DOORS)) + { + //SendMessageToPC(GetFirstPC(), GetName(oDoor) + " Locked: " + + // IntToString(GetLocked(oDoor)) + " Trapped: " + + // IntToString(GetIsTrapped(oDoor)) + + // " Plot: " + IntToString(GetPlotFlag(oDoor))); + if(!GetLocked(oDoor) && + !GetIsTrapped(oDoor) && + !GetPlotFlag(oDoor)) + { + //SendMessageToPC(GetFirstPC(), GetName(oCreature) + + // " Opening " + GetName(oDoor) + "."); + SetLocalInt(oDoor, "DOOR_INTERACTION", TRUE); + ActionOpenDoor(oDoor); + // If a door has been opened lets not go right behind and close for a minute. + DelayCommand(60.0, SetLocalInt(oDoor, "DOOR_INTERACTION", FALSE)); + return TRUE; + } + } + } + } + oDoor = GetNearestObject(OBJECT_TYPE_DOOR, oCreature, ++nIndex); + } + return FALSE; +} +int ai_ActionInteraction() +{ + // If we're talking, either keep going or stop. + // Low prob of stopping, since both parties have + // a chance and conversations are cool. + if(GetAnimationCondition(NW_ANIM_FLAG_IS_TALKING)) + { + object oFriend = GetCurrentFriend(); + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " Is talking to " + GetName(oFriend)); + int nHDiff = GetHitDice(OBJECT_SELF) - GetHitDice(oFriend); + if(Random(100) < 20) + { + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " I'm done talking!"); + ai_ActionStopTalking(oFriend, nHDiff); + return TRUE; + } + AnimActionPlayRandomTalkAnimation(nHDiff); + return TRUE; + } + // If we're interacting with a placeable, either keep going or stop. + // High probability of stopping, since looks silly to + // constantly turn something on-and-off. + if(GetAnimationCondition(NW_ANIM_FLAG_IS_INTERACTING)) + { + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " Is interacting."); + if(Random(100) < 40) + { + //SendMessageToPC(GetFirstPC(), GetName(OBJECT_SELF) + " I'm done interacting!"); + ai_ActionStopInteracting(); + return TRUE; + } + AnimActionPlayRandomInteractAnimation(GetCurrentInteractionTarget()); + return TRUE; + } + return FALSE; +} +location ai_GetWalkingLocation(object oSource, float fDistance) +{ + location lStart = GetLocation(oSource); + // Try to move in a north/south/east/west direction that will allow better + // movement around the map! + float fFacing = GetFacing(oSource); + if(Random(100) < 25) fFacing = IntToFloat(Random(360)); + float fAngle; + if(fFacing > 315.0 || fFacing < 45.0) fAngle = DIRECTION_EAST; + else if(fFacing < 135.0) fAngle = DIRECTION_NORTH; + else if(fFacing < 225.0) fAngle = DIRECTION_WEST; + else fAngle = DIRECTION_SOUTH; + fAngle += IntToFloat(Random(20) - 10); + float fOrientation = fAngle; + return GenerateNewLocationFromLocation(lStart, fDistance, fAngle, fOrientation); +} +void ai_ActionRandomWalk(float fMaxDistance) +{ + // If we stay within our alloted distance then we can walk to the new location. + location lStartLocation = GetLocalLocation(OBJECT_SELF, "ANIM_START_LOCATION"); + int nRandom = FloatToInt(fMaxDistance); + if(nRandom > 20) nRandom = 20; + float fRandom = IntToFloat(Random(nRandom) + 1); + location lNewLocation = ai_GetWalkingLocation(OBJECT_SELF, fRandom); + if(AI_DEBUG) ai_Debug("0i_actions", "2092", GetName(OBJECT_SELF) + " is walking " + + FloatToString(GetDistanceBetweenLocations(lNewLocation, lStartLocation), 0, 0) + + " distance of fMaxDistance: " + FloatToString(fMaxDistance, 0, 0)); + ActionMoveToLocation(lNewLocation); +} +void ai_Actions() +{ + float fMaxDistance = GetLocalFloat(GetModule(), AI_RULE_WANDER_DISTANCE); + // Are we interacting? If so continue else see what else there is to do. + if(ai_ActionInteraction()) return; + // If we got here, we're not busy + ClearAllActions(); + // Check for chance to do an action to keep things interesting. + int nRoll = Random(100); + if(fMaxDistance < 2.0) + { + if(nRoll < 51) AnimActionPlayRandomAnimation(); + return; + } + int nRace = GetRacialType(OBJECT_SELF); + if(nRace != RACIAL_TYPE_ABERRATION && nRace != RACIAL_TYPE_ANIMAL && + nRace != RACIAL_TYPE_BEAST && nRace != RACIAL_TYPE_MAGICAL_BEAST && + nRace != RACIAL_TYPE_OOZE && nRace != RACIAL_TYPE_VERMIN) + { + if(nRoll < 5) if(ai_ActionSitInChair(fMaxDistance)) return; + // Open or close a door + if(nRoll < 20) if(ai_ActionCheckDoor(fMaxDistance)) return; + // Fiddle with a placeable + if(nRoll < 40) if(ai_ActionFindPlaceable(fMaxDistance)) return; + // Start talking to a friend + if(nRoll < 50) if(ai_ActionFindFriend(fMaxDistance)) return; + } + // Lets walk around. + if(nRoll < 80) + { + ai_ActionRandomWalk(fMaxDistance); + return; + } + // If we find nothing interesting to do then just stay put and look interesting. + AnimActionPlayRandomAnimation(); +} +int ai_CheckCurrentAction() +{ + int nAction = GetCurrentAction(); + if(nAction == ACTION_SIT) + { + // low prob of getting up, so we don't bop up and down constantly + if (Random(10) == 0) + { + AnimActionGetUpFromChair(); + return TRUE; + } + } + else if(nAction != ACTION_INVALID) + { + // Sometimes we cannot do an action so lets break out sometimes. + if((nAction == ACTION_CLOSEDOOR || + nAction == ACTION_OPENDOOR || + nAction == ACTION_MOVETOPOINT) && Random(100) < 20) return FALSE; + // we're doing *something*, don't switch + //AnimDebug("performing action"); + return TRUE; + } + return FALSE; +} +void ai_AmbientAnimations() +{ + if(!GetAnimationCondition(NW_ANIM_FLAG_INITIALIZED)) ai_ActionInitialization(); + // Check if we should turn off + if(!CheckIsAnimActive(OBJECT_SELF)) return; + // Check current actions so we don't interrupt something in progress + if(ai_CheckCurrentAction()) return; + // First check: go back to starting position and rest if we are hurt + //if(AnimActionRest()) return; + // If we get here then lets go see what we can do! + ai_Actions(); +} diff --git a/_module/nss/0i_associates.nss b/_module/nss/0i_associates.nss new file mode 100644 index 0000000..8bc1567 --- /dev/null +++ b/_module/nss/0i_associates.nss @@ -0,0 +1,2280 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0i_associates + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Scripts used for Associates. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +#include "nw_inc_gff" +// Return TRUE if oCreature can attack based on current modes and actions. +int ai_CanIAttack(object oCreature); +// Returns the nearest locked object from oMaster. +object ai_GetNearestLockedObject(object oCreature); +// Will look for the oTarget or go to the oSpeaker depending on the situation. +void ai_FindTheEnemy(object oCreature, object oSpeaker, object oTarget, int bMonster); +// Selects the correct response base on nCommand from oCommander. +// These are given from either a radial menu option or voice command. +void ai_SelectAssociateCommand(object oCreature, object oCommander, int nCommand); +// Set nAction for the caller to pass to their associates. i.e. For henchmans summons. +void ai_PassActionToAssociates(object oCreature, int nAction, int bStatus = TRUE); +// Set Set the AI Mode to oAssociate and their associates. +void ai_PassAIModeToAssociates(object oAssociate, int nAIMode, int bStatus = TRUE); +// Set oCreature's ai scripts based on its first class or the variable "AI_DEFAULT_SCRIPT". +// bSetBasicAIScript set to TRUE will skip defensive and ambush tactic type scripts. +void ai_SetAssociateAIScript(object oCreature, int bCheckTacticScripts = TRUE); +// Returns TRUE if oCreature can speak. +int ai_CanISpeak(object oCreature); +// Cleansup any henchman actions and then removes them from the PC's faction. +void ai_FireHenchman(object oPC, object oHenchman); +// Will cast defensive spells (Buffs) on oPC's party from oCreature. +void ai_HenchmanCastDefensiveSpells(object oCreature, object oPC); +// Returns TRUE if we are starting combat due to an enemy being near. +// This should be checked after any "is in combat" checks. +int ai_CheckForCombat(object oCreature, int bMonster); +// Checks all perceived creatures to see if we should calculate a combat round +// or start combat for Associates. +void ai_AssociateEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception); +// Checks all perceived creatures to see if we should calculate a combat round +// or start combat for Monsters. +void ai_MonsterEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception); +// Copies all int, float, and string variables from oOldObject to oNewObject. +void ai_CopyObjectVariables(object oOldObject, object oNewObject); +//****************************************************************************** +//********************* Creature event scripts ********************************* +//****************************************************************************** + +// Add to nw_ch_aca OnRested event script of henchman. +void ai_OnRested(object oCreature); + +//****************************************************************************** +//******************* Associate AI option scripts ****************************** +//****************************************************************************** + +// Increments/Decrements the following distance of associates. +void ai_FollowIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the delay when casting each auto buff spell. +void ai_DelaySpellSpeed(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Turns on/off Ranged combat for oAssociate. +void ai_Ranged(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Ignore enemy associates for oAssociate. +void ai_Ignore_Associates(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Ignore floor traps for oAssociate. +void ai_Ignore_Traps(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Search for oAssociate. +void ai_Search(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Stealth for oAssociate. +void ai_Stealth(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Open Doors for oAssociate. +void ai_OpenDoor(object oPC, object oAssociate, string sAssociateType); +// Turns on/off Picking/Bashing locks for oAssociate. +void ai_Locks(object oPC, object oAssociate, string sAssociateType, int nMode); +// Turns on/off Disarming of Traps for oAssociate. +void ai_Traps(object oPC, object oAssociate, string sAssociateType); +// Turns on/off the amount of speaking for oAssociate. +void ai_ReduceSpeech(object oPC, object oAssociate, string sAssociateType); +// Turns on/off use of offensive/defensive spells. +void ai_UseOffensiveMagic(object oPC, object oAssociate, int bDefensive, int bOffensive, string sAssociateType); +// Turns on/off magic use. +void ai_UseMagic(object oPC, object oAssociate, string sAssociateType); +// Turn Magic Item use on/off for oAssociates. +void ai_UseMagicItems(object oPC, object oAssociate, string sAssociateType); +// Adjusts loot options for oAssociate +void ai_Loot(object oPC, object oAssociate, string sAssociateType); +// Adjust loot options for oAssociate +void ai_Spontaneous(object oPC, object oAssociate, string sAssociateType); +// Increments/Decrements the magic use variable for the AI. +void ai_MagicIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType); +// Increments/Decrements the Loot Range use variable for the AI. +void ai_LootRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the Lock Range use variable for the AI. +void ai_LockRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the Trap Range use variable for the AI. +void ai_TrapRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Increments/Decrements the Open Door Range use variable for the AI. +void ai_OpenDoorIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType); +// Saves a new AI script for oAssociate. +void ai_SaveAIScript(object oPC, object oAssociate, int nToken); +// Button action for buffing a PC. +void ai_Buff_Button(object oPC, object oAssociate, int nOption, string sAssociateType); +// Button action for setting healing ranges. +void ai_Heal_Button(object oPC, object oAssociate, int nIncrement, string sVar, string sAssociateType); +// Button action for turning healing on/off. +void ai_Heal_OnOff(object oPC, object oAssociate, string sAssociateType, int nMode); +// Button action for selecting a target to follow. +void ai_FollowTarget(object oPC, object oAssociate); +// Code to make oCreature guard oMaster. +void ai_Philos_Guard(object oMaster, object oCreature); +// Code to make OBJECT_SELF follow oMaster. +void ai_Philos_Follow(object oMaster); +// Code to make OBJECT_SELF hold at their location. +void ai_Philos_StandGround(object oMaster); +// Code to make oCreature attack the nearest enemy. +void ai_Philos_AttackNearest(object oMaster, object oCreature); +// Code to make oCreature turn search mode on. +void ai_Philos_SetSearch(object oMaster, object oCreature, string sAssociateType, int bTurnOn); +// Code to make oCreature turn stealth mode on. +void ai_Philos_SetStealth(object oMaster, object oCreature, string sAssociateType, int bTurnOn); +// Button action for giving commands to associates. +void ai_DoCommand(object oPC, object oAssociate, int nCommand); +// Button action to have associate do an action based on the target via OnPlayer Target event. +void ai_Action(object oPC, object oAssociate, int bPCAI = FALSE); +// Toggles between normal ai script and special tactic ai scripts. +void ai_AIScript(object oPC, object oAssociate, string sAssociate, int nToken); +// Has the PC select a Trap and then place it on the ground from an associate. +void ai_HavePCPlaceTrap(object oPC, object oAssociate); +// Jumps oAssociate to oPC, if oPC == oAssociate it jumps all oAssocites to oPC. +void ai_JumpToPC(object oPC, object oAssociate); +// Allow oAssociate to use no clipping. +void ai_GhostMode(object oPC, object oAssociate, int nToken, string sAssociateType); +// Changes the camera view from either the player to the associate or back. +void ai_ChangeCameraView(object oPC, object oAssociate); +// Checks that the oAssociate is within sight and then opens the inventory. +void ai_OpenInventory(object oAssociate, object oPC); +// Executes an installed plugin. +void ai_Plugin_Execute(object oPC, string sElem, int bUser = 0); +// Turns on oAssociate AI, Setting all event scripts. +void ai_TurnOn(object oPC, object oAssociate, string sAssociateType); +// Turns off oAssociate AI, Setting all event scripts. +void ai_TurnOff(object oPC, object oAssociate, string sAssociateType); + +int ai_CanIAttack(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_associate", "122", "Can I attack? Hold mode: " + + IntToString(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) + + " Follow mode: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_FOLLOW)) + + " Action (19/4): " + IntToString(GetCurrentAction(oCreature))); + if(ai_GetIsCharacter(oCreature)) return TRUE; + int nAction = GetCurrentAction(oCreature); + return (!ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND) && + !ai_GetAIMode(oCreature, AI_MODE_FOLLOW) && + nAction != ACTION_ITEMCASTSPELL && + nAction != ACTION_CASTSPELL); +} +object ai_GetNearestLockedObject(object oCreature) +{ + int nCnt = 1; + object oMaster = GetMaster(oCreature); + float fRange = GetLocalFloat(oCreature, AI_TRAP_CHECK_RANGE); + location lCreature = GetLocation(oCreature); + object oObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, lCreature, nCnt); + while (oObject != OBJECT_INVALID || GetDistanceBetween(oMaster, oObject) > fRange) + { + if(GetLocked(oObject) && ai_GetIsInLineOfSight(oMaster, oObject)) return oObject; + oObject = GetNearestObjectToLocation(OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, lCreature, ++nCnt); + } + return OBJECT_INVALID; +} +void ai_FindTheEnemy(object oCreature, object oSpeaker, object oTarget, int bMonster) +{ + if(GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + if(oSpeaker == oTarget && d100() < 16) + { + // Let them know we heard something in the distance!. + if(!ai_GetAIMode(oCreature, AI_MODE_DO_NOT_SPEAK)) + { + string sSpeak = "I heard something!"; + int nRoll = d8(); + if(nRoll == 1) sSpeak = "Did you hear that?"; + if(nRoll == 2) sSpeak = "What was that noise?"; + if(nRoll == 3) sSpeak = "Something is moving."; + if(nRoll == 4) sSpeak = "Lookout! I heard a noise."; + if(nRoll == 5) sSpeak = "Listen! We have company."; + AssignCommand(oCreature, ai_HaveCreatureSpeak(oCreature, 0, sSpeak)); + } + ai_HaveCreatureSpeak(oCreature, 8, ":43:6:9:10:23:42:"); + } + if(GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_a_peaceful" || + GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_coward") return; + float fDistance, fPerceptionDistance; + if(bMonster) + { + // Check distance from the creature hearing this and the target. + fDistance = GetDistanceBetween(oCreature, oTarget); + fPerceptionDistance = GetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE); + } + else + { + // We want to use the distance between the PC and target not us. + fDistance = GetDistanceBetween(GetMaster(), oTarget); + fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + } + if(AI_DEBUG) ai_Debug("0i_associates", "175", " fDistance: " + FloatToString(fDistance, 0, 2) + + " fPerceptionDistance: " + FloatToString(fPerceptionDistance, 0, 2) + + " Hiding? " + IntToString(GetStealthMode(oTarget))); + if(fDistance <= fPerceptionDistance) + { + SetLocalInt(oCreature, AI_AM_I_SEARCHING, TRUE); + if(LineOfSightObject(oCreature, oTarget)) + { + if(fDistance > AI_RANGE_CLOSE) + { + int bMoveForward = TRUE; + // We check this because if the enemy is moving or has not + // started acting then we don't want to move up on them as they + // might move towards us! Just attack! Only sneak attack if they are busy. + int nAction = GetCurrentAction(oTarget); + if(AI_DEBUG) ai_Debug("0i_associates", "189", GetName(oTarget) + " current action: " + IntToString(nAction)); + if(nAction == ACTION_MOVETOPOINT || + nAction == ACTION_INVALID || + nAction == ACTION_RANDOMWALK) bMoveForward = FALSE; + // If they are attacking make sure it is in melee? + // If not then don't move since they might be moving toward us. + if(nAction == ACTION_ATTACKOBJECT) + { + if(!ai_GetNumOfEnemiesInRange(oTarget)) bMoveForward = FALSE; + } + if(bMoveForward) + { + if(AI_DEBUG) ai_Debug("0i_associates", "201", "Running towards combat to engage " + GetName(oTarget)); + ActionMoveToObject(oTarget, TRUE, AI_RANGE_CLOSE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + return; + } + if(AI_DEBUG) ai_Debug("0i_associates", "207", "Searching for " + GetName(oTarget) + " while moving towards " + GetName(oSpeaker)); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + ActionMoveToObject(oSpeaker); + return; + } + if(AI_DEBUG) ai_Debug("0i_associates", "176", "Moving and searching for " + GetName(oTarget)); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + ActionMoveToLocation(GetLocation(oTarget), FALSE); + //ActionMoveToObject(oTarget, FALSE, AI_RANGE_MELEE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + return; + } + if(AI_DEBUG) ai_Debug("0i_associates", "218", "No line of sight for " + GetName(oTarget) + ". Moving towards " + GetName(oSpeaker)); + ActionMoveToObject(oSpeaker, TRUE); + AssignCommand(oCreature, ActionDoCommand(DeleteLocalInt(oCreature, AI_AM_I_SEARCHING))); + } + +} +void ai_ReactToAssociate(object oCreature, object oCommander, int bMonster) +{ + object oTarget = GetLocalObject(oCommander, AI_MY_TARGET); + if (oTarget == OBJECT_INVALID) return; + if(ai_GetIsInCombat(oCreature)) + { + if(oCommander == GetMaster(oCreature) && ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) + { + ai_DoAssociateCombatRound(oCreature, oTarget); + } + else ai_DoAssociateCombatRound(oCreature); + return; + } + ai_FindTheEnemy(oCreature, oCommander, oTarget, bMonster); +} +void ai_SelectAssociateCommand(object oCreature, object oCommander, int nCommand) +{ + object oMaster = GetMaster(oCreature); + // These nCommands can be issued even when the caller is busy. + switch(nCommand) + { + // Master is being attacked by the enemy. + case ASSOCIATE_COMMAND_MASTERGOINGTOBEATTACKED: + { + object oAttacker = GetGoingToBeAttackedBy(oMaster); + if(AI_DEBUG) ai_Debug("0i_associate", "120", GetName(oMaster) + " has been attack by " + + GetName(GetGoingToBeAttackedBy(oMaster)) + "!"); + // Used to set who monsters are attacking. + int nAction = GetCurrentAction(oAttacker); + if(nAction == ACTION_ATTACKOBJECT) SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oMaster); + else if(nAction == ACTION_CASTSPELL || nAction == ACTION_ITEMCASTSPELL) + { + SetLocalObject(oAttacker, AI_ATTACKED_SPELL, oMaster); + } + if(!ai_GetIsBusy(oCreature) && ai_CanIAttack(oCreature)) + { + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound(oCreature); + else ai_FindTheEnemy(oCreature, oCommander, oAttacker, FALSE); + } + return; + } + // Menu used by a player to have the henchman follow them. + case ASSOCIATE_COMMAND_FOLLOWMASTER: + { + if(AI_DEBUG) ai_Debug("0i_associate", "135", GetName(oMaster) + " has commanded " + + GetName(oCreature) + " to FOLLOW."); + AssignCommand(oCreature, ai_Philos_Follow(oMaster)); + return; + } + // Menu used by a player to have the henchman go into NORMAL MODE. + // We also attack the nearest, this keeps henchman going into combat quickly. + case ASSOCIATE_COMMAND_ATTACKNEAREST: + { + if(AI_DEBUG) ai_Debug("0i_associates", "158", GetName(oMaster) + " has commanded " + + GetName(oCreature) + " to attack nearest(NORMAL MODE)."); + ai_Philos_AttackNearest(oMaster, oCreature); + return; + } + // Menu used by a player to have the henchman stay where they are standing. + case ASSOCIATE_COMMAND_STANDGROUND: + { + if(AI_DEBUG) ai_Debug("0i_associate", "189", GetName(oMaster) + " has commanded " + + GetName(OBJECT_SELF) + " to STANDGROUND."); + AssignCommand(oCreature, ai_Philos_StandGround(oMaster)); + return; + } + // Menu used by a player to have the henchman attack anyone who attacks them. + case ASSOCIATE_COMMAND_GUARDMASTER: + { + if(AI_DEBUG) ai_Debug("0i_associate", "211", GetName(oMaster) + " has commanded " + + GetName(oCreature) + " to GAURDMASTER."); + ai_Philos_Guard(oMaster, oCreature); + return; + } + // Menu used by a player to have the henchman heal them as soon as possible. + case ASSOCIATE_COMMAND_HEALMASTER: + { + // Player will be stuck with this variable if they are not using the AI. + DeleteLocalInt(oCommander, "AI_I_AM_BEING_HEALED"); + if(ai_GetIsInCombat(oCreature)) ai_TryHealingTalent(oCreature, ai_GetNumOfEnemiesInRange(oCreature), oCommander); + else AssignCommand(oCreature, ai_ActionTryHealing(oCreature, oCommander)); + return; + } + // Menu used by a player to toggle a henchmans casting options. + case ASSOCIATE_COMMAND_TOGGLECASTING: + { + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, TRUE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + ai_SendMessages(GetName(oCreature) + " will now cast defensive spells only.", AI_COLOR_GRAY, oCommander); + } + else if(ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, TRUE); + ai_SendMessages(GetName(oCreature) + " will now cast offensive spells only.", AI_COLOR_GRAY, oCommander); + } + else if(ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + ai_SendMessages(GetName(oCreature) + " will now cast any spell.", AI_COLOR_GRAY, oCommander); + } + else + { + ai_SetMagicMode(oCreature, AI_MAGIC_NO_MAGIC, TRUE); + ai_SetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + ai_SetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + ai_SendMessages(GetName(oCreature) + " will not use any magic.", AI_COLOR_GRAY, oCommander); + } + aiSaveAssociateModesToDb(oMaster, oCreature); + return; + } + } + // If we are busy then these nCommands are ignored. + if(!ai_GetIsBusy(oCreature)) + { + // Respond to shouts from friendly non-PCs only. + if (ai_CanIAttack(oCreature)) + { + if(nCommand == AI_ALLY_IS_WOUNDED) + { + if(ai_TryHealing(oCreature, oCommander)) return; + } + else if(nCommand == AI_ALLY_IS_DISEASED || + nCommand == AI_ALLY_IS_POISONED || + nCommand == AI_ALLY_IS_WEAK) + { + if(ai_HealSickness(oCreature, oCommander, oMaster, nCommand)) return; + } + // A friend sees an enemy. If we are not in combat lets seek them out too! + else if(nCommand == AI_ALLY_SEES_AN_ENEMY || + nCommand == AI_ALLY_HEARD_AN_ENEMY) + { + if(AI_DEBUG) ai_Debug("0i_associates", "282", GetName(oCreature) + " receives notice that " + + GetName(oCommander) + " has seen1/heard2(" + IntToString(nCommand) + " an enemy: " + + GetName(GetLocalObject(oCommander, AI_MY_TARGET)) + "!"); + ai_ReactToAssociate(oCreature, oCommander, FALSE); + return; + } + // A friend is in combat. Make some checks to see if we should help. + else if(nCommand == AI_ALLY_ATKED_BY_WEAPON || + nCommand == AI_ALLY_ATKED_BY_SPELL) + { + if(AI_DEBUG) ai_Debug("0i_associates", "291", GetName(oCreature) + " receives notice that " + + GetName(oCommander) + " was attacked by an enemy!" + + GetName(GetLocalObject(oCommander, AI_MY_TARGET)) + "!"); + ai_ReactToAssociate(oCreature, oCommander, FALSE); + return; + } + else if(nCommand == AI_ALLY_IS_DEAD) + { // Nothing at the moment. + if(AI_DEBUG) ai_Debug("0i_associates", "298", GetName(oCreature) + " receives notice that " + + GetName(oCommander) + " has died!"); + return; + } + } + switch(nCommand) + { + case ASSOCIATE_COMMAND_MASTERATTACKEDOTHER: + { + if(AI_DEBUG) ai_Debug("0i_associate", "307", GetName(oMaster) + " has attacked!"); + if(ai_CanIAttack(oCreature)) + { + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound(oCreature); + else ai_FindTheEnemy(oCreature, oCommander, ai_GetAttackedTarget(oCommander, TRUE, TRUE), FALSE); + } + return; + } + // Master tried to open a door or chest that is locked. + case ASSOCIATE_COMMAND_MASTERFAILEDLOCKPICK: + { + // In command mode we let the player tell us what to do. + if(ai_CanIAttack(oCreature)) + { + object oLock = ai_GetNearestLockedObject(oMaster); + //Check and see if our master want's us to open locks. + if(ai_GetAIMode(oCreature, AI_MODE_PICK_LOCKS) || + ai_GetAIMode(oCreature, AI_MODE_BASH_LOCKS)) + { + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_AttemptToByPassLock(oCreature, oLock); + } + } + return; + } + // Master saw a trap. + case ASSOCIATE_COMMAND_MASTERSAWTRAP: + { + // In command mode we let the player tell us what to do. + if(ai_CanIAttack(oCreature)) + { + object oTrap = GetLastTrapDetected(oMaster); + // Sometimes GetLastTrapDetected seems to fail. + if(oTrap == OBJECT_INVALID) oTrap = GetNearestTrapToObject(oMaster, TRUE); + //Check and see if our master want's us to disarm the trap. + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + SetTrapDetectedBy(oTrap, oCreature); + ai_ReactToTrap(oCreature, oTrap); + } + return; + } + // Menu used by a player to toggle henchmans search on and off. + case ASSOCIATE_COMMAND_TOGGLESEARCH: + { + int bTurnOn = !ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH); + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + ai_Philos_SetSearch(oMaster, oCreature, sAssociateType, bTurnOn); + return; + } + // Menu used by a player to toggle henchmans stealth on and off. + case ASSOCIATE_COMMAND_TOGGLESTEALTH: + { + int bTurnOn = !ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH); + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + ai_Philos_SetStealth(oMaster, oCreature, sAssociateType, bTurnOn); + return; + } + // Menu used by a player to have the henchman try to bypass the nearest lock. + case ASSOCIATE_COMMAND_PICKLOCK: + { + ai_SetAIMode(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_SetAIMode(oCreature, AI_MODE_FOLLOW, FALSE); + object oLock = ai_GetNearestLockedObject(oMaster); + // Clear locked variable incase we tried already. + string sID = ObjectToString(oCreature); + SetLocalInt(oLock, "AI_LOCKED_" + sID, FALSE); + ai_AttemptToByPassLock(oCreature, oLock); + aiSaveAssociateModesToDb(oMaster, oCreature); + return; + } + // Menu used by a player to have the henchman try to disarm the nearest trap. + case ASSOCIATE_COMMAND_DISARMTRAP: + { + ai_SetAIMode(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SetAIMode(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_SetAIMode(oCreature, AI_MODE_FOLLOW, FALSE); + object oTrap = GetNearestTrapToObject(oMaster); + // Clear trapped variable incase we tried already. + string sID = ObjectToString(oCreature); + ai_ReactToTrap(oCreature, oTrap, TRUE); + aiSaveAssociateModesToDb(oMaster, oCreature); + return; + } + // Menu used by a player to open a henchmans inventory to give, move, or take. + case ASSOCIATE_COMMAND_INVENTORY: + { + if(AI_OPEN_INVENTORY) + { + ai_HaveCreatureSpeak(oCreature, 4, ":29:46:35:"); + OpenInventory(oCreature, oCommander); + } + // Can't look at an associate's inventory. + else + { + ai_HaveCreatureSpeak(oCreature, 6, ":47:30:36:8:48:"); + ai_SendMessages("You cannot open " + GetName(oCreature) + "'s inventory.", AI_COLOR_GRAY, oMaster); + } + return; + } + case ASSOCIATE_COMMAND_LEAVEPARTY: + { + if(AI_REMOVE_HENCHMAN_ON) + { + ai_ClearCreatureActions(); + ai_FireHenchman (GetPCSpeaker(), oCreature); + PlayVoiceChat (VOICE_CHAT_GOODBYE, oCreature); + } + else if(AI_PATROL_AHEAD_RADIAL_OPTION) + { + if(ai_GetAIMode(oCreature, AI_MODE_SCOUT_AHEAD)) + { + ai_ClearCreatureActions(); + ai_HaveCreatureSpeak(oCreature, 6, ":29:35:46:10"); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_SendMessages(GetName(oCreature) + " has stopped patrolling ahead.", AI_COLOR_YELLOW, oMaster); + } + else + { + ai_ClearCreatureActions(); + ai_HaveCreatureSpeak(oCreature, 6, ":29:35:46:22:"); + ai_SetAIMode(oCreature, AI_MODE_SCOUT_AHEAD, TRUE); + ai_SendMessages(GetName(oCreature) + " is now patrolling ahead.", AI_COLOR_YELLOW, oMaster); + ai_ScoutAhead(oCreature); + } + } + } + } + } +} +void ai_PassActionToAssociates(object oCreature, int nAction, int bStatus = TRUE) +{ + int nAssociateType; + object oAssociate; + for(nAssociateType = 2; nAssociateType < 6; nAssociateType ++) + { + oAssociate = GetAssociate(nAssociateType); + if(oAssociate != OBJECT_INVALID) SetActionMode(oAssociate, nAction, bStatus); + } +} +void ai_PassToAssociate(object oAssociate, int nAIMode, int bStatus) +{ + ai_ClearCreatureActions(TRUE); + ai_SetAIMode(oAssociate, nAIMode, bStatus); +} +void ai_PassAIModeToAssociates(object oAssociate, int nAIMode, int bStatus = TRUE) +{ + ai_SetAIMode(oAssociate, nAIMode, bStatus); + int nAssociateType; + object oAssoc; + for(nAssociateType = 2; nAssociateType < 6; nAssociateType ++) + { + oAssoc = GetAssociate(nAssociateType, oAssociate); + if(oAssoc != OBJECT_INVALID) AssignCommand(oAssoc, ai_PassToAssociate(oAssoc, nAIMode, bStatus)); + } +} +void ai_SetAssociateAIScript(object oCreature, int bCheckTacticScripts = TRUE) +{ + string sCombatAI; + object oMaster = GetMaster(); + if(ai_GetIsCharacter(oMaster)) + { + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + json jAIData = ai_GetAssociateDbJson(oMaster, sAssociateType, "aidata"); + sCombatAI = JsonGetString(JsonArrayGet(jAIData, 8)); + } + else sCombatAI = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + int nAssociateType = GetAssociateType(oCreature); + if (nAssociateType == ASSOCIATE_TYPE_FAMILIAR && sCombatAI == "") + { + sCombatAI = "ai_a_default"; + } + else if(sCombatAI == "ai_coward") + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sCombatAI); + return; + } + else if(bCheckTacticScripts && GetLocalInt(GetModule(), AI_RULE_AMBUSH)) + { + // They should have a skill ranks equal to their level + 1 to use a special AI. + int nSkillNeeded = GetHitDice(oCreature) + 1; + if(sCombatAI == "" || sCombatAI == "ai_a_ambusher") + { + // Ambusher: requires either Improved Invisibility or Invisibility. + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature) || + GetHasSpell(SPELL_INVISIBILITY, oCreature)) + { + int bCast = ai_TryToCastSpell(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature); + if(!bCast) bCast = ai_TryToCastSpell(oCreature, SPELL_INVISIBILITY, oCreature); + if(bCast) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_a_ambusher"); + return; + } + } + // Ambusher: Requires a Hide and Move silently skill equal to your level + 1. + else if(GetSkillRank(SKILL_HIDE, oCreature) >= nSkillNeeded && + GetSkillRank(SKILL_MOVE_SILENTLY, oCreature) >= nSkillNeeded) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_a_ambusher"); + return; + } + } + // Defensive : requires Parry skill equal to your level or Expertise. + else if(sCombatAI == "ai_a_defensive" || + (sCombatAI == "" && + (GetSkillRank(SKILL_PARRY, oCreature) >= nSkillNeeded || + GetHasFeat(FEAT_EXPERTISE, oCreature) || + GetHasFeat(FEAT_IMPROVED_EXPERTISE, oCreature)))) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_a_defensive"); + return; + } + else if(sCombatAI == "ai_cntrspell" || GetHasSpell(SPELL_LESSER_DISPEL, oCreature) || + GetHasSpell(SPELL_DISPEL_MAGIC, oCreature) || GetHasSpell(SPELL_GREATER_DISPELLING, oCreature)) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_cntrspell"); + return; + } + } + if(sCombatAI == "") + { + // Select the best ai for this henchmen based on class. + int nClass = GetClassByPosition(1, oCreature); + // If they have more than one class use the default ai. + if(GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID) sCombatAI = "ai_a_default"; + else if(nClass == CLASS_TYPE_BARBARIAN) sCombatAI = "ai_a_barbarian"; + else if(nClass == CLASS_TYPE_BARD) sCombatAI = "ai_a_bard"; + else if(nClass == CLASS_TYPE_CLERIC) sCombatAI = "ai_a_cleric"; + else if(nClass == CLASS_TYPE_DRUID) sCombatAI = "ai_a_druid"; + else if(nClass == CLASS_TYPE_FIGHTER) sCombatAI = "ai_a_fighter"; + else if(nClass == CLASS_TYPE_MONK) sCombatAI = "ai_a_monk"; + else if(nClass == CLASS_TYPE_PALADIN) sCombatAI = "ai_a_paladin"; + else if(nClass == CLASS_TYPE_RANGER) sCombatAI = "ai_a_ranger"; + else if(nClass == CLASS_TYPE_ROGUE) sCombatAI = "ai_a_rogue"; + else if(nClass == CLASS_TYPE_SORCERER) sCombatAI = "ai_a_sorcerer"; + else if(nClass == CLASS_TYPE_WIZARD) sCombatAI = "ai_a_wizard"; + //else if(nClass == CLASS_TYPE_ABERRATION) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_ANIMAL) sCombatAI = "ai_a_animal"; + //else if(nClass == CLASS_TYPE_CONSTRUCT) sCombatAI = "ai_a_animal"; + //else if(nClass == CLASS_TYPE_DRAGON) sCombatAI = "ai_a_dragon"; + //else if(nClass == CLASS_TYPE_ELEMENTAL) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_FEY) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_GIANT) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_HUMANOID) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_MAGICAL_BEAST) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_MONSTROUS) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_OOZE) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_OUTSIDER) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_UNDEAD) sCombatAI = "ai_a_default"; + //else if(nClass == CLASS_TYPE_VERMIN) sCombatAI = "ai_a_animal"; + else sCombatAI = "ai_a_default"; + } + if(AI_DEBUG) ai_Debug("0i_associates", "530", GetName(oCreature) + " is setting AI to " + sCombatAI); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sCombatAI); + SetLocalString(oCreature, AI_DEFAULT_SCRIPT, sCombatAI); +} +int ai_CanISpeak (object oCreature) +{ + int nRace = GetRacialType (oCreature); + if (nRace == RACIAL_TYPE_ANIMAL || nRace == RACIAL_TYPE_BEAST || + nRace == RACIAL_TYPE_CONSTRUCT || nRace == RACIAL_TYPE_OOZE) return FALSE; + return (GetAbilityScore (oCreature, ABILITY_INTELLIGENCE) > 7); +} +void ai_FireHenchman(object oPC, object oHenchman) +{ + if(oPC == OBJECT_INVALID || oHenchman == OBJECT_INVALID) return; + // Now double-check that this is actually our master + if(GetMaster(oHenchman) != oPC) return; + // Turn off stealth mode + SetActionMode(oHenchman, ACTION_MODE_STEALTH, FALSE); + // Remove the henchman + RemoveHenchman (oPC, oHenchman); + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); +} +void ai_HenchmanCastDefensiveSpells (object oCreature, object oPC) +{ + ai_CastBuffs(oCreature, 3, 0, oPC); +} +int ai_CheckForCombat(object oCreature, int bMonster) +{ + object oEnemy = ai_GetNearestEnemy(oCreature, 1, 7, 7, 7, 5, TRUE); + //object oEnemy = ai_GetNearestEnemy(oCreature, 1, -1, -1, -1, -1, TRUE); + if(AI_DEBUG) ai_Debug("0i_associate", "586", "Checking for Combat: oEnemy is " + GetName(oEnemy) + + " Distance: " + FloatToString(GetDistanceBetween(oEnemy, oCreature), 0, 2)); + if(oEnemy != OBJECT_INVALID) + { + float fPerceptionDistance, fDistance; + if(bMonster) + { + fDistance = GetDistanceBetween(oCreature, oEnemy); + fPerceptionDistance = GetLocalFloat(GetModule(), AI_RULE_PERCEPTION_DISTANCE); + } + else + { + // We want to use the distance between the PC and target not us. + object oMaster = GetMaster(); + if(oMaster != OBJECT_INVALID) fDistance = GetDistanceBetween(oMaster, oEnemy); + else fDistance = GetDistanceBetween(oCreature, oEnemy); + fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fPerceptionDistance == 0.0) fPerceptionDistance = 20.0; + } + if(fDistance < fPerceptionDistance) + { + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + SetLocalObject (oCreature, AI_MY_TARGET, oEnemy); + SpeakString(AI_I_SEE_AN_ENEMY, TALKVOLUME_SILENT_TALK); + if(bMonster) ai_StartMonsterCombat(oCreature); + else if(ai_CanIAttack(oCreature)) ai_StartAssociateCombat(oCreature); + return TRUE; + } + } + return FALSE; +} +void ai_AssociateEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception) +{ + if(!ai_CanIAttack(oCreature)) return; + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "775", "Our current action: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("0i_associate", "761", "Doing a special action (nCombatWait): " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We need to reevaluate combat during these actions when we see a new enemy. + //case ACTION_ATTACKOBJECT : + //case ACTION_MOVETOPOINT : + } + if(ai_GetIsInCombat(oCreature)) + { + object oTarget = ai_GetAttackedTarget(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "775", "Should we recalculate our combat round? oTarget: " + GetName(oTarget) + + " oTarget Distance: " + FloatToString(GetDistanceBetween(oCreature, oTarget), 0, 2) + + " oLastPerceived Distance: " + FloatToString(GetDistanceBetween(oCreature, oLastPerceived), 0, 2)); + // If the LastPerceived is our target then don't recalculate. + if(oTarget == oLastPerceived) return; + // If we don't have a target or the lastperceived is closer than our + // target then recalculate. + if(oTarget == OBJECT_INVALID || + GetDistanceBetween(oCreature, oTarget) > GetDistanceBetween(oCreature, oLastPerceived)) + { + // We should clear any skill cooldowns that are at at max since that means they were skipped. + if(GetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN") == AI_EMPATHY_COOLDOWN) + { DeleteLocalInt(oCreature, "AI_EMPATHY_COOLDOWN"); } + else if (GetLocalInt(oCreature, "AI_TAUNT_COOLDOWN") == AI_TAUNT_COOLDOWN) + { DeleteLocalInt(oCreature, "AI_EMPATHY_COOLDOWN"); } + ai_DoAssociateCombatRound(oCreature); + return; + } + // Lets only reevaluate combat if the new enemy is more powerful + // than the average enemies we already know about. + int nPower = ai_GetCharacterLevels(oLastPerceived) / 2; + int nEnemyPower = GetLocalInt(oCreature, AI_ENEMY_POWER) / (GetLocalInt(oCreature, AI_ENEMY_NUMBERS) + 1); + if(AI_DEBUG) ai_Debug("0i_associates", "797", " Is the new opponent more powerful? " + + GetName(oLastPerceived) + " nPower: " + IntToString(nPower) + + " nEnemyPower: " + IntToString(nEnemyPower)); + if(nEnemyPower < nPower) ai_DoAssociateCombatRound(oCreature); + return; + } + // Heard fires first, but Heard and Seen are both set at the same time. + // So lets skip the hearing code if they are also seen. + if(sPerception == AI_I_SEE_AN_ENEMY || GetObjectSeen(oLastPerceived, oCreature)) + { + // We are not in combat and we see the enemy so alert our allies! + ai_HaveCreatureSpeak(oCreature, 10, ":0:1:2:3:6:"); + SetLocalObject (oCreature, AI_MY_TARGET, oLastPerceived); + SpeakString(sPerception, TALKVOLUME_SILENT_TALK); + ai_StartAssociateCombat(oCreature); + } + else ai_FindTheEnemy(oCreature, oLastPerceived, oLastPerceived, FALSE); +} +void ai_MonsterEvaluateNewThreat(object oCreature, object oLastPerceived, string sPerception) +{ + if(!ai_CanIAttack(oCreature)) return; + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "672", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("0i_associates", "683", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We need to reevaluate combat during these actions when we see a new enemy. + //case ACTION_ATTACKOBJECT : + //case ACTION_MOVETOPOINT : + } + if(ai_GetIsInCombat(oCreature)) + { + object oTarget = ai_GetAttackedTarget(oCreature); + if(AI_DEBUG) ai_Debug("0i_associates", "697", "oTarget: " + GetName(oTarget) + + " oTarget Distance: " + FloatToString(GetDistanceBetween(oCreature, oTarget), 0, 2) + + " oLastPerceived Distance: " + FloatToString(GetDistanceBetween(oCreature, oLastPerceived), 0, 2)); + // If the LastPerceived is our target then don't recalculate. + if(oTarget == oLastPerceived) return; + // If we don't have a target or the lastperceived is closer than our + // target then recalculate. + if(oTarget == OBJECT_INVALID || + GetDistanceBetween(oCreature, oTarget) > GetDistanceBetween(oCreature, oLastPerceived)) + { + ai_DoMonsterCombatRound(oCreature); + return; + } + // Now only reevaluate combat if the new enemy is more powerful + // than the average enemies we already know about. + int nPower = ai_GetCharacterLevels(oLastPerceived) / 2; + int nEnemyPower = GetLocalInt(oCreature, AI_ENEMY_POWER) / (GetLocalInt(oCreature, AI_ENEMY_NUMBERS) + 1); + if(AI_DEBUG) ai_Debug("0i_associates", "714", GetName(oLastPerceived) + " nPower: " + IntToString(nPower) + + " nEnemyPower: " + IntToString(nEnemyPower)); + if(nEnemyPower < nPower) ai_DoMonsterCombatRound(oCreature); + return; + } + if(sPerception == AI_I_SEE_AN_ENEMY) + { + if(d100() < 34) + { + // We are not in combat so alert our allies! + ai_HaveCreatureSpeak(oCreature, 10, ":0:1:2:3:6:"); + } + SetLocalObject(oCreature, AI_MY_TARGET, oLastPerceived); + SpeakString(AI_I_SEE_AN_ENEMY, TALKVOLUME_SILENT_TALK); + ai_StartMonsterCombat(oCreature); + } + else ai_FindTheEnemy(oCreature, oLastPerceived, oLastPerceived, TRUE); +} +void ai_CopyObjectVariables(object oOldObject, object oNewObject) +{ + json jObject = ObjectToJson(oOldObject, TRUE); + json jVarTable = GffGetList(jObject, "VarTable"); + string sVariable, sName; + int nIndex, nVarType; + json jVar = JsonArrayGet(jVarTable, nIndex); + while(JsonGetType(jVar) != JSON_TYPE_NULL) + { + sName = JsonGetString(GffGetString(jVar, "Name")); + nVarType = JsonGetInt(GffGetDword(jVar, "Type")); + if(nVarType == 1) SetLocalInt(oNewObject, sName, JsonGetInt(GffGetInt(jVar, "Value"))); + else if(nVarType == 2) SetLocalFloat(oNewObject, sName, JsonGetFloat(GffGetFloat(jVar, "Value"))); + else if(nVarType == 3) SetLocalString(oNewObject, sName, JsonGetString(GffGetString(jVar, "Value"))); + jVar = JsonArrayGet(jVarTable, ++nIndex); + } +} +//****************************************************************************** +//********************* Creature event scripts ********************************* +//****************************************************************************** + +void ai_OnRested(object oCreature) +{ + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_AFTER_REST)) + { + int nLevel = ai_GetCharacterLevels(oCreature); + float fDelay = StringToFloat(Get2DAString("restduration", "DURATION", nLevel)); + fDelay = (fDelay / 1000.0f) + 2.0f; + DelayCommand(fDelay, ai_HenchmanCastDefensiveSpells(oCreature, GetMaster())); + } +} + +//****************************************************************************** +//******************* Associate AI option scripts ****************************** +//****************************************************************************** +void ai_UpdateToolTipUI(object oPC, string sWindowID1, string sWindowID2, string sToolTipBind, string sText) +{ + int nMenuToken = NuiFindWindow(oPC, sWindowID1); + if(nMenuToken) NuiSetBind (oPC, nMenuToken, sToolTipBind, JsonString (sText)); + if(sWindowID2 != "") + { + int nWidgetToken = NuiFindWindow(oPC, sWindowID2); + if(nWidgetToken) NuiSetBind (oPC, nWidgetToken, sToolTipBind, JsonString (sText)); + } +} +void ai_FollowIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + fIncrement; + if(fAdjustment > 10.0) fAdjustment = 10.0; + else if(fAdjustment < 1.0) fAdjustment = 1.0; + SetLocalFloat(oAssociate, AI_FOLLOW_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 6, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sName; + object oTarget = GetLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(oTarget != OBJECT_INVALID) sTarget = GetName(oTarget); + else + { + if(ai_GetIsCharacter(oAssociate)) sTarget = "nobody"; + else sTarget = GetName(oPC); + } + float fRange = fAdjustment + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(oPC == oAssociate) + { + sName = " All associates"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_follow_tooltip", sName + " enter follow mode "); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]"); + } + else + { + sName = " " + GetName(oAssociate); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_follow_tooltip", sName + " enter follow mode [" + sRange + " meters]"); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]"); + } +} +void ai_DelaySpellSpeed(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING) + fIncrement; + if(fAdjustment > 6.0) fAdjustment = 6.0; + else if(fAdjustment < 0.1) fAdjustment = 0.1; + SetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 11, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sDelay = FloatToString(fAdjustment, 0, 1); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, + "btn_buff_long_tooltip", " Buff the party with long duration spells. Cast speed [" + sDelay + "]"); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, + "btn_buff_short_tooltip", " Buff the party with short duration spells. Cast speed [" + sDelay + "]"); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, + "btn_buff_all_tooltip", " Buff the party with all spells. Cast speed [" + sDelay + "]"); +} +void ai_Ranged(object oPC, object oAssociate, string sAssociateType) +{ + //ai_ClearCreatureActions(); + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) + { + ai_SendMessages(GetName(oAssociate) + " is using ranged combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ranged_tooltip", " Ranged On"); + ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, FALSE); + ai_EquipBestRangedWeapon(oAssociate); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is using melee combat only.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ranged_tooltip", " Ranged Off"); + ai_SetAIMode(oAssociate, AI_MODE_STOP_RANGED, TRUE); + ai_EquipBestMeleeWeapon(oAssociate); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_EquipWeapons(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF)) + { + ai_SendMessages(GetName(oAssociate) + " will be equiping their best weapons.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_equip_weapon_tooltip", " Equiping Best Weapons On"); + ai_SetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will not equip their best weapons.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_equip_weapon_tooltip", " Equiping Best Weapons Off"); + ai_SetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Search(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) + { + ai_SendMessages(GetName(oAssociate) + " is turning search off.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode Off"); + SetActionMode(oAssociate, ACTION_MODE_DETECT, FALSE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is turning search on.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode On"); + SetActionMode(oAssociate, ACTION_MODE_DETECT, TRUE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Stealth(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) + { + ai_SendMessages(GetName(oAssociate) + " is turning stealth off.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode Off"); + SetActionMode(oAssociate, ACTION_MODE_STEALTH, FALSE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is turning stealth on.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode On"); + SetActionMode(oAssociate, ACTION_MODE_STEALTH, TRUE); + ai_SetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_OpenDoor(object oPC, object oAssociate, string sAssociateType) +{ + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE), 0, 0); + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) + { + ai_SendMessages(GetName(oAssociate) + " is turning open doors off.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_open_door_tooltip", " Open Doors Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_OPEN_DOORS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is turning open doors on.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_open_door_tooltip", " Open Doors On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_OPEN_DOORS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Locks(object oPC, object oAssociate, string sAssociateType, int nMode) +{ + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + if(nMode == 1) + { + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop picking locks.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_pick_locks_tooltip", " Pick Locks Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_PICK_LOCKS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now pick locks.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_pick_locks_tooltip", " Pick Locks On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_PICK_LOCKS, TRUE); + } + } + else if(nMode == 2) + { + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop bashing.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_bash_locks_tooltip", " Bash Locks Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_BASH_LOCKS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now bash things.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_bash_locks_tooltip", " Bash Locks On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_BASH_LOCKS, TRUE); + } + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Traps(object oPC, object oAssociate, string sAssociateType) +{ + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE), 0, 0); + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop disarming traps.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_traps_tooltip", " Disable Traps Off [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_DISARM_TRAPS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now disarm traps.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_traps_tooltip", " Disable Traps On [" + sRange + " meters]"); + ai_SetAIMode(oAssociate, AI_MODE_DISARM_TRAPS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_ReduceSpeech(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) + { + ai_SendMessages(GetName(oAssociate) + " will increase speech.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_quiet_tooltip", " Reduced Speech Off"); + ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will reduce speech.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_quiet_tooltip", " Reduced Speech On"); + ai_SetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_UseOffensiveMagic(object oPC, object oAssociate, int bDefensive, int bOffensive, string sAssociateType) +{ + if(bOffensive) + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) + { + ai_SendMessages(GetName(oAssociate) + " has stopped using offensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_off_magic_tooltip", " Offensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is now using offensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_off_magic_tooltip", " Offensive Magic On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING, TRUE); + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_def_magic_tooltip", " Defensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + } + else if(bDefensive) + { + if(ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) + { + ai_SendMessages(GetName(oAssociate) + " has stopped using defensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_def_magic_tooltip", " Defensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " is now using defensive magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_def_magic_tooltip", " Defensive Magic On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING, TRUE); + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_off_magic_tooltip", " Offensive Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING, FALSE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_UseMagic(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC)) + { + ai_SendMessages(GetName(oAssociate) + " is now using magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_tooltip", " Magic On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " has stopped using magic in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_tooltip", " Magic Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_UseMagicItems(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) + { + ai_SendMessages(GetName(oAssociate) + " is now using magic items in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_items_tooltip", " Magic Items On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " has stopped using magic items in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_items_tooltip", " Magic Items Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Loot(object oPC, object oAssociate, string sAssociateType) +{ + int bLooting = !ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS); + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE), 0, 0); + string sMessage, sText; + if(bLooting) + { + sMessage = " is picking up items."; + sText = " Looting On [" + sRange + " meters]"; + } + else + { + sMessage = " is not picking up items."; + sText = " Looting Off [" + sRange + " meters]"; + } + ai_SendMessages(GetName(oAssociate) + sMessage, AI_COLOR_YELLOW, oPC); + ai_SetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS, bLooting); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_loot_tooltip", sText); + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Spontaneous(object oPC, object oAssociate, string sAssociateType) +{ + int bSpontaneous = !ai_GetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE); + string sMessage, sText; + + if(bSpontaneous) + { + sMessage = " has stop casting spontaneous healing spells."; + sText = " Spontaneous casting Off"; + } + else + { + sMessage = " will now cast spontaneous healing spells."; + sText = " Spontaneous casting On"; + } + ai_SendMessages(GetName(oAssociate) + sMessage, AI_COLOR_YELLOW, oPC); + ai_SetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE, bSpontaneous); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_spontaneous_tooltip", sText); + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_MagicIncrement(object oPC, object oAssociate, int nIncrement, string sAssociateType) +{ + int nAdjustment = GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT) + nIncrement; + if(nAdjustment > 100) nAdjustment = 100; + else if(nAdjustment < -100) nAdjustment = -100; + SetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT, nAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 0, JsonInt(nAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sMagic = IntToString(nAdjustment); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_magic_level_tooltip", " Magic Level [" + sMagic + "]"); +} +void ai_LootRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 3, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sLoot = " Looting Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sLoot = " Looting On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_loot_tooltip", sLoot); +} +void ai_LockRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 4, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sPick = " Pick Locks Off [" + sRange + " meters]"; + string sBash = " Bash Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) sPick = " Pick Locks On [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) sBash = " Bash On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_pick_locks_tooltip", sPick); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_bash_locks_tooltip", sBash); +} +void ai_TrapRangeIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 5, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sText = " Disable Traps Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) sText = " Disable Traps On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_traps_tooltip", sText); +} +void ai_OpenDoorIncrement(object oPC, object oAssociate, float fIncrement, string sAssociateType) +{ + float fAdjustment = GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE) + fIncrement; + if(fAdjustment > 40.0) fAdjustment = 40.0; + else if(fAdjustment < 0.0) fAdjustment = 0.0; + SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, fAdjustment); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jAIData = JsonArraySet(jAIData, 9, JsonFloat(fAdjustment)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + string sRange = FloatToString(fAdjustment, 0, 0); + string sText = " Open Doors Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) sText = " Open Doors On [" + sRange + " meters]"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_open_door_tooltip", sText); +} +void ai_SaveAIScript(object oPC, object oAssociate, int nToken) +{ + string sScript = JsonGetString(NuiGetBind(oPC, nToken, "txt_ai_script")); + string sOldScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(GetStringLeft(sScript, 5) != "ai_a_") ai_SendMessages(sScript + " does not have correct prefix it must have ai_a_ for associates! Did not change AI script.", AI_COLOR_RED, oPC); + else if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + ai_SendMessages(sScript + " not found by ResMan! This is not a valid AI script.", AI_COLOR_RED, oPC); + } + else if(sScript != sOldScript) + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 8)) == JSON_TYPE_NULL) jAIData = JsonArrayInsert(jAIData, JsonString(sScript)); + else jAIData = JsonArraySet(jAIData, 8, JsonString(sScript)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + ai_SendMessages(GetName(oAssociate) + " is now using " + sScript + " AI script!", AI_COLOR_GREEN, oPC); + } + else ai_SendMessages(GetName(oAssociate) + " is already using this script! Did not change AI script.", AI_COLOR_RED, oPC); +} +void ai_Buff_Button(object oPC, object oAssociate, int nOption, string sAssociateType) +{ + if(nOption == 0) + { + int bRestBuff = !ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST); + ai_SetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST, bRestBuff); + if(bRestBuff) + { + ai_SendMessages(GetName(oAssociate) + " will cast long buffs after resting.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_buff_rest_tooltip", " [On] Turn buffing after resting off."); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will not cast long buffs after resting.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_buff_rest_tooltip", " [Off] Turn buffing after resting on."); + } + aiSaveAssociateModesToDb(oPC, oAssociate); + } + else + { + if(!GetIsPossessedFamiliar(oAssociate)) + { + object oEnemy = GetNearestEnemy(oAssociate); + //ai_Debug("0e_nui", "865", "oEnemy: " + GetName(oEnemy) + " fDistance: " + + // FloatToString(GetDistanceBetween(oAssociate, oEnemy), 0, 2)); + if(GetDistanceBetween(oAssociate, oEnemy) > 30.0 || + oEnemy == OBJECT_INVALID) + { + ai_CastBuffs(oAssociate, nOption, 0, oPC); + } + else ai_SendMessages("You cannot buff while there are enemies nearby.", AI_COLOR_RED, oPC); + } + else ai_SendMessages("You cannot buff while possessing your familiar.", AI_COLOR_RED, oPC); + } +} +void ai_Heal_Button(object oPC, object oAssociate, int nIncrement, string sVar, string sAssociateType) +{ + int nHeal = GetLocalInt(oAssociate, sVar); + if(nIncrement > 0 && nHeal > 100 - nIncrement) nHeal = 100 - nIncrement; + if(nIncrement < 0 && nHeal < abs(nIncrement)) nHeal = abs(nIncrement); + nHeal += nIncrement; + SetLocalInt(oAssociate, sVar, nHeal); + string sHeal = IntToString(nHeal); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(sVar == AI_HEAL_OUT_OF_COMBAT_LIMIT) + { + string sText = " Will heal at or below [" + sHeal + "%] health out of combat"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_heal_out_tooltip", sText); + jAIData = JsonArraySet(jAIData, 1, JsonInt(nHeal)); + } + else if(sVar == AI_HEAL_IN_COMBAT_LIMIT) + { + string sText = " Will heal at or below [" + sHeal + "%] health in combat"; + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_heal_in_tooltip", sText); + jAIData = JsonArraySet(jAIData, 2, JsonInt(nHeal)); + } + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); +} +void ai_Heal_OnOff(object oPC, object oAssociate, string sAssociateType, int nMode) +{ + string sText, sText2; + if(nMode == 1) + { + if(ai_GetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF)) + { + ai_SetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF, FALSE); + sText = " Self healing On"; + sText2 = " will now use healing on themselves."; + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF, TRUE); + sText = " Self healing Off"; + sText2 = " will stop using healing on themselves."; + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_heals_onoff_tooltip", sText); + } + else + { + if(ai_GetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF)) + { + ai_SetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF, FALSE); + sText = " Party healing On"; + sText2 = " will now use healing on party members."; + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF, TRUE); + sText = " Party healing Off"; + sText2 = " will stop using healing on party members."; + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_healp_onoff_tooltip", sText); + } + ai_SendMessages(GetName(oAssociate) + sText2, AI_COLOR_YELLOW, oPC); + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Cure_OnOff(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF)) + { + ai_SendMessages(GetName(oAssociate) + " will now cast cure spells.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cure_onoff_tooltip", " Cast Cure Spells On"); + ai_SetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will stop casting cure spells.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cure_onoff_tooltip", " Cast Cure Spells Off"); + ai_SetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Ignore_Associates(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) + { + ai_SendMessages(GetName(oAssociate) + " will stop ignoring henchman's associates and enemy associates.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_assoc_tooltip", " Ignore Enemy Associates Off"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now ignore henchman's associates and enemy associates.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_assoc_tooltip", " Ignore Enemy Associates On"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_Ignore_Traps(object oPC, object oAssociate, string sAssociateType) +{ + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS)) + { + ai_SendMessages(GetName(oAssociate) + " will stop ignoring traps on the floor and will stop moving when one is seen.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_traps_tooltip", " Ignore Floor Traps Off"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS, FALSE); + } + else + { + ai_SendMessages(GetName(oAssociate) + " will now ignore traps on the floor and will continue with their actions.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ignore_traps_tooltip", " Ignore Floor Traps On"); + ai_SetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS, TRUE); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_FollowTarget(object oPC, object oAssociate) +{ + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_FOLLOW_TARGET"); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_Original_Guard() +{ + ResetHenchmenState(); + //Companions will only attack the Masters Last Attacker + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + object oMaster = GetMaster(); + object oLastAttacker = GetLastHostileActor(oMaster); + // * for some reason this is too often invalid. still the routine + // * works corrrectly + SetLocalInt(OBJECT_SELF, "X0_BATTLEJOINEDMASTER", TRUE); + HenchmenCombatRound(oLastAttacker); + ai_SendMessages(GetName(OBJECT_SELF) + " is now guarding you!", AI_COLOR_YELLOW, oMaster); +} +void ai_Original_Follow() +{ + ResetHenchmenState(); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + DelayCommand(2.5, VoiceCanDo()); + object oMaster = GetMaster(); + ActionForceFollowObject(oMaster, GetFollowDistance()); + SetAssociateState(NW_ASC_IS_BUSY); + DelayCommand(5.0, SetAssociateState(NW_ASC_IS_BUSY, FALSE)); + ai_SendMessages(GetName(OBJECT_SELF) + " is now following You!", AI_COLOR_YELLOW, oMaster); +} +void ai_Original_StandGround() +{ + SetAssociateState(NW_ASC_MODE_STAND_GROUND); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + DelayCommand(2.0, VoiceCanDo()); + ActionAttack(OBJECT_INVALID); + ClearActions(CLEAR_X0_INC_HENAI_RespondToShout1); + ai_SendMessages(GetName(OBJECT_SELF) + " is now standing their ground!", AI_COLOR_YELLOW, GetMaster()); +} +void ai_Original_AttackNearest() +{ + ResetHenchmenState(); + SetAssociateState(NW_ASC_MODE_DEFEND_MASTER, FALSE); + SetAssociateState(NW_ASC_MODE_STAND_GROUND, FALSE); + DetermineCombatRound(); + // * bonus feature. If master is attacking a door or container, issues VWE Attack Nearest + // * will make henchman join in on the fun + object oMaster = GetMaster(); + object oTarget = GetAttackTarget(oMaster); + if (GetIsObjectValid(oTarget) == TRUE) + { + if (GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE || GetObjectType(oTarget) == OBJECT_TYPE_DOOR) + { + ActionAttack(oTarget); + } + } + ai_SendMessages(GetName(OBJECT_SELF) + " is now in normal mode!", AI_COLOR_YELLOW, oMaster); +} +void ai_Original_SetSearch(object oAssociate, int bTurnOn) +{ + if(GetRacialType(oAssociate) != RACIAL_TYPE_ELF) SetActionMode(oAssociate, ACTION_MODE_DETECT, bTurnOn); +} +void ai_Original_SetStealth(object oAssociate, int bTurnOn) +{ + SetActionMode(oAssociate, ACTION_MODE_STEALTH, bTurnOn); +} +void ai_Philos_Guard(object oMaster, object oCreature) +{ + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_DEFEND_MASTER, TRUE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + if(!ai_GetIsBusy(oCreature) && ai_GetIsInCombat(oCreature)) + { + object oLastAttacker = GetLastHostileActor(oMaster); + if(oLastAttacker != OBJECT_INVALID) ai_DoAssociateCombatRound(oCreature, oLastAttacker); + else AssignCommand(oCreature, ActionMoveToObject(oMaster, TRUE)); + } + ai_SendMessages(GetName(oCreature) + " is now guarding you!", AI_COLOR_YELLOW, oMaster); + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_Follow(object oMaster) +{ + object oCreature = OBJECT_SELF; + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, TRUE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + aiSaveAssociateModesToDb(oMaster, oCreature); + // To follow we probably should be running and not searching or hiding. + if(GetDetectMode(oCreature) && !GetHasFeat(FEAT_KEEN_SENSE, oCreature)) SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + if(GetStealthMode(oCreature)) SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_FOLLOW); + if(ai_IsInCombatRound(oCreature)) ai_ClearCombatState(oCreature); + ai_ClearCreatureActions(TRUE); + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oCreature)); + ai_SendMessages(GetName(oCreature) + " is now following " + GetName(oTarget) + "!", AI_COLOR_YELLOW, oMaster); +} +void ai_Philos_StandGround(object oMaster) +{ + object oCreature = OBJECT_SELF; + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, TRUE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + if(ai_IsInCombatRound(oCreature)) + { + ai_ClearCombatState(oCreature); + DeleteLocalObject(oCreature, AI_ATTACKED_PHYSICAL); + DeleteLocalObject(oCreature, AI_ATTACKED_SPELL); + } + ai_ClearCreatureActions(TRUE); + ai_SendMessages(GetName(oCreature) + " is now standing their ground!", AI_COLOR_YELLOW, oMaster); + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_AttackNearest(object oMaster, object oCreature) +{ + ai_PassAIModeToAssociates(oCreature, AI_MODE_SCOUT_AHEAD, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_STAND_GROUND, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_DEFEND_MASTER, FALSE); + ai_PassAIModeToAssociates(oCreature, AI_MODE_FOLLOW, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_FOLLOW, FALSE); + ai_SetAIMode(oCreature, AI_MODE_COMMANDED, FALSE); + int nToken = NuiFindWindow(oMaster, ai_GetAssociateType(oMaster, oCreature) + AI_WIDGET_NUI); + ai_HighlightWidgetMode(oMaster, oCreature, nToken); + // Removes any targets the PC may have given the associate. + DeleteLocalObject(oCreature, AI_PC_LOCKED_TARGET); + // This resets a henchmens failed Moral save in combat. + string sScript = GetLocalString(oCreature, AI_COMBAT_SCRIPT); + if(sScript == "ai_coward") + { + sScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sScript); + } + if(!ai_GetIsBusy(oCreature)) + { + object oEnemy = ai_GetNearestEnemy(oCreature, 1, 7, 7); + if(oEnemy != OBJECT_INVALID && GetDistanceBetween(oCreature, oEnemy) < AI_RANGE_BATTLEFIELD) + { + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + // If master is attacking a target we will attack them too! + if(!ai_GetIsInCombat(oCreature)) ai_StartAssociateCombat(oCreature); + object oTarget = ai_GetAttackedTarget(oMaster); + if(oTarget == OBJECT_INVALID) ai_DoAssociateCombatRound(oCreature); + else ai_DoAssociateCombatRound(oCreature, oTarget); + } + else + { + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + AssignCommand(oCreature, ActionMoveToObject(oMaster, TRUE, ai_GetFollowDistance(oCreature))); + } + } + ai_SendMessages(GetName(oCreature) + " is now in normal mode!", AI_COLOR_YELLOW, oMaster); + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_SetSearch(object oMaster, object oCreature, string sAssociateType, int bTurnOn) +{ + if(bTurnOn) + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH, TRUE); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, TRUE); + //ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, TRUE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode On"); + } + else + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH, FALSE); + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, FALSE); + //ai_PassActionToAssociates(oCreature, ACTION_MODE_DETECT, FALSE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_search_tooltip", " Search mode Off"); + } + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_Philos_SetStealth(object oMaster, object oCreature, string sAssociateType, int bTurnOn) +{ + if(bTurnOn) + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_STEALTH, TRUE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode On"); + } + else + { + ai_SetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH, FALSE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + ai_PassActionToAssociates(oCreature, ACTION_MODE_STEALTH, FALSE); + //ai_PassActionToAssociates(oCreature, ACTION_MODE_STEALTH, FALSE); + ai_UpdateToolTipUI(oMaster, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_stealth_tooltip", " Stealth mode Off"); + } + aiSaveAssociateModesToDb(oMaster, oCreature); +} +void ai_DoCommand(object oPC, object oAssociate, int nCommand) +{ + int nIndex = 1; + if(oPC == oAssociate) + { + if(nCommand == 1) // Guard PC. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Guard()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Guard()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Philos_Guard(oPC, oAssociate); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Philos_Guard(oPC, oAssociate); + } + } + } + else if(nCommand == 2) // Follow PC. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Follow()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_Follow()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_Follow(oPC)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_Follow(oPC)); + } + } + } + else if(nCommand == 3) // Standground. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_StandGround()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_StandGround()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_StandGround(oPC)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Philos_StandGround(oPC)); + } + } + } + else if(nCommand == 4) // Normal mode - i.e. Attack nearest. + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_AttackNearest()); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_Original_AttackNearest()); + } + } + // Use Philos AI commands. + else + { + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Philos_AttackNearest(oPC, oAssociate); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Philos_AttackNearest(oPC, oAssociate); + } + } + } + if(nCommand == 5) // All associates toggle search mode + { + int bTurnOn = !ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_SEARCH); + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + ai_Original_SetSearch(oPC, bTurnOn); + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Original_SetSearch(oAssociate, bTurnOn); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Original_SetSearch(oAssociate, bTurnOn); + } + } + else + { + ai_Philos_SetSearch(oPC, oPC, "pc", bTurnOn); + string sAssociateType; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetSearch(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetSearch(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + } + if(bTurnOn) + { + ai_SendMessages("Everyone is now in search mode!", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_search_tooltip", " Everyone leave search mode"); + } + else + { + ai_SendMessages("Everyone has left search mode!", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_search_tooltip", " Everyone enter search mode"); + } + } + if(nCommand == 6) // All associate use stealth mode + { + int bTurnOn = !ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_STEALTH); + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + ai_Original_SetStealth(oPC, bTurnOn); + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) ai_Original_SetStealth(oAssociate, bTurnOn); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) ai_Original_SetStealth(oAssociate, bTurnOn); + } + } + else + { + ai_Philos_SetStealth(oPC, oPC, "pc", bTurnOn); + string sAssociateType; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetStealth(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + sAssociateType = ai_GetAssociateType(oPC, oAssociate); + ai_Philos_SetStealth(oPC, oAssociate, sAssociateType, bTurnOn); + } + } + } + if(bTurnOn) + { + ai_SendMessages("Everyone is now in stealth mode.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_stealth_tooltip", " Everyone leave stealth mode"); + } + else + { + ai_SendMessages("Everyone has left stealth mode.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, "pc" + AI_COMMAND_NUI, "pc" + AI_WIDGET_NUI, "btn_cmd_stealth_tooltip", " Everyone enter stealth mode"); + } + } + } + else + { + if(nCommand == 1) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_Guard()); + } + else ai_Philos_Guard(oPC, oAssociate); + } + else if(nCommand == 2) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_Follow()); + } + else AssignCommand(oAssociate, ai_Philos_Follow(oPC)); + } + else if(nCommand == 3) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_StandGround()); + } + else AssignCommand(oAssociate, ai_Philos_StandGround(oPC)); + } + else if(nCommand == 4) + { + // Not using Philos Henchman AI. Use vanilla commands. + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) == "") + { + AssignCommand(oAssociate, ai_Original_AttackNearest()); + } + else ai_Philos_AttackNearest(oPC, oAssociate); + } + } +} +void ai_Action(object oPC, object oAssociate, int bPCAI = FALSE) +{ + if(oPC == oAssociate) + { + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION_ALL"); + ai_SendMessages("Select an action for the party.", AI_COLOR_YELLOW, oPC); + } + else + { + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalObject(oPC, AI_TARGET_MODE_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION"); + SetLocalInt(oPC, AI_TARGET_MODE_ON, TRUE); + if(!GetLocalInt(GetModule(), AI_USING_PRC) && bPCAI) ai_TurnOn(oPC, oPC, "pc"); + ai_SendMessages("Select an action for " + GetName(oAssociate) + ".", AI_COLOR_YELLOW, oPC); + } + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_AIScript(object oPC, object oAssociate, string sAssociateType, int nToken) +{ + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != "") + { + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + string sIcon = "ir_scommand"; + if(sScript == "ai_a_ambusher") + { + sScript = "ai_a_flanker"; + sIcon = "ir_invite"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using flanking tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Flanker: Attacks enemies engaged with allies"); + } + else if(sScript == "ai_a_flanker") + { + sScript = "ai_a_peaceful"; + sIcon = "ir_ignore"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using peaceful tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Peaceful: Avoids attacking any enemies if possible"); + } + else if(sScript == "ai_a_peaceful") + { + sScript = "ai_a_defensive"; + sIcon = "ir_knockdwn"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using defensive tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Defensive: Attacks then uses Expertise/Parry"); + } + else if(sScript == "ai_a_defensive") + { + sScript = "ai_a_ranged"; + sIcon = "ir_ranger"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using ranged tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Ranged: Attacks from range as much as possible"); + } + else if(sScript == "ai_a_ranged") + { + sScript = "ai_a_cntrspell"; + sIcon = "ir_dcaster"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using counter spell tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Counter Spell: Tries to counter enemy spells"); + } + else if(sScript == "ai_a_cntrspell") + { + DeleteLocalString(oAssociate, AI_DEFAULT_SCRIPT); + ai_SetAssociateAIScript(oAssociate, FALSE); + sScript = GetLocalString(oAssociate, AI_DEFAULT_SCRIPT); + ai_SendMessages(GetName(oAssociate) + " is now using default tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Default tactics: Using the creatures base AI script"); + } + else + { + sScript = "ai_a_ambusher"; + sIcon = "ir_rogue"; + SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, sScript); + ai_SendMessages(GetName(oAssociate) + " is now using ambush tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Ambusher: Attacks from a hidden position"); + } + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_label", JsonString("Tactics: " + sScript)); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 8)) == JSON_TYPE_NULL) jAIData = JsonArrayInsert(jAIData, JsonString(sScript)); + else jAIData = JsonArraySet(jAIData, 8, JsonString(sScript)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + if(GetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, TRUE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using coward tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using coward tactics"); + } + else if(GetCombatCondition(X0_COMBAT_FLAG_COWARDLY, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, TRUE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using defensive tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using defensive tactics"); + } + else if(GetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, TRUE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using ranged tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using ranged tactics"); + } + else if(GetCombatCondition(X0_COMBAT_FLAG_RANGED, oAssociate)) + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using normal tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using ambush tactics"); + } + else + { + SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, TRUE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_COWARDLY, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, FALSE, oAssociate); + SetCombatCondition(X0_COMBAT_FLAG_RANGED, FALSE, oAssociate); + ai_SendMessages(GetName(oAssociate) + " is now using ambush tactics in combat.", AI_COLOR_YELLOW, oPC); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_cmd_ai_script_tooltip", " Using ambush tactics"); + } + } +} +void ai_HavePCPlaceTrap(object oPC, object oAssociate) +{ + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_GET_TRAP"); + ai_SendMessages(GetName(oAssociate) + " select a trap to place.", AI_COLOR_YELLOW, oPC); + OpenInventory(oAssociate, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ITEM, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_JumpAssociateToPC(object oPC) +{ + ai_ClearCreatureActions(TRUE); + JumpToObject(oPC); +} +void ai_JumpToPC(object oPC, object oAssociate) +{ + int nAssociateType, nHenchman, nHenchAssociate; + object oHenchman, oHenchmanAssociate; + if(oPC != oAssociate) + { + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + for(nHenchAssociate = 2; nHenchAssociate <= 5; nHenchAssociate++) + { + oHenchmanAssociate = GetAssociate(nHenchAssociate, oHenchman, 1); + if(oHenchmanAssociate != OBJECT_INVALID) + { + AssignCommand(oHenchmanAssociate, ai_JumpAssociateToPC(oPC)); + } + } + AssignCommand(oHenchman, ai_JumpAssociateToPC(oPC)); + } + else AssignCommand(oAssociate, ai_JumpAssociateToPC(oPC)); + return; + } + for(nAssociateType = 1; nAssociateType <= 5; nAssociateType++) + { + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + for(nHenchman = 1; nHenchman <= AI_MAX_HENCHMAN; nHenchman++) + { + oHenchman = GetAssociate(nAssociateType, oPC, nHenchman); + if(oHenchman != OBJECT_INVALID) + { + for(nHenchAssociate = 2; nHenchAssociate <= 5; nHenchAssociate++) + { + oHenchmanAssociate = GetAssociate(nHenchAssociate, oHenchman, 1); + if(oHenchmanAssociate != OBJECT_INVALID) + { + AssignCommand(oHenchmanAssociate, ai_JumpAssociateToPC(oPC)); + } + } + AssignCommand(oHenchman, ai_JumpAssociateToPC(oPC)); + } + } + } + else + { + oHenchman = GetAssociate(nAssociateType, oPC, 1); + if(oHenchman != OBJECT_INVALID) AssignCommand(oHenchman, ai_JumpAssociateToPC(oPC)); + } + } +} +void ai_GhostMode(object oPC, object oAssociate, int nToken, string sAssociateType) +{ + string sText; + if(ai_GetAIMode(oAssociate, AI_MODE_GHOST)) + { + ai_SetAIMode(oAssociate, AI_MODE_GHOST, FALSE); + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + sText = " Turn On clipping through creatures for " + GetName(oAssociate); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ghost_mode_tooltip", sText); + ai_SendMessages(GetName(oAssociate) + " is not in Ghost Mode and will run into creatures.", AI_COLOR_YELLOW, oPC); + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_GHOST, TRUE); + effect eGhost = EffectCutsceneGhost(); + eGhost = UnyieldingEffect(eGhost); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oAssociate); + sText = " Turn Off clipping through creatures for " + GetName(oAssociate); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ghost_mode_tooltip", sText); + ai_SendMessages(GetName(oAssociate) + " is now in Ghost Mode and will clip through creatures.", AI_COLOR_YELLOW, oPC); + } +} +void ai_ChangeCameraView(object oPC, object oAssociate) +{ + object oCamAssociate = GetLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE"); + if(oCamAssociate == oAssociate) + { + DeleteLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE"); + AttachCamera(oPC, oPC); + } + else + { + SetLocalObject(oPC, "AI_CAMERA_ON_ASSOCIATE", oAssociate); + AttachCamera(oPC, oAssociate); + if(!ai_GetIsCharacter(oAssociate)) ai_Action(oPC, oAssociate, TRUE); + } +} +void ai_SelectCameraView(object oPC) +{ + SetLocalString(oPC, AI_TARGET_MODE, "DM_SELECT_CAMERA_VIEW"); + ai_SendMessages(GetName(oPC) + " select an object to change the camera view to.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); +} +void ai_OpenInventory(object oAssociate, object oPC) +{ + // Funny things happen when you open associate inventories when they are not + // within sight. + if(LineOfSightObject(oPC, oAssociate)) + { + OpenInventory(oAssociate, oPC); + } + else ai_SendMessages(GetName(oAssociate) + " is not within sight!", AI_COLOR_RED, oPC); +} +void ai_SelectOpenInventory(object oPC) +{ + SetLocalString(oPC, AI_TARGET_MODE, "DM_SELECT_OPEN_INVENTORY"); + ai_SendMessages(GetName(oPC) + " select an object to open its inventory.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); +} +void ai_Plugin_Execute(object oPC, string sElem, int bUser = 0) +{ + int nIndex = StringToInt(GetStringRight(sElem, 1)); + json jPlugins, jPlugin; + if(bUser == 1) // From DM command menu. + { + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + jPlugins = ai_GetCampaignDbJson("plugins", sName, AI_DM_TABLE); + } + else if(bUser == 2) // From DM plugin menu, master plugin list. + { + jPlugins = ai_GetCampaignDbJson("plugins"); + } + else jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + jPlugin = JsonArrayGet(jPlugins, nIndex); + string sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + ai_SendMessages(sScript + " not found by ResMan!", AI_COLOR_RED, oPC); + } + else + { + string sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + ai_SendMessages("Executing plugin " + sName + ".", AI_COLOR_GREEN, oPC); + ExecuteScript(sScript, oPC); + } +} +void ai_TurnOn(object oPC, object oTarget, string sAssociateType) +{ + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ai_tooltip", " AI On"); + ai_SendMessages("AI turned on for " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "xx_pc_1_hb"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_NOTICE, "xx_pc_2_percept"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "xx_pc_3_endround"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "xx_pc_4_convers"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "xx_pc_5_phyatked"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "xx_pc_6_damaged"); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DEATH, ""); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "xx_pc_8_disturb"); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_RESTED, ""); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "xx_pc_b_castat"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "xx_pc_e_blocked"); + //SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + // This sets the script for the PC to run AI based on class. + ai_SetAssociateAIScript(oTarget, FALSE); + // Set so PC can hear associates talking in combat. + ai_SetListeningPatterns(oTarget); +} +void ai_TurnOff(object oPC, object oAssociate, string sAssociateType) +{ + ai_UpdateToolTipUI(oPC, sAssociateType + AI_NUI, sAssociateType + AI_WIDGET_NUI, "btn_ai_tooltip", " AI Off"); + ai_SendMessages("AI Turned off for " + GetName(oAssociate) + ".", AI_COLOR_YELLOW, oPC); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_NOTICE, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DAMAGED, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DEATH, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_DISTURBED, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_RESTED, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, ""); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, ""); + //SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + DeleteLocalInt(oAssociate, "AI_I_AM_BEING_HEALED"); + DeleteLocalString(oAssociate, "AIScript"); + ai_ClearCreatureActions(); +} + diff --git a/_module/nss/0i_color.nss b/_module/nss/0i_color.nss new file mode 100644 index 0000000..b18fe7a --- /dev/null +++ b/_module/nss/0i_color.nss @@ -0,0 +1,70 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_color +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts that are used to change the color of names and text. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Basic color codes. Message Notes +const string AI_COLOR_BLACK = "000"; // Nothing. +const string AI_COLOR_WHITE = "999"; // _Debug messages. +const string AI_COLOR_GRAY = "666"; // Server messages +const string AI_COLOR_YELLOW = "990"; // Generic messages to players. +const string AI_COLOR_DARK_YELLOW = "660"; // +const string AI_COLOR_RED = "900"; // Negative message to players. +const string AI_COLOR_DARK_RED = "600"; // +const string AI_COLOR_GREEN = "080"; // Positive message to players. +const string AI_COLOR_DARK_GREEN = "060"; // +const string AI_COLOR_BLUE = "009"; // +const string AI_COLOR_DARK_BLUE = "006"; // In game descriptive text. +const string AI_COLOR_CYAN = "099"; // +const string AI_COLOR_DARK_CYAN = "066"; // +const string AI_COLOR_MAGENTA = "909"; // +const string AI_COLOR_DARK_MAGENTA = "606";// +const string AI_COLOR_LIGHT_MAGENTA = "868"; // <âcâ> Combat text: Enemy name color. +const string AI_COLOR_ORANGE = "950"; // +const string AI_COLOR_DARK_ORANGE = "940"; // Combat text: base text color. +const string AI_COLOR_GOLD = "860"; // +// Strips the color codes from sText +string ai_StripColorCodes(string sText); +// This function will make sString be the specified color +// as specified in sRGB. RGB is the Red, Green, and Blue +// Each color can have a value from 0 to 9. +// 1 - 0(20)[ ] 142 - 5(8E)[?] +// 32 - 1(20)[ ] 170 - 6(AA)[ª] +// 57 - 2(39)[9] 198 - 7(C6)[Æ] +// 85 - 3(55)[U] 226 - 8(E2)[â] +// 113 - 4(71)[q] 255 - 9(FE)[ÿ] +string ai_AddColorToText(string sText, string sRGB = AI_COLOR_WHITE); + +string ai_StripColorCodes(string sText) +{ + string sColorCode, sChar; + int nStringLength = GetStringLength(sText); + int i = FindSubString(sText, "" + // End the color token + sText + ""; +} diff --git a/_module/nss/0i_combat.nss b/_module/nss/0i_combat.nss new file mode 100644 index 0000000..1133627 --- /dev/null +++ b/_module/nss/0i_combat.nss @@ -0,0 +1,4313 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_combat +//////////////////////////////////////////////////////////////////////////////// + Include scripts for combat scripts. +*/////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// +#include "0i_messages" +#include "0i_items" +#include "0i_spells" +// This structure is used to represent the number and type of +// enemies that a creature is facing, divided into four main +// categories: FIGHTERS, CLERICS, MAGES, MONSTERS. +struct stClasses +{ + int FIGHTERS; + int FIGHTER_LEVELS; + int CLERICS; + int CLERIC_LEVELS; + int MAGES; + int MAGE_LEVELS; + int MONSTERS; + int MONSTER_LEVELS; + int TOTAL; + int TOTAL_LEVELS; +}; +struct stTarget +{ + object oTarget; + int nValue; + int nBestValue; + int nBestSecondaryValue; + float fNearestRange; + float fNearestSecondaryRange; + int nIndex; + int nSecondaryIndex; + string sTargetType; +}; +//****************************************************************************** +//************ GET TARGETS USING THE OBJECT SEARCH FUNCTIONS ******************* +//****************************************************************************** + +// Returns the nearest enemy that is not disabled from oCreature. +// You may pass in any of the CREATURE_TYPE_* constants +// used in GetNearestCreature as nCType1 & nCType2, with +// corresponding values for nCValue1 & nCValue2. +// NOTE: CREATURE_TYPE_PERCEPTION = 7, PERCEPTION_SEEN = 7. +// bDisabled = TRUE will also return any disabled targets that are not dead. +object ai_GetNearestEnemy(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1, int bDisabled = FALSE); +// Returns the nearest ally from oCreature. +// You may pass in any of the CREATURE_TYPE_* constants +// used in GetNearestCreature as nCType1 & nCType2, with +// corresponding values for nCValue1 & nCValue2. +// NOTE: CREATURE_TYPE_PERCEPTION = 7, PERCEPTION_SEEN = 7. +object ai_GetNearestAlly(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1); +// Returns the number of alive enemies grouped near oCreature within fDistance. +int ai_GetNumOfEnemiesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE); +// Returns the number of alive allies grouped near oCreature within fDistance. +int ai_GetNumOfAlliesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE); +// Returns the number of creatures of nRacial_Type within fDistance that can be seen by oCreature. +int ai_GetRacialTypeCount(object oCreature, int nRacial_Type, float fDistance = AI_RANGE_PERCEPTION); +// Returns the weakest attacker that is in melee or is attacking oCreature's master. +object ai_GetLowestCRAttackerOnMaster(object oCreature); + +//****************************************************************************** +//******************** SET/CLEAR COMBAT STATE FUNCTIONS ************************ +//****************************************************************************** + +// Sets oCreatures's combat state by setting variables for AI_ALLIES and AI_ENEMIES. +// Returns the nearest visible enemy. +object ai_SetCombatState(object oCreature); +// Clears all variables that were define for the current round for oCreature. +void ai_ClearCombatState(object oCreature); +// Clears just the Talent variables so we can recalculate the Talents. +void ai_ClearTalents(object oCreature); + +//****************************************************************************** +//*************** GET TARGETS USING COMBAT STATE FUNCTIONS ********************* +//****************************************************************************** +// These functions will find a target or an index to a target based on the +// combat state variables created by the function ai_SetCombatState. + +// ******************************** Target Checks ****************************** +// ** Used to get creatures within fMaxRange as a target. ** +// ** These checks that do basic checks to find a creature. ** +// ** Used mostly in spell checks. ** +// ***************************************************************************** +// Returns the Index of the nearest creature seen within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetNearestIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the nearest creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetNearestTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the nearest creature seen with the lowest combat rating +// within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the nearest creature seen with the lowest combat rating within fMaxRange +// in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetLowestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the nearest creature seen with the highest combat rating +// within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the nearest creature seen with the highest combat rating within fMaxRange +// in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetHighestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); + +// *************************** Not in an AOE Target Checks ********************* +// ** Used to get creatures within fMaxRange as a target. ** +// ** These checks that do basic checks to find a creature that is not in a ** +// ** harmful AOE. Used in spell checks to target unaffected cratures first. ** +// ***************************************************************************** +// Returns the index of the nearest creature seen that is busy attacking an ally +// within fMaxRange in the combat state. +// If none is found then it will return 0. +int ai_GetNearestIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the nearest combat creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetNearestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the nearest creature seen with the lowest combat rating +// that is not in a dangerous area of effect within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the lowest combat creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetLowestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the nearest creature seen with the highest combat rating +// that is not in a dangerous area of effect within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the highest combat creature seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetHighestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); + +// ******************************** Physical Target Checks ********************* +// ** Used in melee checks to make sure the attacker can damage oCreature ** +// ** as well as stay within range of their master. ** +// ***************************************************************************** +// Returns the Index of the nearest creature seen within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetNearestPhysicalIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetNearestPhysicalTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the lowest combat rating +// within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestCRPhysicalIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen with the lowest combat rating within fMaxRange +// in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetLowestCRPhysicalTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the highest combat rating +// within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestCRPhysicalIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen with the highest combat rating within fMaxRange +// in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetHighestCRPhysicalTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); + +// *************************** Not in an AOE Target Checks ********************* +// ** Used to get creatures within fMaxRange as a target. ** +// ** These checks that do basic checks to find a creature that is not in a ** +// ** harmful AOE. Used in spell checks to target unaffected cratures first. ** +// ***************************************************************************** +// Returns the index of the nearest creature seen that is busy attacking an ally +// within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// If none is found then it will return 0. +int ai_GetNearestPhysicalIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest combat creature seen within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetNearestPhysicalTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the lowest combat rating +// that is not in a dangerous area of effect within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestCRPhysicalIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the lowest combat creature seen within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetLowestPhysicalTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest creature seen with the highest combat rating +// that is not in a dangerous area of effect within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestCRPhysicalIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the highest combat creature seen within fMaxRange in the combat state. +// This also checks if the caller can do damage to oCreature with current weapon. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +object ai_GetHighestCRPhysicalTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); + +// ******************************** Group Target Checks ************************ +// ** These get the largest group of enemies in 5' with a minimal number of ** +// ** allies within fMaxRange. Used for AOE spells. ** +// ***************************************************************************** +// Returns the index of the creature seen with the lowest enemies to oCreature +// that are in a group minus the number of allies in that group within +// fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetLowestGroupIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the creature seen with the most enemies to the caller +// that are in a group minus the number of allies in that group within +// fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestGroupIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns a creature of sTargetType where they have the least number of +// allies and the most number of enemies within fMaxRange in the combat state. +// Returns OBJECT_INVALID if there is not a good creature to select. +// sTargetType is either AI_ENEMY, or AI_ALLY. +object ai_GetGroupedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns the index of the creature seen with the most enemies to oCreature that +// they are in melee with minus the number of allies to oCreature they are in +// melee with that is not in a dangerous area of effect within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetHighestGroupIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); +// Returns a creature of sTargetType where they have the least number of +// allies and the most number of enemies within fMaxRange that are not in a +// dangerous area of effect in the combat state. +// Returns OBJECT_INVALID if there is not a good creature to select. +// sTargetType is either AI_ENEMY, or AI_ALLY. +object ai_GetGroupTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY); + +// ***************************** Specific Target Checks ************************ +// ** Used in melee checks to make sure the attacker can damage oCreature ** +// ** as well as stay within range of their master. ** +// ***************************************************************************** +// Returns the index of the nearest creature with the least % of hitpoints within +// fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_GetMostWoundedIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the lowest health seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetMostWoundedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest ally with the least % of hitpoints within +// fMaxRange in the combat state. +// This also filters for AI_MODE_PARTY_HEALING_OFF and AI_MODE_SELF_HEALING_OFF. +// If no ally is found then it will return an index of 0. +int ai_GetAllyToHealIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the ally with the lowest health seen within fMaxRange in the combat state. +// This also filters for AI_MODE_PARTY_HEALING_OFF and AI_MODE_SELF_HEALING_OFF. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetAllyToHealTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest fortitude save seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetLowestFortitudeSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest reflex save seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetLowestReflexSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest will save seen within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetLowestWillSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the creature with the lowest save based on nSpell save type seen +// within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +object ai_GetSpellTargetBasedOnSaves(object oCreature, int nSpell, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the index of the nearest creature seen that is busy attacking an ally +// within fMaxRange in the combat state. +// If none is found then it will return 0. +int ai_GetSneakAttackIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen of nClassType within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the lowest combat rating seen of nClassType within +// fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetLowestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the highest combat rating seen of nClassType within +// fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetHighestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest creature seen of nRacialType within fMaxRange in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the lowest combat rating seen of nRacialType within +// fMaxRange in the combat state. Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetLowestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the creature with the highest combat rating seen of nRacialType within +// fMaxRange in the combat state. Returns OBJECT_INVALID if no creature is found. +// sTargetType is either AI_ENEMY or AI_ALLY. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetHighestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the nearest enemy seen that is attacking an ally with the least +// number of enemies on them within fMaxRange in the combat state. +// If none is found then it will return 0. +object ai_GetFlankTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE); +// Returns the nearest enemy creature seen wihtin fMaxRange that is a favored enemy +// of the caller in the combat state. +// Returns OBJECT_INVALID if no creature is found. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestFavoredEnemyTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE); +// Returns the best target for melee combat based if we are in melee or not. +// If not in melee it will get the nearest target that is not in a dangerous +// area of effect for us to attack in the combat state. +// If in melee it will get the weakest target. +// If it returns OBJECT_INVALID then we should stop the attack. The only way +// to not get a target is if we have been told not to attack strong opponents. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetBestCRTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns the nearest target for melee combat based if we are in melee or not. +// If not in melee it will get the nearest target that is not in a dangerous +// area of effect for us to attack in the combat state. +// If it returns OBJECT_INVALID then we should stop the attack. The only way +// to not get a target is if we have been told not to attack strong opponents. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetNearestTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns the target with the lowest combat rating for melee combat based if +// we are in melee or not. If not in melee it will get the nearest target that +// is not in a dangerous area of effect for us to attack in the combat state. +// If it returns OBJECT_INVALID then we should stop the attack. The only way +// to not get a target is if we have been told not to attack strong opponents. +// bAlwaysAtk TRUE we attack everything! FALSE we don't attack strong enemies. +object ai_GetLowestCRTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns the target with the highest combat rating for melee combat based if +// we are in melee or not. If not in melee it will get the nearest target that +// is not in a dangerous area of effect for us to attack in the combat state. +// If it returns OBJECT_INVALID then we should stop the attack. +object ai_GetHighestCRTargetForMeleeCombat(object oCreature, int nInMelee); +// Returns the Index of the nearest creature seen within fMaxRange in the combat state. +// If no creature is found then it will return an index of 0. +// sTargetType is either AI_ENEMY or AI_ALLY. +int ai_MonsterGetNearestIndex(object oMonster, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE); +// Returns the index of the nearest enemy creature that can see oCreature. +int ai_GetNearestIndexThatSeesUs(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION); +// Returns the nearest creature attacking the caller within fMaxRange in the combat state. +// Returns OBJECT_INVALID if oCreature is not being attacked. +object ai_GetEnemyAttackingMe(object oCreature, float fMaxRange = AI_RANGE_MELEE); +// Returns the nearest creature attacking oAlly from oCreature within fMaxRange +// in the combat state. +// Returns OBJECT_INVALID if oAlly is not being attacked. +object ai_GetEnemyAttackingMyAlly(object oCreature, object oAlly, float fMaxRange = AI_RANGE_MELEE); +// Returns the number of enemies within fMaxRange of the caller in the combat state. +int ai_GetNumOfEnemiesInRange(object oCreature, float fMaxRange = AI_RANGE_MELEE); +// Returns the best ally target withing fMaxRange for nSpell to be cast on. +// Uses the ai_spells.2da file to pick a target. +object ai_GetAllyBuffTarget(object oCreature, int nSpell, float fMaxRange = AI_RANGE_BATTLEFIELD); + +//****************************************************************************** +//******************** OTHER COMBAT FUNCTIONS ******************************** +//****************************************************************************** + +// Returns the current round that oCreature is in for this combat. +int ai_GetCurrentRound(object oCreature); +// Returns the difficulty of the battle based on the combat state. +// nDifficulty is Enemy level - Ally level + 20 + Player adjustment. +// 20+ : Impossible - Cannot win. +// 17 to 19 : Overpowering - Use all of our powers. +// 15 to 16 : Very Difficult - Use all of our power (Highest level spells). +// 11 to 14 : Challenging - Use most of our power (Higher level powers). +// 8 to 10 : Moderate - Use half of our power (Mid level powers and less). +// 5 to 7 : Easy - Use our weaker powers (Lowest level powers). +// 2 to 4 : Effortless - Don't waste spells and powers on this. +// 1 or less: Pointless - We probably should ignore these dangers. +int ai_GetDifficulty(object oCreature); +// Returns oCreatures Combat rating. +//(BAB + AC - 10) / 2 +int ai_GetMyCombatRating(object oCreature); +// Returns the last creature oCreature attacked. +// bPhysical checks for creatures attacked in melee or range with a weapon. +// bSpell will look for creatures attacked by a spell. +object ai_GetAttackedTarget(object oCreature, int bPhysical = TRUE, int bSpell = FALSE); +// Returns TRUE if oCreature is of nClassType; +// May also check for general Class types with +// AI_CLASS_TYPE_ARCANE, AI_CLASS_TYPE_DIVINE, AI_CLASS_TYPE_CASTER, AI_CLASS_TYPE_WARRIOR. +int ai_CheckClassType(object oCreature, int nClassType); +// Returns TRUE if oCreature is of nRacialType; +// May also check for general racial types with +// AI_RACIAL_TYPE_ANIMAL_BEAST +int ai_CheckRacialType(object oCreature, int nRacialType); +// Saves oCreatures Normal appearance if they are not polymorphed and it has +// not already been saved. +void ai_SetNormalAppearance(object oCreature); +// Returns the normal appearance of oCreature. +int ai_GetNormalAppearance(object oCreature); +// Return the number and levels of all creatures within fMaxRange. +// They are grouped into Fighters, Clerics, Mages, and Monsters. +struct stClasses ai_GetFactionsClasses(object oCreature, int bEnemy = TRUE, float fMaxRange = AI_RANGE_BATTLEFIELD); +// This will return the class with the most levels. +// Returns a string of "FIGHTER", "CLERIC", "MAGE", or "MONSTER". +// Execute with GetFactionsClasses. +string ai_GetMostDangerousClass(struct stClasses stCount); +// Equips the best weapon, ranged or melee. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +void ai_EquipBestWeapons(object oCreature, object oTarget = OBJECT_INVALID); +// Equips a melee weapon AND checks for shield, two weapons, two handed, etc. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +int ai_EquipBestMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID); +// Equips a ranged weapon AND checks for ammo. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +int ai_EquipBestRangedWeapon(object oCreature, object oTarget = OBJECT_INVALID); +// Equips the best weapon for a monk character. +// Returns TRUE if equiped, FALSE if not. +// oTarget is the creature the caller is targeting. +int ai_EquipBestMonkMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature is in a Dangerous Area of Effect in fMaxRange. +// bMove will attempt to move oCreature out of the Dangerous AOE if needed. +int ai_IsInADangerousAOE(object oCreature, float fMaxRange = AI_RANGE_BATTLEFIELD, int bMove = FALSE); +// Returns 1 if oHidden has an Invisiblity effect, Can't be spotted but can be heard. +// Returns 2 if oHidden has a Darkness effect. Can't be spotted but can be heard. +// Returns 3 if oHidden has a Sanctuary effect, Can't be spotted or heard. +// Returns 4 if oHidden is in stealth mode, Can be spotted and heard. +int ai_GetIsHidden(object oHidden); +// Returns TRUE if if oCaster has a good chance of effecting oCreature with nSpell. +int ai_CastOffensiveSpellVsTarget(object oCaster, object oCreature, int nSpell); +// Gets the base DC for a dragon. +int ai_GetDragonDC(object oCreature); +// Set oCreature's ai scripts based on its first class or the variable "AI_DEFAULT_SCRIPT". +void ai_SetCreatureAIScript(object oCreature); +// Returns TRUE if oTarget is immune to sneak attacks. +int ai_IsImmuneToSneakAttacks(object oCreature, object oTarget); +// Returns TRUE if iIndex target has a higher combat rating than oCreature. +int ai_IsStrongerThanMe(object oCreature, int nIndex); +// Returns TRUE if oTarget's CR is within nAdj of oCreature's level, otherwise FALSE. +int ai_StrongOpponent(object oCreature, object oTarget, int nAdj = 2); +// Returns TRUE if attacking oTarget with Power attack is a good option. +int ai_PowerAttackGood(object oCreature, object oTarget, float fAdj); +// Returns TRUE if oTarget's AC - oCreature Atk - nAtkAdj can hit within 25% to 75%. +int ai_AttackPenaltyOk(object oCreature, object oTarget, float fAtkAdj); +// Returns TRUE if oCreature AC - oTarget's Atk is less than 20. +int ai_ACAdjustmentGood(object oCreature, object oTarget, float fACAdj); +// Checks oCreatures melee weapon to see if they can kill oTarget in one hit. +int ai_WillKillInOneHit(object oCreature, object oTarget); +// Returns TRUE if oCreature has Mobility, SpringAttack, or a high Tumble. +int ai_CanIMoveInCombat(object oCreature); +// Returns TRUE if oCreature can safely fire a ranged weapon. +int ai_CanIUseRangedWeapon(object oCreature, int nInMelee); +// Returns TRUE if oCreature moves before the action. FALSE if they do not move. +// and -1 if the action is canceled. +// Checks current combat state to see if oCreature needs to move before using an action. +int ai_CheckCombatPosition(object oCreature, object oTarget, int nInMelee, int nAction, int nBaseItemType = 0); +//:: [PRC8] Calculates total Shield AC bonuses from all sources +int ai_GetTotalShieldACBonus(object oCreature); +//:: [PRC8] Helper fucntion for CanIGrapple() +int GetSpecialGrappleSizeMod(int nSize); +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Tripping +int ai_CanITrip(object oCreature, object oTarget); +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Grappling +int ai_CanIGrapple(object oCreature, object oTarget); +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Awesome Blow +int ai_CanIAwesomeBlow(object oCreature, object oTarget); +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Overrun +int ai_CanIOverrun(object oCreature, object oTarget); +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Bullrush +int ai_CanIBullrush(object oCreature, object oTarget); + +//****************************************************************************** +//************ GET TARGETS USING THE OBJECT SEARCH FUNCTIONS ******************* +//****************************************************************************** +object ai_GetNearestEnemy(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1, int bDisabled = FALSE) +{ + object oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + oCreature, nNth, nCType1, nCValue1, nCType2, nCValue2); + if(bDisabled) + { + while(oTarget != OBJECT_INVALID && GetIsDead(oTarget)) + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + oCreature, ++nNth, nCType1, nCValue1, nCType2, nCValue2); + } + } + else + { + while(oTarget != OBJECT_INVALID && ai_Disabled(oTarget)) + { + oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, + oCreature, ++nNth, nCType1, nCValue1, nCType2, nCValue2); + } + } + return oTarget; +} +object ai_GetNearestAlly(object oCreature, int nNth = 1, int nCType1 = -1, int nCValue1 = -1, int nCType2 = -1, int nCValue2 = -1) +{ + return GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, + oCreature, ++nNth, nCType1, nCValue1, nCType2, nCValue2); +} +int ai_GetNumOfEnemiesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE) +{ + int nCnt; + location lLocation = GetLocation(oCreature); + object oEnemy = GetFirstObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + while(oEnemy != OBJECT_INVALID) + { + if(GetIsEnemy(oEnemy, oCreature) && !GetIsDead(oEnemy)) nCnt++; + oEnemy = GetNextObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + } + return nCnt; +} +int ai_GetNumOfAlliesInGroup(object oCreature, float fDistance = AI_RANGE_MELEE) +{ + int nCnt; + location lLocation = GetLocation(oCreature); + object oAlly = GetFirstObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + while(oAlly != OBJECT_INVALID) + { + if(GetReputation(oCreature, oAlly) > 89 && oAlly != oCreature && !GetIsDead(oAlly)) + { + nCnt++; + } + oAlly = GetNextObjectInShape(SHAPE_SPHERE, fDistance, lLocation); + } + return nCnt; +} +int ai_GetRacialTypeCount(object oCreature, int nRacial_Type, float fDistance = AI_RANGE_PERCEPTION) +{ + int nCnt = 1; + int nCount = 0; + object oEnemy = ai_GetNearestEnemy(oCreature, nCnt, + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN, + CREATURE_TYPE_RACIAL_TYPE, + nRacial_Type); + while(oEnemy != OBJECT_INVALID && GetDistanceBetween(oEnemy, oCreature) <= fDistance) + { + if(!ai_GetHasEffectType(oEnemy, EFFECT_TYPE_TURNED)) nCount++; + nCnt++; + oEnemy = ai_GetNearestEnemy(oCreature, nCnt, + CREATURE_TYPE_PERCEPTION, + PERCEPTION_SEEN, + CREATURE_TYPE_RACIAL_TYPE, + nRacial_Type); + } + return nCount; +} +object ai_GetLowestCRAttackerOnMaster(object oCreature) +{ + object oTarget = OBJECT_INVALID, oMaster = GetMaster(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "577", "Checking for weakest attacker on " + GetName(oMaster)); + int nEnemyCombatRating, nWeakestCombatRating, nCntr = 1; + float fNearest = AI_RANGE_MELEE + 1.0f; + // Get the weakest opponent in melee with our master. + object oEnemy = ai_GetNearestEnemy(oMaster, nCntr, 7, 7); + float fDistance = GetDistanceBetween(oMaster, oEnemy); + while (oEnemy != OBJECT_INVALID && fDistance <= AI_RANGE_MELEE) + { + nEnemyCombatRating = ai_GetMyCombatRating(oEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "586", GetName(oEnemy) + " nECR: " + IntToString(nEnemyCombatRating)); + if (nEnemyCombatRating < nWeakestCombatRating || + nEnemyCombatRating == nWeakestCombatRating && fDistance < fNearest) + { + fNearest = fDistance; + nWeakestCombatRating = nEnemyCombatRating; + oTarget = oEnemy; + } + oEnemy = ai_GetNearestEnemy(oMaster, ++nCntr, 7, 7); + } + // No targets in melee with our master, lets see if there is a ranged attacker. + if (oTarget == OBJECT_INVALID) + { + oTarget = GetLastHostileActor(oMaster); + // Sometimes things happen and our own associates may hurt the player too! + if(ai_GetTopMaster(oTarget) == oMaster) oTarget = OBJECT_INVALID; + } + if(AI_DEBUG) ai_Debug("0i_combat", "598", "Attacking master: " + GetName(oTarget)); + return oTarget; +} + +//****************************************************************************** +//******************** SET/CLEAR COMBAT STATE FUNCTIONS ************************ +//****************************************************************************** + +object ai_SetCombatState(object oCreature) +{ + if(AI_DEBUG) ai_Counter_Start(); + object oMaster = GetMaster(); + if(oMaster == OBJECT_INVALID) oMaster = oCreature; + int nEnemyNum, nEnemyPower, nAllyNum, nAllyPower, nInMelee, nMagic; + int nHealth, nNth, nAllies, nPower, nDisabled, bThreat,nObjects; + int nEnemyHighestPower, nAllyHighestPower; + float fNearest = AI_RANGE_BATTLEFIELD; + float fDistance; + float fMaxRange = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fMaxRange == 0.0) fMaxRange = AI_RANGE_PERCEPTION; + string sCnt, sDebugText; + location lLocation = GetLocation(oMaster); + object oMelee, oNearestEnemy = OBJECT_INVALID; + if(AI_DEBUG) ai_Debug("0i_combat", "491", "************************************************************"); + if(AI_DEBUG) ai_Debug("0i_combat", "492", "******************* CREATING COMBAT DATA *******************"); + if(AI_DEBUG) ai_Debug("0i_combat", "493", GetName(oCreature)); + // We want to include ourselves in the combat state. + object oObject = GetFirstObjectInShape(SHAPE_SPHERE, AI_RANGE_BATTLEFIELD, lLocation); + // Get all creatures within 40 meters(5 meters beyond our perception of 35). + // Centered on either the creature or their master. + while(oObject != OBJECT_INVALID) + { + // Process all enemies. + if(GetIsEnemy(oObject, oCreature)) + { + if(GetObjectSeen(oObject, oCreature) || GetObjectHeard(oObject, oCreature)) + { + fDistance = GetDistanceBetween(oObject, oCreature); + if(fDistance <= fMaxRange) + { + // ********** Get the Total levels of the Enemy ********** + nPower = ai_GetCharacterLevels(oObject); + if(nPower < 1) nPower = 1; + if(nEnemyHighestPower < nPower) nEnemyHighestPower = nPower; + nEnemyPower += nPower; + // ********** Check if the Enemy is disabled ********** + bThreat = TRUE; + nDisabled = ai_Disabled(oObject); + if(nDisabled) + { + if(AI_DEBUG) sDebugText += "**** DISABLED(" + IntToString(nDisabled) + ") ****"; + // Decide if they are still a threat: 1 - dead, 2 - Bleeding. + if(nDisabled == 1 || nDisabled == 2 || + //nDisabled == EFFECT_TYPE_CONFUSED || + //nDisabled == EFFECT_TYPE_FRIGHTENED || + //nDisabled == EFFECT_TYPE_PARALYZE || + nDisabled == EFFECT_TYPE_CHARMED || + nDisabled == EFFECT_TYPE_PETRIFY) + { + bThreat = FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "527", "Enemy: " + GetName(oObject) + sDebugText); + } + } + // If they are using the coward ai then treat them as frightened. + // we place it here as an else so we don't overwrite another disabled effect. + else if(GetLocalString(oObject, AI_COMBAT_SCRIPT) == "ai_coward") + { + nDisabled = EFFECT_TYPE_FRIGHTENED; + // !!!! For /DEBUG CODE !!!! + if(AI_DEBUG) sDebugText += "**** DISABLED(" + IntToString(nDisabled) + ") ****"; + } + if(bThreat) + { + sCnt = IntToString(++nEnemyNum); + // ********** Set if the Enemy is disabled ********** + SetLocalInt(oCreature, AI_ENEMY_DISABLED + sCnt, nDisabled); + // ********** Set the Enemy Object ********** + SetLocalObject(oCreature, AI_ENEMY + sCnt, oObject); + // ********** Set the Enemy Combat Rating ********** + SetLocalInt(oCreature, AI_ENEMY_COMBAT + sCnt, ai_GetMyCombatRating(oObject)); + // ********** Set the Enemy Health Percentage ********** + nHealth = ai_GetPercHPLoss(oObject); + SetLocalInt(oCreature, AI_ENEMY_HEALTH + sCnt, nHealth); + // ********** Set the number of enemies near the enemy ********** + nInMelee = 0; + nNth = 1; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, nNth); + while(oMelee != OBJECT_INVALID && !GetIsDead(oMelee) && + GetDistanceBetween(oMelee, oObject) < AI_RANGE_MELEE) + { + // We add an enemy to the group. + if(GetIsEnemy(oMelee, oCreature)) nInMelee++; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, ++nNth); + } + SetLocalInt(oCreature, AI_ENEMY_MELEE + sCnt, nInMelee); + // ********** Set the Enemies distance ********** + fDistance = GetDistanceBetween(oObject, oCreature); + SetLocalFloat(oCreature, AI_ENEMY_RANGE + sCnt, fDistance); + // ********** Set if the Enemy is perceived ********** + if(GetObjectSeen(oObject, oCreature) || + (GetObjectHeard(oObject, oCreature) && fDistance <= AI_RANGE_MELEE && + ai_GetIsHidden(oObject))) + { + SetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt, TRUE); + if(AI_DEBUG) sDebugText += "**** PERCEIVED Seen: " + + IntToString(GetObjectSeen(oObject, oCreature)) + + " Heard: " + IntToString(GetObjectHeard(oObject, oCreature)) + " ****"; + } + else SetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt, FALSE); + // ********** Set the Nearest Enemy seen ********** + if(fDistance < fNearest) + { + fNearest = fDistance; + oNearestEnemy = oObject; + } + } + } + // !!! Debug code !!! + if(AI_DEBUG && fDistance < AI_RANGE_MELEE) sDebugText += "**** MELEE ****"; + if(AI_DEBUG) ai_Debug("0i_combat", "587", "Enemy(" + IntToString(nEnemyNum) + "): " + + GetName(oObject) + sDebugText); + if(AI_DEBUG) ai_Debug("0i_combat", "589", "nHealth: " + IntToString(nHealth) + + " nInMelee: " + IntToString(nInMelee) + + " fDistance: " + FloatToString(fDistance, 0, 2) + + " nNum: " + IntToString(nEnemyNum) + + " nPower: " + IntToString(nEnemyPower / 2)); + } + else + { + // ********** Also add the levels of Unknown Enemies *********** + nPower = FloatToInt(ai_GetCharacterLevels(oObject) / 1.5); + if(nPower < 1) nPower = 1; + nEnemyPower += nPower; + if(AI_DEBUG) ai_Debug("0i_combat", "601", "Enemy(NOT PERCEIVED): " + + GetName(oObject) + " fDistance: " + + FloatToString(GetDistanceBetween(oObject, oCreature), 0, 2) + + " nPower: " + IntToString(nEnemyPower)); + } + } + // Process all Allies. + else if(GetFactionEqual(oObject, oCreature)) + { + // ********** Set if the Ally is disabled ********** + nDisabled = ai_Disabled(oObject); + if(nDisabled) + { + sDebugText += "**** DISABLED(" + IntToString(nDisabled) + ") ****"; + SetLocalInt(oCreature, AI_ALLY_DISABLED + sCnt, nDisabled); + } + if(nDisabled != 1) + { + sCnt = IntToString(++nAllyNum); + // ********** Set the Ally Object ********** + SetLocalObject(oCreature, AI_ALLY + sCnt, oObject); + // ********** Set the Ally Combat Rating ********** + SetLocalInt(oCreature, AI_ALLY_COMBAT + sCnt, ai_GetMyCombatRating(oObject)); + // ********** Set the Ally Health Percentage ********** + nHealth = ai_GetPercHPLoss(oObject); + SetLocalInt(oCreature, AI_ALLY_HEALTH + sCnt, nHealth); + // ********** Set the number of enemies near the ally ********** + nInMelee = 0; + nNth = 1; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, nNth); + while(oMelee != OBJECT_INVALID && !GetIsDead(oMelee) && + GetDistanceBetween(oMelee, oObject) < AI_RANGE_MELEE) + { + if(GetIsEnemy(oMelee, oCreature)) nInMelee++; + //else nInMelee--; + oMelee = GetNearestObject(OBJECT_TYPE_CREATURE, oObject, ++nNth); + } + SetLocalInt(oCreature, AI_ALLY_MELEE + sCnt, nInMelee); + // ********** Set the Allies distance ********** + SetLocalFloat(oCreature, AI_ALLY_RANGE + sCnt, GetDistanceBetween(oObject, oCreature)); + // ********** All allies are considered to be seen ********** + SetLocalInt(oCreature, AI_ALLY_PERCEIVED + sCnt, TRUE); + // ********** Get the Total levels of the Allies ********** + nPower = ai_GetCharacterLevels(oObject); + if(nAllyHighestPower < nPower) nAllyHighestPower = nPower; + nAllyPower +=(nPower * nHealth) / 100; + if(AI_DEBUG) ai_Debug("0i_combat", "647", "Ally(" + IntToString(nAllyNum) + "): " + + GetName(oObject) + sDebugText); + if(AI_DEBUG) ai_Debug("0i_combat", "649", "nHealth: " + IntToString(nHealth) + + " nInMelee: " + IntToString(nInMelee) + + " fDistance: " + FloatToString(GetDistanceToObject(oObject), 0, 2) + + " nNum: " + IntToString(nAllyNum) + + " nPower: " + IntToString(nAllyPower / 2)); + } + } + if(AI_DEBUG) sDebugText = ""; + oObject = GetNextObjectInShape(SHAPE_SPHERE, AI_RANGE_BATTLEFIELD, lLocation); + } + if(AI_DEBUG) ai_Debug("0i_combat", "659", "Nearest Enemy: " + GetName(oNearestEnemy)); + if(AI_DEBUG) ai_Debug("0i_combat", "660", "****************** FINISHED COMBAT DATA *******************"); + if(AI_DEBUG) ai_Debug("0i_combat", "661", "************************************************************"); + // Lets save processing by only clearing previous enemy data we don't overwrite. + int nPreviousEnd = GetLocalInt(oCreature, AI_ENEMY_NUMBERS); + int nCnt = nEnemyNum + 1; + if(AI_DEBUG) ai_Debug("0i_combat", "665", "Clearing Enemy Combat Data: nPreviousEnd: " + + IntToString(nPreviousEnd) + " nCurrentEnd: " + IntToString(nCnt - 1)); + while(nPreviousEnd >= nCnt) + { + sCnt = IntToString(nCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "670", "Clearing Enemy Combat Data: " + sCnt + " " + + GetName(GetLocalObject(oCreature, AI_ENEMY + sCnt))); + DeleteLocalObject(oCreature, AI_ENEMY + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ENEMY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_HEALTH + sCnt); + nCnt ++; + } + // Lets save processing by only clearing previous ally data we don't overwrite. + nPreviousEnd = GetLocalInt(oCreature, AI_ALLY_NUMBERS); + nCnt = nAllyNum + 1; + if(AI_DEBUG) ai_Debug("0i_combat", "683", "Clearing Ally Combat Data: nPreviousEnd: " + + IntToString(nPreviousEnd) + " nCurrentEnd: " + IntToString(nCnt - 1)); + while(nPreviousEnd >= nCnt) + { + sCnt = IntToString(nCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "688", "Clearing Ally Combat Data: " + sCnt + " " + + GetName(GetLocalObject(oCreature, AI_ENEMY + sCnt))); + DeleteLocalObject(oCreature, AI_ALLY + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ALLY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_HEALTH + sCnt); + nCnt ++; + } + // Finally set all group states. + SetLocalInt(oCreature, AI_ENEMY_NUMBERS, nEnemyNum); + // Total enemy power is half the levels of all enemies + the total levels + // of the highest level enemy. + nEnemyPower = (nEnemyPower / 2) + nEnemyHighestPower; + SetLocalInt(oCreature, AI_ENEMY_POWER, nEnemyPower); + SetLocalObject(oCreature, AI_ENEMY_NEAREST, oNearestEnemy); + SetLocalInt(oCreature, AI_ALLY_NUMBERS, nAllyNum); + // Total ally power is half the levels of all allies + the total levels + // of the highest level ally, only used by associates. + nAllyPower = (nAllyPower / 2) + nAllyHighestPower; + SetLocalInt(oCreature, AI_ALLY_POWER, nAllyPower); + if(AI_DEBUG) ai_Debug("0i_combat", "710", "nEnemyPower: " + IntToString(nEnemyPower) + + " nEnemyHighestPower: " + IntToString(nEnemyHighestPower) + + " nAllyPower: " + IntToString(nAllyPower) + + " nAllyHighestPower: " + IntToString(nAllyHighestPower)); + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + " has finished the Combat State"); + return oNearestEnemy; +} +void ai_ClearCombatState(object oCreature) +{ + int bEnemyDone, bAllyDone, nCnt = 1; + int nEnemyNum = GetLocalInt(oCreature, AI_ENEMY_NUMBERS); + int nAllyNum = GetLocalInt(oCreature, AI_ALLY_NUMBERS); + if(AI_DEBUG) ai_Debug("0i_combat", "722", "Clearing " + GetName(oCreature) + "'s combat state." + + " nEnemyNum: " + IntToString(nEnemyNum) + " nAllyNum: " + IntToString(nAllyNum)); + string sCnt; + while(!bEnemyDone || !bAllyDone) + { + sCnt = IntToString(nCnt); + if(nCnt <= nEnemyNum) + { + if(AI_DEBUG) ai_Debug("0i_combat", "730", "Clearing " + GetName(GetLocalObject(oCreature, AI_ENEMY + sCnt)) + "."); + DeleteLocalObject(oCreature, AI_ENEMY + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_DISABLED + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ENEMY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ENEMY_HEALTH + sCnt); + } + else bEnemyDone = TRUE; + if(nCnt <= nAllyNum) + { + if(AI_DEBUG) ai_Debug("0i_combat", "742", "Clearing " + GetName(GetLocalObject(oCreature, AI_ALLY + sCnt)) + "."); + DeleteLocalObject(oCreature, AI_ALLY + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_DISABLED + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_PERCEIVED + sCnt); + DeleteLocalFloat(oCreature, AI_ALLY_RANGE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_COMBAT + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_MELEE + sCnt); + DeleteLocalInt(oCreature, AI_ALLY_HEALTH + sCnt); + } + else bAllyDone = TRUE; + nCnt++; + } + DeleteLocalObject(oCreature, AI_ENEMY_NEAREST); + DeleteLocalInt(oCreature, AI_ENEMY_NUMBERS); + DeleteLocalInt(oCreature, AI_ENEMY_POWER); + DeleteLocalInt(oCreature, AI_ALLY_NUMBERS); + DeleteLocalObject(oCreature, AI_ALLY_POWER); + // Also clear these combat variables at the end of combat. + DeleteLocalObject(oCreature, AI_ATTACKED_PHYSICAL); + DeleteLocalObject(oCreature, AI_ATTACKED_SPELL); + // Remove Talent variables. + DeleteLocalJson(oCreature, AI_TALENT_CURE); + DeleteLocalJson(oCreature, AI_TALENT_HEALING); + DeleteLocalJson(oCreature, AI_TALENT_ENHANCEMENT); + DeleteLocalJson(oCreature, AI_TALENT_PROTECTION); + DeleteLocalJson(oCreature, AI_TALENT_SUMMON); + DeleteLocalJson(oCreature, AI_TALENT_DISCRIMINANT_AOE); + DeleteLocalJson(oCreature, AI_TALENT_INDISCRIMINANT_AOE); + DeleteLocalJson(oCreature, AI_TALENT_RANGED); + DeleteLocalJson(oCreature, AI_TALENT_TOUCH); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_HEALING); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_ENHANCEMENT); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_PROTECTION); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_SUMMON); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_DISCRIMINANT_AOE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_INDISCRIMINANT_AOE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_RANGED); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_TOUCH); + DeleteLocalInt(oCreature, AI_AM_I_SEARCHING); + DeleteLocalInt(oCreature, AI_TRIED_TO_HIDE); + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + DeleteLocalInt(oCreature, sLastActionVarname); + DeleteLocalInt(oCreature, AI_TALENTS_SET); + DeleteLocalInt(oCreature, AI_ROUND); + DeleteLocalInt(oCreature, sIPHasHasteVarname); + DeleteLocalInt(oCreature, sIPImmuneVarname); + DeleteLocalInt(oCreature, sIPResistVarname); + DeleteLocalInt(oCreature, sIPReducedVarname); + DeleteLocalJson(oCreature, AI_TALENT_IMMUNITY); + ai_EndCombatRound(oCreature); +} +void ai_ClearTalents(object oCreature) +{ + // Remove Talent variables. + DeleteLocalJson(oCreature, AI_TALENT_CURE); + DeleteLocalJson(oCreature, AI_TALENT_HEALING); + DeleteLocalJson(oCreature, AI_TALENT_ENHANCEMENT); + DeleteLocalJson(oCreature, AI_TALENT_PROTECTION); + DeleteLocalJson(oCreature, AI_TALENT_SUMMON); + DeleteLocalJson(oCreature, AI_TALENT_DISCRIMINANT_AOE); + DeleteLocalJson(oCreature, AI_TALENT_INDISCRIMINANT_AOE); + DeleteLocalJson(oCreature, AI_TALENT_RANGED); + DeleteLocalJson(oCreature, AI_TALENT_TOUCH); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_HEALING); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_ENHANCEMENT); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_PROTECTION); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_SUMMON); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_DISCRIMINANT_AOE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_INDISCRIMINANT_AOE); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_RANGED); + DeleteLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_TOUCH); +} +//****************************************************************************** +//*********************** GET TARGETS INTERNAL FUNCTIONS *********************** +//****************************************************************************** +// These functions are used by the Get Index/ Get Target functions below. + +int ai_TargetIsInRangeofCreature(object oCreature, string sTargetType, string sCounter, float fMaxRange) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "952", "fMaxRange: " + FloatToString(fMaxRange, 0, 2) + + " fTargetRange: " + FloatToString(GetLocalFloat(oCreature, sTargetType + "_RANGE" + sCounter), 0, 2)); + return fMaxRange >= GetLocalFloat(oCreature, sTargetType + "_RANGE" + sCounter); +} +int ai_TargetIsInRangeofMaster(object oCreature, object oTarget) +{ + object oMaster = GetMaster(); + if(oMaster == OBJECT_INVALID) return TRUE; + float fMaxRange = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fMaxRange == 0.0) fMaxRange = 20.0; + float fTargetRangefromMaster = GetDistanceBetween(oTarget, oMaster); + if(AI_DEBUG) ai_Debug("0i_combat", "963", "fMaxRangefromMaster: " + FloatToString(fMaxRange, 0, 2) + + " fTargetRangefromMaster: " + FloatToString(fTargetRangefromMaster, 0, 2)); + return fMaxRange >= fTargetRangefromMaster; +} +struct stTarget ai_CheckForNearestTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "969", "Getting nearest index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2)); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nSecondaryIndex = nIndex; + } + } + else if(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForLowestValueTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "992", "Getting lowest value index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue) + + " sTarget.nBestSecondaryValue: " + IntToString(sTarget.nBestSecondaryValue)); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(sTarget.nValue < sTarget.nBestSecondaryValue || + (sTarget.nValue == sTarget.nBestSecondaryValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange)) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestSecondaryValue = sTarget.nValue; + sTarget.nSecondaryIndex = nIndex; + } + } + // Has less value or equal value and is closer. + else if(sTarget.nValue < sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForHighestValueTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1025", "Getting highest value index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue) + + " sTarget.nBestSecondaryValue: " + IntToString(sTarget.nBestSecondaryValue)); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(sTarget.nValue > sTarget.nBestSecondaryValue || + (sTarget.nValue == sTarget.nBestSecondaryValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange)) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestSecondaryValue = sTarget.nValue; + sTarget.nSecondaryIndex = nIndex; + } + } + // Has less value or equal value and is closer. + else if(sTarget.nValue > sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForNearestAllTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1153", "Getting nearest (not disabled) index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2)); + // If we are ignoring associates set then ignore them. + // Has lower value or equal value and is closer. Familiars/Companions/Summons/Dominated. + if(AI_DEBUG) ai_Debug("0i_combat", "1158", "Don't Ignore Associate: " + IntToString(!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES)) + + " Not an Associate? " + IntToString(GetAssociateType(sTarget.oTarget) < 2)); + if((!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) || GetAssociateType(sTarget.oTarget) < 2) && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForLowestValueAllTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1170", "Getting lowest value index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue)); + // Has less value or equal value and is closer. Ignoring only Familiars/Companions/Summons/Dominated. + if(AI_DEBUG) ai_Debug("0i_combat", "1176", "Don't Ignore Associate: " + IntToString(!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES)) + + " Not an Associate? " + IntToString(GetAssociateType(sTarget.oTarget) < 2)); + if((!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) || GetAssociateType(sTarget.oTarget) < 2) && + sTarget.nValue < sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForNearestPhysicalTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "969", "Getting nearest physical index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + !GetIsWeaponEffective(sTarget.oTarget) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nSecondaryIndex = nIndex; + } + } + else if(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForLowestValuePhysicalTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1126", "Getting lowest value physcial index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue) + + " sTarget.nBestSecondaryValue: " + IntToString(sTarget.nBestSecondaryValue) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + !GetIsWeaponEffective(sTarget.oTarget) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(sTarget.nValue < sTarget.nBestSecondaryValue || + (sTarget.nValue == sTarget.nBestSecondaryValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange)) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestSecondaryValue = sTarget.nValue; + sTarget.nSecondaryIndex = nIndex; + } + } + // Has less value or equal value and is closer. + else if(sTarget.nValue < sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +struct stTarget ai_CheckForHighestValuePhysicalTarget(object oCreature, struct stTarget sTarget, int nIndex, string sIndex) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1025", "Getting highest value physical index: " + sIndex + + " fRange: " + FloatToString(GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex), 0, 2) + + " fNearestRange: " + FloatToString(sTarget.fNearestRange, 0, 2) + + " fNearestSecondaryRange: " + FloatToString(sTarget.fNearestSecondaryRange, 0, 2) + + " sTarget.nValue: " + IntToString(sTarget.nValue) + + " sTarget.nBestValue: " + IntToString(sTarget.nBestValue) + + " sTarget.nBestSecondaryValue: " + IntToString(sTarget.nBestSecondaryValue) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + // Lets put any disabled targets and associates if set in a secondary group. + if(GetLocalInt(oCreature, sTarget.sTargetType + "_DISABLED" + sIndex) || + !GetIsWeaponEffective(sTarget.oTarget) || + (ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && GetAssociateType(sTarget.oTarget))) + { + if(sTarget.nValue > sTarget.nBestSecondaryValue || + (sTarget.nValue == sTarget.nBestSecondaryValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestSecondaryRange)) + { + sTarget.fNearestSecondaryRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestSecondaryValue = sTarget.nValue; + sTarget.nSecondaryIndex = nIndex; + } + } + // Has less value or equal value and is closer. + else if(sTarget.nValue > sTarget.nBestValue || + (sTarget.nBestValue == sTarget.nValue && + GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex) < sTarget.fNearestRange)) + { + sTarget.fNearestRange = GetLocalFloat(oCreature, sTarget.sTargetType + "_RANGE" + sIndex); + sTarget.nBestValue = sTarget.nValue; + sTarget.nIndex = nIndex; + } + return sTarget; +} +//****************************************************************************** +//************ GET INDEX/TARGETs USING COMBAT STATE FUNCTIONS ****************** +//****************************************************************************** +// These functions will find a target based on the combat state variables created +// by the function ai_SetCombatState for associates. + +int ai_GetNearestIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + return ai_GetLowestCRIndex(oCreature, fMaxRange, sTargetType); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1211", "Getting the nearest index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1229", "Found nearest [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1234", "Getting the nearest target."); + string sIndex = IntToString(ai_GetNearestIndex(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1251", "Getting the lowest CR index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1270", "Found lowest CR [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetLowestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1275", "Getting the lowest CR target."); + string sIndex = IntToString(ai_GetLowestCRIndex(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestCRIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1292", "Getting the highest CR index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1311", "Found highest CR [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetHighestCRTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1316", "Getting the highest CR target."); + string sIndex = IntToString(ai_GetHighestCRIndex(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetNearestIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRIndexNotInAOE(oCreature, fMaxRange, sTargetType); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1335", "Getting the nearest not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1353", "Found nearest not in AOE Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1358", "Getting the nearest not in AOE target."); + string sIndex = IntToString(ai_GetNearestIndexNotInAOE(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1375", "Getting the lowest CR not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1394", "Found lowest CR not in AOE [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetLowestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1399", "Getting the lowest cr not in AOE target."); + string sIndex = IntToString(ai_GetLowestCRIndexNotInAOE(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestCRIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1416", "Getting the highest CR not in AOE index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1435", "Found highest CR not in AOE [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetHighestTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1440", "Getting the highest cr not in AOE target."); + string sIndex = IntToString(ai_GetHighestCRIndexNotInAOE(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetNearestPhysicalIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + return ai_GetLowestCRPhysicalIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1464", "Getting the nearest physical index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1471", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestPhysicalTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1484", "Found nearest [" + sTargetType + "] Physical Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestPhysicalTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1484", "Getting the nearest physcial target."); + string sIndex = IntToString(ai_GetNearestPhysicalIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestCRPhysicalIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1501", "Getting the lowest CR physical index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1508", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValuePhysicalTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1522", "Found lowest CR [" + sTargetType + "] Physical Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetLowestCRPhysicalTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1527", "Getting the lowest CR physical target."); + string sIndex = IntToString(ai_GetLowestCRPhysicalIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestCRPhysicalIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1544", "Getting the highest CR physical index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1551", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValuePhysicalTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1565", "Found highest CR [" + sTargetType + "] Physical Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetHighestCRPhysicalTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1570", "Getting the highest CR physical target."); + string sIndex = IntToString(ai_GetHighestCRPhysicalIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetNearestPhysicalIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRPhysicalIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1589", "Getting the nearest physical index not in AOE: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1596", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1609", "Found nearest Physcial Index not in AOE: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestPhysicalTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1614", "Getting the nearest physical target not in AOE."); + string sIndex = IntToString(ai_GetNearestPhysicalIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestCRPhysicalIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1631", "Getting the lowest CR physical index not in AOE: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1551", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1652", "Found lowest CR Physical Index not in AOE [" + sTargetType + "]: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetLowestPhysicalTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1657", "Getting the lowest cr physcial target not in AOE."); + string sIndex = IntToString(ai_GetLowestCRPhysicalIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestCRPhysicalIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1674", "Getting the highest CR physical index not in AOE: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1681", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1695", "Found highest CR Physical Index not in AOE [" + sTargetType + "]: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetHighestCRPhysicalTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1700", "Getting the highest cr physical target not in AOE."); + string sIndex = IntToString(ai_GetHighestCRPhysicalIndexNotInAOE(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetLowestGroupIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1717", "Getting the lowest group index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_MELEE" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1736", "Found lowest Group Index [" + sTargetType + "]: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +int ai_GetHighestGroupIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1752", "Getting the highest group index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_MELEE" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1771", "Found highest Group Index [" + sTargetType + "]: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetGroupTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1776", "Getting the highest group target."); + string sIndex = IntToString(ai_GetHighestGroupIndex(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetHighestGroupIndexNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1793", "Getting the highest group index not in AOE: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && !ai_IsInADangerousAOE(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_MELEE" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1812", "Found highest Group Index not in AOE [" + sTargetType + "]: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetGroupTargetNotInAOE(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1818", "Getting the highest group target not in AOE."); + string sIndex = IntToString(ai_GetHighestGroupIndexNotInAOE(oCreature, fMaxRange, sTargetType)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetMostWoundedIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1834", "Getting the most wounded index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1841", "bAlwaysAtk: " + IntToString(bAlwaysAtk)); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_HEALTH" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1855", "Found most wounded [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetMostWoundedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1860", "Getting the most wounded target."); + string sIndex = IntToString(ai_GetMostWoundedIndex(oCreature, fMaxRange, sTargetType, bAlwaysAtk)); + return GetLocalObject(oCreature, sTargetType + sIndex); +} +int ai_GetAllyToHealIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.nBestValue = 200; + sTarget.sTargetType = AI_ALLY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTarget.sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1875", "Getting the most wounded ally to heal index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ALLY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ALLY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ALLY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, AI_ALLY_HEALTH + sCounter); + sTarget = ai_CheckForLowestValueAllTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ALLY + sCounter); + } + // If we do not have a normal target then we are done.. + if(AI_DEBUG) ai_Debug("0i_combat", "1893", "Found most wounded ally to heal Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetAllyToHealTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "1898", "Getting the most wounded ally to heal target."); + string sIndex = IntToString(ai_GetAllyToHealIndex(oCreature, fMaxRange)); + return GetLocalObject(oCreature, AI_ALLY + sIndex); +} +object ai_GetLowestFortitudeSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1915", "Getting the lowest fortitude save index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetFortitudeSavingThrow(sTarget.oTarget); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1934", "Found lowest fortitude save Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetLowestReflexSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1950", "Getting the lowest reflex save index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetReflexSavingThrow(sTarget.oTarget); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "1969", "Found lowest reflex save Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetLowestWillSaveTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 200; + sTarget.nBestSecondaryValue = 200; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "1985", "Getting the lowest will save index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetWillSavingThrow(sTarget.oTarget); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2004", "Found lowest will save Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetSpellTargetBasedOnSaves(object oCreature, int nSpell, float fMaxRange = AI_RANGE_PERCEPTION) +{ + // Check the spells save type in "ai_spells.2da" and find the weakest + // creature based on that save. + string sSaveType = Get2DAString("ai_spells", "SaveType", nSpell); + if(sSaveType == "Reflex") return ai_GetLowestReflexSaveTarget(oCreature, fMaxRange); + if(sSaveType == "Fortitude") return ai_GetLowestFortitudeSaveTarget(oCreature, fMaxRange); + if(sSaveType == "Will") return ai_GetLowestWillSaveTarget(oCreature, fMaxRange); + // If there is no save then lets see if we can find an enemy with the lowest health. + return ai_GetMostWoundedTarget(oCreature, fMaxRange); +} +int ai_GetNearestIndexThatSeesUs(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2029", "Getting the nearest creature that sees us index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2039", GetName(sTarget.oTarget) + " can see us? " + + IntToString(GetObjectSeen(oCreature, sTarget.oTarget))); + if(GetObjectSeen(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestAllTarget(oCreature, sTarget, nCounter, sCounter); + } + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(AI_DEBUG) ai_Debug("0i_combat", "2051", "Found nearest creature that sees us Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +int ai_GetBestSneakAttackIndex(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + object oAttacking; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2066", "Getting the best sneak attack index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && + !ai_IsImmuneToSneakAttacks(oCreature, sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2074", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + oAttacking = ai_GetAttackedTarget(sTarget.oTarget); + if(AI_DEBUG) ai_Debug("0i_combat", "2082", "oTarget: " + GetName(sTarget.oTarget) + + " is attacking " + GetName(oAttacking)); + // They are attacking someone besides us or we are hidden? + if((oAttacking != OBJECT_INVALID && oAttacking != oCreature) || + GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2097", "Found best sneak attack Index: " + IntToString(sTarget.nIndex)); + return sTarget.nIndex; +} +object ai_GetNearestClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRClassTarget(oCreature, nClassType, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2115", "Getting the nearest class index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckClassType(sTarget.oTarget, nClassType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2122", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2137", "Found nearest class Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetLowestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2153", "Getting the lowest CR class index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckClassType(sTarget.oTarget, nClassType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2160", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2176", "Found lowest CR class [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetHighestCRClassTarget(object oCreature, int nClassType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2192", "Getting the highest CR class index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckClassType(sTarget.oTarget, nClassType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2199", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2215", "Found highest CR class [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetNearestRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + if(GetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY)) + { + ai_GetLowestCRRacialTarget(oCreature, nRacialType, fMaxRange, sTargetType, bAlwaysAtk); + } + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2233", "Getting the nearest race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2240", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2255", "Found nearest race Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetLowestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = 100; + sTarget.nBestSecondaryValue = 100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2271", "Getting the lowest CR race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2278", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForLowestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2294", "Found lowest CR race [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetHighestCRRacialTarget(object oCreature, int nRacialType, float fMaxRange = AI_RANGE_PERCEPTION, string sTargetType = AI_ENEMY, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = sTargetType; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2310", "Getting the highest CR race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, sTargetType + "_PERCEIVED" + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2317", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, sTargetType, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget.nValue = GetLocalInt(oCreature, sTargetType + "_COMBAT" + sCounter); + sTarget = ai_CheckForHighestValueTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, sTargetType + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2333", "Found highest CR race [" + sTargetType + "] Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, sTargetType + IntToString(sTarget.nIndex)); +} +object ai_GetNearestFavoredEnemyTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.nBestValue = -100; + sTarget.nBestSecondaryValue = -100; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + int nRace, nRacialType; + while(nRace < 24) + { + // Find which favored enemies we have. + if(nRace < 1 && GetHasFeat(FEAT_FAVORED_ENEMY_ABERRATION, oCreature)) + { + nRace = 1; + nRacialType = RACIAL_TYPE_ABERRATION; + } + else if(nRace < 2 && GetHasFeat(FEAT_FAVORED_ENEMY_ANIMAL, oCreature)) + { + nRace = 2; + nRacialType = RACIAL_TYPE_ANIMAL; + } + else if(nRace < 3 && GetHasFeat(FEAT_FAVORED_ENEMY_BEAST, oCreature)) + { + nRace = 3; + nRacialType = RACIAL_TYPE_BEAST; + } + else if(nRace < 4 && GetHasFeat(FEAT_FAVORED_ENEMY_CONSTRUCT, oCreature)) + { + nRace = 4; + nRacialType = RACIAL_TYPE_CONSTRUCT; + } + else if(nRace < 5 && GetHasFeat(FEAT_FAVORED_ENEMY_DRAGON, oCreature)) + { + nRace = 5; + nRacialType = RACIAL_TYPE_DRAGON; + } + else if(nRace < 6 && GetHasFeat(FEAT_FAVORED_ENEMY_DWARF, oCreature)) + { + nRace = 6; + nRacialType = RACIAL_TYPE_DWARF; + } + else if(nRace < 7 && GetHasFeat(FEAT_FAVORED_ENEMY_ELEMENTAL, oCreature)) + { + nRace = 7; + nRacialType = RACIAL_TYPE_ELEMENTAL; + } + else if(nRace < 8 && GetHasFeat(FEAT_FAVORED_ENEMY_ELF, oCreature)) + { + nRace = 8; + nRacialType = RACIAL_TYPE_ELF; + } + else if(nRace < 9 && GetHasFeat(FEAT_FAVORED_ENEMY_FEY, oCreature)) + { + nRace = 9; + nRacialType = RACIAL_TYPE_FEY; + } + else if(nRace < 10 && GetHasFeat(FEAT_FAVORED_ENEMY_GIANT, oCreature)) + { + nRace = 10; + nRacialType = RACIAL_TYPE_GIANT; + } + else if(nRace < 11 && GetHasFeat(FEAT_FAVORED_ENEMY_GNOME, oCreature)) + { + nRace = 11; + nRacialType = RACIAL_TYPE_GNOME; + } + else if(nRace < 12 && GetHasFeat(FEAT_FAVORED_ENEMY_GOBLINOID, oCreature)) + { + nRace = 12; + nRacialType = RACIAL_TYPE_HUMANOID_GOBLINOID; + } + else if(nRace < 13 && GetHasFeat(FEAT_FAVORED_ENEMY_HALFELF, oCreature)) + { + nRace = 13; + nRacialType = RACIAL_TYPE_HALFELF; + } + else if(nRace < 14 && GetHasFeat(FEAT_FAVORED_ENEMY_HALFLING, oCreature)) + { + nRace = 14; + nRacialType = RACIAL_TYPE_HALFLING; + } + else if(nRace < 15 && GetHasFeat(FEAT_FAVORED_ENEMY_HALFORC, oCreature)) + { + nRace = 15; + nRacialType = RACIAL_TYPE_HALFORC; + } + else if(nRace < 16 && GetHasFeat(FEAT_FAVORED_ENEMY_HUMAN, oCreature)) + { + nRace = 16; + nRacialType = RACIAL_TYPE_HUMAN; + } + else if(nRace < 17 && GetHasFeat(FEAT_FAVORED_ENEMY_MAGICAL_BEAST, oCreature)) + { + nRace = 17; + nRacialType = RACIAL_TYPE_MAGICAL_BEAST; + } + else if(nRace < 18 && GetHasFeat(FEAT_FAVORED_ENEMY_MONSTROUS, oCreature)) + { + nRace = 18; + nRacialType = RACIAL_TYPE_HUMANOID_MONSTROUS; + } + else if(nRace < 19 && GetHasFeat(FEAT_FAVORED_ENEMY_ORC, oCreature)) + { + nRace = 19; + nRacialType = RACIAL_TYPE_HUMANOID_ORC; + } + else if(nRace < 20 && GetHasFeat(FEAT_FAVORED_ENEMY_OUTSIDER, oCreature)) + { + nRace = 20; + nRacialType = RACIAL_TYPE_OUTSIDER; + } + else if(nRace < 21 && GetHasFeat(FEAT_FAVORED_ENEMY_REPTILIAN, oCreature)) + { + nRace = 21; + nRacialType = RACIAL_TYPE_HUMANOID_REPTILIAN; + } + else if(nRace < 22 && GetHasFeat(FEAT_FAVORED_ENEMY_SHAPECHANGER, oCreature)) + { + nRace = 22; + nRacialType = RACIAL_TYPE_SHAPECHANGER; + } + else if(nRace < 23 && GetHasFeat(FEAT_FAVORED_ENEMY_UNDEAD, oCreature)) + { + nRace = 23; + nRacialType = RACIAL_TYPE_UNDEAD; + } + else if(nRace < 24 && GetHasFeat(FEAT_FAVORED_ENEMY_VERMIN, oCreature)) + { + nRace = 24; + nRacialType = RACIAL_TYPE_VERMIN; + } + else nRace = 25; + if(nRace < 25) + { + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2476", "Getting the nearest favored race index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget) && ai_CheckRacialType(sTarget.oTarget, nRacialType)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2483", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + } + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2500", "Found nearest favored race Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetFlankTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + int nCnt = 1, nInMelee, nHighestMelee; + string sCnt = "1"; + float fAllyRange; + object oTarget, oAlly = GetLocalObject(oCreature, AI_ALLY + sCnt); + while(oAlly != OBJECT_INVALID) + { + fAllyRange = GetLocalFloat(oCreature, AI_ALLY_RANGE + sCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "2512", "Getting Ally being Flanked Index: " + sCnt + " " + + GetName(oAlly) + " fAllyRange: " + FloatToString(fAllyRange, 0, 2) + + " fMaxRange: " + FloatToString(fMaxRange, 0, 2)); + if(fAllyRange <= fMaxRange) + { + nInMelee = GetLocalInt(oCreature, AI_ALLY_MELEE + sCnt); + if(AI_DEBUG) ai_Debug("0i_combat", "2519", "nInMelee: " + IntToString(nInMelee)); + if(!GetIsDead(oAlly) && nInMelee > nHighestMelee) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2521", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCnt)) && + GetIsWeaponEffective(oTarget)) + { + oTarget = ai_GetEnemyAttackingMyAlly(oCreature, oAlly, fMaxRange); + if(oTarget != OBJECT_INVALID) nHighestMelee = nInMelee; + } + } + } + sCnt = IntToString(++nCnt); + oAlly = GetLocalObject(oCreature, AI_ALLY + sCnt); + } + // If we do not have a good target then lets see if there are more targets. + if(oTarget == OBJECT_INVALID) + { + // If we just checked within melee then lets check what we can see if + // we can move around in combat. + if(fMaxRange == AI_RANGE_MELEE && ai_CanIMoveInCombat(oCreature)) + { + oTarget = ai_GetFlankTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + } + } + if(AI_DEBUG) ai_Debug("0i_combat", "2544", "oTarget " + GetName(oTarget) + + " is attacking " + GetName(oAlly)); + return oTarget; +} +object ai_GetRangedTarget(object oCreature, float fMaxRange = AI_RANGE_PERCEPTION, int bAlwaysAtk = TRUE) +{ + struct stTarget sTarget; + sTarget.fNearestRange = fMaxRange + 1.0; + sTarget.fNearestSecondaryRange = sTarget.fNearestRange; + sTarget.sTargetType = AI_ENEMY; + int nCounter = 1; + string sCounter = "1"; + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + while(sTarget.oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2559", "Getting the nearest ranged index: " + + sCounter + " " + GetName(sTarget.oTarget) + + " Seen: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter)) + + " GetIsDead: " + IntToString(GetIsDead(sTarget.oTarget))); + if(GetLocalInt(oCreature, AI_ENEMY_PERCEIVED + sCounter) && + !GetIsDead(sTarget.oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2566", "bAlwaysAtk: " + IntToString(bAlwaysAtk) + + " Weapon Effective: " + IntToString(GetIsWeaponEffective(sTarget.oTarget))); + if((bAlwaysAtk || !ai_IsStrongerThanMe(oCreature, nCounter)) && + GetIsWeaponEffective(sTarget.oTarget) && + ai_TargetIsInRangeofCreature(oCreature, AI_ENEMY, sCounter, fMaxRange) && + ai_TargetIsInRangeofMaster(oCreature, sTarget.oTarget)) + { + if(ai_GetIsRangeWeapon(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, sTarget.oTarget))) + { + sTarget = ai_CheckForNearestTarget(oCreature, sTarget, nCounter, sCounter); + } + } + } + sCounter = IntToString(++nCounter); + sTarget.oTarget = GetLocalObject(oCreature, AI_ENEMY + sCounter); + } + // If we do not have a normal target then use our best secondary target. + if(sTarget.nIndex == 0 && sTarget.nSecondaryIndex != 0) sTarget.nIndex = sTarget.nSecondaryIndex; + if(AI_DEBUG) ai_Debug("0i_combat", "2584", "Found nearest ranged Index: " + IntToString(sTarget.nIndex)); + return GetLocalObject(oCreature, AI_ENEMY + IntToString(sTarget.nIndex)); +} +object ai_GetBestTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the weakest enemy in melee. + if(nInMelee > 0) + { + if(ai_CanIMoveInCombat(oCreature)) + { + sIndex = IntToString(ai_GetLowestCRPhysicalIndex(oCreature, AI_RANGE_MELEE)); + } + else sIndex = IntToString(ai_GetNearestPhysicalIndex(oCreature, AI_RANGE_MELEE)); + } + // If not then lets go find someone to attack! + else + { + // If we are not in melee then we should get the nearest enemy. + sIndex = IntToString(ai_GetNearestPhysicalIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + // If we didn't get a target then get any target within range. + if(sIndex == "0") + { + sIndex = IntToString(ai_GetLowestCRPhysicalIndex(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + } + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2614", GetName(oTarget) + " is the best target for melee combat!"); + return oTarget; +} +object ai_GetNearestTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the nearest enemy in melee. + if(nInMelee > 0) sIndex = IntToString(ai_GetNearestPhysicalIndex(oCreature, AI_RANGE_MELEE)); + // If not then lets go find someone to attack! + else + { + // Get the nearest enemy. + sIndex = IntToString(ai_GetNearestPhysicalIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + // If we didn't get a target then get any target within range. + if(sIndex == "0") + { + sIndex = IntToString(ai_GetNearestPhysicalIndex(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + } + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // If we don't have a target lets try one last time and see if we can find one. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2637", GetName(oTarget) + " is the nearest target for melee combat!"); + return oTarget; +} +object ai_GetLowestCRTargetForMeleeCombat(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the weakest enemy in melee. + if(nInMelee > 0) sIndex = IntToString(ai_GetLowestCRPhysicalIndex(oCreature, AI_RANGE_MELEE)); + // If not then lets go find someone to attack! + else + { + // Get the weakest combat rated enemy. + sIndex = IntToString(ai_GetLowestCRPhysicalIndexNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + // If we didn't get a target then get any target within range. + if(sIndex == "0") + { + sIndex = IntToString(ai_GetLowestCRPhysicalIndex(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk)); + } + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // If we don't have a target lets try one last time and see if we can find one. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2660", GetName(oTarget) + " is the weakest target for melee combat!"); + return oTarget; +} +object ai_GetHighestCRTargetForMeleeCombat(object oCreature, int nInMelee) +{ + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget != OBJECT_INVALID) return oPCTarget; + string sIndex; + // Are we in melee? If so try to get the weakest enemy in melee. + if(nInMelee > 0) sIndex = IntToString(ai_GetHighestCRPhysicalIndex(oCreature, AI_RANGE_MELEE)); + // If not then lets go find someone to attack! + else + { + // Get the weakest combat rated enemy. + sIndex = IntToString(ai_GetHighestCRPhysicalIndexNotInAOE(oCreature)); + // If we didn't get a target then get any target within range. + if(sIndex == "0") sIndex = IntToString(ai_GetHighestCRPhysicalIndex(oCreature)); + } + object oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + // If we don't have a target lets try one last time and see if we can find one. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetHighestCRPhysicalTarget(oCreature); + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("0i_combat", "2680", GetName(oTarget) + " is the strongest target for melee combat!"); + return oTarget; +} +object ai_GetEnemyAttackingMe(object oCreature, float fMaxRange = AI_RANGE_MELEE) +{ + int nCtr = 1; + float fDistance; + string sCtr = "1"; + object oAttacked; + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + "1"); + while(oEnemy != OBJECT_INVALID) + { + if(!ai_Disabled(oEnemy)) + { + fDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sCtr); + if(AI_DEBUG) ai_Debug("0i_combat", "2695", "Getting Enemy Attacking Me: " + sCtr + " " + + GetName(oEnemy) + " fTargetRange: " + FloatToString(fDistance, 0, 2) + + " fMaxRange: " + FloatToString(fMaxRange, 0, 2) + " Attacking: " + + GetName(ai_GetAttackedTarget(oEnemy))); + if(fDistance <= fMaxRange) + { + oAttacked = ai_GetAttackedTarget(oEnemy); + // If an enemy isn't attacking someone we must assume we are next! + if(oAttacked == oCreature || oAttacked == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "2705", "Enemy attacking me: " + GetName(oEnemy) + " has attacked: " + GetName(ai_GetAttackedTarget(oEnemy))); + return oEnemy; + } + } + } + sCtr = IntToString(++nCtr); + oEnemy = GetLocalObject(oCreature, AI_ENEMY + sCtr); + } + return OBJECT_INVALID; +} +object ai_GetEnemyAttackingMyAlly(object oCreature, object oAlly, float fMaxRange = AI_RANGE_MELEE) +{ + int nCtr = 1, nIndex, nDIndex; + int bIngnoreAssociates = ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES); + float fEnemyRange, fNearestEnemyRange = fMaxRange + 1.0; + float fNearestDEnemyRange = fMaxRange + 1.0; + string sCtr = "1"; + object oAttacked; + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + "1"); + while(oEnemy != OBJECT_INVALID) + { + fEnemyRange = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sCtr); + if(AI_DEBUG) ai_Debug("0i_combat", "2727", "Getting Enemy Attacking Ally:" + + GetName(oAlly) + ": " + sCtr + " InMelee:" + + GetName(oEnemy) + " fEnemyRange: " + FloatToString(fEnemyRange, 0, 2) + + " fMaxRange: " + FloatToString(fMaxRange, 0, 2) + " Attacking: " + + GetName(ai_GetAttackedTarget(oEnemy))); + if(fEnemyRange <= fMaxRange) + { + oAttacked = ai_GetAttackedTarget(oEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "2735", "Enemy attacking " + + GetName(oAlly) + ": " + GetName(oEnemy) + + " has attacked: " + GetName(ai_GetAttackedTarget(oEnemy))); + // If an enemy isn't attacking someone we must assume we are next! + if(oAttacked == oAlly) + { + // Lets put any disabled targets in its own group, if we + // ignore associates lets put them here as well. + if(GetLocalInt(oCreature, AI_ENEMY_DISABLED + sCtr) || + (bIngnoreAssociates && GetAssociateType(oEnemy))) + { + if(fEnemyRange < fNearestDEnemyRange) + { + fNearestDEnemyRange = fEnemyRange; + nDIndex = nCtr; + } + } + else if(fEnemyRange < fNearestEnemyRange) + { + fNearestEnemyRange = fEnemyRange; + nIndex = nCtr; + } + } + } + sCtr = IntToString(++nCtr); + oEnemy = GetLocalObject(oCreature, AI_ENEMY + sCtr); + } + // If we do not have a good target then lets see if there are more targets. + if(nIndex == 0 && nDIndex != 0) + { + // If we just checked within melee then lets check what we can see. + if (fMaxRange == AI_RANGE_MELEE) return ai_GetEnemyAttackingMyAlly(oCreature, oAlly, AI_RANGE_PERCEPTION); + else nIndex = nDIndex; + } + return GetLocalObject(oCreature, AI_ENEMY + IntToString(nIndex)); +} +int ai_GetNumOfEnemiesInRange(object oCreature, float fMaxRange = AI_RANGE_MELEE) +{ + int nNumOfEnemies, nCnt = 1; + float fDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + "1"); + while(fDistance != 0.0) + { + if(fDistance < fMaxRange) nNumOfEnemies ++; + fDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + IntToString(++nCnt)); + } + if(AI_DEBUG) ai_Debug("0i_combat", "2780", IntToString (nNumOfEnemies) + " enemies within " + FloatToString(fMaxRange, 0, 2) + " meters."); + return nNumOfEnemies; +} +object ai_GetAllyBuffTarget(object oCreature, int nSpell, float fMaxRange = AI_RANGE_BATTLEFIELD) +{ + // Make sure we don't over extend our movement running across the + // battlefield to cast a spell on someone does not look good. + float fNearestEnemy = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // If we are in melee then extend to melee incase an ally is just past the enemy. + if(fNearestEnemy <= AI_RANGE_MELEE) fNearestEnemy = AI_RANGE_MELEE; + if(fMaxRange > fNearestEnemy) fMaxRange = fNearestEnemy; + // Now lets get the best target based on the spell data in ai_spells.2da + string sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + if(AI_DEBUG) ai_Debug("0i_combat", "2793", "sBuffTarget: " + sBuffTarget + " fMaxRange: " + FloatToString(fMaxRange, 0, 2)); + if(sBuffTarget == "0") return oCreature; + if(sBuffTarget == "1") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_STRENGTH, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "2") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_DEXTERITY, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "3") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_CONSTITUTION, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "4") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_INTELLIGENCE, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "5") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_WISDOM, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "6") + return ai_BuffHighestAbilityScoreTarget(oCreature, nSpell, ABILITY_CHARISMA, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "7") + return ai_BuffLowestACTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "8") + return ai_BuffLowestACWithOutACBonus(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "9") + return ai_BuffHighestAttackTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "10") + return ai_BuffMostWoundedTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "11") + return ai_BuffLowestFortitudeSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "12") + return ai_BuffLowestReflexSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "13") + return ai_BuffLowestWillSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + else if(sBuffTarget == "14") + return ai_BuffLowestSaveTarget(oCreature, nSpell, "", fMaxRange, AI_ALLY); + return OBJECT_INVALID; +} + +//****************************************************************************** +//******************** OTHER COMBAT FUNCTIONS ******************************** +//****************************************************************************** + +int ai_GetCurrentRound(object oCreature) +{ + int nRound = GetLocalInt(oCreature, AI_ROUND) + 1; + SetLocalInt(oCreature, AI_ROUND, nRound); + if(AI_DEBUG) ai_Debug("0i_combat", "2834", "nRound: " + IntToString(nRound)); + return nRound; +} +int ai_GetDifficulty(object oCreature) +{ + int nAdjustment = GetLocalInt(oCreature, AI_DIFFICULTY_ADJUSTMENT); + int nDifficulty = GetLocalInt(oCreature, AI_ENEMY_POWER) - GetLocalInt(oCreature, AI_ALLY_POWER) + 13 + nAdjustment; + if(nDifficulty < 1) nDifficulty = 1; + if(AI_DEBUG) ai_Debug("0i_combat", "2842", "(Difficulty: Enemy Power: " + IntToString(GetLocalInt(oCreature, AI_ENEMY_POWER)) + + " - Ally Power: " + IntToString(GetLocalInt(oCreature, AI_ALLY_POWER)) + + ") + 13 + nAdj: " + IntToString(nAdjustment) + + " = " + IntToString(nDifficulty) + "(Min of 1)"); + return nDifficulty; +} +int ai_GetMyCombatRating(object oCreature) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + int nAtkBonus = GetBaseAttackBonus(oCreature); + if(GetHasFeat(FEAT_WEAPON_FINESSE, oCreature) && ai_GetIsFinesseWeapon(oCreature, oWeapon)) + { + nAtkBonus += GetAbilityModifier(ABILITY_DEXTERITY, oCreature); + } + else nAtkBonus += GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(ai_GetIsMeleeWeapon(oWeapon)) nAtkBonus += ai_GetWeaponAtkBonus(oWeapon); + if(AI_DEBUG) ai_Debug("0i_combat", "2858", "GetMyCombatRating (nAtkBonus: " + IntToString(nAtkBonus) + + " nAC: " + IntToString(GetAC(oCreature)) + " - 10) / 2 = " + + IntToString((nAtkBonus + GetAC(oCreature) - 10) / 2)); + return(nAtkBonus + GetAC(oCreature) - 10) / 2; +} +object ai_GetAttackedTarget(object oCreature, int bPhysical = TRUE, int bSpell = FALSE) +{ + object oTarget = GetAttackTarget(oCreature); + if(!GetIsObjectValid(oTarget) && bPhysical) oTarget = GetLocalObject(oCreature, AI_ATTACKED_PHYSICAL); + if(!GetIsObjectValid(oTarget) && bSpell) oTarget = GetLocalObject(oCreature, AI_ATTACKED_SPELL); + if(!GetIsObjectValid(oTarget) || GetIsDead(oTarget)) return OBJECT_INVALID; + return oTarget; +} +int ai_CheckClassType(object oTarget, int nClassType) +{ + int nCnt = 1, nClass = GetClassByPosition(1, oTarget); + // We check for the group class types. + if(nClassType < 0) + { + while(nCnt <= AI_MAX_CLASSES_PER_CHARACTER) + { + int nCaster = StringToInt(Get2DAString("classes", "SpellCaster", nClass)); + if(nClassType == AI_CLASS_TYPE_WARRIOR && !nCaster) return TRUE; + else if(nClassType == AI_CLASS_TYPE_CASTER && nCaster) return TRUE; + int nSpellType = StringToInt(Get2DAString("classes", "Arcane", nClass)); + if(nClassType == AI_CLASS_TYPE_ARCANE && nSpellType) return TRUE; + else if(nClassType == AI_CLASS_TYPE_DIVINE && !nSpellType) return TRUE; + nClass = GetClassByPosition(++nCnt, oTarget); + } + } + // Checks for normal classes. + else + { + while(nCnt <= AI_MAX_CLASSES_PER_CHARACTER) + { + if(nClass == nClassType) return TRUE; + nClass = GetClassByPosition(++nCnt, oTarget); + } + } + return FALSE; +} +int ai_CheckRacialType(object oTarget, int nRacialType) +{ + int nRace = GetRacialType(oTarget); + if(nRacialType == nRace) return TRUE; + else if(nRacialType == AI_RACIAL_TYPE_ANIMAL_BEAST) + { + if(nRace == RACIAL_TYPE_ANIMAL || + nRace == RACIAL_TYPE_BEAST || + nRace == RACIAL_TYPE_MAGICAL_BEAST) return TRUE; + } + else if(nRacialType == AI_RACIAL_TYPE_HUMANOID) + { + switch (nRace) + { + case RACIAL_TYPE_DWARF : + case RACIAL_TYPE_ELF : + case RACIAL_TYPE_GNOME : + case RACIAL_TYPE_HALFELF : + case RACIAL_TYPE_HALFLING : + case RACIAL_TYPE_HALFORC : + case RACIAL_TYPE_HUMAN : + case RACIAL_TYPE_HUMANOID_GOBLINOID : + case RACIAL_TYPE_HUMANOID_MONSTROUS : + case RACIAL_TYPE_HUMANOID_ORC : + case RACIAL_TYPE_HUMANOID_REPTILIAN : + return TRUE; + } + } + return FALSE; +} +void ai_SetNormalAppearance(object oCreature) +{ + if(!ai_GetHasEffectType(oCreature, EFFECT_TYPE_POLYMORPH)) + { + int nForm = GetAppearanceType(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "2835", GetName(oCreature) + " form: " + IntToString(nForm)); + SetLocalInt(oCreature, AI_NORMAL_FORM, nForm + 1); + } +} +int ai_GetNormalAppearance(object oCreature) +{ + int nForm = GetLocalInt(oCreature, AI_NORMAL_FORM) - 1; + if(nForm == -1) + { + ai_SetNormalAppearance(oCreature); + nForm = GetLocalInt(oCreature, AI_NORMAL_FORM) - 1; + } + return nForm; +} +struct stClasses ai_GetFactionsClasses(object oCreature, int bEnemy = TRUE, float fMaxRange = AI_RANGE_BATTLEFIELD) +{ + struct stClasses sCount; + int nCnt = 1, nPosition, nClass, nLevels; + object oTarget; + if(bEnemy) oTarget = ai_GetNearestEnemy(oCreature, 1, 7, 7); + else oTarget = ai_GetNearestAlly(oCreature, 1, 7, 7); + while(oTarget != OBJECT_INVALID && GetDistanceBetween(oTarget, oCreature) <= fMaxRange) + { + for(nPosition = 1; nPosition <= AI_MAX_CLASSES_PER_CHARACTER; nPosition++) + { + nClass = GetClassByPosition(nPosition, oTarget); + nLevels = GetLevelByPosition(nPosition, oTarget); + if(nClass == CLASS_TYPE_ANIMAL || + nClass == CLASS_TYPE_BARBARIAN || + nClass == CLASS_TYPE_COMMONER || + nClass == CLASS_TYPE_CONSTRUCT || + nClass == CLASS_TYPE_ELEMENTAL || + nClass == CLASS_TYPE_FIGHTER || + nClass == CLASS_TYPE_GIANT || + nClass == CLASS_TYPE_HUMANOID || + nClass == CLASS_TYPE_MONSTROUS || + nClass == CLASS_TYPE_PALADIN || + nClass == CLASS_TYPE_RANGER || + nClass == CLASS_TYPE_ROGUE || + nClass == CLASS_TYPE_VERMIN || + nClass == CLASS_TYPE_MONK || + nClass == CLASS_TYPE_SHAPECHANGER) + { + sCount.FIGHTERS += 1; + sCount.FIGHTER_LEVELS += nLevels; + } + else if(nClass == CLASS_TYPE_CLERIC || + nClass == CLASS_TYPE_DRUID) + { + sCount.CLERICS += 1; + sCount.CLERIC_LEVELS += nLevels; + } + else if(nClass == CLASS_TYPE_BARD || + nClass == CLASS_TYPE_FEY || + nClass == CLASS_TYPE_SORCERER || + nClass == CLASS_TYPE_WIZARD) + { + sCount.MAGES += 1; + sCount.MAGE_LEVELS += nLevels; + } + else if(nClass == CLASS_TYPE_ABERRATION || + nClass == CLASS_TYPE_DRAGON || + nClass == 29 || //oozes + nClass == CLASS_TYPE_MAGICAL_BEAST || + nClass == CLASS_TYPE_OUTSIDER) + { + sCount.MONSTERS += 1; + sCount.MONSTER_LEVELS += nLevels; + } + sCount.TOTAL_LEVELS += nLevels; + } + sCount.TOTAL += 1; + if(bEnemy) oTarget = ai_GetNearestEnemy(oCreature, ++nCnt, 7, 7); + else oTarget = ai_GetNearestAlly(oCreature, ++nCnt, 7, 7); + } + if(AI_DEBUG) ai_Debug("0i_combat", "2910", "Enemy: " + IntToString(bEnemy) + " fMaxRange: " + FloatToString(fMaxRange, 0, 2) + + " CLERICS: " + IntToString(sCount.CLERICS) + "(" + IntToString(sCount.CLERIC_LEVELS) + + ") FIGHTERS: " +IntToString(sCount.FIGHTERS) + "(" + IntToString(sCount.FIGHTER_LEVELS) + + ") MAGES: " +IntToString(sCount.MAGES) + "(" + IntToString(sCount.MAGE_LEVELS) + + ") MONSTERS: " +IntToString(sCount.MONSTERS) + "(" + IntToString(sCount.MONSTER_LEVELS) + + ") TOTALS: " +IntToString(sCount.TOTAL) + "(" + IntToString(sCount.TOTAL_LEVELS)); + return sCount; +} +string ai_GetMostDangerousClass(struct stClasses stCount) +{ + string sClass; + // Lets weight the fighter levels 30% higher. + int nFighter =((stCount.FIGHTER_LEVELS) * 13)/10; + if(nFighter >= stCount.CLERIC_LEVELS) + { + if(nFighter >= stCount.MAGE_LEVELS) + { + if(nFighter >= stCount.MONSTER_LEVELS) return "FIGHTER"; + else return "MONSTER"; + } + else if(stCount.MAGE_LEVELS >= stCount.MONSTER_LEVELS) return "MAGE"; + else return "MONSTER"; + } + else if(stCount.CLERIC_LEVELS >= stCount.MAGE_LEVELS) + { + if(stCount.CLERIC_LEVELS >= stCount.MONSTER_LEVELS) return "CLERIC"; + else return "MONSTER"; + } + else if(stCount.MAGE_LEVELS >= stCount.MONSTER_LEVELS) return "MAGE"; + else return "MONSTER"; + return ""; +} +void ai_EquipBestWeapons(object oCreature, object oTarget = OBJECT_INVALID) +{ + // Lets not check for weapons on creatures that can't use them! + int nRacialType = GetRacialType(oCreature); + if(nRacialType == RACIAL_TYPE_ANIMAL || + nRacialType == RACIAL_TYPE_DRAGON || + nRacialType == RACIAL_TYPE_MAGICAL_BEAST || + nRacialType == RACIAL_TYPE_OOZE || + nRacialType == RACIAL_TYPE_VERMIN) return; + //if(Polymorphed()) return; + if(AI_DEBUG) ai_Debug("0i_combat", "2952", GetName(OBJECT_SELF) + " is equiping best weapon!"); + // Determine if I am wielding a ranged weapon, melee weapon, or none. + int bIsWieldingRanged = ai_HasRangedWeaponWithAmmo(oCreature); + int bIsWieldingMelee = ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + if(AI_DEBUG) ai_Debug("0i_combat", "2956", "bIsWieldingRanged: " + IntToString(bIsWieldingRanged) + + " bIsWieldingMelee: " + IntToString(bIsWieldingMelee)); + // If we are hidden then change to a melee weapon so we can move in to attack. + if(ai_GetIsHidden(oCreature)) + { + // Equip a melee weapon unless we already have one. + if(!bIsWieldingMelee) ai_EquipBestMeleeWeapon(oCreature, oTarget); + return; + } + // Equip the appropriate weapon for the distance of the enemy. + int nEnemyGroup = ai_GetNumOfEnemiesInGroup(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "2967", GetName(oCreature) + " has " + IntToString(nEnemyGroup) + " enemies within 5.0f them! PointBlank: " + + IntToString(GetHasFeat(FEAT_POINT_BLANK_SHOT, oCreature))); + // We are in melee combat. + if(nEnemyGroup > 0) + { + if(bIsWieldingRanged) + { + // We have the point blank shot feat or there are more than one enemy on us. + // Note: Point Blank shot feat is bad once we have more than one enemy on us. + if(!GetHasFeat(FEAT_POINT_BLANK_SHOT, oCreature) || nEnemyGroup > 1) + { + // If I'm not using a melee weapon. + if(!bIsWieldingMelee) + { + ai_EquipBestMeleeWeapon(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "2982", GetName(oCreature) + " is equiping melee weapon due to close enemies!"); + } + } + } + } + // We are not in melee range. + else + { + if(AI_DEBUG) ai_Debug("0i_combat", "2990", GetName(oCreature) + " is not in melee combat with an enemy!"); + // If are at range with the enemy then equip a ranged weapon. + if(!bIsWieldingRanged) + { + ai_EquipBestRangedWeapon(oTarget); + // Make sure that they equiped a range weapon. + bIsWieldingRanged = ai_HasRangedWeaponWithAmmo(oCreature); + bIsWieldingMelee = ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature)); + if(AI_DEBUG) ai_Debug("0i_combat", "2998", GetName(oCreature) + " is attempting to equip a ranged weapon: " + IntToString(bIsWieldingRanged)); + // If we equiped a ranged weapon then drop out. + } + } + // We don't have a weapon out so equip one! We are in combat! + if(!bIsWieldingRanged && !bIsWieldingMelee) ai_EquipBestMeleeWeapon(OBJECT_INVALID); +} +int ai_EquipBestMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(ai_GetAIMode(oCreature, AI_MODE_EQUIP_WEAPON_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "2992", GetName(oCreature) + " is equiping best melee weapon!"); + float fItemPower, fOffItemPower, fRightPower, fLeftPower, f2HandedPower; + int nItemPower, nShieldPower, nShieldValue, nItemValue, nRightValue; + int n2HandedValue, nLeftValue, bTwoWeaponUser; + int nMaxItemValue = ai_GetMaxItemValueThatCanBeEquiped(GetHitDice(oCreature)); + if(AI_DEBUG) ai_Debug("0i_combat", "2997", "nMaxItemValue: " + IntToString(nMaxItemValue)); + bTwoWeaponUser = GetHasFeat(374/*FEAT_DUAL_WIELD*/, oCreature) || GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oCreature); + object oShield = OBJECT_INVALID; + object oRight = OBJECT_INVALID; + object oLeft = OBJECT_INVALID; + object o2Handed = OBJECT_INVALID; + object o2HandedHand = OBJECT_INVALID; + object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND); + if(oRightHand != OBJECT_INVALID) + { + // Setup the item in our right hand's avg dmg and gold value as our base. + if(ai_GetIsTwoHandedWeapon(oRightHand, oCreature)) + { + if(ai_GetIsDoubleWeapon(oRightHand)) + { + f2HandedPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand, TRUE, FALSE, oRightHand); + } + else f2HandedPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand, TRUE); + n2HandedValue = GetGoldPieceValue(oRightHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3016", " 2Handed oRightHand: " + GetName(oRightHand) + + " f2HandPower: " + FloatToString(f2HandedPower, 0, 2) + + " n2HandedValue: " + IntToString(n2HandedValue)); + } + else if(ai_GetIsSingleHandedWeapon(oRightHand, oCreature)) + { + fRightPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand); + nRightValue = GetGoldPieceValue(oRightHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3024", " 1Handed oRightHand: " + GetName(oRightHand) + + " fRightPower: " + FloatToString(fRightPower, 0, 2) + + " nRightValue: " + IntToString(nRightValue)); + } + } + object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature); + if(oLeftHand != OBJECT_INVALID) + { + // Setup the item in our left hand's Shield AC and gold value as our base. + if(ai_GetIsShield(oLeftHand)) + { + nShieldPower = ai_SetShieldAC(oCreature, oLeftHand); + nShieldValue = GetGoldPieceValue(oLeftHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3037", " Shield oLeftHand: " + GetName(oLeftHand) + + " fShieldPower: " + IntToString(nShieldPower) + + " nShieldValue: " + IntToString(nShieldValue)); + } + // Setup the item in our left hand's avg dmg and gold value as our base. + else + { + fLeftPower = ai_GetMeleeWeaponAvgDmg(oCreature, oLeftHand, FALSE, TRUE); + nLeftValue = GetGoldPieceValue(oLeftHand); + if(AI_DEBUG) ai_Debug("0i_combat", "3046", " 1Handed oLeftHand: " + GetName(oLeftHand) + + " fLeftPower: " + FloatToString(fLeftPower, 0, 2) + + " nLeftValue: " + IntToString(nLeftValue)); + } + } + int nWeaponSize, nType, nCreatureSize = GetCreatureSize(oCreature); + // Get the best weapons they have in their inventory. + object oItem = GetFirstItemInInventory(oCreature); + // If they don't have any items then lets stop, we can't equip a weapon/shield. + if(oItem == OBJECT_INVALID) return FALSE; + while(oItem != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3058", GetName(oItem) + " MeleeWeapon: " + + IntToString(ai_GetIsMeleeWeapon(oItem)) + " Proficient: " + + IntToString(ai_GetIsProficientWith(oCreature, oItem)) + + " Identified: " + IntToString(GetIdentified(oItem))); + if(ai_GetIsProficientWith(oCreature, oItem) && + GetIdentified(oItem) && ai_CheckIfCanUseItem(oCreature, oItem)) + { + nItemValue = GetGoldPieceValue(oItem); + if(AI_DEBUG) ai_Debug("0i_combat", "3066", " nItemValue: " + IntToString(nItemValue)); + if(!GetLocalInt(GetModule(), AI_RULE_ILR) || nMaxItemValue >= nItemValue) + { + if(ai_GetIsShield(oItem)) + { + nItemPower = ai_SetShieldAC(oCreature, oItem); + if(nItemPower > nShieldPower || + (nItemPower == nShieldPower && nItemValue > nShieldValue)) + { oShield = oItem; nShieldPower = nItemPower; nShieldValue = nItemValue; } + } + else if(ai_GetIsMeleeWeapon(oItem)) + { + // Make sure the creature and weapon are close enough in size. + // Can wield a weapon up to one size larger than their size. + // Can wield a weapon down to two sizes smaller than their size. + nType = GetBaseItemType(oItem); + nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nType)); + if(nWeaponSize >= nCreatureSize - 2 && nWeaponSize <= nCreatureSize + 1) + { + // Get item avg damage based on if it is 2handed or 1handed. + if(ai_GetIsSingleHandedWeapon(oItem, oCreature)) + { + fItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem); + fOffItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem, FALSE, TRUE); + // If the new weapon is better than the weapon in our right hand. + if(fItemPower > fRightPower || + (fItemPower == fRightPower && nItemValue > nRightValue)) + { + // We need to check if the weapon in the right hand is + // better than the weapon in the left hand since we are + // replacing our right hand weapon. + // Note: we must find out if we have selected a weapon for the + // right hand i.e. oRight or the best weapon is in our + // right hand i.e. oRightHand! + fOffItemPower = 0.0; + if(oRight != OBJECT_INVALID && ai_GetIsSingleHandedWeapon(oRight, oCreature)) + { + fOffItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRight, FALSE, TRUE); + } + else if(oRightHand != OBJECT_INVALID && ai_GetIsSingleHandedWeapon(oRightHand, oCreature)) + { + fOffItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRightHand, FALSE, TRUE); + } + // If the right hand weapon is better than the weapon in our left hand. + if(fOffItemPower > fLeftPower || (fOffItemPower > 0.0 && + fOffItemPower == fLeftPower && nRightValue > nLeftValue)) + { + if(oRight != OBJECT_INVALID) oLeft = oRight; + else oLeft = oRightHand; + fLeftPower = fOffItemPower; + nLeftValue = nRightValue; + } + oRight = oItem; + fRightPower = fItemPower; + nRightValue = nItemValue; + } + // If the new weapon is better than the weapon in our left hand. + else if(fOffItemPower > fLeftPower || + (fOffItemPower == fLeftPower && nItemValue > nLeftValue)) + { oLeft = oItem; fLeftPower = fOffItemPower; nLeftValue = nItemValue; } + } + else if(ai_GetIsTwoHandedWeapon(oItem, oCreature)) + { + if(ai_GetIsDoubleWeapon(oItem)) + { + fItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem, TRUE, FALSE, oItem); + } + else fItemPower = ai_GetMeleeWeaponAvgDmg(oCreature, oItem, TRUE); + // If the new weapon is better than the selected weapon. + if(fItemPower > f2HandedPower || + (fItemPower == f2HandedPower && nItemValue > n2HandedValue)) + { + o2Handed = oItem; + f2HandedPower = fItemPower; + n2HandedValue = nItemValue; + } + } + } + } + } + } + oItem = GetNextItemInInventory(); + } + if(AI_DEBUG) ai_Debug("0i_combat", "3149", "oRight: " + GetName(oRight) + " oLeft:" + + GetName(oLeft) + " oShield: " + GetName(oShield) + + "o2Handed: " + GetName(o2Handed)); + // First check for two weapons first. + if(bTwoWeaponUser && oRight != OBJECT_INVALID && oLeft != OBJECT_INVALID) + { + fRightPower = ai_GetMeleeWeaponAvgDmg(oCreature, oRight, FALSE, FALSE, oLeft); + fRightPower += ai_GetMeleeWeaponAvgDmg(oCreature, oLeft, FALSE, TRUE); + if(AI_DEBUG) ai_Debug("0i_combat", "3157", " Right/Left Power: " + + FloatToString(fRightPower, 0, 2) + " 2HandedPower: " + + FloatToString(f2HandedPower, 0, 2)); + if(fRightPower > f2HandedPower) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3162", GetName(oCreature) + " is equiping " + + GetName(oRight) + " in the right hand and " + GetName(oLeft) + + " in the left hand."); + ActionEquipItem(oRight, INVENTORY_SLOT_RIGHTHAND); + ActionEquipItem(oLeft, INVENTORY_SLOT_LEFTHAND); + return TRUE; + } + } + if(f2HandedPower > fRightPower && o2Handed != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3172", GetName(oCreature) + " is equiping " + + GetName(o2Handed) + " in both hands."); + ActionEquipItem(o2Handed, INVENTORY_SLOT_RIGHTHAND); + return TRUE; + } + // Now lets just equip the best weapon for the right hand. + if(oRight != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3180", GetName(oCreature) + " is equiping " + + GetName(oRight) + " in the right hand. "); + ActionEquipItem(oRight, INVENTORY_SLOT_RIGHTHAND); + } + // Make sure we are not equiping a 2handed weapon and + // If not can we equip a shield? + if((oRight == OBJECT_INVALID || ai_GetIsSingleHandedWeapon(oRight, oCreature) || + !ai_GetIsTwoHandedWeapon(oRightHand, oCreature)) && + oShield != OBJECT_INVALID && GetHasFeat(FEAT_SHIELD_PROFICIENCY, oCreature)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3190", GetName(oCreature) + " is equiping " + + GetName(oShield) + " in the left hand."); + ActionEquipItem(oShield, INVENTORY_SLOT_LEFTHAND); + return TRUE; + } + // Finally if we don't have a weapon to equip so check to see if we are + // holding a bow. + else if(oRight == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3199", GetName(oCreature) + " did not equip a melee weapon"); + // We couldn't find a melee weapon but we are looking to go into melee + // I'm holding a ranged weapon! We better put it up. + if(GetWeaponRanged(oRightHand)) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3204", GetName(oCreature) + " is unequiping " + GetName(oRightHand)); + ActionUnequipItem(oRightHand); + return TRUE; + } + } + if(AI_DEBUG) ai_Debug("0i_combat", "3209", GetName(oCreature) + " is not equiping a weapon!"); + return FALSE; +} +int ai_EquipBestRangedWeapon(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(ai_GetAIMode(oCreature, AI_MODE_EQUIP_WEAPON_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3215", GetName(oCreature) + " is looking for best ranged weapon!"); + int nAmmo, nAmmoSlot, nBestType1, nBestType2, nType, nFeat, nItemValue, nRangedValue; + int nMaxItemValue = ai_GetMaxItemValueThatCanBeEquiped(GetHitDice(oCreature)); + string sAmmo; + object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(oRightHand != OBJECT_INVALID && ai_GetIsRangeWeapon(oRightHand)) + { + // Setup the item in our right hand as our base gold value to check against. + if(ai_GetIsRangeWeapon(oRightHand)) nRangedValue = GetGoldPieceValue(oRightHand); + } + object oRanged = OBJECT_INVALID, oAmmo = OBJECT_INVALID; + // Find the best type of ranged weapon for this player. + if(GetHasFeat(FEAT_WEAPON_FOCUS_LONGBOW, oCreature)) + { nBestType1 = BASE_ITEM_LONGBOW; nAmmo = BASE_ITEM_ARROW; nAmmoSlot = INVENTORY_SLOT_ARROWS; sAmmo = "arrow";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_SHORTBOW, oCreature)) + { nBestType1 = BASE_ITEM_SHORTBOW; nAmmo = BASE_ITEM_ARROW; nAmmoSlot = INVENTORY_SLOT_ARROWS; sAmmo = "arrow";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW, oCreature)) + { nBestType1 = BASE_ITEM_HEAVYCROSSBOW; nAmmo = BASE_ITEM_BOLT; nAmmoSlot = INVENTORY_SLOT_BOLTS; sAmmo = "bolt";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_LIGHT_CROSSBOW, oCreature)) + { nBestType1 = BASE_ITEM_LIGHTCROSSBOW; nAmmo = BASE_ITEM_BOLT; nAmmoSlot = INVENTORY_SLOT_BOLTS; sAmmo = "bolt";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_SLING, oCreature)) + { nBestType1 = BASE_ITEM_SLING; nAmmo = BASE_ITEM_BULLET; nAmmoSlot = INVENTORY_SLOT_BULLETS; sAmmo = "bullet";} + else if(GetHasFeat(FEAT_WEAPON_FOCUS_DART, oCreature)) + { nBestType1 = BASE_ITEM_DART; } + else if(GetHasFeat(FEAT_WEAPON_FOCUS_SHURIKEN, oCreature)) + { nBestType1 = BASE_ITEM_SHURIKEN; } + else if(GetHasFeat(FEAT_WEAPON_FOCUS_THROWING_AXE, oCreature)) + { nBestType1 = BASE_ITEM_THROWINGAXE; } + // These feats require a bow. + else if(GetHasFeat(FEAT_RAPID_SHOT, oCreature)) + { nBestType1 = BASE_ITEM_LONGBOW; nBestType2 = BASE_ITEM_SHORTBOW; + nAmmo = BASE_ITEM_ARROW; nAmmoSlot = INVENTORY_SLOT_ARROWS; sAmmo = "arrow"; } + // This feat requires a xbow. + else if(GetHasFeat(FEAT_RAPID_RELOAD, oCreature)) + { nBestType1 = BASE_ITEM_HEAVYCROSSBOW; nBestType2 = BASE_ITEM_LIGHTCROSSBOW; + nAmmo = BASE_ITEM_BOLT; nAmmoSlot = INVENTORY_SLOT_BOLTS; sAmmo = "bolt"; } + if(AI_DEBUG) ai_Debug("0i_combat", "3251", "nBestType1: " + IntToString(nBestType1) + " nBestType2: " + IntToString(nBestType2) + + " nAmmo: " + IntToString(nAmmo)); + int nCreatureSize = GetCreatureSize(oCreature) + 1; + // Cycle through the inventory looking for a ranged weapon. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + nType = GetBaseItemType(oItem); + if(AI_DEBUG) ai_Debug("0i_combat", "3259", "oItem: " + GetName(oItem) + + " Identified: " + IntToString(GetIdentified(oItem)) + + " Ranged Weapon: " + Get2DAString("baseitems", "RangedWeapon", nType)); + // Make sure it is identified and it is a ranged weapon. + if(GetIdentified(oItem) && Get2DAString("baseitems", "RangedWeapon", nType) != "") + { + if(AI_DEBUG) ai_Debug("0i_combat", "3265", " Proficient: " + + IntToString(ai_GetIsProficientWith(oCreature, oItem)) + + " nMaxItemValue: " + IntToString(nMaxItemValue)); + if(ai_GetIsProficientWith(oCreature, oItem)) + { + if(ai_CheckIfCanUseItem(oCreature, oItem)) + { + nItemValue = GetGoldPieceValue(oItem); + if(AI_DEBUG) ai_Debug("0i_combat", "3273", "nItemValue: " + IntToString(nItemValue)); + if(!GetLocalInt(GetModule(), AI_RULE_ILR) || nMaxItemValue >= nItemValue) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3276", " Creature Size: " + IntToString(nCreatureSize) + + " Weapon Size: " + Get2DAString("baseitems", "WeaponSize", nType)); + // Make sure they are large enough to use it. + if(StringToInt(Get2DAString("baseitems", "WeaponSize", nType)) <= nCreatureSize) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3281", "nItemValue: " + IntToString(nItemValue) + + " nRangedValue: " + IntToString(nRangedValue) + " nType: " + IntToString(nType)); + // Is it of the best range weapon type? 0 is any range weapon. + // Also grab any range weapon until we have a best type. + if(nType == nBestType1 || nType == nBestType2 || + nBestType1 == 0 || oRanged == OBJECT_INVALID) + { + if(nItemValue > nRangedValue) + { + if(ai_GetHasItemProperty(oItem, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) + { + oRanged = oItem; nRangedValue = nItemValue; + if(AI_DEBUG) ai_Debug("0i_combat", "3293", "Selecting oRanged: " + GetName(oRanged) + + " nRangedValue: " + IntToString(nRangedValue) + " and doesn't need ammo!"); + } + else + { + if(nBestType1 == 0) + { + if(nType == BASE_ITEM_LONGBOW || nType == BASE_ITEM_SHORTBOW) + { nAmmo = BASE_ITEM_ARROW; sAmmo = "arrow"; nAmmoSlot = INVENTORY_SLOT_ARROWS; } + else if(nType == BASE_ITEM_HEAVYCROSSBOW || nType == BASE_ITEM_LIGHTCROSSBOW) + { nAmmo = BASE_ITEM_BOLT; sAmmo = "bolt"; nAmmoSlot = INVENTORY_SLOT_BOLTS; } + else if(nType == BASE_ITEM_SLING) + { nAmmo = BASE_ITEM_BULLET; sAmmo = "bullet"; nAmmoSlot = INVENTORY_SLOT_BULLETS; } + else nAmmo = 0; + } + // Now do we have ammo for it? + if(AI_DEBUG) ai_Debug("0i_combat", "3309", "nAmmo: " + IntToString(nAmmo)); + if(nAmmo > 0) + { + if(nAmmo == BASE_ITEM_ARROW || + nAmmo == BASE_ITEM_BOLT || + nAmmo == BASE_ITEM_BULLET) oAmmo = GetItemInSlot(nAmmoSlot); + if(oAmmo == OBJECT_INVALID) + { + // We don't have ammo equiped so lets see if we have any in our inventory. + oAmmo = GetFirstItemInInventory(); + while(oAmmo != OBJECT_INVALID) + { + if(GetBaseItemType(oAmmo) == nAmmo) break; + oAmmo = GetNextItemInInventory(); + } + if(oAmmo != OBJECT_INVALID) ActionEquipItem(oAmmo, nAmmoSlot); + } + } + if(oAmmo != OBJECT_INVALID) + { + oRanged = oItem; nRangedValue = nItemValue; + if(AI_DEBUG) ai_Debug("0i_combat", "3330", "Selecting oRanged: " + GetName(oRanged) + + " nRangedValue: " + IntToString(nRangedValue)); + } + } + } + } + } + } + } + } + } + oItem = GetNextItemInInventory(oCreature); + } + // They don't have a range weapon so lets break out. + if(oRanged == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3346", GetName(oCreature) + " did not equip a ranged weapon!"); + return FALSE; + } + ActionEquipItem(oRanged, INVENTORY_SLOT_RIGHTHAND); + return TRUE; +} +int ai_EquipBestMonkMeleeWeapon(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "3354", GetName(OBJECT_SELF) + " is equiping best monk melee weapon!"); + int nValue, nRightValue; + int nMaxItemValue = ai_GetMaxItemValueThatCanBeEquiped(GetHitDice(oCreature)); + object oRight = OBJECT_INVALID; + object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(oRightHand != OBJECT_INVALID) + { + nRightValue = GetGoldPieceValue(oRightHand); + } + // Get the best kama they have in their inventory. + object oItem = GetFirstItemInInventory(oCreature); + // If they don't have any kamas then lets stop, we can't equip a weapon. + if(oItem == OBJECT_INVALID) return FALSE; + while(oItem != OBJECT_INVALID) + { + nValue = GetGoldPieceValue(oItem); + // Make sure they are high enough level to equip this item. + if(nMaxItemValue >= nValue && nValue > 1) + { + // Is it a single handed weapon? + if(GetBaseItemType(oItem) == BASE_ITEM_KAMA) + { + // Replace the lowest value right weapon. + if(nValue > nRightValue) + { + oRight = oItem; nRightValue = nValue; + } + } + } + oItem = GetNextItemInInventory(oCreature); + } + // Finally lets just equip the kama if we have one. + if(oRight == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3388", GetName(oCreature) + " did not equip a melee weapon!"); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_combat", "3391", GetName(oCreature) + " is equiping " + GetName(oRight) + " in the right hand."); + ActionEquipItem(oRight, INVENTORY_SLOT_RIGHTHAND); + return TRUE; +} +int ai_IsInADangerousAOE(object oCreature, float fMaxRange = AI_RANGE_BATTLEFIELD, int bMove = FALSE) +{ + int bDangerous, nSpell, nCnt = 1; + string sAOEType; + object oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, nCnt); + float fRadius, fDistance = GetDistanceBetween(oCreature, oAOE); + while(oAOE != OBJECT_INVALID && fDistance <= fMaxRange) + { + // AOE's have the tag set to the "LABEL" in vfx_persistent.2da + // I check vs those labels to see if the AOE is offensive. + // Below is the list of Offensive AOE effects. + sAOEType = GetTag(oAOE); + if(sAOEType == "VFX_PER_WEB") { fRadius = 6.7; nSpell = SPELL_WEB; } + else if(sAOEType == "VFX_PER_ENTANGLE") { fRadius = 5.0; nSpell = SPELL_ENTANGLE; } + else if(sAOEType == "VFX_PER_GREASE") { fRadius = 6.0; nSpell = SPELL_GREASE; } + else if(sAOEType == "VFX_PER_EVARDS_BLACK_TENTACLES") + { fRadius = 5.0; nSpell = SPELL_EVARDS_BLACK_TENTACLES; } + //else if(sAOEType == "VFX_PER_DARKNESS") { fRadius = 6.7; nSpell = SPELL_DARKNESS; } + //else if(sAOEType == "VFX_MOB_SILENCE") { fRadius = 4.0; nSpell = SPELL_SILENCE; } + else if(sAOEType == "VFX_PER_FOGSTINK") { fRadius = 6.7; nSpell = SPELL_STINKING_CLOUD; } + else if(sAOEType == "VFX_PER_FOGFIRE") { fRadius = 5.0; nSpell = SPELL_INCENDIARY_CLOUD; } + else if(sAOEType == "VFX_PER_FOGKILL") { fRadius = 5.0; nSpell = SPELL_CLOUDKILL; } + else if(sAOEType == "VFX_PER_FOGMIND") { fRadius = 5.0; nSpell = SPELL_MIND_FOG; } + else if(sAOEType == "VFX_PER_CREEPING_DOOM") { fRadius = 6.7; nSpell = SPELL_CREEPING_DOOM; } + else if(sAOEType == "VFX_PER_FOGACID") { fRadius = 5.0; nSpell = SPELL_ACID_FOG; } + else if(sAOEType == "VFX_PER_FOGBEWILDERMENT") { fRadius = 5.0; nSpell = SPELL_CLOUD_OF_BEWILDERMENT; } + else if(sAOEType == "VFX_PER_WALLFIRE") { fRadius = 10.0; nSpell = SPELL_WALL_OF_FIRE; } + else if(sAOEType == "VFX_PER_WALLBLADE") { fRadius = 10.0; nSpell = SPELL_BLADE_BARRIER; } + else if(sAOEType == "VFX_PER_DELAY_BLAST_FIREBALL") { fRadius = 2.0; nSpell = SPELL_DELAYED_BLAST_FIREBALL; } + else if(sAOEType == "VFX_PER_GLYPH") { fRadius = 2.5; nSpell = SPELL_GLYPH_OF_WARDING; } + else fRadius = 0.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3426", GetName(oCreature) + " distance from AOE is " + FloatToString(fDistance, 0, 2) + + " AOE Radius: " + FloatToString(fRadius, 0, 2) + + " AOE Type: " + GetTag(oAOE)); + // fRadius > 0.0 keeps them from tiggering that they are in a dangerous + // AOE due to having an AOE on them. + if(fRadius > 0.0 && fDistance <= fRadius && + !ai_CreatureImmuneToEffect(GetAreaOfEffectCreator(oAOE), oCreature, nSpell)) + { + bDangerous = TRUE; + if(nSpell == SPELL_WEB || nSpell == SPELL_ENTANGLE) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) bDangerous = FALSE; + if(GetReflexSavingThrow(oCreature) + GetAbilityModifier(ABILITY_DEXTERITY, oCreature) >= ai_GetCharacterLevels(oCreature)) + bDangerous = FALSE; + } + break; + } + oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, ++nCnt); + fDistance = GetDistanceBetween(oCreature, oAOE); + } + if(bDangerous && bMove) + { + location lLocation; + object oTarget; + if(ai_GetIsInCombat(oCreature)) + { + object oMaster = GetMaster(oCreature); + // If we have a ranged weapon then backout and use that. + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + lLocation = GetRandomLocation(GetArea(oCreature), oCreature, fRadius + 1.0); + } + else // we must find a target out of the AOE or fight in the AOE. + { + oTarget = ai_GetNearestPhysicalTargetNotInAOE(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, TRUE); + if(oTarget != OBJECT_INVALID) lLocation = GetLocation(oTarget); + } + } + else lLocation = GetRandomLocation(GetArea(oCreature), oCreature, fRadius + 1.0); + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("0i_combat", "3466", GetName(oCreature) + " is moving out of area of effect!"); + ActionMoveToLocation(lLocation, TRUE); + return TRUE; + } + else return bDangerous; + return FALSE; +} +int ai_GetIsHidden(object oHidden) +{ + int nEffectType; + effect eEffect = GetFirstEffect(oHidden); + while(GetIsEffectValid(eEffect)) + { + nEffectType = GetEffectType(eEffect); + if(nEffectType == EFFECT_TYPE_INVISIBILITY) return 1; + else if(nEffectType == EFFECT_TYPE_IMPROVEDINVISIBILITY) return 1; + else if(nEffectType == EFFECT_TYPE_DARKNESS) return 2; + else if(nEffectType == EFFECT_TYPE_SANCTUARY) return 3; + else if(nEffectType == EFFECT_TYPE_ETHEREAL) return 3; + eEffect = GetNextEffect(oHidden); + } + if(GetActionMode(oHidden, ACTION_MODE_STEALTH)) return 4; + return FALSE; +} +int ai_CastOffensiveSpellVsTarget(object oCaster, object oCreature, int nSpell) +{ + // Check saves. + string sSave = Get2DAString("ai_spells", "SaveType", nSpell); + // There is no save! + if(sSave == "") return TRUE; + // Get the level of the spell. + int nSpellLvl = StringToInt(Get2DAString("spells", "Innate", nSpell)); + // Randomize our check. + nSpellLvl += Random(AI_SPELL_CHECK_DIE) + AI_SPELL_CHECK_BONUS; + // Check feats that might increase our DC. + string sSchool = Get2DAString("spells", "School", nSpell); + if(sSchool == "V") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_EVOCATION, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_EVOCATION, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "C") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "N") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_NECROMANCY, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_NECROMANCY, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "E") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ENCHANTMENT, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ENCHANTMENT, oCaster)) nSpellLvl += 2; + } + else if(sSchool == "I") + { + if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ILLUSION, oCaster)) nSpellLvl += 4; + else if(GetHasFeat(FEAT_SPELL_FOCUS_ILLUSION, oCaster)) nSpellLvl += 2; + } + else if(sSave == "Reflex") + { + string sImmunityType = Get2DAString("ai_spells", "ImmunityType", nSpell); + // Give a bonus to our check for half dmg spells unless they can dodge it! + if((sImmunityType == "Fire" || sImmunityType == "Electricity" || sImmunityType == "Acid" || + sImmunityType == "Cold" || sImmunityType == "Sonic") && + !GetHasFeat(FEAT_IMPROVED_EVASION, oCreature)) nSpellLvl += AI_SPELL_CHECK_NO_EVASION_BONUS; + if(AI_DEBUG) ai_Debug("0i_combat", "3050", " nSpellLvl: " + IntToString(nSpellLvl) + + " > nMagic: " + IntToString(GetReflexSavingThrow(oCreature))); + return (nSpellLvl > GetReflexSavingThrow(oCreature)); + } + else if(sSave == "Fortitude") return (nSpellLvl > GetFortitudeSavingThrow(oCreature)); + else if(sSave == "Will") return (nSpellLvl > GetWillSavingThrow(oCreature)); + return TRUE; +} +int ai_GetDragonDC(object oCreature) +{ + int nDC, nHitDice = GetHitDice(oCreature); + if(nHitDice < 4) { nDC = 12; } + else if(nHitDice < 7) { nDC = 13; } + else if(nHitDice < 10) { nDC = 14; } + else if(nHitDice < 13) { nDC = 16; } + else if(nHitDice < 16) { nDC = 18; } + else if(nHitDice < 19) { nDC = 20; } + else if(nHitDice < 22) { nDC = 22; } + else if(nHitDice < 25) { nDC = 24; } + else if(nHitDice < 28) { nDC = 26; } + else if(nHitDice < 31) { nDC = 28; } + else if(nHitDice < 34) { nDC = 30; } + else if(nHitDice < 37) { nDC = 32; } + else if(nHitDice < 39) { nDC = 34; } + else { nDC = 36; } + string sTag = GetTag(oCreature); + if(sTag == "gold_dragon") nDC += 5; + if(sTag == "red_dragon" || sTag == "silver_dragon") return nDC + 4; + else if(sTag == "black_dragon" || sTag == "brass_dragon") return nDC + 3; + else if(sTag == "green_dragon" || sTag == "copper_dragon") return nDC + 2; + else if(sTag == "blue_dragon" || sTag == "bronze_dragon") return nDC + 1; + //else if(sTag == "white_dragon") nDC += 0; + return nDC; +} +void ai_SetCreatureAIScript(object oCreature) +{ + string sCombatAI = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + // Non-Hostile NPC's do not need to use special tactics by default. + if(sCombatAI == "" && GetLocalInt(GetModule(), AI_RULE_AMBUSH) && d100() < 34) + { + // They should have skill ranks equal to their level + 1 to use a special AI. + int nSkillNeeded = GetHitDice(oCreature) + 1; + /*/ Ambusher: requires either Improved Invisibility or Invisibility. + if(GetHasSpell(SPELL_IMPROVED_INVISIBILITY, oCreature) || + GetHasSpell(SPELL_INVISIBILITY, oCreature)) + { + int bCast = ai_TryToCastSpell(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature); + if(!bCast) bCast = ai_TryToCastSpell(oCreature, SPELL_INVISIBILITY, oCreature); + if(bCast) sCombatAI = "ai_ambusher"; + } */ + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature, TRUE)) + { + sCombatAI = "ai_flanker"; + } + // Ambusher: Requires a Hide and Move silently skill equal to your level + 1. + else if(GetSkillRank(SKILL_HIDE, oCreature) >= nSkillNeeded && + GetSkillRank(SKILL_MOVE_SILENTLY, oCreature) >= nSkillNeeded) + { + sCombatAI = "ai_ambusher"; + } + // Defensive : requires Parry skill equal to your level or Expertise. + else if(GetSkillRank(SKILL_PARRY, oCreature) >= nSkillNeeded || + GetHasFeat(FEAT_EXPERTISE, oCreature) || + GetHasFeat(FEAT_IMPROVED_EXPERTISE, oCreature)) + { + sCombatAI = "ai_defensive"; + } + /* Needs looked at as it will soft lock some monsters! + else if(GetHasSpell(SPELL_LESSER_DISPEL, oCreature) || + GetHasSpell(SPELL_DISPEL_MAGIC, oCreature) || GetHasSpell(SPELL_GREATER_DISPELLING, oCreature)) + { + sCombatAI = "ai_cntrspell"; + }*/ + else if(ai_CheckClassType(oCreature, AI_CLASS_TYPE_ARCANE) && + ai_GetCharacterLevels(oCreature) > 4) sCombatAI = "ai_ranged"; + else if(ai_EquipBestRangedWeapon(oCreature)) sCombatAI = "ai_ranged"; + else if(GetSkillRank(SKILL_TAUNT, oCreature) >= nSkillNeeded) sCombatAI = "ai_taunter"; + } + if(sCombatAI == "") + { + int nAssociateType = GetAssociateType(oCreature); + if (nAssociateType == ASSOCIATE_TYPE_FAMILIAR) + { + sCombatAI = "ai_default"; + } + else + { + // Select the best ai for this henchmen based on class. + int nClass = GetClassByPosition(1, oCreature); + // If they have more than one class use the default ai. + if(GetClassByPosition(2, oCreature) != CLASS_TYPE_INVALID) sCombatAI = "ai_default"; + else if(nClass == CLASS_TYPE_BARBARIAN) sCombatAI = "ai_barbarian"; + else if(nClass == CLASS_TYPE_BARD) sCombatAI = "ai_bard"; + else if(nClass == CLASS_TYPE_CLERIC) sCombatAI = "ai_cleric"; + else if(nClass == CLASS_TYPE_DRUID) sCombatAI = "ai_druid"; + else if(nClass == CLASS_TYPE_FIGHTER) sCombatAI = "ai_fighter"; + else if(nClass == CLASS_TYPE_MONK) sCombatAI = "ai_monk"; + else if(nClass == CLASS_TYPE_PALADIN) sCombatAI = "ai_paladin"; + else if(nClass == CLASS_TYPE_RANGER) sCombatAI = "ai_ranger"; + else if(nClass == CLASS_TYPE_ROGUE) sCombatAI = "ai_rogue"; + else if(nClass == CLASS_TYPE_SORCERER) sCombatAI = "ai_sorcerer"; + else if(nClass == CLASS_TYPE_WIZARD) sCombatAI = "ai_wizard"; + //else if(nClass == CLASS_TYPE_ABERRATION) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_ANIMAL) sCombatAI = "ai_animal"; + //else if(nClass == CLASS_TYPE_CONSTRUCT) sCombatAI = "ai_animal"; + else if(nClass == CLASS_TYPE_DRAGON) sCombatAI = "ai_dragon"; + //else if(nClass == CLASS_TYPE_ELEMENTAL) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_FEY) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_GIANT) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_HUMANOID) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_MAGICAL_BEAST) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_MONSTROUS) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_OOZE) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_OUTSIDER) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_UNDEAD) sCombatAI = "ai_default"; + //else if(nClass == CLASS_TYPE_VERMIN) sCombatAI = "ai_animal"; + else sCombatAI = "ai_default"; + } + } + if(AI_DEBUG) ai_Debug("0i_combat", "3740", GetName(oCreature) + " is setting AI to " + sCombatAI); + SetLocalString(oCreature, AI_DEFAULT_SCRIPT, sCombatAI); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sCombatAI); +} +int ai_IsImmuneToSneakAttacks(object oCreature, object oTarget) +{ + if(GetHasFeat(FEAT_UNCANNY_DODGE_2, oTarget) && + GetLevelByClass(CLASS_TYPE_ROGUE, oCreature) + 3 < GetLevelByClass(CLASS_TYPE_ROGUE, oTarget)) return TRUE; + if(GetIsImmune(oTarget, IMMUNITY_TYPE_SNEAK_ATTACK)) return TRUE; + object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget); + if(ai_GetHasItemProperty(oSkin, ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS, IP_CONST_IMMUNITYMISC_BACKSTAB)) return TRUE; + return FALSE; +} +int ai_IsStrongerThanMe(object oCreature, int nIndex) +{ + int nEnemyCombat = GetLocalInt(oCreature, AI_ENEMY_COMBAT + IntToString(nIndex)); + int nCreatureCombat = ai_GetMyCombatRating(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "3955", "IsStrongerThanMe: nCreatureCombat: " + + IntToString(nCreatureCombat) + " nEnemyCombat: " + IntToString(nEnemyCombat)); + return (nEnemyCombat > nCreatureCombat); +} +int ai_StrongOpponent(object oCreature, object oTarget, int nAdj = 2) +{ + int nLevel = GetHitDice(oCreature); + if(AI_DEBUG) ai_Debug("0i_combat", "3220", "ai_StrongOpponent"); + nAdj = nAdj *((nAdj + nLevel) / 10); + if(AI_DEBUG) ai_Debug("0i_combat", "3222", "Is the opponent strong? Target CR >= Our level - nAdj(" + + FloatToString(GetChallengeRating(oTarget), 0, 2) + " >= " + IntToString(nLevel - nAdj) + ")"); + return (FloatToInt(GetChallengeRating(oTarget)) >= nLevel - nAdj); +} +int ai_PowerAttackGood(object oCreature, object oTarget, float fAdj) +{ + int nAvgDmg = ai_GetWeaponDamage(oCreature, 2); + if(AI_DEBUG) ai_Debug("0i_combat", "3412", "PowerAttack: (nAvgDmg: " + IntToString(nAvgDmg) + + " > Target HP: " + IntToString(GetCurrentHitPoints(oTarget)) + + ") Skip: " + IntToString(nAvgDmg > GetCurrentHitPoints(oTarget))); + if(nAvgDmg > GetCurrentHitPoints(oTarget)) return FALSE; + float fAvgDmg = IntToFloat(nAvgDmg); + float fTargetAC = IntToFloat(GetAC(oTarget)); + float fCreatureAtk = IntToFloat(ai_GetCreatureAttackBonus(oCreature)); + float fNormalChance = (21.0 - (fTargetAC - fCreatureAtk)) / 20.0; + // Our chance to hit is already minimum of 5% so this doesn't hurt our chance! + if(fNormalChance <= 0.05) return TRUE; + float fAdjDamage = (fAvgDmg + fAdj) * ((21.0-(fTargetAC - fCreatureAtk + fAdj))/20); + if(AI_DEBUG) ai_Debug("0i_combat", "3420", "fNormalDamage: " + FloatToString(fNormalChance * fAvgDmg, 0, 2) + + " < fAdjDamage: " + FloatToString(fAdjDamage, 0, 2) + " = " + IntToString(fNormalChance * fAvgDmg < fAdjDamage)); + return fNormalChance * fAvgDmg < fAdjDamage; +} +int ai_AttackPenaltyOk(object oCreature, object oTarget, float fAtkAdj) +{ + float fTargetAC = IntToFloat(GetAC(oTarget)); + float fCreatureAtk = IntToFloat(ai_GetCreatureAttackBonus(oCreature)); + float fNormalChance = (21.0-(fTargetAC - fCreatureAtk))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3431", "Normal Avg Chance: " + FloatToString(fNormalChance, 0, 2) + " <= 0.05"); + // We already need a 20 to hit so this doesn't hurt our chances! + if(fNormalChance <= 0.05) return TRUE; + float fAdjChance = (21.0-(fTargetAC - fCreatureAtk + fAtkAdj))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3435", "Adjusted Avg Chance: " + FloatToString(fAdjChance, 0, 2) + " > 0.55"); + // if our chance is 55% or better to hit then use it. + return fAdjChance > 0.55; +} +int ai_AttackBonusGood(object oCreature, object oTarget, float fAtkAdj) +{ + float fTargetAC = IntToFloat(GetAC(oTarget)); + float fCreatureAtk = IntToFloat(ai_GetCreatureAttackBonus(oCreature)); + float fNormalChance = (21.0-(fTargetAC - fCreatureAtk))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3450", "Normal Avg Chance: " + FloatToString(fNormalChance, 0, 2) + " > 0.99"); + // We already hit them with any roll so this will not help. + if(fNormalChance > 0.99) return FALSE; + float fAdjChance = (21.0-(fTargetAC - fCreatureAtk - fAtkAdj))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3454", "Adjusted Avg Chance: " + FloatToString(fAdjChance, 0, 2) + " < 0.0"); + // if our chance increases our to hit then this is good. + return fAdjChance > 0.0; +} +int ai_ACAdjustmentGood(object oCreature, object oTarget, float fACAdj) +{ + float fCreatureAC = IntToFloat(GetAC(oCreature)); + float fTargetAtk = IntToFloat(ai_GetCreatureAttackBonus(oTarget)); + float fNormalChance = (21.0-(fCreatureAC - fTargetAtk))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3444", "Normal Chance To Hit: " + FloatToString(fNormalChance, 0, 2) + " <= 0.05"); + // They already need a 20 to hit so adding more AC is worthless. + if(fNormalChance <= 0.05) return FALSE; + float fAdjChance = (21.0-(fCreatureAC - fTargetAtk + fACAdj))/20.0; + if(AI_DEBUG) ai_Debug("0i_combat", "3448", "Adjusted Chance To Hit: " + FloatToString(fAdjChance, 0, 2) + " < 1.00"); + // Anything less than 1 helps are AC! + return fAdjChance < 1.00; +} +int ai_ACAdjustmentPenalty(object oCreature, object oTarget, float fACAdj) +{ + float fCreatureAC = IntToFloat(GetAC(oCreature)); + float fTargetAtk = IntToFloat(ai_GetCreatureAttackBonus(oTarget)); + float fToHitChance = (21.0-(fCreatureAC - fTargetAtk + fACAdj))/20.0; + float fRoll = IntToFloat(d100()); + if(AI_DEBUG) ai_Debug("0i_combat", "3380", "Adjusted Chance To Hit: " + FloatToString(fToHitChance, 0, 2) + " < " + + FloatToString(fRoll, 0, 2) + " return TRUE"); + // Roll % chance to see if we should ignore the penalty and go for it! + return fToHitChance < fRoll; +} +int ai_CanIMoveInCombat(object oCreature) +{ + // DC 15 tumble check is required to not give attacks of opportunity. + return (GetHasFeat(FEAT_MOBILITY, oCreature) || GetHasFeat(FEAT_SPRING_ATTACK, oCreature) || + GetSkillRank(SKILL_TUMBLE, oCreature) > 9); +} +int ai_CanIUseRangedWeapon(object oCreature, int nInMelee) +{ + return (!nInMelee || ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID); +} +int ai_CheckRangedCombatPosition(object oCreature, object oTarget, int nAction) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "3559", "Ranged attack: See oTarget? " + + IntToString(GetObjectSeen(oTarget, oCreature)) + " Line of Sight? " + + IntToString(LineOfSightObject(oCreature, oTarget))); + if(nAction == AI_LAST_ACTION_RANGED_ATK) + { + // Watch the nearest enemy instead of our target as they could move toward us. + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3337", "oNearestEnemy: " + GetName(oNearestEnemy) + + " fDistance: " + FloatToString(fDistance, 0, 2)); + // If we have Point blank shot then we want to be within 15' [4 meters]. + if(GetHasFeat(FEAT_POINT_BLANK_SHOT, oCreature)) + { + if(fDistance > AI_RANGE_MELEE) + { + // We check this because if the enemy is moving or has not + // started acting then we don't want to move up on them as they + // might move towards us. Just attack! Only sneak attack if they are busy. + int nAction = GetCurrentAction(oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3353", GetName(oNearestEnemy) + " current action: " + IntToString(nAction)); + if(nAction == ACTION_MOVETOPOINT || + nAction == ACTION_INVALID || + nAction == ACTION_RANDOMWALK) return FALSE; + // If they are attacking make sure it is in melee? + // If not then don't move since they might be moving toward us. + if(nAction == ACTION_ATTACKOBJECT) + { + if(!ai_GetNumOfEnemiesInRange(oNearestEnemy)) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_combat", "3355", GetName(oCreature) + " is moving closer [4.0] to " + + GetName(oNearestEnemy) + " to use Point blank shot with a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveToObject(oNearestEnemy, TRUE, AI_RANGE_CLOSE); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else if(fDistance < AI_RANGE_LONG) + { + // Lets move back a little, too far and we miss attacks! + if(AI_DEBUG) ai_Debug("0i_combat", "3374", GetName(oCreature) + " is moving away from " + + GetName(oNearestEnemy) + "[2.0] to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveAwayFromObject(oNearestEnemy, TRUE, 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + // If we have sneak attack then we want to be within 30' [9 meters]. + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) + { + if(fDistance > AI_RANGE_CLOSE) + { + // We check this because if the enemy is moving or has not + // started acting then we don't want to move up on them as they + // might move towards us. Just attack! Only sneak attack if they are busy. + int nAction = GetCurrentAction(oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3353", GetName(oNearestEnemy) + " current action: " + IntToString(nAction)); + if(nAction == ACTION_MOVETOPOINT || + nAction == ACTION_INVALID || + nAction == ACTION_RANDOMWALK) return FALSE; + // If they are attacking make sure it is in melee? + // If not then don't move since they might be moving toward us. + if(nAction == ACTION_ATTACKOBJECT) + { + if(!ai_GetNumOfEnemiesInRange(oNearestEnemy)) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_combat", "3355", GetName(oCreature) + " is moving closer [8.0] to " + + GetName(oNearestEnemy) + " to sneak attack with a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveToObject(oNearestEnemy, TRUE, AI_RANGE_CLOSE); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + else if(fDistance < AI_RANGE_LONG) + { + // Lets move back a little, too far and we miss attacks! + if(AI_DEBUG) ai_Debug("0i_combat", "3374", GetName(oCreature) + " is moving away from " + + GetName(oNearestEnemy) + "[2.0] to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveAwayFromObject(oNearestEnemy, TRUE, 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + // If we are casting a hostile spell then check positioning. + else if(nAction > -1 && Get2DAString("ai_spells", "HostileSetting", nAction) == "1") + { + // We are out of melee and casting a spell on an ally so don't move. + if(GetReputation(oCreature, oTarget) > 89) return FALSE; + float fSpellRange = ai_GetSpellRange(nAction); + float fTargetRange = GetDistanceBetween(oCreature, oTarget); + if(AI_DEBUG) ai_Debug("0i_combat", "3389", "fSpellRange: " + FloatToString(fSpellRange, 0, 2) + + " fTargetRange: " + FloatToString(fTargetRange, 0, 2)); + // Adjust the ranges to see if we are too close. + if(fSpellRange == 5.0) fSpellRange = 4.5f; + //else if(fSpellRange == 8.0) fSpellRange = 8.0f; + else if(fSpellRange > 10.0f) fSpellRange = 10.0f; + if(AI_DEBUG) ai_Debug("0i_combat", "3395", "Adjusted spell range is " + + FloatToString(fSpellRange, 0, 2) + " : " + GetName(oTarget) + " range is " + + FloatToString(fTargetRange, 0, 2) + "."); + // We are closer than we have to be to cast our spell. + if(fTargetRange < fSpellRange) + { + // Lets move back a little, too far and we miss attacks! + if(AI_DEBUG) ai_Debug("0i_combat", "3402", GetName(oCreature) + " is moving away from " + + GetName(oTarget) + "[2.0] to cast a spell."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + ActionMoveAwayFromObject(oTarget, FALSE, 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + } + return FALSE; +} +int ai_CheckMeleeCombatPosition(object oCreature, object oTarget, int nAction, int nBaseItemType = 0) +{ + // If we are not being attacked then we might want to back out of combat. + if(ai_GetEnemyAttackingMe(oCreature) != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3417", "I am being attacked so stand my ground!"); + return FALSE; + } + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_combat", "3422", "oNearestEnemy: " + GetName(oNearestEnemy) + " fDistance " + FloatToString(fDistance, 0, 2)); + if(nAction == AI_LAST_ACTION_RANGED_ATK) + { + if(AI_DEBUG) ai_Debug("0i_combat", "3425", GetName(oCreature) + " is moving away from " + GetName(oNearestEnemy) + + "[" + FloatToString(AI_RANGE_MELEE - fDistance + 1.0, 0, 2) + "]" + " to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + // Lets move just out of melee range! + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, AI_RANGE_MELEE - fDistance + 1.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + // If we want to cast a spell this round then back away! + else if(nAction > -1) + { + // Some items we don't need to move on such as wands, staves, and rods. + if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == BASE_ITEM_MAGICSTAFF || + nBaseItemType == BASE_ITEM_MAGICROD) return FALSE; + float fSpellRange = ai_GetSpellRange(nAction); + // A Touch spell means we should not move if we are not the target. + if(fSpellRange <= 5.0 && oCreature != oTarget) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3446", GetName(oCreature) + " is moving away from " + + GetName(oTarget) + "[" + FloatToString(AI_RANGE_MELEE - fDistance + 1.0, 0, 2) + "] to cast a spell."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + SetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST, FALSE); + // Lets move just out of melee range! + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, AI_RANGE_MELEE - fDistance + 1.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return TRUE; + } + return FALSE; +} +int ai_CheckCombatPosition(object oCreature, object oTarget, int nInMelee, int nAction, int nBaseItemType = 0) +{ + if(AI_DEBUG) ai_Debug("0i_combat", "3460", "|-----> Checking position in combat: " + + GetName(oCreature) + " nMelee: " + IntToString(nInMelee) + + " Action: " + IntToString(nAction) + + " Hold mode: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) + + " Use Advanced Movement: " + IntToString(GetLocalInt(GetModule(), AI_RULE_ADVANCED_MOVEMENT))); + // We don't want to move around in combat if we were told to hold. + if(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) return FALSE; + if(!GetLocalInt(GetModule(), AI_RULE_ADVANCED_MOVEMENT)) return FALSE; + if(ai_CompareLastAction(oCreature, AI_LAST_ACTION_MOVE)) return FALSE; + // We are not in melee combat so lets see how close we should get. + if(!nInMelee) return ai_CheckRangedCombatPosition(oCreature, oTarget, nAction); + // If we are in melee we might need to move out of combat. + return ai_CheckMeleeCombatPosition(oCreature, oTarget, nAction, nBaseItemType); +} +//:: Calculates total Shield AC bonuses from all sources +int ai_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(AI_DEBUG) ai_Debug("0i_combat", "3534","ai_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(AI_DEBUG) ai_Debug("0i_combat", "3560", "ai_GetTotalShieldACBonus: Found Shield AC effect, bonus = " + IntToString(nACAmount)+"."); + nShieldBonus += nACAmount; + } + eEffect = GetNextEffect(oCreature); + } + return nShieldBonus; +} +//:: [PRC8] Returns special grapple size modifier +int ai_GetSpecialGrappleSizeMod(int nSize) +{ + switch(nSize) + { + case -1 /* CREATURE_SIZE_FINE */: return -16; + case 0 /* CREATURE_SIZE_DIMINUTIVE */: return -12; + case CREATURE_SIZE_TINY: return -8; + case CREATURE_SIZE_SMALL: return -4; + case CREATURE_SIZE_MEDIUM: return 0; + case CREATURE_SIZE_LARGE: return 4; + case CREATURE_SIZE_HUGE: return 8; + case 6 /* CREATURE_SIZE_GARGANTUAN */: return 12; + case 7 /* CREATURE_SIZE_COLOSSAL */: return 16; + } + return 0; +} +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Tripping +int ai_CanITrip(object oCreature, object oTarget) +{ + //:: Sanity check + if(!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if(!GetHasFeat(2822, oCreature)) + return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3594", "ai_CanITrip: Sanity Checks PASSED!"); + //:: Get stats + int nStrTripper = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + int nStrTarget = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + int nDexTarget = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); + //:: Defender uses best of STR or DEX + int nDefenderMod = (nDexTarget > nStrTarget) ? nDexTarget : nStrTarget; + //:: Tripper bonuses + if (GetHasFeat(2807, oCreature)) //:: FEAT_IMPROVED_TRIP + { // +4 from Improved Trip + nStrTripper += 4; + } + //:: Get sizes + int nSizeTripper = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: Size mod = 4 * (size - medium) + nStrTripper += (nSizeTripper - CREATURE_SIZE_MEDIUM) * 4; + nDefenderMod += (nSizeTarget - CREATURE_SIZE_MEDIUM) * 4; + int nStability = 0; + //:: Extra Stability if creature is dwarf or quadruped + if(GetRacialType(oTarget) == RACIAL_TYPE_DWARF || + GetRacialType(oTarget) == RACIAL_TYPE_ANIMAL || + GetRacialType(oTarget) == RACIAL_TYPE_MAGICAL_BEAST || + GetRacialType(oTarget) == RACIAL_TYPE_VERMIN) + { + nStability = 4; + } + nDefenderMod += nStability; + //:: If effective trip mod is too much lower, don't bother + if(nStrTripper + 2 < nDefenderMod) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3632", "ai_CanITrip: Size Checks PASSED!"); + if(AI_DEBUG) ai_Debug("0i_combat", "3634", "ai_CanITrip: Can use Trip on oTarget."); + return TRUE; +} +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Awesome Blow +int ai_CanIAwesomeBlow(object oCreature, object oTarget) +{ + //:: Sanity check + if(!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3642", "ai_CanIAwesomeBlow: Sanity check PASSED!"); + //:: Can't Awesome Blow incorporeal creatures + if(GetLocalInt(oTarget, "X2_L_IS_INCORPOREAL")) return FALSE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_ETHEREAL)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3650", "ai_CanIAwesomeBlow: Incorporealty check PASSED!"); + //:: Get sizes + int nSizeCreature = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: Must be larger than target + if (nSizeCreature <= nSizeTarget) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3660", "ai_CanIAwesomeBlow: Size check PASSED!"); + //:: Get target's AC + int nTargetAC = GetAC(oTarget); + //:: Awesome Blow applies -4 penalty + int nAttackBonus = GetBaseAttackBonus(oCreature) - 4; + //:: Calculate average hit chance. + int nHitChance = 10 + nAttackBonus - nTargetAC; + //:: If hit chance <= 50%, don’t bother + if (nHitChance <= 5) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3674", "ai_CanIAwesomeBlow: Attack check PASSED!"); + if(AI_DEBUG) ai_Debug("0i_combat", "3676", "ai_CanIAwesomeBlow: Can use Awesome Blow on oTarget."); + return TRUE; +} +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Overrun +int ai_CanIOverrun(object oCreature, object oTarget) +{ + //:: FEAT_OVERRUN (2811) + //:: FEAT_IMPROVED_OVERRUN (2805) + //:: Sanity check + if (!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "1281", "ai_CanIOverrun: Sanity Check PASSED!"); + //:: Get stats + int nStrRunner = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + int nStrTarget = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + int nDexTarget = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); + //:: Defender uses best of STR or DEX + int nDefenderMod = (nDexTarget > nStrTarget) ? nDexTarget : nStrTarget; + //:: Overruner bonuses + if (GetHasFeat(2805, oCreature)) + { // +4 from Improved Overrun + nStrRunner += 4; + } + //:: Get sizes + int nSizeRunner = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: Size mod = 4 * (size - medium) + nStrRunner += (nSizeRunner - CREATURE_SIZE_MEDIUM) * 4; + nDefenderMod += (nSizeTarget - CREATURE_SIZE_MEDIUM) * 4; + int nStability = 0; + //:: Extra Stability if creature is dwarf or quadruped + if(GetRacialType(oTarget) == RACIAL_TYPE_DWARF || + GetRacialType(oTarget) == RACIAL_TYPE_ANIMAL || + GetRacialType(oTarget) == RACIAL_TYPE_MAGICAL_BEAST || + GetRacialType(oTarget) == RACIAL_TYPE_VERMIN) + { + nStability = 4; + } + nDefenderMod += nStability; + //:: If effective STR mod is too much lower, don't bother + if(nStrRunner + 2 < nDefenderMod) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3731", "ai_CanIOverrun: Size & Stabilty Check PASSED!"); + if(AI_DEBUG) ai_Debug("0i_combat", "3733", "ai_CanIOverrun: Using Overrun on oTarget."); + return TRUE; +} +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Bullrush +int ai_CanIBullrush(object oCreature, object oTarget) +{ + //:: FEAT_BULLRUSH (2810) + //:: FEAT_IMPROVED_BULLRUSH (2806) + //:: FEAT_BULLRUSH_CHARGE (3413) + if(!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3746", "ai_CanIBullrush: Sanity Check PASSED!"); + //:: Get movement speed + //int nSpeed = StringToInt(Get2DAString("racialtypes", "Endurance", GetRacialType(oCreature))); + float fSpeed = IntToFloat(10 * GetMovementRate(oCreature)); + //:: If target is too far away to reach in one round, return + if(GetDistanceBetween(oCreature, oTarget) > 1.5 * fSpeed) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3755", "ai_CanIBullrush: Distance Check PASSED!"); + //:: Get attacker Strength modifier + int nStrRusher = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + //:: Defender uses best of STR or DEX + int nStrTarget = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + int nDexTarget = GetAbilityModifier(ABILITY_DEXTERITY, oTarget); + int nDefenderMod = (nDexTarget > nStrTarget) ? nDexTarget : nStrTarget; + //:: Improved Bull Rush bonus + if(GetHasFeat(2806 /* FEAT_IMPROVED_BULLRUSH */, oCreature)) nStrRusher += 4; + //:: Size modifiers + int nSizeRusher = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + nStrRusher += (nSizeRusher - CREATURE_SIZE_MEDIUM) * 4; + nDefenderMod += (nSizeTarget - CREATURE_SIZE_MEDIUM) * 4; + + //:: Stability bonus (+4) for dwarves, quadrupeds, etc. + int nRace = GetRacialType(oTarget); + if (nRace == RACIAL_TYPE_DWARF || + nRace == RACIAL_TYPE_ANIMAL || + nRace == RACIAL_TYPE_MAGICAL_BEAST || + nRace == RACIAL_TYPE_VERMIN) + { + nDefenderMod += 4; + } + //:: Require at least +2 margin to attempt + if (nStrRusher + 2 < nDefenderMod) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3789", "ai_CanIBullrush: Size & Stability Check PASSED!"); + if(AI_DEBUG) ai_Debug("0i_combat", "3791", "ai_CanIBullrush: Can use Bullrush on oTarget."); + return TRUE; +} +//:: [PRC8] Returns TRUE if oTarget is a good candidate for Grappling +int ai_CanIGrapple(object oCreature, object oTarget) +{ + //:: FEAT_CM_GRAPPLE (3414) + //:: FEAT_IMPROVED_GRAPPLE (2804) + //:: FEAT_DEVASTATING_GRAPPLE (4246) + //:: Sanity checks + if (!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if (!GetHasFeat(3414, oCreature)) return FALSE; + //:: Can't grapple incorporeal or gaseous creatures + if (GetLocalInt(oTarget, "X2_L_IS_INCORPOREAL") || ai_GetHasEffectType(oTarget, EFFECT_TYPE_ETHEREAL)) return FALSE; + int nSizeCreature = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: Automatically fail if target is two or more size categories larger + if (nSizeTarget - nSizeCreature >= 2) return FALSE; + //:: Get BAB and STR for grapple calculation + int nBAB = GetBaseAttackBonus(oCreature); + int nStrMod = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + int nSizeMod = ai_GetSpecialGrappleSizeMod(nSizeCreature); + int nBonusGrapple = 0; + if (GetHasFeat(2804 /*Improved Grapple*/, oCreature)) nBonusGrapple += 2; + if (GetHasFeat(4246 /*Devastating Grapple*/, oCreature)) nBonusGrapple += 5; + int nGrappleScore = nBAB + nStrMod + nSizeMod + nBonusGrapple; + //:: Estimate target's grapple score defensively + int nTargetStrMod = GetAbilityModifier(ABILITY_STRENGTH, oTarget); + int nTargetSizeMod = ai_GetSpecialGrappleSizeMod(nSizeTarget); + int nTargetBAB = GetBaseAttackBonus(oTarget); + int nTargetGrapple = nTargetBAB + nTargetStrMod + nTargetSizeMod; + int nWinChance = 10 + nGrappleScore - nTargetGrapple; + //:: If chance to win grapple check < 60%, don’t bother + if (nWinChance < 6) return FALSE; + if(AI_DEBUG) ai_Debug("0i_combat", "3743", "Can use Grapple on oTarget."); return TRUE; +} diff --git a/_module/nss/0i_constants.nss b/_module/nss/0i_constants.nss new file mode 100644 index 0000000..59ecab6 --- /dev/null +++ b/_module/nss/0i_constants.nss @@ -0,0 +1,692 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Name: 0i_constants +// Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Include script for handling all constants for the ai. + These constants are static and can only be changed in the toolset. + Changes to any constants will not take effect until the scripts are recompiled. +*/////////////////////////////////////////////////////////////////////////////// + +const string PHILOS_VERSION = "Philos' Enhancing Player System (PEPS) version:11.16.25"; +// The following constants are designed to be changed to allow the AI to work +// differently based on what a developer wants. +// If you change these constants make sure the database has been removed +// so the ai_SetAIRules() will rewrite the new server rule values. +// File Name: peps_database.sqlite3 +//********************************** SERVER *********************************** +// Turn On/Off Debug. You can only use the debug with the pi_debug/pe_debug scripts. +// This will only work if you are using the PEPS menu system. +const int AI_DEBUG = FALSE; +// Defines if we are compiling for single player or a server. Always on for servers! +const int AI_SERVER = TRUE; +// The number of classes allowed for a creature to take in the server/module. +const int AI_MAX_CLASSES_PER_CHARACTER = 8; +// Taunts cool down time before the AI attemps another Taunt. +const int AI_TAUNT_COOLDOWN = 3; +// Animal Empathy cool down time before the AI attemps another check. +const int AI_EMPATHY_COOLDOWN = 3; +// Arcane Spell failure% or less than, for a caster to still try to cast a spell. +const int AI_ASF_WILL_USE = 15; +// Monsters chance to heal while in combat per round. +const int AI_MONSTER_HEAL_IN_COMBAT_CHANCE = 70; +// Monsters chance to heal when out of combat per heart beat. +const int AI_MONSTER_HEAL_OUT_COMBAT_CHANCE = 70; +// Allows Henchman to have a widget if using the henchman AI. +const int AI_HENCHMAN_WIDGET = TRUE; +// Change the Custom token number if it conflicts with your server. +const int AI_BASE_CUSTOM_TOKEN = 1000; + +//******************* These can be changed within the game ******************* +// Moral checks on or off. If wounded they will make Will saves, if they fail the flee. +const int AI_MORAL_CHECKS = FALSE; +// Allows monsters to prebuff before combat starts. +const int AI_PREBUFF = TRUE; +// Allows monsters to buff with all spells before combat starts. VERY DIFFICULT! +const int AI_FULL_BUFF = FALSE; +// Allows monsters cast summons spells when prebuffing. +const int AI_PRESUMMONS = TRUE; +// Allows monsters to use tactical AI scripts such as ambush, flanker, ranged. +const int AI_TACTICAL = TRUE; +// Enemies may summon familiars and Animal companions and will be randomized. +const int AI_SUMMON_COMPANIONS = FALSE; +// Allow the AI to move during combat base on the situation and action taking. +const int AI_ADVANCED_MOVEMENT = TRUE; +// Follow Item Level Restrictions for AI. +const int AI_ITEM_LEVEL_RESTRICTIONS = FALSE; +// Allow the AI to use Use Magic Device. +const int AI_USE_MAGIC_DEVICE = TRUE; +// Allow the AI to use healing kits. +const int AI_HEALING_KITS = TRUE; +// Associates are permanent and don't get removed when the master dies. +const int AI_COMPANIONS_PERMANENT = FALSE; +// Monster AI's chance (0 to 100) to attack the weakest target instead of the nearest. +// The higher the number the harder the encounter with monsters! +const int AI_TARGET_WEAKEST = 0; +// Variable that can change the distance creatures will come and attack after +// hearing a shout from an ally that sees or hears an enemy. +// Or when searching for an invisible, heard enemy. +// 10.0 Short, 30.0 Average, 40.0 Long, 60.0 Huge. +const float AI_SEARCH_DISTANCE = 30.0; +// Enemy corpses remain on the floor instead of dissappearing. +const int AI_CORPSE_REMAIN = FALSE; +// Monsters will wander around when not in combat. +const int AI_WANDER = FALSE; +// Variable distance monsters can wander away from their spawn point. +const float AI_WANDER_DISTANCE = 0.0; +// Variable that allows monsters to open doors when wandering around out of combat. +const int AI_OPEN_DOORS = FALSE; +// Monster's actual perception distance. +// 8 Short(10 sight/listen) 9 Medium(20 sight/listen) 10 Long(35 sight/20 listen) +// 11 Default(Based on appearance.2da Most creatures use 9, bosses use 10). +const int AI_MONSTER_PERCEPTION = 11; +// Should the AI auto adjust the XP scale to remove party size penalty? +const int AI_PARTY_SCALE = FALSE; + +//**************************** DM Based Constants **************************** +// The constant the server wants set to allow players to use specific widgets buttons. +// 0 Allows all buttons. See ASSOCIATE_WIDGET_BUTTONS below for values needed to be +// added to block those buttons. +// Example: BTN_CMD_GHOST_MODE = 0x00000800; To remove you would put 2048 below. +// Since Hex 800 is Decimal 2048. +const int AI_DM_WIDGET_ACCESS_BUTTONS = 0; +// The constant the server wants set to allow players to use specific AI buttons. +// 0 Allows all buttons. See ASSOCIATE_AI_BUTTONS below for values needed to be +// added to block those buttons. +// Example: BTN_AI_MAGIC_LEVEL = 0x00000040; To remove you would put 64 below. +// Since Hex 40 is Decimal 64. Adding BTN_AI_LOOT = 0x00001000; to that would be +// 64 + 4096 = 4160 to Block Magic Level and Auto Looting. +const int AI_DM_AI_ACCESS_BUTTONS = 0; +//************************** CONVERSATION CONSTANTS ************************** +// Player's can tell their associates to ignore enemy associates. +const int AI_IGNORE_ASSOCIATES_ON = TRUE; +// Associates with a Taunt skill higher than their level can be told to taunt. +const int AI_TAUNTING_ON = TRUE; +// Associates that cast spells can be told to use counterspell. +const int AI_COUNTERSPELLING_ON = TRUE; +// Associates with lore skill higher than the master can identify items. +const int AI_IDENTIFY_ON = TRUE; +// Associates can be called upon to scout ahead for monsters. +const int AI_SCOUT_AHEAD_ON = TRUE; +// A player can open a henchmen's inventory. +const int AI_OPEN_INVENTORY = TRUE; +// Allows players to have associates pickup loot. +const int AI_PICKUP_LOOT = TRUE; +// Allows players to take any henchman that is standing around. +const int AI_ALLOW_TAKING_HENCHMAN = FALSE; +// Allows players to remove a henchman through PEPS. +const int AI_REMOVE_HENCHMAN_ON = FALSE; +// Allows players to toggle patrolling ahead via the radial menu for remove henchman. +// Used on my server as a way to toggle patrolling ahead via the radial menu. +const int AI_PATROL_AHEAD_RADIAL_OPTION = FALSE; +//***************************** Health Constants ***************************** +// % of health for when a creature is considered wounded. +const int AI_HEALTH_WOUNDED = 50; +// % of health when creature is considered badly wounded. +const int AI_HEALTH_BLOODY = 25; +//***************************** MORAL CONSTANTS ****************************** +// Moral checks are only made once a creature is below AI_HEALTH_WOUNDED. +// The moral DC is AI_MORAL_DC - the number of Allies. Default: 5 +const int AI_WOUNDED_MORAL_DC = 5; +// Once a creature goes below AI_HEALTHY_BLOODY then it uses this moral DC. Default: 15 +const int AI_BLOODY_MORAL_DC = 15; +//******************************* WINDOW CONSTANTS ***************************** +const string AI_MAIN_NUI = "ai_main_nui"; +const string AI_COMMAND_NUI = "_command_nui"; +const string AI_NUI = "_ai_nui"; +const string AI_WIDGET_NUI = "_widget_nui"; +const string AI_LOOTFILTER_NUI = "_lootfilter_nui"; +const string AI_COPY_NUI = "_copy_nui"; +const string AI_PLUGIN_NUI = "ai_plugin_nui"; +const string AI_QUICK_WIDGET_NUI = "_quick_widget_nui"; +const string AI_SPELL_MEMORIZE_NUI = "_spell_memorize_nui"; +const string AI_SPELL_KNOWN_NUI = "_spell_known_nui"; +const string AI_SPELL_DESCRIPTION_NUI = "ai_spell_desc_nui"; +const string AI_EFFECT_ICON_NUI = "ai_effect_icon_nui"; +//******************************* CORE CONSTANTS ******************************* +// The following constants are core constants and changing any of these without +// understanding the whole system could cause unforseen results. +// CHANGE AT YOUR OWN RISK. +// Variable used to check if the module is running as a server. +const string AI_IS_SERVER = "AI_IS_SERVER"; +// Variable used to save a monster object for changing. +const string AI_MONSTER_OBJECT = "AI_MONSTER_OBJECT"; +// Variable used to save a monsters json for changing. +const string AI_MONSTER_JSON = "AI_MONSTER_JSON"; +// Variable used to let PEPS know that a monster plugin changed the monster. +const string AI_MONSTER_CHANGED = "AI_MONSTER_CHANGED"; +// Variable used to save an associates class list to change known list json. +const string AI_CLASS_LIST_JSON = "AI_CLASS_LIST_JSON"; +// Startup variable to tell plugins that we have started. +const string AI_STARTING_UP = "AI_STARTING_UP"; +// Add plugin variable to tell plugins that we are adding them to PEPS. +const string AI_ADD_PLUGIN = "AI_ADD_PLUGIN"; +// Startup variable to tell plugins what json array to add their plugin to. +const string AI_JSON_PLUGINS = "AI_JSON_PLUGINS"; +// Plugin variable to have plugins return if they setup the plugin in the json for PEPS. +const string AI_PLUGIN_SET = "AI_PLUGIN_SET"; +// Monster modification variable to let PEPS know what mods are available. +const string AI_MONSTER_MOD_JSON = "AI_MONSTER_MOD_JSON"; +// The maximum number of henchman the code works with. +const int AI_MAX_HENCHMAN = 30; +// Delay between Henchman casting Healing spells. Must be minimum of 0.5 seconds. +const float AI_HENCHMAN_HEALING_DELAY = 6.0; +// A variable that can be set on creatures to stop mobile animations. +const string AI_NO_ANIMATION = "AI_NO_ANIMATION"; +// How many seconds in a combat round. +const int AI_COMBAT_ROUND_IN_SECONDS = 6; +// Used for actions that take x seconds but don't have an action constant. +const string AI_COMBAT_WAIT_IN_SECONDS = "AI_COMBAT_WAIT_IN_SECONDS"; +// Constants used to define the difficulty of the battle for associates. +// 20+ : Impossible - Cannot win. +// 17 to 19 : Overpowering - Use all of our powers. +// 15 to 16 : Very Difficult - Use all of our power (Highest level spells). +// 11 to 14 : Challenging - Use most of our power (Higher level powers). +// 8 to 10 : Moderate - Use half of our power (Mid level powers and less). +// 5 to 7 : Easy - Use our weaker powers (Lowest level powers). +// 2 to 4 : Effortless - Don't waste spells and powers on this. +// 1 or less: Pointless - We probably should ignore these dangers. +const int AI_COMBAT_IMPOSSIBLE = 21; +const int AI_COMBAT_OVERPOWERING = 17; +const int AI_COMBAT_VERY_DIFFICULT = 15; +const int AI_COMBAT_CHALLENGING = 11; +const int AI_COMBAT_MODERATE = 10; +const int AI_COMBAT_EASY = 7; +const int AI_COMBAT_EFFORTLESS = 4; +// Variables used to keep track of enemies in combat. +const string AI_ENEMY = "AI_ENEMY"; // The enemy objects. +const string AI_ENEMY_DISABLED = "AI_ENEMY_DISABLED"; // Int if they are disabled. +const string AI_ENEMY_PERCEIVED = "AI_ENEMY_PERCEIVED"; // TRUE if we have seen or heard them, FALSE if not. +const string AI_ENEMY_RANGE = "AI_ENEMY_RANGE"; // The range from OBJECT_SELF. +const string AI_ENEMY_COMBAT = "AI_ENEMY_COMBAT"; // Combat rating: (BAB + AC - 10) / 2 +const string AI_ENEMY_MELEE = "AI_ENEMY_MELEE"; // Enemies within 5 meters - Allies within 5 meters. +const string AI_ENEMY_HEALTH = "AI_ENEMY_HEALTH"; // % of hitpoints. +const string AI_ENEMY_NUMBERS = "AI_ENEMY_NUM"; // Number of enemies in combat. +const string AI_ENEMY_POWER = "AI_ENEMY_POWER"; // (Level * Health %) / 100 added for each enemy to this. +const string AI_ENEMY_NEAREST = "AI_ENEMY_NEAREST"; // Nearest enemy to OBJECT_SELF. +// Variables used to keep track of allies in combat. +const string AI_ALLY = "AI_ALLY"; // All friendly creatures +const string AI_ALLY_DISABLED = "AI_ALLY_DISABLED"; // Int if they are disabled. +const string AI_ALLY_PERCEIVED = "AI_ALLY_PERCEIVED"; // All allies are set to be seen and heard. +const string AI_ALLY_RANGE = "AI_ALLY_RANGE"; // The range from OBJECT_SELF. +const string AI_ALLY_COMBAT = "AI_ALLY_COMBAT"; // Combat rating: (BAB + AC - 10) / 2 +const string AI_ALLY_MELEE = "AI_ALLY_MELEE"; // Enemies within 5 meters - Allies within 5 meters. +const string AI_ALLY_HEALTH = "AI_ALLY_HEALTH"; // % of hitpoints. +const string AI_ALLY_NUMBERS = "AI_ALLY_NUM"; // Number of allies in combat. +const string AI_ALLY_POWER = "AI_ALLY_POWER"; // (Level * Health %) / 100 added for each enemy to this. +// Variable name used to define the ai scripts being used by creatures. +const string AI_DEFAULT_SCRIPT = "AI_DEFAULT_SCRIPT"; +const string AI_COMBAT_SCRIPT = "AI_COMBAT_SCRIPT"; +// Constants used in a creatures listening patterns. +const string AI_I_SEE_AN_ENEMY = "AI_I_SEE_AN_ENEMY"; +const string AI_I_HEARD_AN_ENEMY = "AI_I_HEARD_AN_ENEMY"; +const string AI_ATKED_BY_WEAPON = "AI_ATK_BY_WEAPON"; +const string AI_ATKED_BY_SPELL = "AI_ATK_BY_SPELL"; +const string AI_I_AM_WOUNDED = "AI_I_AM_WOUNDED"; +const string AI_I_AM_DEAD = "AI_I_AM_DEAD"; +const string AI_I_AM_DISEASED = "AI_I_AM_DISEASED"; +const string AI_I_AM_POISONED = "AI_I_AM_POISONED"; +const string AI_I_AM_WEAK = "AI_I_AM_WEAK"; +const int AI_ALLY_HEARD_AN_ENEMY = 2; +const int AI_ALLY_ATKED_BY_WEAPON = 3; +const int AI_ALLY_ATKED_BY_SPELL = 4; +const int AI_ALLY_IS_WOUNDED = 5; +const int AI_ALLY_IS_DEAD = 6; +const int AI_ALLY_IS_DISEASED = 7; +const int AI_ALLY_IS_POISONED = 8; +const int AI_ALLY_IS_WEAK = 9; +const int AI_ALLY_SEES_AN_ENEMY = 10; +const string AI_MY_TARGET = "AI_MY_TARGET"; +// Constant used by monsters to reduce checks while searching for unseen targets. +const string AI_AM_I_SEARCHING = "AI_AM_I_SEARCHING"; +// Used to keep track of oCreature attempting to hide. +const string AI_TRIED_TO_HIDE = "AI_TRIED_TO_HIDE"; +// Constant used by creatures to keep track of invisible creatures. +const string AI_IS_INVISIBLE = "AI_IS_INVISIBLE"; +// Constants used in combat to keep track of a creatures last action. +// 0+ is the last spell cast from the line number in Spells.2da. +const string sLastActionVarname = "AI_LAST_ACTION"; +// Constants used in combat to keep track of a creatures last action time. +const string sLastActionTimeVarname = "AI_LAST_ACTION_TIME"; +const int AI_LAST_ACTION_CAST_SPELL = -1; +const int AI_LAST_ACTION_NONE = -2; +const int AI_LAST_ACTION_MELEE_ATK = -3; +const int AI_LAST_ACTION_RANGED_ATK = -4; +const int AI_LAST_ACTION_USED_FEAT = -5; +const int AI_LAST_ACTION_USED_ITEM = -6; +const int AI_LAST_ACTION_USED_SKILL = -7; +const int AI_LAST_ACTION_MOVE = -8; +// Variable name used to keep track of Action Modes. +const string AI_CURRENT_ACTION_MODE = "AI_CURRENT_ACTION_MODE"; +// Variable name used to keep track of object usage by the AI. +const string AI_OBJECT_IN_USE = "AI_OBJECT_IN_USE"; +// Variable name used to keep a creatures attacked targets. +const string AI_ATTACKED_PHYSICAL = "AI_ATTACKED_PHYSICAL"; +const string AI_ATTACKED_SPELL = "AI_ATTACKED_SPELL"; +// Variable name used to keep track of a creatures normal polymorph form. +const string AI_NORMAL_FORM = "AI_NORMAL_FORM"; +// Variable name used to have associates defined as Polymorphed. +const string AI_POLYMORPHED = "AI_POLYMORPHED"; +// Variable name used to keep track if a creature has been buffed yet. +const string AI_CASTER_BUFFS_SET = "AI_CASTER_BUFFS_SET"; +// Variable name used to keep track of rounds in combat for a custom ai script. +const string AI_ROUND = "AI_ROUND"; +// Combat Ranges +const float AI_RANGE_MELEE = 5.0f; // Anyone within this is considered to be in melee. +const float AI_RANGE_CLOSE = 8.0f; // For anything requiring to be within 30'. +const float AI_RANGE_LONG = 15.0f; // Mainly used for distance ranged attacks. +const float AI_RANGE_PERCEPTION = 35.0f; // This is the distance for perception in battle. +const float AI_RANGE_BATTLEFIELD = 40.0f; // This is the size of the battlefield area. +// Spell ranges. +const float AI_SHORT_DISTANCE = 8.0f; +const float AI_MEDIUM_DISTANCE = 20.0f; +const float AI_LONG_DISTANCE = 40.0f; +// When computer checks if a creature should cast a specific spell at a target. +// Computer makes a spell check vs the targets saving throw. +// Spell check roll for the caster is +// [Innate spell Level + Random (AI_SPELL_CHECK_DIE) + AI_SPELL_CHECK_BONUS] +// If the spell gives a save for half (i.e. FireBall) and the target does not have +// Evasion then they get an additional bonus of AI_SPELL_CHECK_NO_EVASION_BONUS. +const int AI_SPELL_CHECK_DIE = 6; +const int AI_SPELL_CHECK_BONUS = 3; +const int AI_SPELL_CHECK_NO_EVASION_BONUS = 10; +// When the computer checks if a creature should use defensive casting it looks +// at the spell level + AI_DEFENSIVE_CASTING_DC vs casters concentration +// and feat bonuses (i.e. COMBAT_CASTING) + Random (AI_DEFENSIVE_CASTING_ROLL). +const int AI_DEFENSIVE_CASTING_DC = 19; // 19 will allow them to use it at 50% effectiveness. +const int AI_DEFENSIVE_CASTING_DIE = 10; +// When the computer checks to see if it should cast in melee combat it looks +// at CASTING_IN_MELEE_DC + SpellLevel + (Num of creatures in melee * GetHitDice (NearestEnemy)); +// vs the casters concentration + Random (AI_CASTING_IN_MELEE_ROLL). +const int AI_CASTING_IN_MELEE_DC = 10; +const int AI_CASTING_IN_MELEE_ROLL = 10; +// For getting a specific class the following constants were added to flesh out +// the CLASS_TYPE_* +const int AI_CLASS_TYPE_CASTER = -1; +const int AI_CLASS_TYPE_DIVINE = -2; +const int AI_CLASS_TYPE_ARCANE = -3; +const int AI_CLASS_TYPE_WARRIOR = -4; +// For getting a specific race the following constants were added to flesh out +// the RACIAL_TYPE_* +const int AI_RACIAL_TYPE_ANIMAL_BEAST = -1; +const int AI_RACIAL_TYPE_HUMANOID = -2; +// Bitwise constants for negative conditions we might want to try to cure +const int AI_CONDITION_POISON = 0x00000001; +const int AI_CONDITION_DISEASE = 0x00000002; +const int AI_CONDITION_BLINDDEAF = 0x00000004; +const int AI_CONDITION_ATK_DECREASE = 0x00000008; +const int AI_CONDITION_DMG_DECREASE = 0x00000010; +const int AI_CONDITION_DMG_I_DECREASE = 0x00000020; +const int AI_CONDITION_SKILL_DECREASE = 0x00000040; +const int AI_CONDITION_SAVE_DECREASE = 0x00000080; +const int AI_CONDITION_SR_DECREASE = 0x00000100; +const int AI_CONDITION_AC_DECREASE = 0x00000200; +const int AI_CONDITION_SLOW = 0x00000400; +const int AI_CONDITION_ABILITY_DRAIN = 0x00000800; +const int AI_CONDITION_LEVEL_DRAIN = 0x00001000; +const int AI_CONDITION_CHARMED = 0x00002000; +const int AI_CONDITION_DAZED = 0x00004000; +const int AI_CONDITION_STUNNED = 0x00008000; +const int AI_CONDITION_FRIGHTENED = 0x00010000; +const int AI_CONDITION_CONFUSED = 0x00020000; +const int AI_CONDITION_CURSE = 0x00040000; +const int AI_CONDITION_PARALYZE = 0x00080000; +const int AI_CONDITION_DOMINATED = 0x00100000; +const int AI_CONDITION_DEAD = 0x00200000; +// Database constants for Associate modes. +const string AI_MODE_DB_TABLE = "AI_MODE_DB_TABLE"; +// Bitwise constants for Associate modes that are used with Get/SetAssociateMode(). +const string sAIModeVarname = "ASSOCIATE_MODES"; +//const int AI_MODE_DISTANCE_CLOSE = 0x00000001; // Stays within AI_DISTANCE_CLOSE of master. +//const int AI_MODE_DISTANCE_MEDIUM = 0x00000002; // Stays within AI_DISTANCE_MEDIUM of master. +const int AI_MODE_ACTION_GHOST = 0x00000004; // Defines if the player is using Ghost mode when using associate actions. +const int AI_MODE_SELF_HEALING_OFF = 0x00000008; // Creature will not use healing items or spells on self. +const int AI_MODE_PARTY_HEALING_OFF = 0x00000010; // Creature will not use healing items or spells on party. +const int AI_MODE_GHOST = 0x00000020; // Creature can move through other creatures. +const int AI_MODE_OPEN_DOORS = 0x00000040; // Creature will attempted to open all doors. +const int AI_MODE_EQUIP_WEAPON_OFF = 0x00000080; // The AI will not equip weapons. +const int AI_MODE_BASH_LOCKS = 0x00000100; // Will bash locks if cannot open door/placeable. +const int AI_MODE_AGGRESSIVE_SEARCH = 0x00000200; // Sets associate to continuous search mode. +const int AI_MODE_AGGRESSIVE_STEALTH = 0x00000400; // Sets associate to continuous stealth mode. +const int AI_MODE_PICK_LOCKS = 0x00000800; // Will pick locks if possible. +const int AI_MODE_DISARM_TRAPS = 0x00001000; // Will disarm traps. +const int AI_MODE_SCOUT_AHEAD = 0x00002000; // Will move ahead of master and scout. +const int AI_MODE_DEFEND_MASTER = 0x00004000; // Will attack enemies attacking our master. +const int AI_MODE_STAND_GROUND = 0x00008000; // Will stay in one place until new command. +const int AI_MODE_STOP_RANGED = 0x00010000; // Will not use ranged weapons. +const int AI_MODE_FOLLOW = 0x00020000; // Keeps associate following master ignoring combat. +const int AI_MODE_PICKUP_ITEMS = 0x00040000; // Will pickup up all items for master. +const int AI_MODE_COMMANDED = 0x00080000; // In Command mode then don't follow, search, etc. +const int AI_MODE_IGNORE_TRAPS = 0x00100000; // Creature will ignore traps on the floor. +const int AI_MODE_NO_STEALTH = 0x00200000; // Will not cast invisibilty or use stealth. +const int AI_MODE_DO_NOT_SPEAK = 0x00400000; // Tells the henchmen to be silent and not talk. +const int AI_MODE_CHECK_ATTACK = 0x00800000; // Will only engage in combats they think they can win. +const int AI_MODE_IGNORE_ASSOCIATES = 0x01000000; // Will ignore associates in combat. +//const int AI_MODE_ = 0x02000000; // Not used. +//const int AI_MODE_ = 0x04000000; // Not used. +//const int AI_MODE_ = 0x08000000; // Not used. +//const int AI_MODE_ = 0x10000000; // Not used. +//const int AI_MODE_ = 0x20000000; // Not used. +//const int AI_MODE_ = 0x40000000; // Not used. +//const int AI_MODE_ = 0x80000000; // Not used. +// Bitwise constants for Associate magic modes that are used with Get/SetAssociateMagicMode(). +const string sMagicModeVarname = "ASSOCIATE_MAGIC_MODES"; +const int AI_MAGIC_BUFF_MASTER = 0x00000001; // Buffs master before other allies. +const int AI_MAGIC_NO_MAGIC = 0x00000002; // Will not use any magic (Spells, abilities). +const int AI_MAGIC_DEFENSIVE_CASTING = 0x00000004; // Will only cast defensive spells. +const int AI_MAGIC_OFFENSIVE_CASTING = 0x00000008; // Will only cast offensive spells. +const int AI_MAGIC_STOP_DISPEL = 0x00000010; // Will not cast dispel type spells. +const int AI_MAGIC_BUFF_AFTER_REST = 0x00000020; // Will buff the party after resting. +const int AI_MAGIC_NO_MAGIC_ITEMS = 0x00000040; // Will not use magic items in combat. +const int AI_MAGIC_CURE_SPELLS_OFF = 0x00000080; // Will not cast cure spells. +const int AI_MAGIC_EFFECT_ICON_REPORT = 0x00000100; // Sets each player to report Effect Icons to chat. +//const int = 0x00000200; // Not used. +//const int = 0x00000400; // Not used. +const int AI_MAGIC_NO_SPONTANEOUS_CURE = 0x00000800; // Caster will stop using spontaneous cure spells. +//const int AI_MAGIC_ = 0x00001000; // Not used. +//const int AI_MAGIC_ = 0x00002000; // Not used. +//const int AI_MAGIC_ = 0x00004000; // Not used. +//const int AI_MAGIC_ = 0x00008000; // Not used. +//const int AI_MAGIC_ = 0x00010000; // Not used. +//const int AI_MAGIC_ = 0x00020000; // Not used. +//const int AI_MAGIC_ = 0x00040000; // Not used. +//const int AI_MAGIC_ = 0x00080000; // Not used. +//const int AI_MAGIC_ = 0x00100000; // Not used. +//const int AI_MAGIC_ = 0x00200000; // Not used. +//const int AI_MAGIC_ = 0x00400000; // Not used. +//const int AI_MAGIC_ = 0x00800000; // Not used. +//const int AI_MAGIC_ = 0x01000000; // Not used. +//const int AI_MAGIC_ = 0x02000000; // Not used. +//const int AI_MAGIC_ = 0x04000000; // Not used. +//const int AI_MAGIC_ = 0x08000000; // Not used. +//const int AI_MAGIC_ = 0x10000000; // Not used. +//const int AI_MAGIC_ = 0x20000000; // Not used. +//const int AI_MAGIC_ = 0x40000000; // Not used. +//const int AI_MAGIC_ = 0x80000000; // Not used. +// Use by NUI windows to stop saving move states while loading. +const string AI_NO_NUI_SAVE = "AI_NO_NUI_SAVE"; +// Bitwise menu constants for Widget buttons that are used with Get/SetAssociateWidgetButtons(). +const string sWidgetButtonsVarname = "ASSOCIATE_WIDGET_BUTTONS"; +const int BTN_WIDGET_OFF = 0x00000001; // Removes the widget from the screen, For PC it removes all associates. +const int BTN_WIDGET_LOCK = 0x00000002; // Locks the widget to the current coordinates. +const int BTN_CMD_GUARD = 0x00000004; // Command associates to Guard Me. PC widget only. +const int BTN_CMD_FOLLOW = 0x00000008; // Command associates to Follow. PC widget only. +const int BTN_CMD_HOLD = 0x00000010; // Command associates to Stand Ground. PC widget only. +const int BTN_CMD_ATTACK = 0x00000020; // Command associates to Attack Nearest. PC widget only. +const int BTN_BUFF_REST = 0x00000040; // Buffs with long duration spells after resting. Associate widget only. +const int BTN_BUFF_SHORT = 0x00000080; // Buffs with short duration spells. +const int BTN_BUFF_LONG = 0x00000100; // Buffs with long duration spells. +const int BTN_BUFF_ALL = 0x00000200; // Buffs with all spells. +const int BTN_CMD_ACTION = 0x00000400; // Command associate to do an action. +const int BTN_CMD_GHOST_MODE = 0x00000800; // Toggle's associates ghost mode. +const int BTN_CMD_AI_SCRIPT = 0x00001000; // Toggle's special tactics ai scripts. +const int BTN_CMD_PLACE_TRAP = 0x00002000; // A trapper may place traps. +const int BTN_CMD_CAMERA = 0x00004000; // Places camera view on associate. +const int BTN_CMD_INVENTORY = 0x00008000; // Opens inventory of associate. +const int BTN_CMD_FAMILIAR = 0x00010000; // Summons familiar. +const int BTN_CMD_COMPANION = 0x00020000; // Summons Companion. +const int BTN_CMD_SEARCH = 0x00040000; // Command all associates to use search mode. PC widget only. +const int BTN_CMD_STEALTH = 0x00080000; // Command all associates to use stealth mode. PC widget only. +const int BTN_CMD_SCOUT = 0x00100000; // Command associate to scout ahead of the part. +const int BTN_CMD_SPELL_WIDGET = 0x00200000; // Allows adding or removing spells from Spell Widget. +const int BTN_CMD_JUMP_TO = 0x00400000; // Player can make associates jump to them. +const int BTN_ASSOC_WIDGETS_OFF = 0x00800000; // Turns all associate widgets on/off. +const int BTN_WIDGET_VERTICAL = 0x80000000; // Widget will be displayed vertical. +// Bitwise menu constants for Associate AI buttons that are used with Get/SetAssociateAIButtons(). +const string sAIButtonsVarname = "ASSOCIATE_AI_BUTTONS"; +const int BTN_AI_FOR_PC = 0x00000001; // PC use AI. PC widget only. +const int BTN_AI_USE_RANGED = 0x00000002; // AI uses ranged attacks. +const int BTN_AI_USE_SEARCH = 0x00000004; // AI uses Search. +const int BTN_AI_USE_STEALTH = 0x00000008; // AI uses Stealth. +const int BTN_AI_REMOVE_TRAPS = 0x00000010; // AI seeks out and removes traps. +const int BTN_AI_PICK_LOCKS = 0x00000020; // AI will attempt to pick locks. +const int BTN_AI_MAGIC_LEVEL = 0x00000040; // Increase chance to use magic in battle. +const int BTN_AI_NO_SPONTANEOUS = 0x00000080; // Stops the use of spontaneous spells. +const int BTN_AI_NO_MAGIC_USE = 0x00000100; // Will not use magic in battle. +const int BTN_AI_NO_MAGIC_ITEM_USE = 0x00000200; // Will not use magic items in battle. +const int BTN_AI_DEF_MAGIC_USE = 0x00000400; // Will use Defensive spells only in battle. +const int BTN_AI_OFF_MAGIC_USE = 0x00000800; // Will use Offensive spells only in battle. +const int BTN_AI_LOOT = 0x00001000; // Auto picking up loot on/off. +const int BTN_AI_FOLLOW_TARGET = 0x00002000; // Selects a target to follow. +const int BTN_AI_HEAL_OUT = 0x00004000; // Increase minimum hp required before ai heals out of combat. +const int BTN_AI_PERC_RANGE = 0x00008000; // Adjust the perception range of the henchman. +const int BTN_AI_HEAL_IN = 0x00010000; // Increase minimum hp required before ai heals in combat. +const int BTN_AI_OPEN_DOORS = 0x00020000; // AI will open all closed doors. +const int BTN_AI_STOP_SELF_HEALING = 0x00040000; // Stops AI from using any healing on self. +const int BTN_AI_STOP_PARTY_HEALING = 0x00080000; // Stops AI from using any healing on party. +const int BTN_AI_IGNORE_ASSOCIATES = 0x00100000; // AI will deprioritize enemy associates. +const int BTN_AI_STOP_CURE_SPELLS = 0x00200000; // AI uses cure spells. +const int BTN_AI_STOP_WEAPON_EQUIP = 0x00400000; // AI can equip different weapons. +const int BTN_AI_IGNORE_TRAPS = 0x00800000; // AI will ignore traps on the floor. +//const int BTN_AI = 0x01000000; // Not used. +//const int BTN_AI = 0x02000000; // Not used. +const int BTN_AI_BASH_LOCKS = 0x04000000; // AI will attempt to bash any locks they can't get past. +const int BTN_AI_REDUCE_SPEECH = 0x08000000; // Reduce the associates speaking. +// Bitwise menu constants for DM access for players Widget buttons uses BTN_CMD and BTN_BUFF bitwise see above. +const string sDMWidgetAccessVarname = "AI_RULES_WIDGET_BUTTONS_ACCESS"; +// Bitwise menu constants for DM access for players AI buttons uses BTN_AI bitwise see above. +const string sDMAIAccessVarname = "AI_RULES_AI_BUTTONS_ACCESS"; +// Variable name for DM widget buttons. +const string sDMWidgetButtonVarname = "DM_WIDGET_BUTTONS"; +// DM Widget buttons states. +const int BTN_DM_WIDGET_OFF = 0x00000001; // Removes the widget from the screen, For PC it removes all associates. +const int BTN_DM_WIDGET_LOCK = 0x00000002; // Locks the widget to the current coordinates. +const int BTN_DM_CMD_GROUP1 = 0x00000004; // Does all the group 1 commands. +const int BTN_DM_CMD_GROUP2 = 0x00000008; // Does all the group 2 commands. +const int BTN_DM_CMD_GROUP3 = 0x00000010; // Does all the group 3 commands. +const int BTN_DM_CMD_GROUP4 = 0x00000020; // Does all the group 4 commands. +const int BTN_DM_CMD_GROUP5 = 0x00000040; // Does all the group 5 commands. +const int BTN_DM_CMD_GROUP6 = 0x00000080; // Does all the group 6 commands. +const int BTN_DM_CMD_CAMERA = 0x00000100; // Selects new object to hold the camera view. +const int BTN_DM_CMD_INVENTORY = 0x00000200; // Selects a creature to open the inventory of. +const int BTN_DM_CMD_MEMORIZE = 0x00000400; // Allows associate to change memorized spells. +// Bitwise constants for Associate loot options that are used with Get/SetAssociateLootMode(). +const string sLootFilterVarname = "ASSOCIATE_LOOT_MODES"; +const int AI_LOOT_PLOT = 0x00000001; +const int AI_LOOT_WEAPONS = 0x00000002; +const int AI_LOOT_ARMOR = 0x00000004; +const int AI_LOOT_SHIELDS = 0x00000008; +const int AI_LOOT_HEADGEAR = 0x00000010; +const int AI_LOOT_BELTS = 0x00000020; +const int AI_LOOT_BOOTS = 0x00000040; +const int AI_LOOT_CLOAKS = 0x00000080; +const int AI_LOOT_GLOVES = 0x00000100; +const int AI_LOOT_JEWELRY = 0x00000200; +const int AI_LOOT_POTIONS = 0x00000400; +const int AI_LOOT_SCROLLS = 0x00000800; +const int AI_LOOT_WANDS_RODS_STAVES = 0x00001000; +const int AI_LOOT_GEMS = 0x00002000; +const int AI_LOOT_MISC = 0x00004000; +const int AI_LOOT_ARROWS = 0x00008000; +const int AI_LOOT_BOLTS = 0x00010000; +const int AI_LOOT_BULLETS = 0x00020000; +const int AI_LOOT_GIVE_TO_PC = 0x80000000; +// Default value for all loot filters to be on. +const int AI_LOOT_ALL_ON = 262143; +// Variable to keep track of who is in ghost mode. +const string sGhostModeVarname = "AI_GHOST_MODE_ON"; +// Variables for gold piece value to pickup items. +const string AI_MIN_GOLD_ = "AI_MIN_GOLD_"; +// Variable used to limit the spamming of NUI buttons. +const string AI_DELAY_NUI_USE = "AI_DELAY_NUI_USE"; +// Variable for maximum weight to pickup from looting. +const string AI_MAX_LOOT_WEIGHT = "AI_MAX_LOOT_WEIGHT"; +// Variable to change the size of the widget buttons. +const string AI_WIDGET_BUTTON_SIZE = "AI_WIDGET_BUTTON_SIZE"; +// Variable to change the difficulty so a player can adjust spell usage. +const string AI_DIFFICULTY_ADJUSTMENT = "AI_DIFFICULTY_ADJUSTMENT"; +// Variable to change the Healing % limit for out of combat. +const string AI_HEAL_OUT_OF_COMBAT_LIMIT = "AI_HEAL_OUT_OF_COMBAT_LIMIT"; +// Variable to change the Healing % limit for in combat. +const string AI_HEAL_IN_COMBAT_LIMIT = "AI_HEAL_IN_COMBAT_LIMIT"; +// Variable to change the looting range. +const string AI_LOOT_CHECK_RANGE = "AI_LOOT_CHECK_RANGE"; +// Variable to change the lock checking range. +const string AI_LOCK_CHECK_RANGE = "AI_LOCK_CHECK_RANGE"; +// Variable to change the trap checking range. +const string AI_TRAP_CHECK_RANGE = "AI_TRAP_CHECK_RANGE"; +// Variable to change the range an associate follows the pc. +const string AI_FOLLOW_RANGE = "AI_FOLLOW_RANGE"; +// Variable that holds the target for an associate to follow. +const string AI_FOLLOW_TARGET = "AI_FOLLOW_TARGET"; +// Variable that holds the perception range of associates i.e. 8, 9, 10, 11. +const string AI_ASSOCIATE_PERCEPTION = "AI_PERCEPTION_RANGE"; +// Variable that holds the perception distance of associates i.e. 30.0 meters. +const string AI_ASSOC_PERCEPTION_DISTANCE = "AI_ASSOC_PERCEPTION_DISTANCE"; +// Variable that holds the open doors range of the henchman. +const string AI_OPEN_DOORS_RANGE = "AI_OPEN_DOORS_RANGE"; +// Variable that holds the delay for casting buff spells. +const string AI_DELAY_BUFF_CASTING = "AI_DELAY_BUFF_CASTING"; +// Variable that holds the Spell widgets json data. +const string AI_SPELLS_WIDGET = "AI_SPELLS_WIDGET"; +// The number of Buff Groups +const int AI_BUFF_GROUPS = -17; +// Variable name used to keep track if we have set our talents. +const string AI_TALENTS_SET = "AI_TALENTS_SET"; +// New talent categories +const string AI_TALENT_ENHANCEMENT = "E"; +const string AI_TALENT_PROTECTION = "P"; +const string AI_TALENT_SUMMON = "S"; +const string AI_TALENT_HEALING = "H"; +const string AI_TALENT_CURE = "C"; +const string AI_TALENT_INDISCRIMINANT_AOE = "I"; +const string AI_TALENT_DISCRIMINANT_AOE = "D"; +const string AI_TALENT_RANGED = "R"; +const string AI_TALENT_TOUCH = "T"; +// Talent types. +const int AI_TALENT_TYPE_SPELL = 1; +const int AI_TALENT_TYPE_SP_ABILITY = 2; +const int AI_TALENT_TYPE_FEAT = 3; +const int AI_TALENT_TYPE_ITEM = 4; +// Variable name used to have associates fight the pc's selected target. +const string AI_PC_LOCKED_TARGET = "AI_PC_LOCKED_TARGET"; +// Variable name of json talent immunity. +const string AI_TALENT_IMMUNITY = "AI_TALENT_IMMUNITY"; +// Variables keeps track of the maximum level for the talent category. +const string AI_MAX_TALENT = "AI_MAX_TALENT_"; +// Variables keeps track of the maximum level for the talent level. +const string AI_MAX_LEVEL = "AI_MAX_LEVEL_"; +// Backward compatability constants. +const int X2_EVENT_CONCENTRATION_BROKEN = 12400; +// Variable set on the module if the module is using PRC. +const string AI_USING_PRC = "AI_USING_PRC"; +// Variable that sets if the rules have been added to the module. +const string AI_RULES_SET = "AI_RULES_SET"; +// Variable that tells us that oCreature has run our OnSpawn event. +const string AI_ONSPAWN_EVENT = "AI_ONSPAWN_EVENT"; +// Variable used to define a creatures unique Tag for widgets. +const string AI_TAG = "AI_TAG"; +// Variable that saves any module target event script so we can pass it along. +const string AI_MODULE_TARGET_EVENT = "AI_MODULE_TARGET_EVENT"; +// Variable for plugins to inject Targeting mode code into PEPS. +const string AI_PLUGIN_TARGET_SCRIPT = "AI_PLUGIN_TARGET_SCRIPT"; +// Variable for PEPS to inject effect icons NUI information. +const string AI_MODULE_GUI_EVENT = "AI_MODULE_GUI_EVENT"; +// Variable used on the player to define the targeting action in the OnPlayerTarget event script. +const string AI_TARGET_MODE = "AI_TARGET_MODE"; +// Variable used on the player to define which associate triggered the OnPlayer Target. +const string AI_TARGET_ASSOCIATE = "AI_TARGET_ASSOCIATE"; +// Variable use on the player to define if the player is using target mode on an associate. +const string AI_TARGET_MODE_ON = "AI_TARGET_MODE_ON"; +// Variable used on the player to define what associate has Target Mode set on it. +const string AI_TARGET_MODE_ASSOCIATE = "AI_TARGET_MODE_ASSOCIATE"; +// Variable used on a creature to define how long ago their immunities were saved. +const string sIPTimeStampVarname = "AI_IP_TIMESTAMP"; +// Bitwise constants for immune damage item properties that is used with Get/SetItemProperty(). +const string sIPImmuneVarname = "AI_IP_IMMUNE"; +// Bitwise constants for resisted damage item properties that is used with Get/SetItemProperty(). +const string sIPResistVarname = "AI_IP_RESIST"; +// Variable name for the Int constant for reduced damage item property set to the bonus of the weapon required. +const string sIPReducedVarname = "AI_IP_REDUCED"; +// Variable name for the Int (Bool) constant for the haste item property. +const string sIPHasHasteVarname = "AI_IP_HAS_HASTE"; +// Variable name used to hold the party xp base needed to adjust party xp. +const string AI_BASE_PARTY_SCALE_XP = "AI_BASE_PARTY_SCALE_XP"; +//***************************** AI RULES CONSTANTS ***************************** +// Variable name set to a creatures full name to set debugging on. +const string AI_RULE_DEBUG_CREATURE = "AI_RULE_DEBUG_CREATURE"; +// Moral checks on or off. +const string AI_RULE_MORAL_CHECKS = "AI_RULE_MORAL_CHECKS"; +// Allows monsters to prebuff before combat starts. +const string AI_RULE_BUFF_MONSTERS = "AI_RULE_BUFF_MONSTERS"; +// Allows monsters to prebuff with all defensive spells before combat starts. +const string AI_RULE_FULL_BUFF_MONSTERS = "AI_RULE_FULL_BUFF_MONSTERS"; +// Allows monsters to use the ambush AI scripts. +const string AI_RULE_AMBUSH = "AI_RULE_AMBUSH"; +// Enemies may summon familiars and Animal companions and will be randomized. +const string AI_RULE_SUMMON_COMPANIONS = "AI_RULE_SUMMON_COMPANIONS"; +// Allows monsters cast summons spells when prebuffing. +const string AI_RULE_PRESUMMON = "AI_RULE_PRESUMMON"; +// Allow the AI move during combat base on the situation and action taking. +const string AI_RULE_ADVANCED_MOVEMENT = "AI_RULE_ADVANCED_MOVEMENT"; +// Follow Item Level Restrictions for monsters/associates. +// Usually off in Single player and on in Multi player. +const string AI_RULE_ILR = "AI_RULE_ILR"; +// Allow the AI to use Use Magic Device. +const string AI_RULE_ALLOW_UMD = "AI_RULE_ALLOW_UMD"; +// Allow the AI to use healing kits. +const string AI_RULE_HEALERSKITS = "AI_RULE_HEALERSKITS"; +// Summoned associates are permanent and don't disappear when the caster dies. +const string AI_RULE_PERM_ASSOC = "AI_RULE_PERM_ASSOC"; +// Monster AI's chance to attack the weakest target instead of the nearest. +const string AI_RULE_AI_DIFFICULTY = "AI_RULE_AI_DIFFICULTY"; +// Variable that can change the distance creatures will come and attack after +// hearing a shout from an ally that sees or hears an enemy. +// Or when searching for an invisible, heard enemy. +// 10.0 Short, 30.0 Average, 40.0 Long, 60.0 Huge. +const string AI_RULE_PERCEPTION_DISTANCE = "AI_RULE_PERCEPTION_DISTANCE"; +// Enemy corpses remain on the floor instead of dissappearing. +const string AI_RULE_CORPSES_STAY = "AI_RULE_CORPSES_STAY"; +// Monsters will wander around when not in combat. +const string AI_RULE_WANDER = "AI_RULE_WANDER"; +// Increase the number of encounter creatures. +const string AI_INCREASE_ENC_MONSTERS = "AI_INCREASE_ENC_MONSTERS"; +// Increase all monsters hitpoints by this percentage. +const string AI_INCREASE_MONSTERS_HP = "AI_INCREASE_MONSTERS_HP"; +// Variable that can change the distance monsters can hear and see. +const string AI_RULE_MON_PERC_DISTANCE = "AI_RULE_MON_PERC_DISTANCE"; +// Variable name set to hold the maximum number of henchman the player wants. +const string AI_RULE_MAX_HENCHMAN = "AI_RULE_MAX_HENCHMAN"; +// Variable name set to hold the distance monsters can wander away. +const string AI_RULE_WANDER_DISTANCE = "AI_RULE_WANDER_DISTANCE"; +// Variable name set to allow wandering monsters to open doors. +const string AI_RULE_OPEN_DOORS = "AI_RULE_OPEN_DOORS"; +// Variable name set to hold the modules default xp scale for use later. +const string AI_RULE_DEFAULT_XP_SCALE = "AI_RULE_DEFAULT_XP_SCALE"; +// Variable name set to allow the game to regulate experience based on party size. +const string AI_RULE_PARTY_SCALE = "AI_RULE_PARTY_SCALE"; +// Variable name set to restrict the AI's use of Darkness. +const string AI_RULE_RESTRICTED_SPELLS = "AI_RULE_RESTRICTED_SPELLS"; +/*/ Special behavior constants from x0_i0_behavior +const int NW_FLAG_BEHAVIOR_SPECIAL = 0x00000001; +//Will always attack regardless of faction +const int NW_FLAG_BEHAVIOR_CARNIVORE = 0x00000002; +//Will only attack if approached +const int NW_FLAG_BEHAVIOR_OMNIVORE = 0x00000004; +//Will never attack. Will alway flee. +const int NW_FLAG_BEHAVIOR_HERBIVORE = 0x00000008; +// This is the name of the local variable that holds the spawn-in conditions +const string sSpawnCondVarname = "NW_GENERIC_MASTER"; +// The available spawn-in conditions from x0_i0_spawncond +const int NW_FLAG_ESCAPE_RETURN = 0x00000020; //Failed +const int NW_FLAG_ESCAPE_LEAVE = 0x00000040; +const int NW_FLAG_TELEPORT_RETURN = 0x00000080; //Failed +const int NW_FLAG_TELEPORT_LEAVE = 0x00000100; +const int NW_FLAG_END_COMBAT_ROUND_EVENT = 0x00004000; +const int NW_FLAG_ON_DIALOGUE_EVENT = 0x00008000; +const int NW_FLAG_AMBIENT_ANIMATIONS = 0x00080000; +const int NW_FLAG_HEARTBEAT_EVENT = 0x00100000; +const int NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS = 0x00200000; +const int NW_FLAG_DAY_NIGHT_POSTING = 0x00400000; +const int NW_FLAG_AMBIENT_ANIMATIONS_AVIAN = 0x00800000; +const string sWalkwayVarname = "NW_WALK_CONDITION"; +// If set, the creature's waypoints have been initialized. +const int NW_WALK_FLAG_INITIALIZED = 0x00000001; +// If set, the creature will walk its waypoints constantly, +// moving on in each OnHeartbeat event. Otherwise, +// it will walk to the next only when triggered by an +// OnPerception event. +const int NW_WALK_FLAG_CONSTANT = 0x00000002; +// Set when the creature is walking day waypoints. +const int NW_WALK_FLAG_IS_DAY = 0x00000004; +// Set when the creature is walking back +const int NW_WALK_FLAG_BACKWARDS = 0x00000008; diff --git a/_module/nss/0i_gui_events.nss b/_module/nss/0i_gui_events.nss new file mode 100644 index 0000000..bc90d25 --- /dev/null +++ b/_module/nss/0i_gui_events.nss @@ -0,0 +1,1032 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_gui_events +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for all gui events. See also 0e_gui_events + + GUI Events: + GUIEVENT_EFFECTICON_CLICK: For displaying icon information. + + This was built by DAZ all credit to him. + I just changed it from PostString to a NUI menu. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_constants" +#include "0i_nui" +void ai_SetupModuleGUIEvents() +{ + object oModule = GetModule(); + string sModuleGUIEvents = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT); + if(sModuleGUIEvents != "" || sModuleGUIEvents != "0e_gui_events") + { + SetLocalString(oModule, AI_MODULE_GUI_EVENT, sModuleGUIEvents); + } + SetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT, "0e_gui_events"); +} +int EffectIconToEffectType(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_INVALID: return EFFECT_TYPE_INVALIDEFFECT; + + // *** No Extra Stats + case EFFECT_ICON_BLIND: return EFFECT_TYPE_BLINDNESS; + case EFFECT_ICON_CHARMED: return EFFECT_TYPE_CHARMED; + case EFFECT_ICON_CONFUSED: return EFFECT_TYPE_CONFUSED; + case EFFECT_ICON_FRIGHTENED: return EFFECT_TYPE_FRIGHTENED; + case EFFECT_ICON_DOMINATED: return EFFECT_TYPE_DOMINATED; + case EFFECT_ICON_PARALYZE: return EFFECT_TYPE_PARALYZE; + case EFFECT_ICON_DAZED: return EFFECT_TYPE_DAZED; + case EFFECT_ICON_STUNNED: return EFFECT_TYPE_STUNNED; + case EFFECT_ICON_SLEEP: return EFFECT_TYPE_SLEEP; + case EFFECT_ICON_SILENCE: return EFFECT_TYPE_SILENCE; + case EFFECT_ICON_TURNED: return EFFECT_TYPE_TURNED; + case EFFECT_ICON_HASTE: return EFFECT_TYPE_HASTE; + case EFFECT_ICON_SLOW: return EFFECT_TYPE_SLOW; + case EFFECT_ICON_ENTANGLE: return EFFECT_TYPE_ENTANGLE; + case EFFECT_ICON_DEAF: return EFFECT_TYPE_DEAF; + case EFFECT_ICON_DARKNESS: return EFFECT_TYPE_DARKNESS; + case EFFECT_ICON_POLYMORPH: return EFFECT_TYPE_POLYMORPH; + case EFFECT_ICON_SANCTUARY: return EFFECT_TYPE_SANCTUARY; + case EFFECT_ICON_TRUESEEING: return EFFECT_TYPE_TRUESEEING; + case EFFECT_ICON_SEEINVISIBILITY: return EFFECT_TYPE_SEEINVISIBLE; + case EFFECT_ICON_ETHEREALNESS: return EFFECT_TYPE_ETHEREAL; + case EFFECT_ICON_PETRIFIED: return EFFECT_TYPE_PETRIFY; + // *** + + case EFFECT_ICON_DAMAGE_RESISTANCE: return EFFECT_TYPE_DAMAGE_RESISTANCE; + case EFFECT_ICON_REGENERATE: return EFFECT_TYPE_REGENERATE; + case EFFECT_ICON_DAMAGE_REDUCTION: return EFFECT_TYPE_DAMAGE_REDUCTION; + case EFFECT_ICON_TEMPORARY_HITPOINTS: return EFFECT_TYPE_TEMPORARY_HITPOINTS; + case EFFECT_ICON_IMMUNITY: return EFFECT_TYPE_IMMUNITY; + case EFFECT_ICON_POISON: return EFFECT_TYPE_POISON; + case EFFECT_ICON_DISEASE: return EFFECT_TYPE_DISEASE; + case EFFECT_ICON_CURSE: return EFFECT_TYPE_CURSE; + case EFFECT_ICON_ATTACK_INCREASE: return EFFECT_TYPE_ATTACK_INCREASE; + case EFFECT_ICON_ATTACK_DECREASE: return EFFECT_TYPE_ATTACK_DECREASE; + case EFFECT_ICON_DAMAGE_INCREASE: return EFFECT_TYPE_DAMAGE_INCREASE; + case EFFECT_ICON_DAMAGE_DECREASE: return EFFECT_TYPE_DAMAGE_DECREASE; + case EFFECT_ICON_AC_INCREASE: return EFFECT_TYPE_AC_INCREASE; + case EFFECT_ICON_AC_DECREASE: return EFFECT_TYPE_AC_DECREASE; + case EFFECT_ICON_MOVEMENT_SPEED_INCREASE: return EFFECT_TYPE_MOVEMENT_SPEED_INCREASE; + case EFFECT_ICON_MOVEMENT_SPEED_DECREASE: return EFFECT_TYPE_MOVEMENT_SPEED_DECREASE; + case EFFECT_ICON_SAVING_THROW_DECREASE: return EFFECT_TYPE_SAVING_THROW_DECREASE; + case EFFECT_ICON_SPELL_RESISTANCE_INCREASE: return EFFECT_TYPE_SPELL_RESISTANCE_INCREASE; + case EFFECT_ICON_SPELL_RESISTANCE_DECREASE: return EFFECT_TYPE_SPELL_RESISTANCE_DECREASE; + case EFFECT_ICON_SKILL_INCREASE: return EFFECT_TYPE_SKILL_INCREASE; + case EFFECT_ICON_SKILL_DECREASE: return EFFECT_TYPE_SKILL_DECREASE; + case EFFECT_ICON_ELEMENTALSHIELD: return EFFECT_TYPE_ELEMENTALSHIELD; + case EFFECT_ICON_LEVELDRAIN: return EFFECT_TYPE_NEGATIVELEVEL; + case EFFECT_ICON_SPELLLEVELABSORPTION: return EFFECT_TYPE_SPELLLEVELABSORPTION; + case EFFECT_ICON_SPELLIMMUNITY: return EFFECT_TYPE_SPELL_IMMUNITY; + case EFFECT_ICON_CONCEALMENT: return EFFECT_TYPE_CONCEALMENT; + case EFFECT_ICON_EFFECT_SPELL_FAILURE: return EFFECT_TYPE_SPELL_FAILURE; + + case EFFECT_ICON_INVISIBILITY: + case EFFECT_ICON_IMPROVEDINVISIBILITY: return EFFECT_TYPE_INVISIBILITY; + + case EFFECT_ICON_ABILITY_INCREASE_STR: + case EFFECT_ICON_ABILITY_INCREASE_DEX: + case EFFECT_ICON_ABILITY_INCREASE_CON: + case EFFECT_ICON_ABILITY_INCREASE_INT: + case EFFECT_ICON_ABILITY_INCREASE_WIS: + case EFFECT_ICON_ABILITY_INCREASE_CHA: return EFFECT_TYPE_ABILITY_INCREASE; + + case EFFECT_ICON_ABILITY_DECREASE_STR: + case EFFECT_ICON_ABILITY_DECREASE_CHA: + case EFFECT_ICON_ABILITY_DECREASE_DEX: + case EFFECT_ICON_ABILITY_DECREASE_CON: + case EFFECT_ICON_ABILITY_DECREASE_INT: + case EFFECT_ICON_ABILITY_DECREASE_WIS: return EFFECT_TYPE_ABILITY_DECREASE; + + case EFFECT_ICON_IMMUNITY_ALL: + case EFFECT_ICON_IMMUNITY_MIND: + case EFFECT_ICON_IMMUNITY_POISON: + case EFFECT_ICON_IMMUNITY_DISEASE: + case EFFECT_ICON_IMMUNITY_FEAR: + case EFFECT_ICON_IMMUNITY_TRAP: + case EFFECT_ICON_IMMUNITY_PARALYSIS: + case EFFECT_ICON_IMMUNITY_BLINDNESS: + case EFFECT_ICON_IMMUNITY_DEAFNESS: + case EFFECT_ICON_IMMUNITY_SLOW: + case EFFECT_ICON_IMMUNITY_ENTANGLE: + case EFFECT_ICON_IMMUNITY_SILENCE: + case EFFECT_ICON_IMMUNITY_STUN: + case EFFECT_ICON_IMMUNITY_SLEEP: + case EFFECT_ICON_IMMUNITY_CHARM: + case EFFECT_ICON_IMMUNITY_DOMINATE: + case EFFECT_ICON_IMMUNITY_CONFUSE: + case EFFECT_ICON_IMMUNITY_CURSE: + case EFFECT_ICON_IMMUNITY_DAZED: + case EFFECT_ICON_IMMUNITY_ABILITY_DECREASE: + case EFFECT_ICON_IMMUNITY_ATTACK_DECREASE: + case EFFECT_ICON_IMMUNITY_DAMAGE_DECREASE: + case EFFECT_ICON_IMMUNITY_DAMAGE_IMMUNITY_DECREASE: + case EFFECT_ICON_IMMUNITY_AC_DECREASE: + case EFFECT_ICON_IMMUNITY_MOVEMENT_SPEED_DECREASE: + case EFFECT_ICON_IMMUNITY_SAVING_THROW_DECREASE: + case EFFECT_ICON_IMMUNITY_SPELL_RESISTANCE_DECREASE: + case EFFECT_ICON_IMMUNITY_SKILL_DECREASE: + case EFFECT_ICON_IMMUNITY_KNOCKDOWN: + case EFFECT_ICON_IMMUNITY_NEGATIVE_LEVEL: + case EFFECT_ICON_IMMUNITY_SNEAK_ATTACK: + case EFFECT_ICON_IMMUNITY_CRITICAL_HIT: + case EFFECT_ICON_IMMUNITY_DEATH_MAGIC: return EFFECT_TYPE_IMMUNITY; + + case EFFECT_ICON_SAVING_THROW_INCREASE: + case EFFECT_ICON_REFLEX_SAVE_INCREASED: + case EFFECT_ICON_FORT_SAVE_INCREASED: + case EFFECT_ICON_WILL_SAVE_INCREASED: return EFFECT_TYPE_SAVING_THROW_INCREASE; + + case EFFECT_ICON_DAMAGE_IMMUNITY_INCREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC: + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID: + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD: + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE: + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL: + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE: + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC: return EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE; + + case EFFECT_ICON_DAMAGE_IMMUNITY_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE_DECREASE: + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC_DECREASE: return EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE; + + //case EFFECT_ICON_INVULNERABLE: return EFFECT_TYPE_INVULNERABLE; + //case EFFECT_ICON_WOUNDING: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_TAUNTED: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_TIMESTOP: return EFFECT_TYPE_TIMESTOP; + //case EFFECT_ICON_BLINDNESS: return EFFECT_TYPE_BLINDNESS; + //case EFFECT_ICON_DISPELMAGICBEST: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_DISPELMAGICALL: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_ENEMY_ATTACK_BONUS: return EFFECT_TYPE_INVALIDEFFECT; + //case EFFECT_ICON_FATIGUE: return EFFECT_TYPE_INVALIDEFFECT; + } + return EFFECT_TYPE_INVALIDEFFECT; +} +int AbilityTypeFromEffectIconAbility(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_ABILITY_INCREASE_STR: + case EFFECT_ICON_ABILITY_DECREASE_STR: + return ABILITY_STRENGTH; + case EFFECT_ICON_ABILITY_INCREASE_DEX: + case EFFECT_ICON_ABILITY_DECREASE_DEX: + return ABILITY_DEXTERITY; + case EFFECT_ICON_ABILITY_INCREASE_CON: + case EFFECT_ICON_ABILITY_DECREASE_CON: + return ABILITY_CONSTITUTION; + case EFFECT_ICON_ABILITY_INCREASE_INT: + case EFFECT_ICON_ABILITY_DECREASE_INT: + return ABILITY_INTELLIGENCE; + case EFFECT_ICON_ABILITY_INCREASE_WIS: + case EFFECT_ICON_ABILITY_DECREASE_WIS: + return ABILITY_WISDOM; + case EFFECT_ICON_ABILITY_INCREASE_CHA: + case EFFECT_ICON_ABILITY_DECREASE_CHA: + return ABILITY_CHARISMA; + } + return -1; +} +int DamageTypeFromEffectIconDamageImmunity(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC: + case EFFECT_ICON_DAMAGE_IMMUNITY_MAGIC_DECREASE: + return DAMAGE_TYPE_MAGICAL; + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID: + case EFFECT_ICON_DAMAGE_IMMUNITY_ACID_DECREASE: + return DAMAGE_TYPE_ACID; + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD: + case EFFECT_ICON_DAMAGE_IMMUNITY_COLD_DECREASE: + return DAMAGE_TYPE_COLD; + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE: + case EFFECT_ICON_DAMAGE_IMMUNITY_DIVINE_DECREASE: + return DAMAGE_TYPE_DIVINE; + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL: + case EFFECT_ICON_DAMAGE_IMMUNITY_ELECTRICAL_DECREASE: + return DAMAGE_TYPE_ELECTRICAL; + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE: + case EFFECT_ICON_DAMAGE_IMMUNITY_FIRE_DECREASE: + return DAMAGE_TYPE_FIRE; + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_NEGATIVE_DECREASE: + return DAMAGE_TYPE_NEGATIVE; + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE: + case EFFECT_ICON_DAMAGE_IMMUNITY_POSITIVE_DECREASE: + return DAMAGE_TYPE_POSITIVE; + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC: + case EFFECT_ICON_DAMAGE_IMMUNITY_SONIC_DECREASE: + return DAMAGE_TYPE_SONIC; + } + return -1; +} + +int ImmunityTypeFromEffectIconImmunity(int nEffectIcon) +{ + switch (nEffectIcon) + { + case EFFECT_ICON_IMMUNITY_MIND: return IMMUNITY_TYPE_MIND_SPELLS; + case EFFECT_ICON_IMMUNITY_POISON: return IMMUNITY_TYPE_POISON; + case EFFECT_ICON_IMMUNITY_DISEASE: return IMMUNITY_TYPE_DISEASE; + case EFFECT_ICON_IMMUNITY_FEAR: return IMMUNITY_TYPE_FEAR; + case EFFECT_ICON_IMMUNITY_TRAP: return IMMUNITY_TYPE_TRAP; + case EFFECT_ICON_IMMUNITY_PARALYSIS: return IMMUNITY_TYPE_PARALYSIS; + case EFFECT_ICON_IMMUNITY_BLINDNESS: return IMMUNITY_TYPE_BLINDNESS; + case EFFECT_ICON_IMMUNITY_DEAFNESS: return IMMUNITY_TYPE_DEAFNESS; + case EFFECT_ICON_IMMUNITY_SLOW: return IMMUNITY_TYPE_SLOW; + case EFFECT_ICON_IMMUNITY_ENTANGLE: return IMMUNITY_TYPE_ENTANGLE; + case EFFECT_ICON_IMMUNITY_SILENCE: return IMMUNITY_TYPE_SILENCE; + case EFFECT_ICON_IMMUNITY_STUN: return IMMUNITY_TYPE_STUN; + case EFFECT_ICON_IMMUNITY_SLEEP: return IMMUNITY_TYPE_SLEEP; + case EFFECT_ICON_IMMUNITY_CHARM: return IMMUNITY_TYPE_CHARM; + case EFFECT_ICON_IMMUNITY_DOMINATE: return IMMUNITY_TYPE_DOMINATE; + case EFFECT_ICON_IMMUNITY_CONFUSE: return IMMUNITY_TYPE_CONFUSED; + case EFFECT_ICON_IMMUNITY_CURSE: return IMMUNITY_TYPE_CURSED; + case EFFECT_ICON_IMMUNITY_DAZED: return IMMUNITY_TYPE_DAZED; + case EFFECT_ICON_IMMUNITY_ABILITY_DECREASE: return IMMUNITY_TYPE_ABILITY_DECREASE; + case EFFECT_ICON_IMMUNITY_ATTACK_DECREASE: return IMMUNITY_TYPE_ATTACK_DECREASE; + case EFFECT_ICON_IMMUNITY_DAMAGE_DECREASE: return IMMUNITY_TYPE_DAMAGE_DECREASE; + case EFFECT_ICON_IMMUNITY_DAMAGE_IMMUNITY_DECREASE: return IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASE; + case EFFECT_ICON_IMMUNITY_AC_DECREASE: return IMMUNITY_TYPE_AC_DECREASE; + case EFFECT_ICON_IMMUNITY_MOVEMENT_SPEED_DECREASE: return IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASE; + case EFFECT_ICON_IMMUNITY_SAVING_THROW_DECREASE: return IMMUNITY_TYPE_SAVING_THROW_DECREASE; + case EFFECT_ICON_IMMUNITY_SPELL_RESISTANCE_DECREASE: return IMMUNITY_TYPE_SPELL_RESISTANCE_DECREASE; + case EFFECT_ICON_IMMUNITY_SKILL_DECREASE: return IMMUNITY_TYPE_SKILL_DECREASE; + case EFFECT_ICON_IMMUNITY_KNOCKDOWN: return IMMUNITY_TYPE_KNOCKDOWN; + case EFFECT_ICON_IMMUNITY_NEGATIVE_LEVEL: return IMMUNITY_TYPE_NEGATIVE_LEVEL; + case EFFECT_ICON_IMMUNITY_SNEAK_ATTACK: return IMMUNITY_TYPE_SNEAK_ATTACK; + case EFFECT_ICON_IMMUNITY_CRITICAL_HIT: return IMMUNITY_TYPE_CRITICAL_HIT; + case EFFECT_ICON_IMMUNITY_DEATH_MAGIC: return IMMUNITY_TYPE_DEATH; + } + return -1; +} +void ClearLines(object oPlayer) +{ + int nLine, nLines = GetLocalInt(oPlayer, "BUFFINFO_LAST_NUM_LINES"); + for (nLine = 1; nLine <= nLines; nLine++) + { + PostString(oPlayer, "", 10, nLine + 3, SCREEN_ANCHOR_TOP_RIGHT, 0.1f, 0xFFFFFF00, 0xFFFFFF00, nLine); + } +} +void DisplayLine(object oPlayer, int nLine, string sText, int nColor) +{ + PostString(oPlayer, sText, 10, nLine + 3, SCREEN_ANCHOR_TOP_RIGHT, 10.0f, nColor, 0xFFFFFF00, nLine); +} +string SecondsToTimestamp(int nSeconds) +{ + sqlquery sql; + if (nSeconds > 86400) sql = SqlPrepareQueryObject(GetModule(), "SELECT (@seconds / 3600) || ':' || strftime('%M:%S', @seconds / 86400.0);"); + else sql = SqlPrepareQueryObject(GetModule(), "SELECT time(@seconds, 'unixepoch');"); + SqlBindInt(sql, "@seconds", nSeconds); + SqlStep(sql); + return SqlGetString(sql, 0); +} +string Get2DAStrRef(string s2DA, string sColumn, int nRow) +{ + return GetStringByStrRef(StringToInt(Get2DAString(s2DA, sColumn, nRow))); +} +string GetVersusRacialTypeAndAlignment(int nRacialType, int nLawfulChaotic, int nGoodEvil) +{ + string sRacialType = nRacialType == RACIAL_TYPE_INVALID ? "" : Get2DAStrRef("racialtypes", "NamePlural", nRacialType); + string sLawfulChaotic = nLawfulChaotic == ALIGNMENT_LAWFUL ? "Lawful" : nLawfulChaotic == ALIGNMENT_CHAOTIC ? "Chaotic" : ""; + string sGoodEvil = nGoodEvil == ALIGNMENT_GOOD ? "Good" : nGoodEvil == ALIGNMENT_EVIL ? "Evil" : ""; + string sAlignment = sLawfulChaotic + (sLawfulChaotic == "" ? sGoodEvil : (sGoodEvil == "" ? "" : " " + sGoodEvil)); + return (sRacialType != "" || sAlignment != "") ? (" vs. " + sAlignment + (sAlignment == "" ? sRacialType : (sRacialType == "" ? "" : " " + sRacialType))) : ""; +} +string GetModifierType(int nEffectType, int nPlus, int nMinus) +{ + return nEffectType == nPlus ? "+" : nEffectType == nMinus ? "-" : ""; +} +string ACTypeToString(int nACType) +{ + switch (nACType) + { + case AC_DODGE_BONUS: return "Dodge"; + case AC_NATURAL_BONUS: return "Natural"; + case AC_ARMOUR_ENCHANTMENT_BONUS: return "Armor"; + case AC_SHIELD_ENCHANTMENT_BONUS: return "Shield"; + case AC_DEFLECTION_BONUS: return "Deflection"; + } + return ""; +} + +string SavingThrowToString(int nSavingThrow) +{ + switch (nSavingThrow) + { + case SAVING_THROW_ALL: return "All"; + case SAVING_THROW_FORT: return "Fortitude"; + case SAVING_THROW_REFLEX: return "Reflex"; + case SAVING_THROW_WILL: return "Will"; + } + return ""; +} +string SavingThrowTypeToString(int nSavingThrowType) +{ + switch (nSavingThrowType) + { + case SAVING_THROW_TYPE_MIND_SPELLS: return "Mind Spells"; + case SAVING_THROW_TYPE_POISON: return "Poison"; + case SAVING_THROW_TYPE_DISEASE: return "Disease"; + case SAVING_THROW_TYPE_FEAR: return "Fear"; + case SAVING_THROW_TYPE_SONIC: return "Sonic"; + case SAVING_THROW_TYPE_ACID: return "Acid"; + case SAVING_THROW_TYPE_FIRE: return "Fire"; + case SAVING_THROW_TYPE_ELECTRICITY: return "Electricity"; + case SAVING_THROW_TYPE_POSITIVE: return "Positive"; + case SAVING_THROW_TYPE_NEGATIVE: return "Negative"; + case SAVING_THROW_TYPE_DEATH: return "Death"; + case SAVING_THROW_TYPE_COLD: return "Cold"; + case SAVING_THROW_TYPE_DIVINE: return "Divine"; + case SAVING_THROW_TYPE_TRAP: return "Traps"; + case SAVING_THROW_TYPE_SPELL: return "Spells"; + case SAVING_THROW_TYPE_GOOD: return "Good"; + case SAVING_THROW_TYPE_EVIL: return "Evil"; + case SAVING_THROW_TYPE_LAW: return "Lawful"; + case SAVING_THROW_TYPE_CHAOS: return "Chaotic"; + } + return ""; +} +string AbilityToString(int nAbility) +{ + switch (nAbility) + { + case ABILITY_STRENGTH: return "Strength"; + case ABILITY_DEXTERITY: return "Dexterity"; + case ABILITY_CONSTITUTION: return "Constitution"; + case ABILITY_INTELLIGENCE: return "Intelligence"; + case ABILITY_WISDOM: return "Wisdom"; + case ABILITY_CHARISMA: return "Charisma"; + } + return ""; +} +string DamageTypeToString(int nDamageType) +{ + switch (nDamageType) + { + case DAMAGE_TYPE_BLUDGEONING: return "Bludgeoning"; + case DAMAGE_TYPE_PIERCING: return "Piercing"; + case DAMAGE_TYPE_SLASHING: return "Slashing"; + case DAMAGE_TYPE_MAGICAL: return "Magical"; + case DAMAGE_TYPE_ACID: return "Acid"; + case DAMAGE_TYPE_COLD: return "Cold"; + case DAMAGE_TYPE_DIVINE: return "Divine"; + case DAMAGE_TYPE_ELECTRICAL: return "Electrical"; + case DAMAGE_TYPE_FIRE: return "Fire"; + case DAMAGE_TYPE_NEGATIVE: return "Negative"; + case DAMAGE_TYPE_POSITIVE: return "Positive"; + case DAMAGE_TYPE_SONIC: return "Sonic"; + case DAMAGE_TYPE_BASE_WEAPON: return "Base Weapon"; + } + return ""; +} +string SpellSchoolToString(int nSpellSchool) +{ + switch (nSpellSchool) + { + case SPELL_SCHOOL_GENERAL: return "General"; + case SPELL_SCHOOL_ABJURATION: return "Abjuration"; + case SPELL_SCHOOL_CONJURATION: return "Conjuration"; + case SPELL_SCHOOL_DIVINATION: return "Divination"; + case SPELL_SCHOOL_ENCHANTMENT: return "Enchantment"; + case SPELL_SCHOOL_EVOCATION: return "Evocation"; + case SPELL_SCHOOL_ILLUSION: return "Illusion"; + case SPELL_SCHOOL_NECROMANCY: return "Necromancy"; + case SPELL_SCHOOL_TRANSMUTATION: return "Transmutation"; + } + return ""; +} +string MissChanceToString(int nMissChance) +{ + switch (nMissChance) + { + case MISS_CHANCE_TYPE_VS_RANGED: return "vs. Ranged"; + case MISS_CHANCE_TYPE_VS_MELEE: return "vs. Melee"; + } + return ""; +} +void ai_CreateEffectChatReport(object oPlayer, int nEffectIconID) +{ + int nIconEffectType = EffectIconToEffectType(nEffectIconID); + if(nIconEffectType == EFFECT_TYPE_INVALIDEFFECT) return; + int nLine, nIndex, nEffectIndex; + string sColor = AI_COLOR_YELLOW; + int bSkipDisplay, bHasEffect; + int nEffectType, bIsSpellLevelAbsorptionPretendingToBeSpellImmunity; + string sText; + json jEffectID = JsonArray(); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 27 + sText = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + ai_SendMessages(sText, AI_COLOR_YELLOW, oPlayer); + effect eEffect = GetFirstEffect(oPlayer); + while(GetIsEffectValid(eEffect)) + { + bSkipDisplay = FALSE; + nEffectType = GetEffectType(eEffect); + // Unlimited EffectSpellLevelAbsorption has a SpellImmunity Icon + if (nIconEffectType == EFFECT_TYPE_SPELL_IMMUNITY && GetEffectInteger(eEffect, 3)) + { + bIsSpellLevelAbsorptionPretendingToBeSpellImmunity = TRUE; + nIconEffectType = EFFECT_TYPE_SPELLLEVELABSORPTION; + } + if (nEffectType == nIconEffectType) + { + bHasEffect = TRUE; + int nSpellID = GetEffectSpellId(eEffect); + string sSpellName = nSpellID == -1 ? "" : Get2DAStrRef("spells", "Name", nSpellID); + int bIsPermanentEffect = GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT; + int nDurationRemaining = GetEffectDurationRemaining(eEffect); + string sDurationRemaining = bIsPermanentEffect ? "(Permanent)" : "(" + SecondsToTimestamp(nDurationRemaining) + ")"; + if(bIsPermanentEffect) sColor = AI_COLOR_WHITE; + else + { + if(nDurationRemaining < 61) sColor = AI_COLOR_RED; + else if(nDurationRemaining < 300) sColor = AI_COLOR_YELLOW; + else sColor = AI_COLOR_GREEN; + } + string sStats = ""; + string sRacialTypeAlignment = ""; + switch (nEffectType) + { + case EFFECT_TYPE_AC_INCREASE: + case EFFECT_TYPE_AC_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_AC_INCREASE, EFFECT_TYPE_AC_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + ACTypeToString(GetEffectInteger(eEffect, 0)) + " AC"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_ATTACK_INCREASE: + case EFFECT_TYPE_ATTACK_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ATTACK_INCREASE, EFFECT_TYPE_ATTACK_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) +" AB"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SAVING_THROW_INCREASE: + case EFFECT_TYPE_SAVING_THROW_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SAVING_THROW_INCREASE, EFFECT_TYPE_SAVING_THROW_DECREASE); + string sSavingThrow = SavingThrowToString(GetEffectInteger(eEffect, 1)); + string sSavingThrowType = SavingThrowTypeToString(GetEffectInteger(eEffect, 2)); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " " + sSavingThrow + (sSavingThrowType == "" ? "" : " (vs. " + sSavingThrowType + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4), GetEffectInteger(eEffect, 5)); + break; + } + case EFFECT_TYPE_ABILITY_INCREASE: + case EFFECT_TYPE_ABILITY_DECREASE: + { + int nAbility = AbilityTypeFromEffectIconAbility(nEffectIconID); + + if (nAbility != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ABILITY_INCREASE, EFFECT_TYPE_ABILITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + AbilityToString(nAbility); + } + break; + } + case EFFECT_TYPE_DAMAGE_INCREASE: + case EFFECT_TYPE_DAMAGE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_INCREASE, EFFECT_TYPE_DAMAGE_DECREASE); + sStats = sModifier + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 0)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 1)) + ")"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SKILL_INCREASE: + case EFFECT_TYPE_SKILL_DECREASE: + { + int nSkill = GetEffectInteger(eEffect, 0); + string sSkill = nSkill == 255 ? "All Skills" : Get2DAStrRef("skills", "Name", nSkill); + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SKILL_INCREASE, EFFECT_TYPE_SKILL_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + sSkill; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_TEMPORARY_HITPOINTS: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HitPoints"; + break; + } + case EFFECT_TYPE_DAMAGE_REDUCTION: + { + int nAmount = GetEffectInteger(eEffect, 0); + int nDamagePower = GetEffectInteger(eEffect, 1); + nDamagePower = nDamagePower > 6 ? --nDamagePower : nDamagePower; + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/+" + IntToString(nDamagePower) + " (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_DAMAGE_RESISTANCE: + { + int nAmount = GetEffectInteger(eEffect, 1); + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/- " + DamageTypeToString(GetEffectInteger(eEffect, 0)) + " Resistance (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_IMMUNITY: + { + int nImmunity = ImmunityTypeFromEffectIconImmunity(nEffectIconID); + + if (nImmunity != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + sStats = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE: + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: + { + int nDamageType = GetEffectInteger(eEffect, 0); + int nDamageTypeFromIcon = DamageTypeFromEffectIconDamageImmunity(nEffectIconID); + + if (nDamageTypeFromIcon != -1 && nDamageType != nDamageTypeFromIcon) + bSkipDisplay = TRUE; + + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE, EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + "% " + DamageTypeToString(nDamageType) + " Damage Immunity"; + break; + } + case EFFECT_TYPE_SPELL_IMMUNITY: + { + sStats = "Spell Immunity: " + Get2DAStrRef("spells", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_SPELLLEVELABSORPTION: + { + int nMaxSpellLevelAbsorbed = GetEffectInteger(eEffect, 0); + int bUnlimited = GetEffectInteger(eEffect, 3); + string sSpellLevel; + switch (nMaxSpellLevelAbsorbed) + { + case 0: sSpellLevel = "Cantrip"; break; + case 1: sSpellLevel = "1st"; break; + case 2: sSpellLevel = "2nd"; break; + case 3: sSpellLevel = "3rd"; break; + default: sSpellLevel = IntToString(nMaxSpellLevelAbsorbed) + "th"; break; + } + sSpellLevel += " Level" + (nMaxSpellLevelAbsorbed == 0 ? "" : " and Below"); + string sSpellSchool = SpellSchoolToString(GetEffectInteger(eEffect, 2)); + string sRemainingSpellLevels = bUnlimited ? "" : "(" + IntToString(GetEffectInteger(eEffect, 1)) + " Spell Levels Remaining)"; + sStats = sSpellLevel + " " + sSpellSchool + " Spell Immunity " + sRemainingSpellLevels; + + if (bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + nIconEffectType = EFFECT_TYPE_SPELL_IMMUNITY; + else if (bUnlimited && !bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + bSkipDisplay = TRUE; + + break; + } + case EFFECT_TYPE_REGENERATE: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HP / " + FloatToString((GetEffectInteger(eEffect, 1) / 1000.0f), 0, 2) + "s"; + break; + } + case EFFECT_TYPE_POISON: + { + sStats = "Poison: " + Get2DAStrRef("poison", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_DISEASE: + { + sStats = "Disease: " + Get2DAStrRef("disease", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_CURSE: + { + int nAbility; + string sAbilityDecrease; + for (nAbility = 0; nAbility < 6; nAbility++) + { + int nAbilityMod = GetEffectInteger(eEffect, nAbility); + if (nAbilityMod > 0) + { + string sAbility = GetStringLeft(AbilityToString(nAbility), 3); + sAbilityDecrease += "-" + IntToString(nAbilityMod) + " " + sAbility + ", "; + } + } + sAbilityDecrease = GetStringLeft(sAbilityDecrease, GetStringLength(sAbilityDecrease) - 2); + sStats = sAbilityDecrease; + break; + } + case EFFECT_TYPE_MOVEMENT_SPEED_INCREASE: + case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, EFFECT_TYPE_MOVEMENT_SPEED_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + "% Movement Speed"; + break; + } + case EFFECT_TYPE_ELEMENTALSHIELD: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + " + " + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 1)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 2)) + ")"; + break; + } + case EFFECT_TYPE_NEGATIVELEVEL: + { + sStats = "-" + IntToString(GetEffectInteger(eEffect, 0)) + " Levels"; + break; + } + case EFFECT_TYPE_CONCEALMENT: + { + string sMissChance = MissChanceToString(GetEffectInteger(eEffect, 4) - 1); + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Concealment" + (sMissChance == "" ? "" : " (" + sMissChance + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + break; + } + case EFFECT_TYPE_SPELL_RESISTANCE_INCREASE: + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SPELL_RESISTANCE_INCREASE, EFFECT_TYPE_SPELL_RESISTANCE_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " Spell Resistance"; + break; + } + case EFFECT_TYPE_SPELL_FAILURE: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Spell Failure (Spell School: " + SpellSchoolToString(GetEffectInteger(eEffect, 1)) + ")"; + break; + } + case EFFECT_TYPE_INVISIBILITY: + { + int nInvisibilityType = GetEffectInteger(eEffect, 0); + if (nEffectIconID == EFFECT_ICON_INVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_NORMAL; + else if (nEffectIconID == EFFECT_ICON_IMPROVEDINVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_IMPROVED; + if (!bSkipDisplay) + { + sStats = (nInvisibilityType == INVISIBILITY_TYPE_IMPROVED ? "Improved " : "") + "Invisibility"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_HASTE: + { + sStats = "Hasted"; + } + } + if(!bSkipDisplay) + { + sText = sSpellName + " " + sDurationRemaining + (sStats == "" ? "" : " -> " + sStats + sRacialTypeAlignment); + if(sText != "") + { + ai_SendMessages(sText, sColor, oPlayer); + object oSource = GetEffectCreator(eEffect); + if(GetIsObjectValid(oSource)) + { + sText = GetObjectType(oSource) ? GetName(oSource) : ""; + sText = " Creator: " + sText; + float fLength = IntToFloat(GetStringLength(sText) * 8); + ai_SendMessages(sText, AI_COLOR_YELLOW, oPlayer); + } + } + } + } + nIndex++; + eEffect = GetNextEffect(oPlayer); + } +} +void ai_CreateEffectIconMenu(object oPlayer, int nEffectIconID) +{ + int nIconEffectType = EffectIconToEffectType(nEffectIconID); + if(nIconEffectType == EFFECT_TYPE_INVALIDEFFECT) return; + int nLine, nColor, nIndex, nEffectIndex; + int bSkipDisplay, bHasEffect; + int nEffectType, bIsSpellLevelAbsorptionPretendingToBeSpellImmunity; + string sText; + json jEffectID = JsonArray(); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 27 + sText = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + json jRow = CreateLabel(JsonArray(), "Effect: " + sText, "lbl_buff_name", 700.0f, 15.0f, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + float fHeight = 27.0; + effect eEffect = GetFirstEffect(oPlayer); + while(GetIsEffectValid(eEffect)) + { + bSkipDisplay = FALSE; + nEffectType = GetEffectType(eEffect); + // Unlimited EffectSpellLevelAbsorption has a SpellImmunity Icon + if (nIconEffectType == EFFECT_TYPE_SPELL_IMMUNITY && GetEffectInteger(eEffect, 3)) + { + bIsSpellLevelAbsorptionPretendingToBeSpellImmunity = TRUE; + nIconEffectType = EFFECT_TYPE_SPELLLEVELABSORPTION; + } + if (nEffectType == nIconEffectType) + { + bHasEffect = TRUE; + int nSpellID = GetEffectSpellId(eEffect); + string sSpellName = nSpellID == -1 ? "" : Get2DAStrRef("spells", "Name", nSpellID); + int bIsPermanentEffect = GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT; + int nDurationRemaining = GetEffectDurationRemaining(eEffect); + string sDurationRemaining = bIsPermanentEffect ? "(Permanent)" : "(" + SecondsToTimestamp(nDurationRemaining) + ")"; + if(bIsPermanentEffect) nColor = 0x0000FFFF; + else + { + float fPercentage = IntToFloat(nDurationRemaining) / IntToFloat(GetEffectDuration(eEffect)); + if(fPercentage > 0.5f) nColor = 0x00FF00FF; + else if(fPercentage < 0.25f) nColor = 0xFF0000FF; + else nColor = 0xFFFF00FF; + } + string sStats = ""; + string sRacialTypeAlignment = ""; + switch (nEffectType) + { + case EFFECT_TYPE_AC_INCREASE: + case EFFECT_TYPE_AC_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_AC_INCREASE, EFFECT_TYPE_AC_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + ACTypeToString(GetEffectInteger(eEffect, 0)) + " AC"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_ATTACK_INCREASE: + case EFFECT_TYPE_ATTACK_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ATTACK_INCREASE, EFFECT_TYPE_ATTACK_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) +" AB"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SAVING_THROW_INCREASE: + case EFFECT_TYPE_SAVING_THROW_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SAVING_THROW_INCREASE, EFFECT_TYPE_SAVING_THROW_DECREASE); + string sSavingThrow = SavingThrowToString(GetEffectInteger(eEffect, 1)); + string sSavingThrowType = SavingThrowTypeToString(GetEffectInteger(eEffect, 2)); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " " + sSavingThrow + (sSavingThrowType == "" ? "" : " (vs. " + sSavingThrowType + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4), GetEffectInteger(eEffect, 5)); + break; + } + case EFFECT_TYPE_ABILITY_INCREASE: + case EFFECT_TYPE_ABILITY_DECREASE: + { + int nAbility = AbilityTypeFromEffectIconAbility(nEffectIconID); + + if (nAbility != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_ABILITY_INCREASE, EFFECT_TYPE_ABILITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + AbilityToString(nAbility); + } + break; + } + case EFFECT_TYPE_DAMAGE_INCREASE: + case EFFECT_TYPE_DAMAGE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_INCREASE, EFFECT_TYPE_DAMAGE_DECREASE); + sStats = sModifier + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 0)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 1)) + ")"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_SKILL_INCREASE: + case EFFECT_TYPE_SKILL_DECREASE: + { + int nSkill = GetEffectInteger(eEffect, 0); + string sSkill = nSkill == 255 ? "All Skills" : Get2DAStrRef("skills", "Name", nSkill); + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SKILL_INCREASE, EFFECT_TYPE_SKILL_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + " " + sSkill; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3), GetEffectInteger(eEffect, 4)); + break; + } + case EFFECT_TYPE_TEMPORARY_HITPOINTS: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HitPoints"; + break; + } + case EFFECT_TYPE_DAMAGE_REDUCTION: + { + int nAmount = GetEffectInteger(eEffect, 0); + int nDamagePower = GetEffectInteger(eEffect, 1); + nDamagePower = nDamagePower > 6 ? --nDamagePower : nDamagePower; + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/+" + IntToString(nDamagePower) + " (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_DAMAGE_RESISTANCE: + { + int nAmount = GetEffectInteger(eEffect, 1); + int nRemaining = GetEffectInteger(eEffect, 2); + sStats = IntToString(nAmount) + "/- " + DamageTypeToString(GetEffectInteger(eEffect, 0)) + " Resistance (" + (nRemaining == 0 ? "Unlimited" : IntToString(nRemaining) + " Damage Remaining") + ")"; + break; + } + case EFFECT_TYPE_IMMUNITY: + { + int nImmunity = ImmunityTypeFromEffectIconImmunity(nEffectIconID); + + if (nImmunity != GetEffectInteger(eEffect, 0)) + bSkipDisplay = TRUE; + else + { + sStats = Get2DAStrRef("effecticons", "StrRef", nEffectIconID); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE: + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: + { + int nDamageType = GetEffectInteger(eEffect, 0); + int nDamageTypeFromIcon = DamageTypeFromEffectIconDamageImmunity(nEffectIconID); + + if (nDamageTypeFromIcon != -1 && nDamageType != nDamageTypeFromIcon) + bSkipDisplay = TRUE; + + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE, EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 1)) + "% " + DamageTypeToString(nDamageType) + " Damage Immunity"; + break; + } + case EFFECT_TYPE_SPELL_IMMUNITY: + { + sStats = "Spell Immunity: " + Get2DAStrRef("spells", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_SPELLLEVELABSORPTION: + { + int nMaxSpellLevelAbsorbed = GetEffectInteger(eEffect, 0); + int bUnlimited = GetEffectInteger(eEffect, 3); + string sSpellLevel; + switch (nMaxSpellLevelAbsorbed) + { + case 0: sSpellLevel = "Cantrip"; break; + case 1: sSpellLevel = "1st"; break; + case 2: sSpellLevel = "2nd"; break; + case 3: sSpellLevel = "3rd"; break; + default: sSpellLevel = IntToString(nMaxSpellLevelAbsorbed) + "th"; break; + } + sSpellLevel += " Level" + (nMaxSpellLevelAbsorbed == 0 ? "" : " and Below"); + string sSpellSchool = SpellSchoolToString(GetEffectInteger(eEffect, 2)); + string sRemainingSpellLevels = bUnlimited ? "" : "(" + IntToString(GetEffectInteger(eEffect, 1)) + " Spell Levels Remaining)"; + sStats = sSpellLevel + " " + sSpellSchool + " Spell Immunity " + sRemainingSpellLevels; + + if (bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + nIconEffectType = EFFECT_TYPE_SPELL_IMMUNITY; + else if (bUnlimited && !bIsSpellLevelAbsorptionPretendingToBeSpellImmunity) + bSkipDisplay = TRUE; + + break; + } + case EFFECT_TYPE_REGENERATE: + { + sStats = "+" + IntToString(GetEffectInteger(eEffect, 0)) + " HP / " + FloatToString((GetEffectInteger(eEffect, 1) / 1000.0f), 0, 2) + "s"; + break; + } + case EFFECT_TYPE_POISON: + { + sStats = "Poison: " + Get2DAStrRef("poison", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_DISEASE: + { + sStats = "Disease: " + Get2DAStrRef("disease", "Name", GetEffectInteger(eEffect, 0)); + break; + } + case EFFECT_TYPE_CURSE: + { + int nAbility; + string sAbilityDecrease; + for (nAbility = 0; nAbility < 6; nAbility++) + { + int nAbilityMod = GetEffectInteger(eEffect, nAbility); + if (nAbilityMod > 0) + { + string sAbility = GetStringLeft(AbilityToString(nAbility), 3); + sAbilityDecrease += "-" + IntToString(nAbilityMod) + " " + sAbility + ", "; + } + } + sAbilityDecrease = GetStringLeft(sAbilityDecrease, GetStringLength(sAbilityDecrease) - 2); + sStats = sAbilityDecrease; + break; + } + case EFFECT_TYPE_MOVEMENT_SPEED_INCREASE: + case EFFECT_TYPE_MOVEMENT_SPEED_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_MOVEMENT_SPEED_INCREASE, EFFECT_TYPE_MOVEMENT_SPEED_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + "% Movement Speed"; + break; + } + case EFFECT_TYPE_ELEMENTALSHIELD: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + " + " + Get2DAStrRef("iprp_damagecost", "Name", GetEffectInteger(eEffect, 1)) + " (" + DamageTypeToString(GetEffectInteger(eEffect, 2)) + ")"; + break; + } + case EFFECT_TYPE_NEGATIVELEVEL: + { + sStats = "-" + IntToString(GetEffectInteger(eEffect, 0)) + " Levels"; + break; + } + case EFFECT_TYPE_CONCEALMENT: + { + string sMissChance = MissChanceToString(GetEffectInteger(eEffect, 4) - 1); + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Concealment" + (sMissChance == "" ? "" : " (" + sMissChance + ")"); + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + break; + } + case EFFECT_TYPE_SPELL_RESISTANCE_INCREASE: + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: + { + string sModifier = GetModifierType(nEffectType, EFFECT_TYPE_SPELL_RESISTANCE_INCREASE, EFFECT_TYPE_SPELL_RESISTANCE_DECREASE); + sStats = sModifier + IntToString(GetEffectInteger(eEffect, 0)) + " Spell Resistance"; + break; + } + case EFFECT_TYPE_SPELL_FAILURE: + { + sStats = IntToString(GetEffectInteger(eEffect, 0)) + "% Spell Failure (Spell School: " + SpellSchoolToString(GetEffectInteger(eEffect, 1)) + ")"; + break; + } + case EFFECT_TYPE_INVISIBILITY: + { + int nInvisibilityType = GetEffectInteger(eEffect, 0); + if (nEffectIconID == EFFECT_ICON_INVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_NORMAL; + else if (nEffectIconID == EFFECT_ICON_IMPROVEDINVISIBILITY) + bSkipDisplay = nInvisibilityType != INVISIBILITY_TYPE_IMPROVED; + if (!bSkipDisplay) + { + sStats = (nInvisibilityType == INVISIBILITY_TYPE_IMPROVED ? "Improved " : "") + "Invisibility"; + sRacialTypeAlignment = GetVersusRacialTypeAndAlignment(GetEffectInteger(eEffect, 1), GetEffectInteger(eEffect, 2), GetEffectInteger(eEffect, 3)); + } + break; + } + case EFFECT_TYPE_HASTE: + { + sStats = "Hasted"; + } + } + if(!bSkipDisplay) + { + sText = sSpellName + " " + sDurationRemaining + (sStats == "" ? "" : " -> " + sStats + sRacialTypeAlignment); + if(sText != "") + { + jRow = CreateLabel(JsonArray(), " " + sText, "lbl_buff_info" + IntToString(nIndex), 700.0f, 10.0f, NUI_HALIGN_LEFT, NUI_VALIGN_TOP, 0.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 10.0; + object oSource = GetEffectCreator(eEffect); + if(GetIsObjectValid(oSource)) + { + sText = GetObjectType(oSource) ? GetName(oSource) : ""; + sText = " Creator: " + sText; + float fLength = IntToFloat(GetStringLength(sText) * 8); + jRow = CreateLabel(JsonArray(), sText, "lbl_buff_source" + IntToString(nIndex), fLength, 15.0f, NUI_HALIGN_LEFT, NUI_VALIGN_BOTTOM, 0.0); + if(oSource == oPlayer) + { + CreateButton(jRow, "Remove", "btn_remove_effect_" + IntToString(nEffectIndex++), 70.0f, 20.0f, 0.0); + jEffectID = JsonArrayInsert(jEffectID, JsonString(GetEffectLinkId(eEffect))); + fHeight += 20.0; + } + else fHeight += 15.0; + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + } + } + } + nIndex++; + eEffect = GetNextEffect(oPlayer); + } + float fScale = IntToFloat(GetPlayerDeviceProperty(oPlayer, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + float fX = IntToFloat(GetPlayerDeviceProperty(oPlayer, PLAYER_DEVICE_PROPERTY_GUI_WIDTH)); + fX = fX - (700.0 * fScale); + float fY = 50 * fScale; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPlayer, jLayout, AI_EFFECT_ICON_NUI, "Effect Icon Menu", + fX, fY, 700.0, fHeight * fScale, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPlayer))); + jData = JsonArrayInsert(jData, JsonInt(nEffectIconID)); + jData = JsonArrayInsert(jData, jEffectID); + NuiSetUserData(oPlayer, nToken, jData); + NuiSetBind(oPlayer, nToken, "lbl_buff_name_event", JsonBool(TRUE)); + while(nIndex >= 0) + { + NuiSetBind(oPlayer, nToken, "lbl_buff_info" + IntToString(nIndex) + "_event", JsonBool(TRUE)); + NuiSetBind(oPlayer, nToken, "lbl_buff_source" + IntToString(nIndex) + "_event", JsonBool(TRUE)); + nIndex--; + } + while(nEffectIndex >= 0) + { + NuiSetBind(oPlayer, nToken, "btn_remove_effect_" + IntToString(nEffectIndex) + "_event", JsonBool(TRUE)); + NuiSetBind(oPlayer, nToken, "btn_remove_effect_" + IntToString(nEffectIndex), JsonInt(TRUE)); + nEffectIndex--; + } +} diff --git a/_module/nss/0i_items.nss b/_module/nss/0i_items.nss new file mode 100644 index 0000000..87d3ce7 --- /dev/null +++ b/_module/nss/0i_items.nss @@ -0,0 +1,1243 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +Script Name: 0i_items +Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for use with items. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +//#include "0i_main" +#include "0i_messages" +// Returns TRUE if oItem is a weapon. +int ai_GetIsWeapon(object oItem); +// Returns TRUE if oItem is a melee weapon. +int ai_GetIsMeleeWeapon(object oItem); +// Returns TRUE if oItem is a slashing weapon. +int ai_GetIsSlashingWeapon(object oItem); +// Returns TRUE if oItem is a piercing weapon. +int ai_GetIsPiercingWeapon(object oItem); +// Returns TRUE if oItem is a bludgeoning weapon. +int ai_GetIsBludgeoningWeapon(object oItem); +// Returns TRUE if oItem is an ammo. +int ai_GetIsAmmo(object oItem); +// Returns TRUE if oItem is a thrown weapon. +int ai_GetIsThrownWeapon(object oItem); +// Returns TRUE if oItem is able to be used single handed by oCreature. +int ai_GetIsSingleHandedWeapon(object oItem, object oCreature); +// Returns TRUE if oItem is a light weapon for oCreature. +int ai_GetIsLightWeapon(object oItem, object oCreature); +// Returns TRUE if oItem is able to be used two handed by oCreature. +int ai_GetIsTwoHandedWeapon(object oItem, object oCreature); +// Returns TRUE if oItem is a double weapon. +int ai_GetIsDoubleWeapon(object oItem); +// Returns TRUE if oCreature has a ranged weapon equiped and has ammo for it. +int ai_HasRangedWeaponWithAmmo(object oCreature); +// Returns TRUE if oItem is a ranged weapon. +int ai_GetIsRangeWeapon(object oItem); +// Returns the amount of damage the weapon oCreature is holding. +// nDamageAmount tells the function the amount of damage to return; +// 1 - Minimum, 2- Average, 3 Maximum. +// bMelee If it is not a melee weapon then return 0; +int ai_GetWeaponDamage(object oCreature, int nDamageAmount = 3, int bMelee = FALSE); +// Returns TRUE if oItem is a shield. +int ai_GetIsShield(object oItem); +// Returns the size of oItem using 1 = small to 6 = large. +int ai_GetItemSize(object oItem); +// Returns TRUE if the caller has a potion that is identified of nSpell. +int ai_CheckPotionIsIdentified(object oCreature, int nSpell); +// Returns an item from oCreature's inventory with sTag. +// bCheckEquiped will also look through the creatures equiped items. +// Returns OBJECT_INVALID if the items does not exist with sTag. +object ai_GetCreatureHasItem(object oCreature, string sTag, int bCheckEquiped = FALSE); +// Returns TRUE if oCreature can identify oItem based on the file SkillVsItemCost.2da +// Reports the findings to oPC unless oPC = OBJECT_INVALID. +// If the item can be identified by oCreature then it will be identified. +int ai_IdentifyItemVsKnowledge(object oCreature, object oItem, object oPC = OBJECT_INVALID); +// Identifies all items on oObject based on the file SkillVsItemCost.2da +// Reports the findings to oPC unless oPC = OBJECT_INVALID +// bIdentifyAll ignores the chart and does what it says! +void ai_IdentifyAllVsKnowledge(object oCreature, object oContainer, object oPC = OBJECT_INVALID); +// Will (Un)Identify all items on oCreature. +// If bIdentify is TRUE they will all be Identified, FALSE Unidentifies them. +void ai_SetIdentifyAllItems(object oCreature, int bIdentify = TRUE); +// Returns oWeapons attack bonus from either Enhancment or Attack bonus. +int ai_GetWeaponAtkBonus(object oWeapon); +// Returns oArmors armor bonus. +int ai_GetArmorBonus(object oArmor); +// Returns the maximum gold value that an item can have to be equiped. +int ai_GetMaxItemValueThatCanBeEquiped(int nLevel); +// Returns the minimum level that is required to equip this item. +int ai_GetMinimumEquipLevel(object oItem); +// Returns oCreatures total attack bonus with melee weapon (Mostly). +int ai_GetCreatureAttackBonus(object oCreature); +// Returns TRUE if oCreature can use oItem based on Class, Race, and Alignment +// restrictions. Also checks UseMagicDevice of oCreature. +int ai_CheckIfCanUseItem(object oCreature, object oItem); +// Returns TRUE if oCreature can use oItem due to feats. +int ai_GetIsProficientWith(object oCreature, object oItem); +// Gets the Average Damage on the weapon for Main and Off Hand to allow +// us to check which weapon is better for oCreature to equip. +// b2Handed set to TRUE returns only checks main avg damage. +// bOffHand set to TRUE returns the OffHand avg damage. +// if b2Handed & bOffHand are set to TRUE it returns main & offhand added together. +// if oOffWeapon is Set then it will return the Avg Damage assuming oItem is +// the Main weapon and oOffWeapon is in the Offhand. +float ai_GetMeleeWeaponAvgDmg(object oCreature, object oItem, int b2Handed = FALSE, int bOffHand = FALSE, object oOffWeapon = OBJECT_INVALID); +// Sets shield AC on the shield to allow us to check which shield is better +// for oCreature to equip. +int ai_SetShieldAC(object oCreature, object oItem); +// Returns TRUE if oItem has nItemPropertyType. +// nItemPropertySubType will not be used if its below 0. +int ai_GetHasItemProperty(object oItem, int nItemPropertyType, int nItemPropertySubType = -1); +// Returns the highest bonus Lock Picks needed to unlock nLockDC in oCreatures inventory. +object ai_GetBestPicks(object oCreature, int nLockDC); +// Removes all items from oCreature. +void ai_RemoveInventory(object oCreature); +// Copies all equiped and inventory items from oOldHenchman to oNewHenchman. +void ai_MoveInventory(object oOldHenchman, object oNewHenchman); +// Returns if oCreature is proficient with nBaseItem. +// PRC lets the creature use any weapon, but gives -4 penalty if not proficient. +int prc_IsProficient(object oCreature, int nBaseItem); + +int ai_GetIsWeapon(object oItem) +{ + int nType = GetBaseItemType(oItem); + int nWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", nType)); + if(nWeaponType) return TRUE; + return FALSE; +} +int ai_GetIsMeleeWeapon(object oItem) +{ + int nType = GetBaseItemType(oItem); + if(StringToInt(Get2DAString("baseitems", "WeaponType", nType)) > 0) + { + if(StringToInt(Get2DAString("baseitems", "RangedWeapon", nType)) == 0) return TRUE; + } + return FALSE; +} +int ai_GetIsSingleHandedWeapon(object oItem, object oCreature) +{ + if(!ai_GetIsMeleeWeapon(oItem)) return FALSE; + int nBaseItemType = GetBaseItemType(oItem); + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nBaseItemType)); + // Creature size is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nCreatureSize = GetCreatureSize(oCreature); + return nWeaponSize <= nCreatureSize; +} +int ai_GetIsLightWeapon(object oItem, object oCreature) +{ + if(!ai_GetIsMeleeWeapon(oItem)) return FALSE; + int nBaseItemType = GetBaseItemType(oItem); + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nBaseItemType)); + // Creature size is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nCreatureSize = GetCreatureSize(oCreature); + return nWeaponSize < nCreatureSize; +} +int ai_GetIsTwoHandedWeapon(object oItem, object oCreature) +{ + if(!ai_GetIsMeleeWeapon(oItem)) return FALSE; + int nBaseItemType = GetBaseItemType(oItem); + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nBaseItemType)); + // Ranged weapons have a value greater than 0 in this field. So melee weapons have 0. + int nWeaponMelee = StringToInt(Get2DAString("baseitems", "RangedWeapon", nBaseItemType)); + // Creature size is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nCreatureSize = GetCreatureSize(oCreature); + return (nWeaponMelee == 0 && nWeaponSize > nCreatureSize); +} +int ai_GetIsDoubleWeapon(object oItem) +{ + int iType = GetBaseItemType(oItem); + switch(iType) + { + case BASE_ITEM_DIREMACE: + case BASE_ITEM_DOUBLEAXE: + case BASE_ITEM_TWOBLADEDSWORD: return TRUE; + } + return FALSE; +} +int ai_GetIsSlashingWeapon(object oItem) +{ + int iBaseItemType = GetBaseItemType(oItem); + int iWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", iBaseItemType)); + // Weapon Type in the baseitems.2da is 1 = Piercing, 2 = Bludgeoning, 3 = Slashing. + return (iWeaponType == 3); +} +int ai_GetIsPiercingWeapon(object oItem) +{ + int iBaseItemType = GetBaseItemType(oItem); + int iWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", iBaseItemType)); + // Weapon Type in the baseitems.2da is 1 = Piercing, 2 = Bludgeoning, 3 = Slashing. + return (iWeaponType == 1); +} +int ai_GetIsBludgeoningWeapon(object oItem) +{ + int iBaseItemType = GetBaseItemType(oItem); + int iWeaponType = StringToInt(Get2DAString("baseitems", "WeaponType", iBaseItemType)); + // Weapon Type in the baseitems.2da is 1 = Piercing, 2 = Bludgeoning, 3 = Slashing. + return (iWeaponType == 2); +} +int ai_GetIsAmmo(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_ARROW: return TRUE; + case BASE_ITEM_BOLT: return TRUE; + case BASE_ITEM_BULLET: return TRUE; + } + return FALSE; +} +int ai_GetIsThrownWeapon(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_DART: return TRUE; + case BASE_ITEM_SHURIKEN: return TRUE; + case BASE_ITEM_THROWINGAXE: return TRUE; + } + return FALSE; +} +int ai_HasRangedWeaponWithAmmo(object oCreature) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(!GetWeaponRanged(oWeapon)) return FALSE; + int nAmmoType, nWeaponType = GetBaseItemType(oWeapon); + object oAmmo = OBJECT_INVALID; + if(nWeaponType == BASE_ITEM_LONGBOW || nWeaponType == BASE_ITEM_SHORTBOW) + { + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) return TRUE; + if(GetItemInSlot(INVENTORY_SLOT_ARROWS, oCreature) != OBJECT_INVALID) return TRUE; + nAmmoType = BASE_ITEM_ARROW; + } + else if(nWeaponType == BASE_ITEM_LIGHTCROSSBOW || nWeaponType == BASE_ITEM_HEAVYCROSSBOW) + { + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) return TRUE; + if(GetItemInSlot(INVENTORY_SLOT_BOLTS, oCreature) != OBJECT_INVALID) return TRUE; + nAmmoType = BASE_ITEM_BOLT; + } + else if(nWeaponType == BASE_ITEM_SLING) + { + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_UNLIMITED_AMMUNITION)) return TRUE; + if(GetItemInSlot(INVENTORY_SLOT_BULLETS, oCreature) != OBJECT_INVALID) return TRUE; + nAmmoType = BASE_ITEM_BULLET; + } + else if(nWeaponType == BASE_ITEM_THROWINGAXE) return TRUE; + else if(nWeaponType == BASE_ITEM_SHURIKEN) return TRUE; + else if(nWeaponType == BASE_ITEM_DART) return TRUE; + // They don't have any ammo in the slot, but do they have ammo in the inventory? + oAmmo = GetFirstItemInInventory(oCreature); + while(oAmmo != OBJECT_INVALID) + { + if(GetBaseItemType(oAmmo) == nAmmoType) + { + if(nAmmoType == BASE_ITEM_ARROW) ActionEquipItem(oAmmo, INVENTORY_SLOT_ARROWS); + else if(nAmmoType == BASE_ITEM_BOLT) ActionEquipItem(oAmmo, INVENTORY_SLOT_BOLTS); + else if(nAmmoType == BASE_ITEM_BULLET) ActionEquipItem(oAmmo, INVENTORY_SLOT_BULLETS); + return TRUE; + } + oAmmo = GetNextItemInInventory(oCreature); + } + //ai_Debug("0i_items", "254", "They are out of ammo!"); + return FALSE; +} +int ai_GetIsRangeWeapon(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_DART: return TRUE; + case BASE_ITEM_HEAVYCROSSBOW: return TRUE; + case BASE_ITEM_LIGHTCROSSBOW: return TRUE; + case BASE_ITEM_LONGBOW: return TRUE; + case BASE_ITEM_SHORTBOW: return TRUE; + case BASE_ITEM_SHURIKEN: return TRUE; + case BASE_ITEM_SLING: return TRUE; + case BASE_ITEM_THROWINGAXE: return TRUE; + } + return FALSE; +} +int ai_GetIsFinesseWeapon(object oCreature, object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_DAGGER: return TRUE; + case BASE_ITEM_HANDAXE: return TRUE; + case BASE_ITEM_KAMA: return TRUE; + case BASE_ITEM_KUKRI: return TRUE; + case BASE_ITEM_LIGHTHAMMER: return TRUE; + case BASE_ITEM_LIGHTMACE: return TRUE; + case BASE_ITEM_RAPIER: + { + if(GetCreatureSize(oCreature) > CREATURE_SIZE_SMALL) return TRUE; + return FALSE; + } + case BASE_ITEM_SHORTSWORD: return TRUE; + case BASE_ITEM_SICKLE: return TRUE; + case BASE_ITEM_WHIP: return TRUE; + } + return FALSE; +} +int ai_GetWeaponDamage(object oCreature, int nDamageAmount = 3, int bMelee = FALSE) +{ + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(bMelee && ai_GetIsRangeWeapon(oItem)) return 0; + int nWeaponDamage = GetLocalInt(oItem, "AI_WEAPON_DAMAGE"); + if(!nWeaponDamage) + { + if(ai_GetIsMeleeWeapon(oItem)) + { + nWeaponDamage = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(ai_GetIsTwoHandedWeapon(oItem, oCreature)) nWeaponDamage += nWeaponDamage / 2; + } + int nWeaponDice = StringToInt(Get2DAString("baseitems", "NumDice", GetBaseItemType(oItem))); + int nWeaponDie = StringToInt(Get2DAString("baseitems", "DieToRoll", GetBaseItemType(oItem))); + if(nDamageAmount == 1) + { + nWeaponDamage += nWeaponDice; + } + else if(nDamageAmount == 2) + { + nWeaponDamage += nWeaponDice * nWeaponDie / 2; + } + else + { + nWeaponDamage += nWeaponDice * nWeaponDie; + } + SetLocalInt(oItem, "AI_WEAPON_DAMAGE", nWeaponDamage); + } + return nWeaponDamage; +} +int ai_GetIsShield(object oItem) +{ + switch(GetBaseItemType(oItem)) + { + case BASE_ITEM_SMALLSHIELD: return TRUE; + case BASE_ITEM_LARGESHIELD: return TRUE; + case BASE_ITEM_TOWERSHIELD: return TRUE; + } + return FALSE; + } +int ai_GetItemSize(object oItem) +{ + int nBaseItemType = GetBaseItemType(oItem); + int nWidth = StringToInt(Get2DAString("baseitems", "InvSlotWidth", nBaseItemType)); + int nHeight = StringToInt(Get2DAString("baseitems", "InvSlotHeight", nBaseItemType)); + return nWidth + nHeight - 1; +} +int ai_CheckPotionIsIdentified(object oCreature, int nSpell) +{ + int nPotionSpell; + itemproperty ipPotion; + object oPotion = GetFirstItemInInventory(oCreature); + while(oPotion != OBJECT_INVALID) + { + if(GetIdentified(oPotion)) + { + ipPotion = GetFirstItemProperty(oPotion); + nPotionSpell = GetItemPropertySubType(ipPotion); + nPotionSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nPotionSpell)); + //ai_Debug("0i_talents", "318", "Potion ID'ed? nSpell: " + IntToString(nSpell) + " nPotionSpell: " + IntToString(nPotionSpell)); + if(nSpell == nPotionSpell) return TRUE; + } + oPotion = GetNextItemInInventory(oCreature); + } + return FALSE; +} +object ai_GetCreatureHasItem(object oCreature, string sTag, int bCheckEquiped = FALSE) +{ + // Cycle through the creatures unequiped items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetTag(oItem) == sTag) return oItem; + oItem = GetNextItemInInventory(oCreature); + } + // Should we check the creatures equiped items. + // If we have already found it then stop looking. + int nSlot = 0; + if(bCheckEquiped) + { + // Check all of the creatures slots(0 - 17). + while(nSlot <= 17) + { + oItem = GetItemInSlot(nSlot, oCreature); + if(GetTag(oItem) == sTag) return oItem; + nSlot ++; + } + } + return OBJECT_INVALID; +} +int ai_IdentifyItemVsKnowledge(object oCreature, object oItem, object oPC = OBJECT_INVALID) +{ + if(GetIdentified(oItem)) return FALSE; + int nKnowledge = GetSkillRank(SKILL_LORE, oCreature); + int nItemValue; // gold value of item + string sBaseName; + string sMaxValue = Get2DAString("SkillVsItemCost", "DeviceCostMax", nKnowledge); + int nMaxValue = StringToInt(sMaxValue); + // * Handle overflow(November 2003 - BK) + if(sMaxValue == "") nMaxValue = 0; + // Setting TRUE to get the true value of the item. + SetIdentified(oItem, TRUE); + nItemValue = GetGoldPieceValue(oItem); + if(nMaxValue <= nItemValue) + { + SetIdentified(oItem, FALSE); + if(oPC != OBJECT_INVALID) + { + sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + ai_SendMessages(GetName(oCreature) + " cannot identify " + sBaseName, AI_COLOR_RED, oPC); + } + } + else + { + if(oPC != OBJECT_INVALID) ai_SendMessages(GetName(oCreature) + " has identified " + GetName(oItem), AI_COLOR_GREEN, oPC); + return TRUE; + } + return FALSE; +} +void ai_IdentifyAllVsKnowledge(object oCreature, object oContainer, object oPC = OBJECT_INVALID) +{ + // SkillVsItemCost 2da starts 1 at 0 ... go figure! + int nKnowledge = GetSkillRank(SKILL_LORE, oCreature) - 1; + int nItemValue; // gold value of item + string sBaseName; + string sMaxValue = Get2DAString("SkillVsItemCost", "DeviceCostMax", nKnowledge); + int nMaxValue = StringToInt(sMaxValue); + // * Handle overflow(November 2003 - BK) + if(sMaxValue == "") nMaxValue = 0; + object oItem = GetFirstItemInInventory(oContainer); + while(oItem != OBJECT_INVALID) + { + if(!GetIdentified(oItem)) + { + // setting TRUE to get the true value of the item. + SetIdentified(oItem, TRUE); + nItemValue = GetGoldPieceValue(oItem); + if(nMaxValue < nItemValue) + { + SetIdentified(oItem, FALSE); + sBaseName = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "name", GetBaseItemType(oItem)))); + if(oPC != OBJECT_INVALID) ai_SendMessages(GetName(oCreature) + " cannot identify " + sBaseName, AI_COLOR_RED, oPC); + } + else if(oPC != OBJECT_INVALID) ai_SendMessages(GetName(oCreature) + " has identified " + GetName(oItem), AI_COLOR_GREEN, oPC); + } + oItem = GetNextItemInInventory(oContainer); + } +} +void ai_SetIdentifyAllItems(object oCreature, int bIdentify = TRUE) +{ + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(!GetIdentified(oItem)) SetIdentified(oItem, bIdentify); + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(!GetIdentified(oItem)) SetIdentified(oItem, bIdentify); + oItem = GetItemInSlot(++nSlot, oCreature); + } +} +int ai_GetWeaponAtkBonus(object oWeapon) +{ + int nCounter = 1, nPropertyType, nBonus; + // Get first property + itemproperty ipProperty = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(ipProperty)) + { + // Check to see if the property type matches. + nPropertyType = GetItemPropertyType(ipProperty); + if(nPropertyType == 6/*ITEMPROPERTY_ENHANCEMENT*/ || + nPropertyType == 56/*ITEMPROPERTY_ATTACKBONUS*/) + { + nBonus += GetItemPropertyCostTableValue(ipProperty); + } + // Get the next property. + ipProperty = GetNextItemProperty(oWeapon); + } + //ai_Debug("0i_items", "438", GetName(oWeapon) + " attack bonus is " + IntToString(nBonus)); + return nBonus; +} +int ai_GetArmorBonus(object oArmor) +{ + int nTorsoValue = GetItemAppearance(oArmor, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO); + //ai_Debug("0i_items", "444", "Armor Bonus: " + Get2DAString("parts_chest.2da", "ACBONUS", nTorsoValue)); + return StringToInt(Get2DAString("parts_chest", "ACBONUS", nTorsoValue)); +} +int ai_GetMaxItemValueThatCanBeEquiped(int nLevel) +{ + return StringToInt(Get2DAString("itemvalue", "MAXSINGLEITEMVALUE", nLevel - 1)); +} +int ai_GetMinimumEquipLevel(object oItem) +{ + int nIndex, nUnIdentified; + if(!GetIdentified(oItem)) + { + nUnIdentified = TRUE; + SetIdentified(oItem, TRUE); + } + int nGoldValue = GetGoldPieceValue(oItem); + if(nUnIdentified) SetIdentified(oItem, FALSE); + int n2daMaxRow = Get2DARowCount("itemvalue"); + while(nIndex < n2daMaxRow) + { + if(nGoldValue <= StringToInt(Get2DAString("itemvalue", "MAXSINGLEITEMVALUE", nIndex))) + { + return nIndex + 1; + } + nIndex++; + } + return nIndex; +} +int ai_GetCreatureAttackBonus(object oCreature) +{ + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + int nAtkBonus = GetBaseAttackBonus(oCreature); + if((GetHasFeat(FEAT_WEAPON_FINESSE, oCreature) && ai_GetIsFinesseWeapon(oCreature, oWeapon)) || + ai_GetIsRangeWeapon(oWeapon)) + { + nAtkBonus += GetAbilityModifier(ABILITY_DEXTERITY, oCreature); + } + else nAtkBonus += GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(ai_GetIsMeleeWeapon(oWeapon)) nAtkBonus += ai_GetWeaponAtkBonus(oWeapon); + return nAtkBonus; + } +int ai_CheckUseMagicDevice(object oCreature, string sColumn, object oItem) +{ + if(!GetLocalInt(GetModule(), AI_RULE_ALLOW_UMD)) return FALSE; + int nUMD = GetSkillRank(SKILL_USE_MAGIC_DEVICE, oCreature); + //ai_Debug("0i_talents", "1600", GetName(oCreature) + " is check UMD: " + IntToString(nUMD)); + if(nUMD < 1) return FALSE; + int nDC, nIndex, nItemValue = GetGoldPieceValue(oItem); + while(nIndex < 55) + { + //ai_Debug("0i_talents", "1605", GetName(oItem) + " has a value of " + + // Get2DAString("skillvsitemcost", "DeviceCostMax", nIndex) + + // " nIndex: " + IntToString(nIndex)); + if(nItemValue < StringToInt(Get2DAString("skillvsitemcost", "DeviceCostMax", nIndex))) + { + //ai_Debug("0i_talents", "1610", "nUMD >= " + Get2DAString("skillvsitemcost", sColumn, nIndex)); + if(nUMD >= StringToInt(Get2DAString("skillvsitemcost", sColumn, nIndex))) return TRUE; + return FALSE; + } + nIndex++; + } + return FALSE; +} +int ai_CheckIfCanUseItem(object oCreature, object oItem) +{ + int bAlign, bClass, bRace, bAlignLimit, bClassLimit, bRaceLimit; + int nIprpSubType, nItemPropertyType; + // Check to see if this item is limited to a specific alignment, class, or race. + int nAlign1 = GetAlignmentLawChaos(oCreature); + int nAlign2 = GetAlignmentGoodEvil(oCreature); + int nRace = GetRacialType(oCreature); + //ai_Debug("0i_items", "615", "nAlign1: " + IntToString(nAlign1) + + // " nAlign2: " + IntToString(nAlign2) + " nRace: " + IntToString(nRace)); + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + nItemPropertyType = GetItemPropertyType(ipProp); + //ai_Debug("0i_items", "620", "ItempropertyType(62/63/64/65): " + IntToString(nItemPropertyType)); + if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP) + { + bAlignLimit = TRUE; + // SubType is the group index for iprp_aligngrp.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "626", "nIprpSubType: " + IntToString(nIprpSubType)); + if(nIprpSubType == nAlign1 || nIprpSubType == nAlign2) bAlign = TRUE; + } + else if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT) + { + bAlignLimit = TRUE; + // SubType is the alignment index for iprp_alignment.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "634", "nIprpSubType: " + IntToString(nIprpSubType)); + if(nIprpSubType == 0 && nAlign1 == 2 && nAlign2 == 4) bAlign = TRUE; + else if(nIprpSubType == 1 && nAlign1 == 2 && nAlign2 == 1) bAlign = TRUE; + else if(nIprpSubType == 2 && nAlign1 == 2 && nAlign2 == 5) bAlign = TRUE; + else if(nIprpSubType == 3 && nAlign1 == 1 && nAlign2 == 4) bAlign = TRUE; + else if(nIprpSubType == 4 && nAlign1 == 1 && nAlign2 == 1) bAlign = TRUE; + else if(nIprpSubType == 5 && nAlign1 == 1 && nAlign2 == 5) bAlign = TRUE; + else if(nIprpSubType == 6 && nAlign1 == 3 && nAlign2 == 4) bAlign = TRUE; + else if(nIprpSubType == 7 && nAlign1 == 3 && nAlign2 == 1) bAlign = TRUE; + else if(nIprpSubType == 8 && nAlign1 == 3 && nAlign2 == 5) bAlign = TRUE; + } + else if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_CLASS) + { + bClassLimit = TRUE; + // SubType is the class index for classes.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "650", "nIprpSubType: " + IntToString(nIprpSubType)); + int nClassPosition = 1; + int nClass = GetClassByPosition(nClassPosition, oCreature); + while(nClassPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + if(nIprpSubType == nClass) bClass = TRUE; + nClass = GetClassByPosition(++nClassPosition, oCreature); + } + } + else if(nItemPropertyType == ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE) + { + bRaceLimit = TRUE; + // SubType is the race index for racialtypes.2da + nIprpSubType = GetItemPropertySubType(ipProp); + //ai_Debug("0i_items", "664", "nIprpSubType: " + IntToString(nIprpSubType)); + if(nIprpSubType == nRace) bRace = TRUE; + } + ipProp = GetNextItemProperty(oItem); + } + //ai_Debug("0i_items", "669", "bAlignLimit: " + IntToString(bAlignLimit) + " bAlign: " + IntToString(bAlign) + + // " bClassLimit: " + IntToString(bClassLimit) + " bClass: " + IntToString(bClass) + + // " bRaceLimit: " + IntToString(bRaceLimit) + " bRace: " + IntToString(bRace)); + if(bClassLimit && !bClass && !ai_CheckUseMagicDevice(oCreature, "SkillReq_Class", oItem)) return FALSE; + if(bRaceLimit && !bRace && !ai_CheckUseMagicDevice(oCreature, "SkillReq_Race", oItem)) return FALSE; + if(bAlignLimit && !bAlign && !ai_CheckUseMagicDevice(oCreature, "SkillReq_Align", oItem)) return FALSE; + return TRUE; +} +int ai_GetIsProficientWith(object oCreature, object oItem) +{ + int nWeaponType = GetBaseItemType(oItem); + // In the PRC you can equip any weapon. + if(GetLocalInt(GetModule(), AI_USING_PRC)) return TRUE; + int nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat0", nWeaponType)); + // If it is 0 then it doesn't require a feat or we are at the end of the + // feat requirements. + if(nFeat == 0) return TRUE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat1", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat2", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat3", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + nFeat = StringToInt(Get2DAString("baseitems", "ReqFeat4", nWeaponType)); + if(nFeat == 0) return FALSE; + if(GetHasFeat(nFeat, oCreature)) return TRUE; + return FALSE; +} +float ai_GetMeleeWeaponAvgDmg(object oCreature, object oItem, int b2Handed = FALSE, int bOffHand = FALSE, object oOffWeapon = OBJECT_INVALID) +{ + // Has this weapon already been calculated for this creature? + if(oCreature == GetLocalObject(oItem, "AI_CREATURE_POSSESSION")) + { + // Return the Main weapons Avg Damage while using a weapon in the off hand. + if(oOffWeapon != OBJECT_INVALID) + { + // We recalculate all OffWeapon avg damage unless its a double weapon. + if(oOffWeapon == oItem) + { + float fMain2WDmg = GetLocalFloat(oItem, "AI_MAIN_2W_HAND_AVG_DMG"); + // If they passed that this is a 2handed weapon then return the total + // Avg Dmg for oItem. Used for double weapons. + if(b2Handed) + { + fMain2WDmg += ai_GetMeleeWeaponAvgDmg(oCreature, oItem, FALSE, TRUE); + } + if(AI_DEBUG) ai_Debug("0i_items", "611", GetName(oItem) + " avg dmg with Offhand weapon (" + GetName(oOffWeapon) + ") " + FloatToString(fMain2WDmg, 0, 2)); + return fMain2WDmg; + } + } + // Return the avg dmg for oItem assuming it is in the OffHand. + else if(bOffHand) + { + float fOffHandDmg = GetLocalFloat(oItem, "AI_OFFHAND_AVG_DMG"); + if(AI_DEBUG) ai_Debug("0i_items", "618", GetName(oItem) + " fOffHandAvgDmg: " + FloatToString(fOffHandDmg, 0, 2)); + return fOffHandDmg; + } + // If we get here then Return the avg dmg for oItem assuming its in the main hand. + else + { + float fMainDmg = GetLocalFloat(oItem, "AI_AVG_DMG"); + if(AI_DEBUG)ai_Debug("0i_items", "623", GetName(oItem) + " fMainDmg: " + FloatToString(fMainDmg, 0, 2)); + return fMainDmg; + } + } + // Set the creature to this item that we are calculationg the avg damages for. + SetLocalObject(oItem, "AI_CREATURE_POSSESSION", oCreature); + int nItemType = GetBaseItemType(oItem); + // Figure average damage for one attack, or two with two weapons. + // We are keeping it simple to reduce time and checks. + // Get the weapons base stats. + int nMinDmg = StringToInt(Get2DAString("baseitems", "NumDice", nItemType)); + int nMaxDmg = nMinDmg * StringToInt(Get2DAString("baseitems", "DieToRoll", nItemType)); + int nThreat = StringToInt(Get2DAString("baseitems", "CritThreat", nItemType)); + int nMultiplier = StringToInt(Get2DAString("baseitems", "CritHitMult", nItemType)); + int nIndex, nBonusMinDmg, nBonusMaxDmg, nItemPropertyType, nNumDice; + // We set ToHit to 10 for a 50% chance to hit without modifiers. + float fCritBonusDmg, fToHit = 10.0; + if(GetLocalInt(GetModule(), AI_USING_PRC)) + { + if(!prc_IsProficient(oCreature, nItemType)) fToHit -= 4.0; + } + // Check oCreature's feats. + if(GetHasFeat(FEAT_WEAPON_FINESSE, oCreature) && + ai_GetIsLightWeapon(oItem, oCreature)) + { + // Add Dexterity modifier to the Attack bonus. + nIndex = GetAbilityModifier(ABILITY_DEXTERITY, oCreature); + } + else + { + // Add Strength modifier to the attack bonus. + nIndex = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + // Add 1/2 strength modifier to damage for 2handed weapons, but not Double weapons. + if(b2Handed && !bOffHand) + { + nMinDmg += nIndex / 2; + nMaxDmg += nIndex / 2; + } + } + fToHit += nIndex; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "WeaponFocusFeat", nItemType)), oCreature, TRUE)) + { + fToHit += 1.0; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "WeaponSpecializationFeat", nItemType)), oCreature, TRUE)) + { + nMinDmg += 2; + nMaxDmg += 2; + } + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "EpicWeaponFocusFeat", nItemType)), oCreature, TRUE)) + { + fToHit += 2.0; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "EpicWeaponSpecializationFeat", nItemType)), oCreature, TRUE)) + { + nMinDmg += 4; + nMaxDmg += 4; + } + } + } + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "WeaponImprovedCriticalFeat", nItemType)), oCreature, TRUE)) + { + nMultiplier += nMultiplier; + if(GetHasFeat(StringToInt(Get2DAString("baseitems", "EpicWeaponOverwhelmingCriticalFeat", nItemType)), oCreature, TRUE)) + { + if(nMultiplier > 3) fCritBonusDmg = 10.5; + else if(nMultiplier == 3) fCritBonusDmg = 7.0; + else fCritBonusDmg = 3.5; + } + } + // Check oItem's properties. + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + nItemPropertyType = GetItemPropertyType(ipProperty); + if(nItemPropertyType == ITEM_PROPERTY_ENHANCEMENT_BONUS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nBonusMinDmg += nIndex; + nBonusMaxDmg += nIndex; + fToHit += IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_DAMAGE_BONUS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nNumDice = StringToInt(Get2DAString("iprp_damagecost", "NumDice", nIndex)); + nBonusMinDmg += nNumDice; + nBonusMaxDmg += nNumDice * StringToInt(Get2DAString("iprp_damagecost", "Die", nIndex)); + } + else if(nItemPropertyType == ITEM_PROPERTY_ATTACK_BONUS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + fToHit += IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_KEEN) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nMultiplier += nMultiplier; + } + else if(nItemPropertyType == ITEM_PROPERTY_HASTE) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nMinDmg += nMinDmg; + nMaxDmg += nMaxDmg; + nBonusMinDmg += nBonusMinDmg; + nBonusMaxDmg += nBonusMaxDmg; + nMultiplier += nMultiplier; + } + else if(nItemPropertyType == ITEM_PROPERTY_MASSIVE_CRITICALS) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nNumDice = StringToInt(Get2DAString("iprp_damagecost", "NumDice", nIndex)); + fCritBonusDmg += IntToFloat(nNumDice) + IntToFloat(nNumDice * StringToInt(Get2DAString("iprp_damagecost", "Die", nIndex))) / 2.0; + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nBonusMinDmg -= nIndex; + nBonusMaxDmg -= nIndex; + fToHit -= IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + fToHit -= IntToFloat(nIndex); + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_DAMAGE) + { + nIndex = GetItemPropertyCostTableValue(ipProperty); + nBonusMinDmg -= nIndex; + nBonusMaxDmg -= nIndex; + } + else if(nItemPropertyType == ITEM_PROPERTY_NO_DAMAGE) + { + // A weapon always does a minimum of 1 pnt of damage. + nMinDmg = 1; + nMaxDmg = 1; + } + ipProperty = GetNextItemProperty(oItem); + } + float fAvgDmg = IntToFloat(nMinDmg + nMaxDmg + nBonusMinDmg + nBonusMaxDmg) / 2; + // Set value for Offhand chance to hit. + float fOffHandToHit = fToHit - 10.0; + float fOffHandAvgDmg = fAvgDmg; + // Set value for Main hand chance to hit with a weapon in Off hand. + float fMain2HandToHit = fToHit - 6.0; + float fMain2HandAvgDmg = fAvgDmg; + // Calculate the avg dmg for oItem used in the main hand with no Off hand weapon. + fToHit = fToHit / 20.0; + float fThreatChance = (IntToFloat(nThreat) / 20.0) * fToHit; + fAvgDmg = (fAvgDmg * fToHit) + ((fAvgDmg * IntToFloat(nMultiplier) + fCritBonusDmg) * fThreatChance); + SetLocalFloat(oItem, "AI_AVG_DMG", fAvgDmg); + if(AI_DEBUG) ai_Debug("0i_items", "768", GetName(oItem) + " fSingleAvgDmg: " + FloatToString(fAvgDmg, 0, 2)); + if(!b2Handed || (b2Handed && oOffWeapon != OBJECT_INVALID)) + { + // Calculate chance to hit based on two weapon feats and main hand vs off hand. + if(GetHasFeat(374/*Dual_Wield*/, oCreature)) + { + if(ai_GetArmorBonus(GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature)) < 4) + { + fMain2HandToHit += 2.0; + fOffHandToHit += 6.0; + } + } + else + { + if(GetHasFeat(FEAT_AMBIDEXTERITY, oCreature)) fOffHandToHit += 4.0; + if(GetHasFeat(FEAT_TWO_WEAPON_FIGHTING, oCreature)) + { + fMain2HandToHit += 2.0; + fOffHandToHit += 2.0; + } + } + if(ai_GetIsLightWeapon(oItem, oCreature)) fOffHandToHit += 2.0; + if(oOffWeapon != OBJECT_INVALID && + (ai_GetIsLightWeapon(oOffWeapon, oCreature) || ai_GetIsDoubleWeapon(oItem))) + { + fMain2HandToHit += 2.0; + } + // Calculate the avg dmg for oItem used in the main hand with an off hand weapon. + fMain2HandToHit = fMain2HandToHit / 20.0; + fThreatChance = (IntToFloat(nThreat) / 20.0) * fMain2HandToHit; + fMain2HandAvgDmg = (fMain2HandAvgDmg * fMain2HandToHit) + ((fMain2HandAvgDmg * IntToFloat(nMultiplier) + fCritBonusDmg) * fThreatChance); + SetLocalFloat(oItem, "AI_MAIN_2W_HAND_AVG_DMG", fMain2HandAvgDmg); + if(AI_DEBUG) ai_Debug("0i_items", "768", GetName(oItem) + " fMain2HandAvgDmg: " + FloatToString(fMain2HandAvgDmg, 0, 2)); + // Calculate the avg dmg for oItem used in the off hand. + fOffHandToHit = fOffHandToHit / 20.0; + fThreatChance = (IntToFloat(nThreat) / 20.0) * fOffHandToHit; + fOffHandAvgDmg = (fOffHandAvgDmg * fOffHandToHit) + ((fOffHandAvgDmg * IntToFloat(nMultiplier) + fCritBonusDmg) * fThreatChance); + SetLocalFloat(oItem, "AI_OFFHAND_AVG_DMG", fOffHandAvgDmg); + if(AI_DEBUG) ai_Debug("0i_items", "790", GetName(oItem) + " fOffHandAvgDmg: " + FloatToString(fOffHandAvgDmg, 0, 2)); + // Return the correct value based on params passed. + if(oOffWeapon != OBJECT_INVALID) + { + // This is used only for double weapons! Must pass b2Handed = TRUE and + // oOffWeapon = the double weapon that was passes as oItem. + if(b2Handed) return fMain2HandAvgDmg + fOffHandAvgDmg; + return fMain2HandAvgDmg; + } + if(bOffHand) return fOffHandAvgDmg; + } + return fAvgDmg; +} +int ai_SetShieldAC(object oCreature, object oItem) +{ + if(oCreature == GetLocalObject(oItem, "AI_CREATURE_POSSESSION")) + { + return GetLocalInt(oItem, "AI_SHIELD_AC"); + } + // Set the creature who has this item for setting the power of. + SetLocalObject(oItem, "AI_CREATURE_POSSESSION", oCreature); + int nItemType = GetBaseItemType(oItem); + int nAC, nItemPropertyType; + if(nItemType == BASE_ITEM_SMALLSHIELD) nAC = 1; + else if(nItemType == BASE_ITEM_LARGESHIELD) nAC = 2; + else if(nItemType == BASE_ITEM_TOWERSHIELD) nAC = 3; + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + nItemPropertyType = GetItemPropertyType(ipProperty); + if(nItemPropertyType == ITEM_PROPERTY_AC_BONUS) + { + nAC += GetItemPropertyCostTableValue(ipProperty); + } + else if(nItemPropertyType == ITEM_PROPERTY_DECREASED_AC) + { + nAC -= GetItemPropertyCostTableValue(ipProperty); + } + else if(nItemPropertyType == ITEM_PROPERTY_HASTE) + { + nAC += 4; + } + ipProperty = GetNextItemProperty(oItem); + } + SetLocalInt(oItem, "AI_SHIELD_AC", nAC); + if(AI_DEBUG) ai_Debug("0i_items", "718", GetName(oItem) + " nAC: " + IntToString(nAC)); + return nAC; +} +int ai_GetHasItemProperty(object oItem, int nItemPropertyType, int nItemPropertySubType = -1) +{ + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == nItemPropertyType) + { + if(nItemPropertySubType > -1) + { + if(GetItemPropertySubType(ipProperty) == nItemPropertySubType) return TRUE; + } + else return TRUE; + } + ipProperty = GetNextItemProperty(oItem); + } + return FALSE; +} +object ai_GetBestPicks(object oCreature, int nLockDC) +{ + int nSkill = GetSkillRank(SKILL_OPEN_LOCK, oCreature); + int nBonus, nBestBonus = 99, nNeededBonus = nLockDC - nSkill - 20; + //ai_Debug("0i_items", "651", "nNeededBonus: " + IntToString(nNeededBonus)); + // We don't need to use any picks! + if(nNeededBonus < 1) return OBJECT_INVALID; + object oBestItem = OBJECT_INVALID; + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetBaseItemType(oItem) == BASE_ITEM_THIEVESTOOLS) + { + // Get the tools bonus. + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_THIEVES_TOOLS) + { + nBonus = GetItemPropertyCostTableValue(ipProperty); + if(nBonus >= nNeededBonus && nBonus < nBestBonus) + { + nBestBonus = nBonus; + oBestItem = oItem; + SetLocalInt(oBestItem, "AI_BONUS", nBestBonus); + break; + } + } + ipProperty = GetNextItemProperty(oItem); + } + } + oItem = GetNextItemInInventory(oCreature); + } + return oBestItem; +} +void ai_RemoveInventory(object oCreature) +{ + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + DestroyObject(oItem); + oItem = GetNextItemInInventory(oCreature); + } + int nIndex; + for(nIndex = 0; nIndex <= 13; nIndex++) + { + oItem = GetItemInSlot(nIndex, oCreature); + DestroyObject(oItem); + } +} +void ai_MoveInventory(object oOldHenchman, object oNewHenchman) +{ + // Move all inventory items. + object oItem = GetFirstItemInInventory(oOldHenchman); + while(oItem != OBJECT_INVALID) + { + CopyItem(oItem, oNewHenchman, TRUE); + oItem = GetNextItemInInventory(oOldHenchman); + } + // Move all equiped items and equip on oNewHenchman. + int nIndex; + object oNewItem; + for(nIndex = 0; nIndex <= 13; nIndex++) + { + oItem = GetItemInSlot(nIndex, oOldHenchman); + if(oItem != OBJECT_INVALID) + { + oNewItem = CopyItem(oItem, oNewHenchman, TRUE); + if(!GetIdentified(oNewItem)) SetIdentified(oNewItem, TRUE); + ActionEquipItem(oNewItem, nIndex); + } + } +} +int prc_IsProficient(object oCreature, int nBaseItem) +{ + switch(nBaseItem) + { + //special case: counts as simple for chitine + case BASE_ITEM_SHORTSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + && GetRacialType(oCreature) == 76/*RACIAL_TYPE_CHITINE*/) + || GetHasFeat(7901/*FEAT_WEAPON_PROFICIENCY_SHORTSWORD*/, oCreature); + + case BASE_ITEM_LONGSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature) + || GetHasFeat(7902/*FEAT_WEAPON_PROFICIENCY_LONGSWORD*/, oCreature); + + case BASE_ITEM_BATTLEAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + && GetRacialType(oCreature) == 216/*RACIAL_TYPE_GNOLL*/) + || GetHasFeat(7903/*FEAT_WEAPON_PROFICIENCY_BATTLEAXE*/, oCreature); + + case BASE_ITEM_BASTARDSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature) + || GetHasFeat(7904/*FEAT_WEAPON_PROFICIENCY_BASTARD_SWORD*/, oCreature); + + case BASE_ITEM_LIGHTFLAIL: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7905/*FEAT_WEAPON_PROFICIENCY_LIGHT_FLAIL*/, oCreature); + + case BASE_ITEM_WARHAMMER: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7906/*FEAT_WEAPON_PROFICIENCY_WARHAMMER*/, oCreature); + + case BASE_ITEM_LONGBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature) + || GetHasFeat(7907/*FEAT_WEAPON_PROFICIENCY_LONGBOW*/, oCreature); + + case BASE_ITEM_LIGHTMACE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(7908/*FEAT_WEAPON_PROFICIENCY_LIGHT_MACE*/, oCreature); + + case BASE_ITEM_HALBERD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7909/*FEAT_WEAPON_PROFICIENCY_HALBERD*/, oCreature); + + case BASE_ITEM_SHORTBOW: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + && GetRacialType(oCreature) == 216/*RACIAL_TYPE_GNOLL*/) + || GetHasFeat(7910/*FEAT_WEAPON_PROFICIENCY_SHORTBOW*/, oCreature); + + case BASE_ITEM_TWOBLADEDSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature) + || GetHasFeat(7911/*FEAT_WEAPON_PROFICIENCY_TWO_BLADED_SWORD*/, oCreature); + + case BASE_ITEM_GREATSWORD: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7912/*FEAT_WEAPON_PROFICIENCY_GREATSWORD*/, oCreature); + + case BASE_ITEM_GREATAXE: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(7913/*FEAT_WEAPON_PROFICIENCY_GREATAXE*/, oCreature); + + case BASE_ITEM_DART: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature) + || GetHasFeat(7914/*FEAT_WEAPON_PROFICIENCY_DART*/, oCreature); + + case BASE_ITEM_DIREMACE: + return GetHasFeat(7915/*FEAT_WEAPON_PROFICIENCY_DIRE_MACE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_DOUBLEAXE: + return GetHasFeat(7916/*FEAT_WEAPON_PROFICIENCY_DOUBLE_AXE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_HEAVYFLAIL: + return GetHasFeat(7917/*FEAT_WEAPON_PROFICIENCY_HEAVY_FLAIL*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case BASE_ITEM_LIGHTHAMMER: + return GetHasFeat(7918/*FEAT_WEAPON_PROFICIENCY_LIGHT_HAMMER*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case BASE_ITEM_HANDAXE: + return GetHasFeat(7919/*FEAT_WEAPON_PROFICIENCY_HANDAXE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature); + + case BASE_ITEM_KAMA: + return GetHasFeat(7920/*FEAT_WEAPON_PROFICIENCY_KAMA*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_KATANA: + return GetHasFeat(7921/*FEAT_WEAPON_PROFICIENCY_KATANA*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_KUKRI: + return GetHasFeat(7922/*FEAT_WEAPON_PROFICIENCY_KUKRI*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_MORNINGSTAR: + return GetHasFeat(7923/*FEAT_WEAPON_PROFICIENCY_MORNINGSTAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature); + + case BASE_ITEM_QUARTERSTAFF: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_WIZARD, oCreature); + + case BASE_ITEM_RAPIER: + return GetHasFeat(7924/*FEAT_WEAPON_PROFICIENCY_RAPIER*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ELF, oCreature); + + case BASE_ITEM_SCIMITAR: + return GetHasFeat(7925/*FEAT_WEAPON_PROFICIENCY_SCIMITAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_SCYTHE: + return GetHasFeat(7926/*FEAT_WEAPON_PROFICIENCY_SCYTHE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case BASE_ITEM_SHORTSPEAR: + return GetHasFeat(7927/*FEAT_WEAPON_PROFICIENCY_SHORTSPEAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_SHURIKEN: + return GetHasFeat(7928/*FEAT_WEAPON_PROFICIENCY_SHURIKEN*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature); + + case BASE_ITEM_SICKLE: + return GetHasFeat(7929/*FEAT_WEAPON_PROFICIENCY_SICKLE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_SLING: + return GetHasFeat(7930/*FEAT_WEAPON_PROFICIENCY_SLING*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case BASE_ITEM_THROWINGAXE: + return GetHasFeat(7931/*FEAT_WEAPON_PROFICIENCY_THROWING_AXE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + || GetHasFeat(3600/*FEAT_MINDBLADE*/, oCreature); + + case BASE_ITEM_CSLASHWEAPON: + case BASE_ITEM_CPIERCWEAPON: + case BASE_ITEM_CBLUDGWEAPON: + case BASE_ITEM_CSLSHPRCWEAP: + return GetHasFeat(FEAT_WEAPON_PROFICIENCY_CREATURE, oCreature); + + case BASE_ITEM_TRIDENT: + return GetHasFeat(7932/*FEAT_WEAPON_PROFICIENCY_TRIDENT*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_DRUID, oCreature); + + case 124://BASE_ITEM_DOUBLE_SCIMITAR: + return GetHasFeat(7948/*FEAT_WEAPON_PROFICIENCY_DOUBLE_SCIMITAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 119://BASE_ITEM_FALCHION: + return GetHasFeat(7943/*FEAT_WEAPON_PROFICIENCY_FALCHION*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 125://BASE_ITEM_GOAD: + return GetHasFeat(7949/*FEAT_WEAPON_PROFICIENCY_GOAD*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature); + + case 122://BASE_ITEM_HEAVY_MACE: + return GetHasFeat(7946/*FEAT_WEAPON_PROFICIENCY_HEAVY_MACE*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_SIMPLE, oCreature); + + case 115://BASE_ITEM_HEAVY_PICK: + return GetHasFeat(7939/*FEAT_WEAPON_PROFICIENCY_HEAVY_PICK*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 116://BASE_ITEM_LIGHT_PICK: + return GetHasFeat(7940/*FEAT_WEAPON_PROFICIENCY_LIGHT_PICK*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 121://BASE_ITEM_KATAR: + return GetHasFeat(7945/*FEAT_WEAPON_PROFICIENCY_KATAR*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 123://BASE_ITEM_MAUL: + return GetHasFeat(7947/*FEAT_WEAPON_PROFICIENCY_MAUL*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + case 118://BASE_ITEM_NUNCHAKU: + return GetHasFeat(7942/*FEAT_WEAPON_PROFICIENCY_NUNCHAKU*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 117://BASE_ITEM_SAI: + return GetHasFeat(7941/*FEAT_WEAPON_PROFICIENCY_SAI*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MONK, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case 120://BASE_ITEM_SAP: + return GetHasFeat(7944/*FEAT_WEAPON_PROFICIENCY_SAP*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_ROGUE, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature); + + //special case: counts as martial for dwarves + case BASE_ITEM_DWARVENWARAXE: + return GetHasFeat(7933/*FEAT_WEAPON_PROFICIENCY_DWARVEN_WARAXE*/, oCreature) + || (GetHasFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, oCreature) + && GetHasFeat(4710/*FEAT_DWARVEN*/, oCreature)) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + + case BASE_ITEM_WHIP: + return GetHasFeat(7934/*FEAT_WEAPON_PROFICIENCY_WHIP*/, oCreature) + || GetHasFeat(FEAT_WEAPON_PROFICIENCY_EXOTIC, oCreature); + } + return TRUE; +} +int ai_GetItemUses(object oItem, int nItemPropertySubType) +{ + int nUses; + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_HEALERS_KIT) return GetItemStackSize(oItem); + if(nItemPropertySubType > -1) + { + if(GetItemPropertySubType(ipProperty) == nItemPropertySubType) + { + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProperty); + if(nUses == 1) return GetItemStackSize(oItem); + else if(nUses > 1 && nUses < 7) return GetItemCharges(oItem); + else if(nUses == 7 || nUses == 13) return 999; + else if(nUses > 7 && nUses < 13) return GetItemPropertyUsesPerDayRemaining(oItem, ipProperty); + } + } + else return TRUE; + ipProperty = GetNextItemProperty(oItem); + } + return FALSE; +} + diff --git a/_module/nss/0i_main.nss b/_module/nss/0i_main.nss new file mode 100644 index 0000000..ba36f4a --- /dev/null +++ b/_module/nss/0i_main.nss @@ -0,0 +1,1384 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_main +//////////////////////////////////////////////////////////////////////////////// + Include script for handling main/basic functions not defined by other includes. + + Database structure: Json with indexes. + name (string) - The associatetype to link the data. "pc", "familiar", etc. + modes (jsonarray) - 0-aimodes (int), 1-magicmodes (int) + buttons (jsonarray) - 0-widgetbuttons (int), 1-aibuttons (int) + aidata (jsonarray) - 0-difficulty (int), 1-healoutcombat (int), 2-healincombat (int), + 3-lootrange (float), 4-lockrange (float), 5-traprange (float), + 6-Follow range (float). + lootfilters (jsonarray) - 0-maxweight (int), 1-lootfilters (int), + Item filters in min gold json array; 2-plot, 3-armor, 4-belts, 5-boots, + 6-cloaks, 7-gems, 8-gloves, 9-headgear, 10-jewelry, 11-misc, 12-potions, + 13-scrolls, 14-shields, 15-wands, 16-weapons, 17-arrow, 18-bolt, 19-bullet. + plugins (jsonarray) - 0+ (string). * Only used in the "pc" data. + location (jsonobject) - geometry (json), used in widgets for pc and associates. +*/////////////////////////////////////////////////////////////////////////////// +const string AI_TABLE = "PEPS_TABLE"; +const string AI_CAMPAIGN_DATABASE = "peps_database"; +const string AI_DM_TABLE = "DM_TABLE"; +#include "0i_constants" +#include "0i_messages" +// Sets PEPS RULES from the database to the module. +// Creates default rules if they do not exist. +void ai_SetAIRules(); +// Returns TRUE if the module is being run as a server. +int ai_GetIsServer(); +// Returns TRUE if oCreature is controlled by a player. +int ai_GetIsCharacter(object oCreature); +// Returns TRUE if oCreature is controlled by a dungeon master. +int ai_GetIsDungeonMaster(object oCreature); +// Returns the Player of oAssociate even if oAssociate is the player. +// If there is no player associated with oAssociate then it returns OBJECT_INVALID. +object ai_GetPlayerMaster(object oAssociate); +// Returns the top master of oAssociate, for example a henchmen summons a bat, +// this will return the henchman's player. +object ai_GetTopMaster(object oAssociate); +// Returns the percentage of hit points oCreature has left. +int ai_GetPercHPLoss(object oCreature); +// Returns a rolled result from sDice string. +// Example: "1d6" will be 1-6 or "3d6" will be 3-18 or 1d6+5 will be 6-11. +int ai_RollDiceString(string sDice); +// Returns the int number of a encoded 0x00000000 hex number from a string. +int ai_HexStringToInt(string sString); +// Returns cosine of the angle between oObject1 and oObject2 +float ai_GetCosAngleBetween(object oObject1, object oObject2); +// Returns a string from sString with only characters in sLegal. +// Used to remove illegal characters for databases. +string ai_RemoveIllegalCharacters(string sString, string sLegal = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); +// Returns the total levels of oCreature. +int ai_GetCharacterLevels(object oCreature); +// Returns a string where sFind is replaced in any occurrence of sSource with sReplace. +string ai_StringReplaceText(string sSource, string sFind, string sReplace); +// Returns a string of characters between the nIndex of predefined markers of +// sSeperator in sText. +// nIndex is the number of the data we are searching for in the array. +// A 0 nIndex is the first item in the text array. +// sSeperator is the character that seperates the array(Usefull for Multiple arrays). +string ai_GetStringArray(string sText, int nIndex, string sSeperator = ":"); +// Returns a string of characters between the nIndex of predefined markers of +// sSeperator in sText where sField has been set. +// sText is the text holding the array. +// nIndex is the array number in the data we are searching for. +// A 0 nIndex is the first item in the text array. +// sField is the field of characters to replace that index. +// sSeperator is the character that seperates the array(Usefull for Multiple arrays). +string ai_SetStringArray(string sText, int nIndex, string sField, string sSeperator = ":"); +// Returns the number of magical properties oItem has. +int ai_GetNumberOfProperties(object oItem); +// Checks if the campaign database table has been created and initialized. +void ai_CheckCampaignDataAndInitialize(); +// Checks if the dm database table and data has been created and initialized of oDM. +void ai_CheckDMDataAndInitialize(object oDM); +// Sets json to a campaign database. +void ai_SetCampaignDbJson(string sDataField, json jData, string sName = "PEPS_DATA", string sTable = AI_TABLE); +// Gets json from a campaign database. +json ai_GetCampaignDbJson(string sDataField, string sName = "PEPS_DATA", string sTable = AI_TABLE); +// Checks if oMaster has the Table created for Associate data. +// If no table found then the table is created and then initialized. +void ai_CheckAssociateDataAndInitialize(object oPlayer, string sAssociateType); +// Returns the associatetype int string format for oAssociate. +// They are pc, familar, companion, summons, henchman is the henchmans tag +string ai_GetAssociateType(object oPlayer, object oAssociate); +// Sets nData to sDataField for sAssociateType that is on oPlayer. +// sDataField can be modes, magicmodes, lootmodes, widgetbuttons, aibuttons, magic, +// healoutcombat, healincombat, mingold*. +void ai_SetAssociateDbInt(object oPlayer, string sAssociateType, string sDataField, int nData, string sTable = AI_TABLE); +// Returns nData from sDataField for sAssociateType that is on oPlayer. +// sDataField can be modes, magicmodes, lootmodes, widgetbuttons, aibuttons, magic, +// healoutcombat, healincombat, mingold*. +int ai_GetAssociateDbInt(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE); +// Sets fData to sDataField for sAssociateType that is on oPlayer. +// sDataField can be lootrange, lockrange, traprange. +void ai_SetAssociateDbFloat(object oPlayer, string sAssociatetype, string sDataField, float fData, string sTable = AI_TABLE); +// Returns fData from sDataField for sAssociateType that is on oPlayer. +// sDataField can be lootrange, lockrange, traprange. +float ai_GetAssociateDbFloat(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void ai_SetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, json jData, string sTable = AI_TABLE); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json ai_GetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE); +// Saves Associate AIModes and MagicModes to the database. +void aiSaveAssociateModesToDb(object oPlayer, object oAssociate); +// Checks Associate local data and if none is found will initialize or load the +// correct data for oAssociate. +void ai_CheckAssociateData(object oPlayer, object oAssociate, string sAssociateType, int bLoad = FALSE); +// Checks DM's local data and if none is found will initizlize or load the +// correct data for oPlayer. +void ai_CheckDMData(object oPlayer); +// Adds to jPlugins functions after checking if the plugin can be installed. +json ai_Plugin_Add(object oPC, json jPlugins, string sPluginScript); +// Updates the players Plugin list and saves to the database. +json ai_UpdatePluginsForPC(object oPC); +// Updates the DM's Plugin list and saves to the database. +json ai_UpdatePluginsForDM (object oPC); +// Runs all plugins that are loaded into the database. +void ai_StartupPlugins(object oPC); +void ai_SetAIRules() +{ + object oModule = GetModule(); + ai_CheckCampaignDataAndInitialize(); + json jRules = ai_GetCampaignDbJson("rules"); + if(JsonGetType(JsonObjectGet(jRules, AI_RULE_MORAL_CHECKS)) == JSON_TYPE_NULL) + { + // Variable name set to a creatures full name to set debugging on. + jRules = JsonObjectSet(JsonObject(), AI_RULE_DEBUG_CREATURE, JsonString("")); + // Moral checks on or off. + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, AI_MORAL_CHECKS); + jRules = JsonObjectSet(jRules, AI_RULE_MORAL_CHECKS, JsonInt(AI_MORAL_CHECKS)); + // Allows monsters to prebuff before combat starts. + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, AI_PREBUFF); + jRules = JsonObjectSet(jRules, AI_RULE_BUFF_MONSTERS, JsonInt(AI_PREBUFF)); + // Allows monsters to prebuff with all spells before combat starts. + SetLocalInt(oModule, AI_RULE_FULL_BUFF_MONSTERS, AI_FULL_BUFF); + jRules = JsonObjectSet(jRules, AI_RULE_FULL_BUFF_MONSTERS, JsonInt(AI_FULL_BUFF)); + // Allows monsters cast summons spells when prebuffing. + SetLocalInt(oModule, AI_RULE_PRESUMMON, AI_PRESUMMONS); + jRules = JsonObjectSet(jRules, AI_RULE_PRESUMMON, JsonInt(AI_PRESUMMONS)); + // Allows monsters to use tactical AI scripts. + SetLocalInt(oModule, AI_RULE_AMBUSH, AI_TACTICAL); + jRules = JsonObjectSet(jRules, AI_RULE_AMBUSH, JsonInt(AI_TACTICAL)); + // Enemies may summon familiars and Animal companions and will be randomized. + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, AI_SUMMON_COMPANIONS); + jRules = JsonObjectSet(jRules, AI_RULE_SUMMON_COMPANIONS, JsonInt(AI_SUMMON_COMPANIONS)); + // Allow the AI to move during combat base on the situation and action taking. + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, AI_ADVANCED_MOVEMENT); + jRules = JsonObjectSet(jRules, AI_RULE_ADVANCED_MOVEMENT, JsonInt(AI_ADVANCED_MOVEMENT)); + // Follow Item Level Restrictions for monsters/associates. + SetLocalInt(oModule, AI_RULE_ILR, AI_ITEM_LEVEL_RESTRICTIONS); + jRules = JsonObjectSet(jRules, AI_RULE_ILR, JsonInt(AI_ITEM_LEVEL_RESTRICTIONS)); + // Allow the AI to use Use Magic Device. + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, AI_USE_MAGIC_DEVICE); + jRules = JsonObjectSet(jRules, AI_RULE_ALLOW_UMD, JsonInt(AI_USE_MAGIC_DEVICE)); + // Allow the AI to use healing kits. + SetLocalInt(oModule, AI_RULE_HEALERSKITS, AI_HEALING_KITS); + jRules = JsonObjectSet(jRules, AI_RULE_HEALERSKITS, JsonInt(AI_HEALING_KITS)); + // Associates are permanent and don't get removed when the master dies. + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, AI_COMPANIONS_PERMANENT); + jRules = JsonObjectSet(jRules, AI_RULE_PERM_ASSOC, JsonInt(AI_COMPANIONS_PERMANENT)); + // Monster AI's chance to attack the weakest target instead of the nearest. + SetLocalInt(oModule, AI_RULE_AI_DIFFICULTY, AI_TARGET_WEAKEST); + jRules = JsonObjectSet(jRules, AI_RULE_AI_DIFFICULTY, JsonInt(AI_TARGET_WEAKEST)); + // Monster AI's distance they can search for the enemy. + SetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE, AI_SEARCH_DISTANCE); + jRules = JsonObjectSet(jRules, AI_RULE_PERCEPTION_DISTANCE, JsonFloat(AI_SEARCH_DISTANCE)); + // Enemy corpses remain on the floor instead of dissappearing. + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, AI_CORPSE_REMAIN); + jRules = JsonObjectSet(jRules, AI_RULE_CORPSES_STAY, JsonInt(AI_CORPSE_REMAIN)); + // Monsters will wander around when not in combat. + SetLocalInt(oModule, AI_RULE_WANDER, AI_WANDER); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER, JsonInt(AI_WANDER)); + // Increase the number of encounter creatures. + SetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS, 0.0); + jRules = JsonObjectSet(jRules, AI_INCREASE_ENC_MONSTERS, JsonFloat(0.0)); + // Increase all monsters hitpoints by this percentage. + SetLocalInt(oModule, AI_INCREASE_MONSTERS_HP, 0); + jRules = JsonObjectSet(jRules, AI_INCREASE_MONSTERS_HP, JsonInt(0)); + // Monster's perception distance. + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, AI_MONSTER_PERCEPTION); + jRules = JsonObjectSet(jRules, AI_RULE_MON_PERC_DISTANCE, JsonInt(AI_MONSTER_PERCEPTION)); + // Variable name set to hold the maximum number of henchman the player wants. + int nMaxHenchmen = GetMaxHenchmen(); + SetLocalInt(oModule, AI_RULE_MAX_HENCHMAN, nMaxHenchmen); + jRules = JsonObjectSet(jRules, AI_RULE_MAX_HENCHMAN, JsonInt(nMaxHenchmen)); + // Monster AI's distance they can wander away from their spawn point. + SetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE, AI_WANDER_DISTANCE); + jRules = JsonObjectSet(jRules, AI_RULE_WANDER_DISTANCE, JsonFloat(AI_WANDER_DISTANCE)); + // Monsters will open doors when wandering around and not in combat. + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, AI_WANDER); + jRules = JsonObjectSet(jRules, AI_RULE_OPEN_DOORS, JsonInt(AI_OPEN_DOORS)); + // If the modules default XP has not been set then we do it here. + int nDefaultXP = GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE); + if(nDefaultXP == 0) + { + int nValue = GetModuleXPScale(); + if(nValue != 0) SetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE, nValue); + } + // Variable name set to allow the game to regulate experience based on party size. + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, AI_PARTY_SCALE); + jRules = JsonObjectSet(jRules, AI_RULE_PARTY_SCALE, JsonInt(AI_PARTY_SCALE)); + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, JsonArray()); + jRules = JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, JsonArray()); + // Variable name set to allow access to widget buttons for the players. + SetLocalInt(oModule, sDMWidgetAccessVarname, AI_DM_WIDGET_ACCESS_BUTTONS); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(AI_DM_WIDGET_ACCESS_BUTTONS)); + // Variable name set to allow access to widget buttons for the players. + SetLocalInt(oModule, sDMAIAccessVarname, AI_DM_AI_ACCESS_BUTTONS); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(AI_DM_AI_ACCESS_BUTTONS)); + ai_SetCampaignDbJson("rules", jRules); + } + else + { + // Variable name set to a creatures full name to set debugging on. + string sValue = JsonGetString(JsonObjectGet(jRules, AI_RULE_DEBUG_CREATURE)); + SetLocalString(oModule, AI_RULE_DEBUG_CREATURE, sValue); + // Moral checks on or off. + int bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_MORAL_CHECKS)); + SetLocalInt(oModule, AI_RULE_MORAL_CHECKS, bValue); + // Allows monsters to prebuff before combat starts. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_BUFF_MONSTERS)); + SetLocalInt(oModule, AI_RULE_BUFF_MONSTERS, bValue); + // Allows monsters to buff with all spells before combat starts. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_FULL_BUFF_MONSTERS)); + SetLocalInt(oModule, AI_RULE_FULL_BUFF_MONSTERS, bValue); + // Allows monsters cast summons spells when prebuffing. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_PRESUMMON)); + SetLocalInt(oModule, AI_RULE_PRESUMMON, bValue); + // Allows monsters to use ambush AI scripts. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_AMBUSH)); + SetLocalInt(oModule, AI_RULE_AMBUSH, bValue); + // Enemies may summon familiars and Animal companions and will be randomized. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_SUMMON_COMPANIONS)); + SetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS, bValue); + // Allow the AI to move during combat base on the situation and action taking. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_ADVANCED_MOVEMENT)); + SetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT, bValue); + // Follow Item Level Restrictions for monsters/associates. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_ILR)); + SetLocalInt(oModule, AI_RULE_ILR, bValue); + // Allow the AI to use Use Magic Device. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_ALLOW_UMD)); + SetLocalInt(oModule, AI_RULE_ALLOW_UMD, bValue); + // Allow the AI to use healing kits. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_HEALERSKITS)); + SetLocalInt(oModule, AI_RULE_HEALERSKITS, bValue); + // Associates are permanent and don't get removed when the owner dies. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_PERM_ASSOC)); + SetLocalInt(oModule, AI_RULE_PERM_ASSOC, bValue); + // Monster AI's chance to attack the weakest target instead of the nearest. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_AI_DIFFICULTY)); + SetLocalInt(oModule, AI_RULE_AI_DIFFICULTY, bValue); + // Monster AI's perception distance from player. + float fValue = JsonGetFloat(JsonObjectGet(jRules, AI_RULE_PERCEPTION_DISTANCE)); + SetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE, fValue); + // Enemy corpses remain on the floor instead of dissappearing. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_CORPSES_STAY)); + SetLocalInt(oModule, AI_RULE_CORPSES_STAY, bValue); + // Monsters will wander around when not in combat. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_WANDER)); + SetLocalInt(oModule, AI_RULE_WANDER, bValue); + // Increase the number of encounter creatures. + fValue = JsonGetFloat(JsonObjectGet(jRules, AI_INCREASE_ENC_MONSTERS)); + SetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS, fValue); + // Increase all monsters hitpoints by this percentage. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_INCREASE_MONSTERS_HP)); + SetLocalInt(oModule, AI_INCREASE_MONSTERS_HP, bValue); + // Monster's perception distance. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_MON_PERC_DISTANCE)); + if(bValue < 8 || bValue > 11) bValue = 11; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, bValue); + // Variable name set to hold the maximum number of henchman the player wants. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_MAX_HENCHMAN)); + if(bValue == 0) bValue = GetMaxHenchmen(); + else SetMaxHenchmen(bValue); + SetLocalInt(oModule, AI_RULE_MAX_HENCHMAN, bValue); + // Monster AI's wander distance from their spawn point. + fValue = JsonGetFloat(JsonObjectGet(jRules, AI_RULE_WANDER_DISTANCE)); + SetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE, fValue); + // Monsters will open doors while wandering around and not in combat. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_OPEN_DOORS)); + SetLocalInt(oModule, AI_RULE_OPEN_DOORS, bValue); + // If the modules default XP has not been set then we do it here. + int nDefaultXP = GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE); + if(nDefaultXP == 0) + { + bValue = GetModuleXPScale(); + if(bValue != 0) SetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE, bValue); + } + // Variable name set to allow the game to regulate experience based on party size. + bValue = JsonGetInt(JsonObjectGet(jRules, AI_RULE_PARTY_SCALE)); + if(bValue) + { + int nBasePartyXP = GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP); + if(nBasePartyXP == 0) + { + nDefaultXP = GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE); + SetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP, nDefaultXP); + } + } + SetLocalInt(oModule, AI_RULE_PARTY_SCALE, bValue); + json jRSpells = JsonObjectGet(jRules, AI_RULE_RESTRICTED_SPELLS); + if(JsonGetType(jRSpells) == JSON_TYPE_NULL) + { + jRSpells = JsonArray(); + jRules = JsonObjectSet(jRules, AI_RULE_RESTRICTED_SPELLS, jRSpells); + ai_SetCampaignDbJson("rules", jRules); + } + SetLocalJson(oModule, AI_RULE_RESTRICTED_SPELLS, jRSpells); + // Variable name set to allow access to widget buttons for the players. + bValue = JsonGetInt(JsonObjectGet(jRules, sDMWidgetAccessVarname)); + SetLocalInt(oModule, sDMWidgetAccessVarname, bValue); + // Variable name set to allow access to widget buttons for the players. + bValue = JsonGetInt(JsonObjectGet(jRules, sDMAIAccessVarname)); + SetLocalInt(oModule, sDMAIAccessVarname, bValue); + } +} +int ai_GetIsServer() +{ + return GetLocalInt(GetModule(), AI_IS_SERVER) || AI_SERVER; +} +int ai_GetIsCharacter(object oCreature) +{ + return (GetIsPC(oCreature) && !GetIsDM(oCreature) && !GetIsDMPossessed(oCreature) && !GetIsPlayerDM(oCreature)); +} +int ai_GetIsDungeonMaster(object oCreature) +{ + return (GetIsDM(oCreature) || GetIsDMPossessed(oCreature) || GetIsPlayerDM(oCreature)); +} +object ai_GetPlayerMaster(object oAssociate) +{ + if(ai_GetIsCharacter(oAssociate)) return oAssociate; + object oMaster = GetMaster(oAssociate); + if(ai_GetIsCharacter(oMaster)) return oMaster; + return OBJECT_INVALID; +} +object ai_GetTopMaster(object oAssociate) +{ + object oMaster = GetMaster(oAssociate); + while(oMaster != OBJECT_INVALID) + { + if(GetMaster(oMaster) == OBJECT_INVALID) break; + oMaster = GetMaster(oMaster); + } + return oMaster; +} +int ai_GetPercHPLoss(object oCreature) +{ + int nHP = GetCurrentHitPoints(oCreature); + if(nHP < 1) return 0; + return(nHP * 100) / GetMaxHitPoints(oCreature); +} +int ai_RollDiceString(string sDice) +{ + int nNegativePos, nBonus = 0; + string sRight = GetStringRight(sDice, GetStringLength(sDice) - FindSubString(sDice, "d") - 1); + int nPlusPos = FindSubString(sRight, "+"); + if(nPlusPos != -1) + { + nBonus = StringToInt(GetStringRight(sRight, GetStringLength(sRight) - nPlusPos - 1)); + sRight = GetStringLeft(sRight, nPlusPos); + } + else + { + nNegativePos = FindSubString(sRight, "-"); + if(nNegativePos != -1) + { + nBonus = StringToInt(GetStringRight(sRight, GetStringLength(sRight) - nNegativePos - 1)); + sRight = GetStringLeft(sRight, nNegativePos); + nBonus = nBonus * -1; + } + } + int nDie = StringToInt(sRight); + int nNumOfDie = StringToInt(GetStringLeft(sDice, FindSubString(sDice, "d"))); + int nResult; + while(nNumOfDie > 0) + { + nResult += Random(nDie) + 1; + nNumOfDie --; + } + return nResult + nBonus; +} +int ai_HexStringToInt(string sString) +{ + sString = GetStringLowerCase(sString); + int nInt = 0; + int nLength = GetStringLength(sString); + int i; + for(i = nLength - 1; i >= 0; i--) + { + int n = FindSubString("0123456789abcdef", GetSubString(sString, i, 1)); + if(n == -1) return nInt; + nInt |= n << ((nLength - i - 1) * 4); + } + return nInt; +} +float ai_GetCosAngleBetween(object oObject1, object oObject2) +{ + vector v1 = GetPositionFromLocation(GetLocation(oObject1)); + vector v2 = GetPositionFromLocation(GetLocation(oObject2)); + vector v3 = GetPositionFromLocation(GetLocation(OBJECT_SELF)); + + v1.x -= v3.x; v1.y -= v3.y; v1.z -= v3.z; + v2.x -= v3.x; v2.y -= v3.y; v2.z -= v3.z; + + float dotproduct = v1.x*v2.x+v1.y*v2.y+v1.z*v2.z; + + return dotproduct/(VectorMagnitude(v1)*VectorMagnitude(v2)); +} +string ai_RemoveIllegalCharacters(string sString, string sLegal = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") +{ + string sOut, sValue; + sString = ai_StripColorCodes(sString); + int nLength = GetStringLength(sString); + int Cnt; + for(Cnt = 0; Cnt != nLength; ++Cnt) + { + sValue = GetSubString(sString, Cnt, 1); + if(TestStringAgainstPattern("**" + sValue + "**", sLegal)) + sOut += sValue; + } + return sOut; +} +int ai_GetCharacterLevels(object oCreature) +{ + int nLevels, nPosition = 1; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nLevels += GetLevelByPosition(nPosition, oCreature); + nPosition++; + } + return nLevels; +} +string ai_StringReplaceText(string sSource, string sFind, string sReplace) +{ + int nFindLength = GetStringLength(sFind); + int nPosition = 0; + string sReturnValue = ""; + // Locate all occurences of sFind. + int nFound = FindSubString(sSource, sFind); + while(nFound >= 0 ) + { + // Build the return string, replacing this occurence of sFind with sReplace. + sReturnValue += GetSubString(sSource, nPosition, nFound - nPosition) + sReplace; + nPosition = nFound + nFindLength; + nFound = FindSubString(sSource, sFind, nPosition); + } + // Tack on the end of sSource and return. + return sReturnValue + GetStringRight(sSource, GetStringLength(sSource) - nPosition); +} +string ai_GetStringArray(string sArray, int nIndex, string sSeperator = ":") +{ + int nCnt = 0, nMark = 0, nStringLength = GetStringLength(sArray); + string sCharacter; + // Search the string. + while(nCnt < nStringLength) + { + sCharacter = GetSubString(sArray, nCnt, 1); + // Look for the mark. + if(sCharacter == sSeperator) + { + // If we have not found it then lets see if this mark is the one. + if(nMark < 1) + { + // If we are down to 0 in the index then we have found the mark. + if(nIndex > 0) nIndex --; + // Mark the start of the string we need. + else nMark = nCnt + 1; + } + else + { + // We have the first mark so the next mark will mean we have the string we need. + // Now pull it and return. + sArray = GetSubString(sArray, nMark, nCnt - nMark); + return sArray; + } + } + nCnt ++; + } + // If we hit the end without finding it then return "" as an error. + return ""; +} +string ai_SetStringArray(string sArray, int nIndex, string sField, string sSeperator = ":") +{ + int nCnt = 1, nMark = 1, nStringLength = GetStringLength(sArray); + int nIndexCounter = 0; + string sCharacter, sNewArray = sSeperator, sText; + // Check to make sure this is not a new array. + // If it is new then set it with 1 slot. + if(nStringLength < 2) + { + sArray = sSeperator + " " + sSeperator; + nStringLength = 3; + } + // Search the string. + while(nCnt <= nStringLength) + { + sCharacter = GetSubString(sArray, nCnt, 1); + // Look for the mark. + if(sCharacter == sSeperator) + { + // First check to see if this is the index we are replacing. + if(nIndex == nIndexCounter) sText = sField; + else + { + // Get the original text for this field. + sText = GetSubString(sArray, nMark, nCnt - nMark); + } + // Add the field to the new index. + sNewArray = sNewArray + sText + sSeperator; + // Now set the marker to the new starting point. + nMark = nCnt + 1; + // Increase the index counter as well. + nIndexCounter ++; + } + nCnt ++; + } + // if we are at the end of the array and still have not set the data + // then add blank data until we get to the correct index. + while(nIndexCounter <= nIndex) + { + // If they match add the field. + if(nIndexCounter == nIndex) sNewArray = sNewArray + sField + sSeperator; + // Otherwise just add a blank field. + else sNewArray = sNewArray + " " + sSeperator; + nIndexCounter ++; + } + // When done return the new array. + return sNewArray; +} +int ai_GetNumberOfProperties(object oItem) +{ + int nNumOfProperties = 0, nPropertyType, nPropertySubType; + // Get first property + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + // Ignore double type properties such as bane. + nPropertyType = GetItemPropertyType(ipProperty); + switch(nPropertyType) + { + // Skip these properties as they don't count. + case 8 : break; // EnhanceAlignmentGroup + case 44 : break; // Light + case 62 : break; // UseLimitationAlignmentGroup + case 63 : break; // UseLimitationClass + case 64 : break; // UseLimitationRacial + case 65 : break; // UseLimitationSpecificAlignment + case 66 : break; // UseLimitationTerrain + case 86 : break; // Quality + case 150 : break; // UseLimitationGender + case 15 : + { + nPropertySubType = GetItemPropertySubType(ipProperty); + if(nPropertySubType == IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY) break; + if(nPropertySubType == IP_CONST_CASTSPELL_UNIQUE_POWER) break; + } + default : nNumOfProperties ++; + } + // Get the next property + ipProperty = GetNextItemProperty(oItem); + } + // Reduce the number of properties by one on whips. + if(GetBaseItemType(oItem) == BASE_ITEM_WHIP) nNumOfProperties --; + return nNumOfProperties; +} +void ai_CreateCampaignDataTable() +{ + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, + "CREATE TABLE IF NOT EXISTS " + AI_TABLE + "(" + + "name TEXT, " + + "plugins TEXT, " + + "rules TEXT, " + + "PRIMARY KEY(name));"); + SqlStep(sql); + //if(AI_DEBUG) ai_Debug("0i_main", "343", We are creating a campaign table [" + + // AI_TABLE + "] in the database."); +} +void ai_CheckCampaignDataTableAndCreateTable() +{ + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' " + + "AND name =@table;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@table", AI_TABLE); + if(!SqlStep(sql)) ai_CreateCampaignDataTable(); +} +void ai_InitializeCampaignData() +{ + string sQuery = "INSERT INTO " + AI_TABLE + "(name, plugins, rules) " + + "VALUES(@name, @plugins, @rules);"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", "PEPS_DATA"); + SqlBindJson(sql, "@plugins", JsonArray()); + SqlBindJson(sql, "@rules", JsonObject()); + SqlStep(sql); +} +void ai_CheckCampaignDataAndInitialize() +{ + ai_CheckCampaignDataTableAndCreateTable(); + string sQuery = "SELECT name FROM " + AI_TABLE + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", "PEPS_DATA"); + if(!SqlStep(sql)) ai_InitializeCampaignData(); +} +void ai_CreateDMDataTable() +{ + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, + "CREATE TABLE IF NOT EXISTS " + AI_DM_TABLE + "(" + + "name TEXT, " + + "buttons TEXT, " + + "plugins TEXT, " + + "locations TEXT, " + + "options TEXT, " + + "saveslots TEXT, " + + "PRIMARY KEY(name));"); + SqlStep(sql); +} +void ai_CheckDMDataTableAndCreateTable() +{ + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' " + + "AND name =@table;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@table", AI_DM_TABLE); + if(!SqlStep(sql)) ai_CreateDMDataTable(); +} +void ai_InitializeDMData(string sName) +{ + string sQuery = "INSERT INTO " + AI_DM_TABLE + "(name, buttons, plugins, " + + "locations, options, saveslots) " + + "VALUES(@name, @buttons, @plugins, @locations, @options, @saveslots);"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindJson(sql, "@buttons", JsonArray()); + SqlBindJson(sql, "@plugins", JsonArray()); + SqlBindJson(sql, "@locations", JsonObject()); + SqlBindJson(sql, "@options", JsonObject()); + SqlBindJson(sql, "@saveslots", JsonObject()); + SqlStep(sql); +} +void ai_CheckDMDataAndInitialize(object oDM) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oDM))); + string sQuery = "SELECT name FROM " + AI_DM_TABLE + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", sName); + if(!SqlStep(sql)) + { + ai_CheckDMDataTableAndCreateTable(); + ai_InitializeDMData(sName); + } +} +void ai_SetCampaignDbJson(string sDataField, json jData, string sName = "PEPS_DATA", string sTable = AI_TABLE) +{ + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindJson(sql, "@data", jData); + SqlBindString(sql, "@name", sName); + SqlStep(sql); +} +json ai_GetCampaignDbJson(string sDataField, string sName = "PEPS_DATA", string sTable = AI_TABLE) +{ + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryCampaign(AI_CAMPAIGN_DATABASE, sQuery); + SqlBindString(sql, "@name", sName); + json jReturn; + if(SqlStep(sql)) return SqlGetJson (sql, 0); + else return JsonArray(); + return jReturn; +} +void ai_CreateAssociateDataTable(object oPlayer) +{ + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "CREATE TABLE IF NOT EXISTS " + AI_TABLE + "(" + + "name TEXT, " + + "modes TEXT, " + + "buttons TEXT, " + + "aidata TEXT, " + + "lootfilters TEXT, " + + "plugins TEXT, " + + "locations TEXT, " + + "PRIMARY KEY(name));"); + SqlStep(sql); + //ai_Debug("0i_main", "665", GetName(oPlayer) + " is creating a table [" + + // AI_TABLE + "] in the database."); +} +void ai_CheckDataTableAndCreateTable(object oPlayer) +{ + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' " + + "AND name =@table;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@table", AI_TABLE); + if(!SqlStep(sql)) ai_CreateAssociateDataTable (oPlayer); + //else SendMessageToPC(oPlayer, "0i_main, 675, " + GetName(oPlayer) + " has a database with table [" + AI_TABLE + "]."); +} +void ai_InitializeAssociateData(object oPlayer, string sAssociateType) +{ + string sQuery = "INSERT INTO " + AI_TABLE + "(name, modes, buttons, " + + "aidata, lootfilters, plugins, locations) " + + "VALUES(@name, @modes, @buttons, @aidata, @lootfilters, @plugins, @locations);"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociateType); + SqlBindJson(sql, "@modes", JsonArray()); + SqlBindJson(sql, "@buttons", JsonArray()); + SqlBindJson(sql, "@aidata", JsonArray()); + SqlBindJson(sql, "@lootfilters", JsonArray()); + SqlBindJson(sql, "@plugins", JsonArray()); + SqlBindJson(sql, "@locations", JsonObject()); + //SendMessageToPC(oPlayer, "0i_main, 690, " + GetName(oPlayer) + " is initializing associate " + + // sAssociateType + " data for table [" + AI_TABLE + "]."); + SqlStep(sql); +} +void ai_CheckAssociateDataAndInitialize(object oPlayer, string sAssociateType) +{ + ai_CheckDataTableAndCreateTable(oPlayer); + string sQuery = "SELECT name FROM " + AI_TABLE + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject (oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociateType); + if(!SqlStep(sql)) ai_InitializeAssociateData(oPlayer, sAssociateType); + //else SendMessageToPC(oPlayer, "0i_main, 701, sAssociateType: " + sAssociateType + + // " returns: " + SqlGetString(sql, 0)); +} +string ai_GetAssociateType(object oPlayer, object oAssociate) +{ + if(GetIsPC(oAssociate)) return "pc"; + int nIndex = 1; + string sAITag = GetLocalString(oAssociate, AI_TAG); + object oCreature; + if(sAITag == "") + { + int nAssociateType = GetAssociateType(oAssociate); + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + sAITag = GetTag(oAssociate); + oCreature = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPlayer, nIndex); + // Check for duplicate tags and change. + while(nIndex <= AI_MAX_HENCHMAN && oCreature != OBJECT_INVALID) + { + if(oAssociate != oCreature && sAITag == GetTag(oCreature)) + { + sAITag += IntToString(Random(1000)); + break; + } + oCreature = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPlayer, ++nIndex); + } + } + else if(nAssociateType == ASSOCIATE_TYPE_SUMMONED) + { + int nCounter; + sAITag = GetTag(oAssociate); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPlayer, nIndex); + while(nIndex <= 10 && oCreature != OBJECT_INVALID) + { + if(oAssociate != oCreature && sAITag == GetTag(oCreature)) + { + nCounter++; + sAITag += IntToString(nCounter); + nIndex = 0; + } + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPlayer, ++nIndex); + } + } + else + { + if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) sAITag = "companion"; + else if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) sAITag = "familiar"; + else if(nAssociateType == ASSOCIATE_TYPE_DOMINATED) sAITag = "dominated"; + } + SetLocalString(oAssociate, AI_TAG, sAITag); + } + return sAITag; +} +void ai_SetAssociateDbInt(object oPlayer, string sAssociatetype, string sDataField, int nData, string sTable = AI_TABLE) +{ + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + SqlBindInt(sql, "@data", nData); + //ai_Debug("0i_main", "368", "SETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField + " nData: " + IntToString(nData)); + SqlStep(sql); +} +int ai_GetAssociateDbInt(object oPlayer, string sAssociatetype, string sDataField, string sTable = AI_TABLE) +{ + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + //ai_Debug("0i_main", "377", "GETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField); + if(SqlStep(sql)) return SqlGetInt(sql, 0); + else return 0; +} +void ai_SetAssociateDbFloat(object oPlayer, string sAssociatetype, string sDataField, float fData, string sTable = AI_TABLE) +{ + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + SqlBindFloat(sql, "@data", fData); + //ai_Debug("0i_main", "368", "SETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField + " fData: " + FloatToString(fData, 0, 0)); + SqlStep(sql); +} +float ai_GetAssociateDbFloat(object oPlayer, string sAssociatetype, string sDataField, string sTable = AI_TABLE) +{ + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sAssociatetype); + //ai_Debug("0i_main", "377", "GETTING DATA: " + GetName(oPlayer) + " sAssociatetype: " + + // sAssociatetype + " sDataField: " + sDataField); + if(SqlStep(sql)) return SqlGetFloat(sql, 0); + else return 0.0; +} +void ai_SetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, json jData, string sTable = AI_TABLE) +{ + //SendMessageToPC(oPlayer, "0i_main, 777, Set DbJson - sAssociateType: " + sAssociateType + " sDataField: " + sDataField + " jData: " + JsonDump(jData)); + string sQuery = "UPDATE " + sTable + " SET " + sDataField + + " = @data WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson(sql, "@data", jData); + SqlBindString(sql, "@name", sAssociateType); + SqlStep(sql); +} +json ai_GetAssociateDbJson(object oPlayer, string sAssociateType, string sDataField, string sTable = AI_TABLE) +{ + //SendMessageToPC(oPlayer, "0i_main, 787, Get DbJson - sAssociateType: " + sAssociateType + " sDataField: " + sDataField); + string sQuery = "SELECT " + sDataField + " FROM " + sTable + " WHERE name = @name;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString (sql, "@name", sAssociateType); + if(SqlStep(sql)) + { + json jReturn = SqlGetJson(sql, 0); + //SendMessageToPC(oPlayer, "0i_main, 646 jReturn: " + JsonDump(jReturn, 1)); + if(JsonGetType(jReturn) == JSON_TYPE_NULL) return JsonArray(); + return jReturn; + } + else return JsonNull(); +} +void aiSaveAssociateModesToDb(object oPlayer, object oAssociate) +{ + string sAssociateType = ai_GetAssociateType(oPlayer, oAssociate); + json jModes = ai_GetAssociateDbJson(oPlayer, sAssociateType, "modes"); + int nAIMode = GetLocalInt(oAssociate, sAIModeVarname); + jModes = JsonArraySet(jModes, 0, JsonInt(nAIMode)); + int nMagicMode = GetLocalInt(oAssociate, sMagicModeVarname); + jModes = JsonArraySet(jModes, 1, JsonInt(nMagicMode)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "modes", jModes); +} +void ai_SetupModes(object oPlayer, object oAssociate, string sAssociateType) +{ + json jModes = JsonArray(); + jModes = JsonArrayInsert(jModes, JsonInt(0)); // AI Modes. + // Set magic modes to use Normal magic, Bit 256. + jModes = JsonArrayInsert(jModes, JsonInt(256)); // Magic Modes. + SetLocalInt(oAssociate, sMagicModeVarname, 256); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "modes", jModes, AI_TABLE); +} +void ai_SetupButtons(object oPlayer, object oAssociate, string sAssociateType) +{ + json jButtons = JsonArray(); + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // Command buttons. + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // AI buttons. + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // AI buttons 2. + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons, AI_TABLE); +} +void ai_SetupAIData(object oPlayer, object oAssociate, string sAssociateType) +{ + json jAIData = JsonArray(); + jAIData = JsonArrayInsert(jAIData, JsonInt(0)); // 0 - Difficulty adjustment. + jAIData = JsonArrayInsert(jAIData, JsonInt(70)); // 1 - Heal out of combat. + SetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT, 70); + jAIData = JsonArrayInsert(jAIData, JsonInt(50)); // 2 - Heal in combat. + SetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT, 50); + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 3 - Loot check range. + SetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 4 - Lock check range. + SetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 5 - Trap check range. + SetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE, 20.0); + jAIData = JsonArrayInsert(jAIData, JsonFloat(3.0)); // 6 - Associate Distance. + SetLocalFloat(oAssociate, AI_FOLLOW_RANGE, 3.0); + // This can be replaced as it is not used in the database. + // We keep it for now as we don't want to move other data. + jAIData = JsonArrayInsert(jAIData, JsonInt(11)); // 7 - Associate Perception DistanceDistance. + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, 11); + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, 25.0); + jAIData = JsonArrayInsert(jAIData, JsonString("")); // 8 - Associate Combat Tactics. + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); // 9 - Open Doors check range. + SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, 20.0); + json jSpells = JsonArray(); + jAIData = JsonArrayInsert(jAIData, jSpells); // 10 - Castable spells. + jAIData = JsonArrayInsert(jAIData, JsonFloat(0.1)); // 11 - Delay for casting buff spells. + SetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING, 0.1); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData, AI_TABLE); +} +void ai_SetupLootFilters(object oPlayer, object oAssociate, string sAssociateType) +{ + json jLootFilters = JsonArray(); + // Maximum weight to pickup an item. + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(200)); + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, 200); + // Bitwise int for checkbox pickup filter. + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(AI_LOOT_ALL_ON)); + SetLocalInt(oAssociate, sLootFilterVarname, AI_LOOT_ALL_ON); + // Minimum gold value to pickup. + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(0)); + } + ai_SetAssociateDbJson(oPlayer, sAssociateType, "lootfilters", jLootFilters, AI_TABLE); +} +void ai_SetupLocations(object oPlayer, object oAssociate, string sAssociateType) +{ + json jLocations = JsonObject(); + json jNUI = JsonObject(); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(-1.0)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(-1.0)); + if(ai_GetIsCharacter(oAssociate)) + { + jLocations = JsonObjectSet(jLocations, AI_MAIN_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, AI_PLUGIN_NUI, jNUI); + } + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_COMMAND_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_LOOTFILTER_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_COPY_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_QUICK_WIDGET_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_SPELL_MEMORIZE_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_SPELL_KNOWN_NUI, jNUI); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(0.0)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(0.0)); + jLocations = JsonObjectSet(jLocations, sAssociateType + AI_WIDGET_NUI, jNUI); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "locations", jLocations, AI_TABLE); +} +void ai_SetupAssociateData(object oPlayer, object oAssociate, string sAssociateType) +{ + //ai_Debug("0i_main", "744", GetName(oAssociate) + " is initializing associate data."); + ai_CheckAssociateDataAndInitialize(oPlayer, sAssociateType); + // Default behavior for associates at start. + ai_SetupModes(oPlayer, oAssociate, sAssociateType); + ai_SetupButtons(oPlayer, oAssociate, sAssociateType); + ai_SetupAIData(oPlayer, oAssociate, sAssociateType); + ai_SetupLootFilters(oPlayer, oAssociate, sAssociateType); + // ********** Plugins ************ + // These are pulled straight from the database. + ai_SetupLocations(oPlayer, oAssociate, sAssociateType); +} +void ai_RestoreDatabase(object oPlayer, object oAssociate, string sAssociateType) +{ + // ********** Modes ********** + json jModes = JsonArray(); + // AI Modes (0). + int nValue = GetLocalInt(oAssociate, sAIModeVarname); + jModes = JsonArrayInsert(jModes, JsonInt(nValue)); + // Magic Modes (1). + nValue = GetLocalInt(oAssociate, sMagicModeVarname); + jModes = JsonArrayInsert(jModes, JsonInt(nValue)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "modes", jModes, AI_TABLE); + // ********** Buttons ********** + json jButtons = JsonArray(); + // Command buttons (0). + nValue = GetLocalInt(oAssociate, sWidgetButtonsVarname); + jButtons = JsonArrayInsert(jButtons, JsonInt(nValue)); + // AI buttons Group 1 (1). + nValue = GetLocalInt(oAssociate, sAIButtonsVarname); + jButtons = JsonArrayInsert(jButtons, JsonInt(nValue)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons, AI_TABLE); + // ********** AI Data ********** + json jAIData = JsonArray(); + nValue = GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + nValue = GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + nValue = GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + float fValue = GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + fValue = GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + fValue = GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + fValue = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + nValue = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION); + jAIData = JsonArrayInsert(jAIData, JsonInt(nValue)); + float fRange = 20.0; + if(nValue == 8) fRange = 10.0; + else if(nValue == 10) fRange = 35.0; + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, fRange); + string sValue = GetLocalString(oAssociate, AI_DEFAULT_SCRIPT); + jAIData = JsonArrayInsert(jAIData, JsonString(sValue)); + fValue = GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + json jValue = GetLocalJson(oPlayer, AI_SPELLS_WIDGET); + if(JsonGetType(jValue) == JSON_TYPE_NULL) + { + jValue = JsonArray(); + jValue = JsonArrayInsert(jValue, JsonInt(1)); // 0 - Class selected. + jValue = JsonArrayInsert(jValue, JsonInt(10)); // 1 - Level selected. + jValue = JsonArrayInsert(jValue, JsonArray()); // Spell list for widget. + SetLocalJson(oPlayer, AI_SPELLS_WIDGET, jValue); + } + jAIData = JsonArrayInsert(jAIData, jValue); + fValue = GetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING); + jAIData = JsonArrayInsert(jAIData, JsonFloat(fValue)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + // ********** LootFilters ********** + json jLootFilters = JsonArray(); + nValue = GetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT); + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(nValue)); + nValue = GetLocalInt(oAssociate, sLootFilterVarname); + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(nValue)); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + nValue = GetLocalInt(oAssociate, AI_MIN_GOLD_ + IntToString(nIndex)); + jLootFilters = JsonArrayInsert(jLootFilters, JsonInt(nValue)); + } + ai_SetAssociateDbJson(oPlayer, sAssociateType, "lootfilters", jLootFilters, AI_TABLE); + // ********** Plugins ************ + // These are pulled straight from the database. + // ********** Locations ********** + // These are only in the database. +} +void ai_CheckAssociateData(object oPlayer, object oAssociate, string sAssociateType, int bLoad = FALSE) +{ + //ai_Debug("0i_main", "810", "Checking data for oAssociate: " + GetName(oAssociate)); + // Do quick check to see if they have a variable saved if so then exit. + if(GetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE) != 0.0) + { + if(!bLoad) return; + // If the database gets destroyed lets drop an error and restore values + // from the locals. + ai_CheckAssociateDataAndInitialize(oPlayer, sAssociateType); + ai_RestoreDatabase(oPlayer, oAssociate, sAssociateType); + return; + } + ai_CheckAssociateDataAndInitialize(oPlayer, sAssociateType); + // ********** Modes ********** + json jModes = ai_GetAssociateDbJson(oPlayer, sAssociateType, "modes"); + if(JsonGetType(JsonArrayGet(jModes, 0)) == JSON_TYPE_NULL) + { + ai_SetupModes(oPlayer, oAssociate, sAssociateType); + } + else + { + SetLocalInt(oAssociate, sAIModeVarname, JsonGetInt(JsonArrayGet(jModes, 0))); + SetLocalInt(oAssociate, sMagicModeVarname, JsonGetInt(JsonArrayGet(jModes, 1))); + } + // ********** Buttons ********** + json jButtons = ai_GetAssociateDbJson(oPlayer, sAssociateType, "buttons"); + if(JsonGetType(JsonArrayGet(jButtons, 0)) == JSON_TYPE_NULL) + { + ai_SetupButtons(oPlayer, oAssociate, sAssociateType); + } + else + { + // ********** Associate Command Buttons ********** + int nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + if(nWidgetButtons) SetLocalInt(oAssociate, sWidgetButtonsVarname, nWidgetButtons); + // ********** Associate AI Buttons ********** + int nAIButtons = JsonGetInt(JsonArrayGet(jButtons, 1)); + if(nAIButtons) SetLocalInt(oAssociate, sAIButtonsVarname, nAIButtons); + } + // ********** AI Data ********** + json jAIData = ai_GetAssociateDbJson(oPlayer, sAssociateType, "aidata"); + if(JsonGetType(JsonArrayGet(jAIData, 0)) == JSON_TYPE_NULL) + { + ai_SetupAIData(oPlayer, oAssociate, sAssociateType); + } + else + { + SetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT, JsonGetInt(JsonArrayGet(jAIData, 0))); + SetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT, JsonGetInt(JsonArrayGet(jAIData, 1))); + SetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT, JsonGetInt(JsonArrayGet(jAIData, 2))); + SetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 3))); + SetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 4))); + SetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 5))); + SetLocalFloat(oAssociate, AI_FOLLOW_RANGE, JsonGetFloat(JsonArrayGet(jAIData, 6))); + int nPercRange = JsonGetInt(JsonArrayGet(jAIData, 7)); + if(nPercRange < 8 || nPercRange > 11) nPercRange = 11; + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, nPercRange); + float fRange = 20.0; + if(nPercRange == 8) fRange = 10.0; + else if(nPercRange == 10) fRange = 35.0; + SetLocalFloat(oAssociate, AI_ASSOC_PERCEPTION_DISTANCE, fRange); + string sScript = JsonGetString(JsonArrayGet(jAIData, 8)); + if(sScript != "") SetLocalString(oAssociate, AI_DEFAULT_SCRIPT, sScript); + json jDoorRange = JsonArrayGet(jAIData, 9); + if(JsonGetType(jDoorRange) == JSON_TYPE_NULL) + { + jAIData = JsonArrayInsert(jAIData, JsonFloat(20.0)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, 20.0); + } + else SetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE, JsonGetFloat(jDoorRange)); + json jSpellsWidget = JsonArrayGet(jAIData, 10); + if(JsonGetType(jSpellsWidget) == JSON_TYPE_NULL) + { + jSpellsWidget = JsonArray(); + jSpellsWidget = JsonArrayInsert(jSpellsWidget, JsonInt(0)); // 0 - Class selected. + jSpellsWidget = JsonArrayInsert(jSpellsWidget, JsonInt(0)); // 1 - Level selected. + jAIData = JsonArrayInsert(jAIData, jSpellsWidget); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + SetLocalJson(oPlayer, AI_SPELLS_WIDGET, jSpellsWidget); + } + json jSpellDelay = JsonArrayGet(jAIData, 11); + if(JsonGetType(jSpellDelay) == JSON_TYPE_NULL) + { + jAIData = JsonArrayInsert(jAIData, JsonFloat(0.1)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "aidata", jAIData); + SetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING, 0.1); + } + else SetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING, JsonGetFloat(jSpellDelay)); + } + // ********** LootFilters ********** + json jLootFilters = ai_GetAssociateDbJson(oPlayer, sAssociateType, "lootfilters"); + if(JsonGetType(JsonArrayGet(jLootFilters, 0)) == JSON_TYPE_NULL) + { + ai_SetupLootFilters(oPlayer, oAssociate, sAssociateType); + } + else + { + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, JsonGetInt(JsonArrayGet(jLootFilters, 0))); + SetLocalInt(oAssociate, sLootFilterVarname, JsonGetInt(JsonArrayGet(jLootFilters, 1))); + int nIndex; + for(nIndex = 2; nIndex < 20; nIndex++) + { + SetLocalInt(oAssociate, AI_MIN_GOLD_ + IntToString(nIndex), JsonGetInt(JsonArrayGet(jLootFilters, nIndex))); + } + } + // ********** Plugins ************ + // These are pulled straight from the database. + // ********** Locations ********** + json jLocations = ai_GetAssociateDbJson(oPlayer, sAssociateType, "locations"); + if(JsonGetType(JsonObjectGet(jLocations, sAssociateType + AI_WIDGET_NUI)) == JSON_TYPE_NULL) + { + ai_SetupLocations(oPlayer, oAssociate, sAssociateType); + } + // They are always pulled from the database, so no copies to local variables. +} +void ai_SetupDMData(object oPlayer, string sName) +{ + //ai_Debug("0i_main", "870", GetName(oPlayer) + " is initializing DM data."); + ai_CheckDMDataAndInitialize(oPlayer); + // ********** Buttons ********** + json jButtons = JsonArray(); + jButtons = JsonArrayInsert(jButtons, JsonInt(0)); // DM Widget Buttons. + ai_SetCampaignDbJson("buttons", jButtons, sName, AI_DM_TABLE); + // ********** Plugins ************ + // These are pulled straight from the database. + json jPlugins = JsonArray(); + ai_SetCampaignDbJson("plugins", jPlugins, sName, AI_DM_TABLE); + // ********** Locations ********** + json jLocations = JsonObject(); + json jNUI = JsonObject(); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(-1.0)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(-1.0)); + jLocations = JsonObjectSet(jLocations, AI_MAIN_NUI, jNUI); + jLocations = JsonObjectSet(jLocations, AI_PLUGIN_NUI, jNUI); + jNUI = JsonObjectSet(jLocations, "x", JsonFloat(1.0)); + jNUI = JsonObjectSet(jLocations, "y", JsonFloat(1.0)); + jLocations = JsonObjectSet(jLocations, AI_WIDGET_NUI, jNUI); + ai_SetCampaignDbJson("locations", jLocations, sName, AI_DM_TABLE); + // ********** Options ********** + json jOptions = JsonArray(); + ai_SetCampaignDbJson("options", jOptions, sName, AI_DM_TABLE); + // ********** SaveSlots ********** + json jSaveSlots = JsonObject(); + ai_SetCampaignDbJson("saveslots", jSaveSlots, sName, AI_DM_TABLE); +} +void ai_CheckDMData(object oPlayer) +{ + //ai_Debug("0i_main", "898", "Checking data for DM: " + GetName(oPlayer)); + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer))); + // ********** Buttons ********** + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + // if there is no saved AImodes then set the defaults. + if(JsonGetType(JsonArrayGet(jButtons, 0)) == JSON_TYPE_NULL) + { + ai_SetupDMData(oPlayer, sName); + } + else + { + //ai_Debug("0i_main", "909", GetName(oPlayer) + " is loading DM data from the database."); + // Get data from the database and place on to the associates and player. + // ********** Buttons ********** + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + if(JsonGetType(JsonArrayGet(jButtons, 0)) == JSON_TYPE_NULL) + { + ai_SetupDMData(oPlayer, sName); + } + SetLocalInt(oPlayer, sDMWidgetButtonVarname, JsonGetInt(JsonArrayGet(jButtons, 0))); + // ********** Associate Command Buttons ********** + int nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + SetLocalInt(oPlayer, sDMWidgetButtonVarname, nWidgetButtons); + // ********** Plugins ************ + // These are pulled straight from the database. + // ********** Locations ********** + // These are pulled straight from the database. + // ********** Options ********** + // ********** SaveSltos ********** + } +} +json ai_Plugin_Add(object oPC, json jPlugins, string sPluginScript) +{ + if(ResManGetAliasFor(sPluginScript, RESTYPE_NCS) == "") + { + ai_SendMessages("The script (" + sPluginScript + ") was not found by ResMan!", AI_COLOR_RED, oPC); + return jPlugins; + } + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + if(JsonGetString(JsonArrayGet(jPlugin, 0)) == sPluginScript) + { + ai_SendMessages("Plugin (" + sPluginScript + ") is already installed!", AI_COLOR_RED, oPC); + return jPlugins; + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + SetLocalInt(oPC, AI_ADD_PLUGIN, TRUE); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugins); + ExecuteScript(sPluginScript, oPC); + int nPluginSet = GetLocalInt(oPC, AI_PLUGIN_SET); + // Setting AI_PLUGIN_SET to -1 means the plugin failed to load. + if(nPluginSet == -1) return jPlugins; + if(nPluginSet) + { + jPlugin = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + } + else + { + jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString(sPluginScript)); + jPlugin = JsonArrayInsert(jPlugin, JsonBool(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString(sPluginScript)); + int nCount = JsonGetLength(jPlugins) + 1; + string sIcon = "is_summon" + IntToString(nCount); + jPlugin = JsonArrayInsert(jPlugin, JsonString(sIcon)); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + } + DeleteLocalInt(oPC, AI_ADD_PLUGIN); + DeleteLocalInt(oPC, AI_PLUGIN_SET); + DeleteLocalJson(oPC, AI_JSON_PLUGINS); + return jPlugins; +} +// Temporary function to addapt old plugin json to new plugin json. +json ai_CheckOldPluginJson(object oPC) +{ + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + // If the first array is not an array then this is the old version. + if(JsonGetType(jPlugin) != JSON_TYPE_ARRAY) + { + string sScript; + json jNewPlugins = JsonArray(); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sScript = JsonGetString(jPlugin); + if(sScript != "") jNewPlugins = ai_Plugin_Add(oPC, jNewPlugins, sScript); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jNewPlugins); + return jNewPlugins; + } + return jPlugins; +} +json ai_UpdatePluginsForPC(object oPC) +{ + // Check if the server is running or single player. + if(!ai_GetIsServer()) return ai_CheckOldPluginJson(oPC); + int nJsonType, nCounter, nIndex, bWidget, bAllow; + string sScript, sName, sIcon; + json jServerPlugins = ai_GetCampaignDbJson("plugins"); + json jPCPlugin, jPCPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + json jNewPCPlugins = JsonArray(); + json jServerPlugin = JsonArrayGet(jServerPlugins, nIndex); + while(JsonGetType(jServerPlugin) != JSON_TYPE_NULL) + { + bAllow = JsonGetInt(JsonArrayGet(jServerPlugin, 1)); + if(bAllow) + { + sName = JsonGetString(JsonArrayGet(jServerPlugin, 0)); + nCounter = 0; + jPCPlugin = JsonArrayGet(jPCPlugins, nCounter); + nJsonType = JsonGetType(jPCPlugin); + while(nJsonType != JSON_TYPE_NULL) + { + if(sName == JsonGetString(JsonArrayGet(jPCPlugin, 0))) + { + // Boolean - Add to widget. + bWidget = JsonGetInt(JsonArrayGet(jPCPlugin, 1)); + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(bWidget)); + break; + } + jPCPlugin = JsonArrayGet(jPCPlugins, ++nCounter); + nJsonType = JsonGetType(jPCPlugin); + } + if(nJsonType == JSON_TYPE_NULL) + { + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(FALSE)); + } + jNewPCPlugins = JsonArrayInsert(jNewPCPlugins, jServerPlugin); + } + jServerPlugin = JsonArrayGet(jServerPlugins, ++nIndex); + } + ai_SetAssociateDbJson(oPC, "pc", "plugins", jNewPCPlugins); + return jNewPCPlugins; +} +json ai_UpdatePluginsForDM(object oPC) +{ + int nJsonType, nCounter, nIndex, bWidget, bAllow; + string sName, sIcon, sDbName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPC))); + json jServerPlugins = ai_GetCampaignDbJson("plugins"); + ai_CheckDMDataAndInitialize(oPC); + json jDMPlugin, jDMPlugins = ai_GetCampaignDbJson("plugins", sDbName, AI_DM_TABLE); + json jNewDMPlugins = JsonArray(); + json jServerPlugin = JsonArrayGet(jServerPlugins, nIndex); + while(JsonGetType(jServerPlugin) != JSON_TYPE_NULL) + { + sName = JsonGetString(JsonArrayGet(jServerPlugin, 0)); + nCounter = 0; + jDMPlugin = JsonArrayGet(jDMPlugins, nCounter); + nJsonType = JsonGetType(jDMPlugin); + while(nJsonType != JSON_TYPE_NULL) + { + if(sName == JsonGetString(JsonArrayGet(jDMPlugin, 0))) + { + // Boolean - Add to widget. + bWidget = JsonGetInt(JsonArrayGet(jDMPlugin, 1)); + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(bWidget)); + break; + } + jDMPlugin = JsonArrayGet(jDMPlugins, ++nCounter); + nJsonType = JsonGetType(jDMPlugin); + } + if(nJsonType == JSON_TYPE_NULL) + { + jServerPlugin = JsonArraySet(jServerPlugin, 1, JsonBool(FALSE)); + } + jNewDMPlugins = JsonArrayInsert(jNewDMPlugins, jServerPlugin); + jServerPlugin = JsonArrayGet(jServerPlugins, ++nIndex); + } + ai_SetCampaignDbJson("plugins", jNewDMPlugins, sDbName, AI_DM_TABLE); + return jNewDMPlugins; +} +void ai_StartupPlugins(object oPC) +{ + SetLocalInt(oPC, AI_STARTING_UP, TRUE); + int bUpdatePlugins; + string sScript; + json jPlugins; + if(ai_GetIsDungeonMaster(oPC)) jPlugins = ai_UpdatePluginsForDM(oPC); + else jPlugins = ai_UpdatePluginsForPC(oPC); + // We delete this so each mod can be added that legally loads. + DeleteLocalJson(GetModule(), AI_MONSTER_MOD_JSON); + int nIndex; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + ExecuteScript(sScript, oPC); + // -1 means if failed to load so lets make sure to remove it from the list. + if(GetLocalInt(oPC, AI_PLUGIN_SET) == -1) + { + jPlugins = JsonArrayDel(jPlugins, nIndex); + bUpdatePlugins = TRUE; + nIndex--; + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + if(bUpdatePlugins) ai_SetAssociateDbJson(oPC, "pc", "plugins", jPlugins); + DeleteLocalInt(oPC, AI_STARTING_UP); +} diff --git a/_module/nss/0i_menus.nss b/_module/nss/0i_menus.nss new file mode 100644 index 0000000..472d0dd --- /dev/null +++ b/_module/nss/0i_menus.nss @@ -0,0 +1,5067 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_menus +//////////////////////////////////////////////////////////////////////////////// + Include script for handling NUI menus. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_associates" +// Maximum number of Plugins allowed on the players widget. +const int WIDGET_MAX_PLUGINS = 5; + +// Set one of the BTN_* "Widget" bitwise constants on oPlayer to bValid. +void ai_SetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE); +// Return if nButton is set on oPlayer. Uses the BTN_* "Widget" bitwise constants. +int ai_GetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType); +// Set one of the BTN_AI_* bitwise constants on oPlayer to bValid. +void ai_SetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE); +// Return if nButton is set on oPlayer. Uses the BTN_AI_* "Widget" bitwise constants. +int ai_GetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType); +// Set one of the BTN2_AI_* bitwise constants on oPlayer to bValid. +void ai_SetAIButton2(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE); +// Return if nButton is set on oPlayer. Uses the BTN2_AI_* "Widget" bitwise constants. +int ai_GetAIButton2(object oPlayer, int nButton, object oAssociate, string sAssociateType); +// Creates the json array required to build a companion drop down box for +// Animal Companions or Familiars. +// sCompanion2da should be either "hen_companion" or "hen_familiar". +json ai_CreateCompanionJson(object oPC, string sCompanion2da); +// Return any Metamagic or Domain attributes to place on a spell icon image. +string ai_GetSpellIconAttributes(object oCaster, int nMetaMagic, int nDomain); +// Populates the Quick widget list menu. +void ai_PopulateWidgetList(object oPC, object oAssociate, int nToken, json jWidget); +// Creates the AI options menu. +void ai_CreateAIMainNUI(object oPC); +// Creates the AI options menu. +void ai_CreateAssociateCommandNUI(object oPC, object oAssociate); +// Creates an associates AI NUI. +void ai_CreateAssociateAINUI(object oPC, object oAssociate); +// Creates a widget for the player or associate. +void ai_CreateWidgetNUI(object oPC, object oAssociate); +// Creates the Loot filter menu. +void ai_CreateLootFilterNUI(object oPC, object oAssociate); +// Creates the Plugin Manager menu. +void ai_CreatePluginNUI(object oPC); +// Creates the Spell menu that selects the spells to go on the Spell Widget. +void ai_CreateQuickWidgetSelectionNUI(object oPC, object oAssociate); +// Creates the Spell menu that lets the player to select the associates castable spells. +void ai_CreateSpellMemorizationNUI(object oPC, object oAssociate); +// Creates the spell description menu so a player can see what a spell does. +// If nSpell > 0 then use that value for the spells description. +void ai_CreateDescriptionNUI(object oPC, json jSpell, int nSpell = 0); + +string ai_GetRandomTip() +{ + int nRoll; + if(ai_GetIsServer()) nRoll = Random(26); + else nRoll = Random(46); + return Get2DAString("ai_messages", "Text", nRoll); +} +void ai_SetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE) +{ + int nWidgetButtons = GetLocalInt(oAssociate, sWidgetButtonsVarname); + json jButtons = ai_GetAssociateDbJson(oPlayer, sAssociateType, "buttons"); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(oAssociate, sWidgetButtonsVarname, nWidgetButtons); + jButtons = JsonArraySet(jButtons, 0, JsonInt(nWidgetButtons)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons); +} +int ai_GetWidgetButton(object oPlayer, int nButton, object oAssociate, string sAssociateType) +{ + // This is the DM access switch that uses the same bitwise as the players + // to control what widget buttons they can use. + if(ai_GetDMWAccessButton(nButton)) return FALSE; + int nWidgetButtons = GetLocalInt(oAssociate, sWidgetButtonsVarname); + return nWidgetButtons & nButton; +} +void ai_SetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType, int bOn = TRUE) +{ + int nAIButtons = GetLocalInt(oAssociate, sAIButtonsVarname); + json jButtons = ai_GetAssociateDbJson(oPlayer, sAssociateType, "buttons"); + if(bOn) nAIButtons = nAIButtons | nButton; + else nAIButtons = nAIButtons & ~nButton; + SetLocalInt(oAssociate, sAIButtonsVarname, nAIButtons); + jButtons = JsonArraySet(jButtons, 1, JsonInt(nAIButtons)); + ai_SetAssociateDbJson(oPlayer, sAssociateType, "buttons", jButtons); +} +int ai_GetAIButton(object oPlayer, int nButton, object oAssociate, string sAssociateType) +{ + // This is the DM access switch that uses the same bitwise as the players + // to control what AI widget buttons they can use. + if(ai_GetDMAIAccessButton(nButton)) return FALSE; + int nAIButtons = GetLocalInt(oAssociate, sAIButtonsVarname); + return nAIButtons & nButton; +} +json ai_CreateAIScriptJson(object oPC) +{ + json jScript = JsonArrayInsert(JsonArray(), NuiComboEntry("", 0)); + int nNth = 1; + string sScript = ResManFindPrefix("ai_a_", RESTYPE_NCS, nNth); + while(sScript != "") + { + jScript = JsonArrayInsert(jScript, NuiComboEntry(sScript, nNth)); + sScript = ResManFindPrefix("ai_a_", RESTYPE_NCS, ++nNth); + } + return jScript; +} +json ai_CreateCompanionJson(object oPC, string sCompanion2da) +{ + int nCnt, nMaxRowCount = Get2DARowCount(sCompanion2da); + string sName; + json jCompanion = JsonArray(); + while(nCnt < nMaxRowCount) + { + sName = GetStringByStrRef(StringToInt(Get2DAString(sCompanion2da, "STRREF", nCnt))); + jCompanion = JsonArrayInsert(jCompanion, NuiComboEntry(sName, nCnt++)); + } + return JsonArrayInsert(jCompanion, NuiComboEntry("Random", nCnt)); +} +string ai_GetSpellIconAttributes(object oCaster, int nMetaMagic, int nDomain) +{ + string sAttributeText; + if(nMetaMagic != METAMAGIC_ANY && nMetaMagic != METAMAGIC_NONE) + { + if(nMetaMagic == METAMAGIC_EXTEND) sAttributeText = "X"; + if(nMetaMagic == METAMAGIC_EMPOWER) sAttributeText = "P"; + if(nMetaMagic == METAMAGIC_MAXIMIZE) sAttributeText = "M"; + if(nMetaMagic == METAMAGIC_QUICKEN) sAttributeText = "Q"; + if(nMetaMagic == METAMAGIC_SILENT) sAttributeText = "I"; + if(nMetaMagic == METAMAGIC_STILL) sAttributeText = "T"; + } + else sAttributeText = ""; + if(nDomain > 0) sAttributeText += "D"; + return sAttributeText; +} +void ai_PopulateWidgetList(object oPC, object oAssociate, int nToken, json jWidget) +{ + int nSAIndex, nSpell, nClass, nFeat, nBaseItemType, nIprpSubType, nUses; + int nLevel, nMetaMagic, nDomain, nIndex; + string sIndex, sBaseName, sName, sSpellIcon, sText, sClass, sMetaMagicText; + object oItem; + json jSpell; + while(nIndex < 10) + { + jSpell = JsonArrayGet(jWidget, nIndex); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nClass == -1) // This is an Item. + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = "Unlimited"; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + " / " + sText + ")")); + } + } + else if(nFeat) // This is a feat. + { + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else // This is a spell. + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + if(nClass == 255) + { + nSAIndex = JsonGetInt(JsonArrayGet(jSpell, 6)); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (Special Ability / " + IntToString(nLevel) + ")")); + } + else + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + } + else + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } + if(nIndex < 10) return; + // Row 6 Quick widget List2 + while(nIndex < 20) + { + jSpell = JsonArrayGet(jWidget, nIndex); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nClass == -1) // This is an Item. + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = "Unlimited"; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + " / " + sText + ")")); + } + } + else if(nFeat) // This is a feat. + { + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else // This is a spell. + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + if(nClass == 255) + { + nSAIndex = JsonGetInt(JsonArrayGet(jSpell, 6)); + if(GetSpellAbilityReady(oAssociate, nSAIndex)) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (Special Ability / " + IntToString(nLevel) + ")")); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + } + else + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } +} +void ai_CreateAIMainNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int nMonsterAI = (ResManGetAliasFor("ai_default", RESTYPE_NCS) != ""); + int nAssociateAI = (ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != ""); + string sText = " [Single player]"; + if(ai_GetIsServer()) sText = " [Server]"; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, PHILOS_VERSION + sText, "lbl_version ", 510.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + if(!AI_SERVER) + { + // Row 2 ******************************************************************* 500 / 101 + jRow = CreateLabel(JsonArray(), "", "lbl_ai_info", 510.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + // Row 3 ******************************************************************* 500 / 129 + jRow = CreateButton(JsonArray(), "Plugin Manager", "btn_plugin_manager", 175.0f, 20.0f, -1.0, "btn_plugin_manager_tooltip"); + jRow = CreateButtonSelect(jRow, "Action Ghost Mode", "btn_action_ghost", 175.0f, 20.0f, "btn_action_ghost_tooltip"); + jRow = CreateButtonSelect(jRow, "Effect Icons", "btn_effect_icon", 175.0f, 20.0f, "btn_effect_icon_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "MODULE RULES", "lbl_ai_rules", 200.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 157.0; + // Row 5 ******************************************************************* 500 / --- (28) + // Make the AI options a Group. + json jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_max_henchman", 2, FALSE, 30.0f, 20.0f, "txt_max_henchman_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Max number of henchmen that is allowed in your party.", "lbl_max_hench", 416.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_max_henchman_tooltip"); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_xp_scale", 3, FALSE, 40.0f, 20.0f, "txt_xp_scale_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Modules experience scale.", "lbl_xp_scale", 175.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_xp_scale_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " scale to party.", "chbx_party_scale", 150.0, 20.0, "chbx_party_scale_tooltip"); + jGroupRow = CreateButton(jGroupRow, "Default", "btn_default_xp", 70.0f, 20.0f, -1.0, "btn_default_xp_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 78.0; + if(nMonsterAI || nAssociateAI) + { + jGroupRow = CreateCheckBox(JsonArray(), " Creatures will use advanced combat movement.", "chbx_advanced_movement", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Use item level restrictions for creatures [Default is off].", "chbx_ilr", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use the skill Use Magic Device.", "chbx_umd", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use Healing kits.", "chbx_use_healingkits", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Moral checks, wounded creatures may flee during combat.", "chbx_moral", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), " Spells the AI will not use:", "lbl_restrict_spells", 190.0, 20.0, NUI_HALIGN_LEFT); + jGroupRow = CreateCheckBox(jGroupRow, " Darkness", "chbx_darkness", 90.0, 20.0, "chbx_darkness_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Dispels", "chbx_dispels", 90.0, 20.0, "chbx_dispels_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Time Stop", "chbx_timestop", 90.0, 20.0, "chbx_timestop_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 196.0; + } + if(nMonsterAI) + { + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_ai_difficulty", 3, FALSE, 40.0f, 20.0f, "txt_ai_difficulty_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% chance monsters will attack the weakest target.", "lbl_ai_difficulty", 406.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_ai_difficulty_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_perception_distance", 2, FALSE, 35.0f, 20.0f, "txt_perception_distance_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters is the distance a monster can respond to allies.", "lbl_perception_distance", 411.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "txt_perception_distance_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters buff before combat starts.", "chbx_buff_monsters", 275.0, 20.0, "chbx_buff_monsters_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Will use all buff spells!", "chbx_full_buff", 210.0, 20.0, "chbx_full_buff_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use summons before combat starts.", "chbx_buff_summons", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use tactics (ambush, defensive, flanker, etc).", "chbx_ambush_monsters", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "Add ", "lbl_inc_enc", 30.0, 20.0, NUI_HALIGN_LEFT, 0, -1.0); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_inc_enc", 4, FALSE, 55.0f, 20.0f, "txt_inc_enc_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "monsters per spawned encounter monster.", "lbl_inc_enc", 357.0, 20.0, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "txt_inc_enc_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_inc_hp", 3, FALSE, 40.0f, 20.0f, "txt_inc_hp_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% increase in all monster's hitpoints.", "lbl_inc_hp", 406.0, 20.0, NUI_HALIGN_LEFT); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "***** WARNING! The options below may break the module! *****", "lbl_warning", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can wander upto ", "chbx_wander", 220.0, 20.0, "chbx_warning_tooltip"); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_wander_distance", 2, FALSE, 35.0f, 20.0f, "chbx_warning_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters and ", "lbl_wander_distance", 80.0f, 20.0f, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "chbx_warning_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, "open doors.", "chbx_open_doors", 100.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can summon companions.", "chbx_companions", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Summoned associates to remain after masters death.", "chbx_perm_assoc", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Make enemy corpses remain.", "chbx_corpses_stay", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_perc_dist", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "lbl_perc_dist_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 336.0; + } + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + json jLocations = ai_GetAssociateDbJson(oPC, "pc", "locations"); + jLocations = JsonObjectGet(jLocations, AI_MAIN_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = ai_StripColorCodes(GetName(oPC)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, AI_MAIN_NUI, sName + " PEPS Main Menu", + fX, fY, 554.0f, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + object oModule = GetModule(); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 - Version label. + // Row 2 + int nUsing; + if(!AI_SERVER) + { + // Check the monster AI. + string sLocation = ResManGetAliasFor("ai_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_c2_default1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText = "Monster AI working"; + else sText = "Monster AI not working"; + } + else sText = "Monster AI not loaded"; + // Check the associate AI. + sLocation = ResManGetAliasFor("ai_a_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText += ", Associate AI working"; + else sText += ", Associate AI not working"; + } + else sText += ", Associate AI not loaded"; + // Check for PRC. + sLocation = ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS); + if(sLocation != "") sText += ", PRC loaded."; + else + { + // Check the player AI. + sLocation = ResManGetAliasFor("xx_pc_1_hb", RESTYPE_NCS); + if(sLocation != "") sText += ", Player AI loaded."; + else sText += ", Player AI not loaded."; + } + NuiSetBind(oPC, nToken, "lbl_ai_info_label", JsonString(sText)); + } + // Row 3 + NuiSetBind(oPC, nToken, "btn_plugin_manager_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_manager_tooltip", JsonString(" Manages external executable scripts.")); + int bActionGhost = ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST); + NuiSetBind(oPC, nToken, "btn_action_ghost", JsonBool (bActionGhost)); + NuiSetBind(oPC, nToken, "btn_action_ghost_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_action_ghost_tooltip", JsonString(" Allows associates to move through creatures while in command mode.")); + int bEffectIcon = ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT); + NuiSetBind(oPC, nToken, "btn_effect_icon", JsonBool (bEffectIcon)); + NuiSetBind(oPC, nToken, "btn_effect_icon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_effect_icon_tooltip", JsonString(" When on sends effect icon reports to the chat screen.")); + // Row 3 Label for AI RULES + // Row 4 + NuiSetBind(oPC, nToken, "txt_max_henchman", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_MAX_HENCHMAN)))); + NuiSetBindWatch (oPC, nToken, "txt_max_henchman", TRUE); + NuiSetBind(oPC, nToken, "txt_max_henchman_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_max_henchman_tooltip", JsonString(" Set max number of henchman allowed (1-12).")); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(IntToString(GetModuleXPScale()))); + NuiSetBindWatch (oPC, nToken, "txt_xp_scale", TRUE); + NuiSetBind(oPC, nToken, "txt_xp_scale_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_xp_scale_tooltip", JsonString(" Set the modules XP scale (0 - 200) Normal D&D is 10.")); + NuiSetBind(oPC, nToken, "chbx_party_scale_check", JsonBool(GetLocalInt(oModule, AI_RULE_PARTY_SCALE))); + NuiSetBindWatch(oPC, nToken, "chbx_party_scale_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_party_scale_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oPC, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + NuiSetBind(oPC, nToken, "btn_default_xp_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + NuiSetBind(oPC, nToken, "btn_default_xp_tooltip", JsonString(" Reset the Modules XP to (" + sText + ").")); + NuiSetBind(oPC, nToken, "chbx_warning_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + if(nMonsterAI) + { + NuiSetBind(oPC, nToken, "txt_ai_difficulty", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_AI_DIFFICULTY)))); + NuiSetBindWatch(oPC, nToken, "txt_ai_difficulty", TRUE); + NuiSetBind(oPC, nToken, "txt_ai_difficulty_event", JsonBool(TRUE)); + int bMonsterBuff = GetLocalInt(oModule, AI_RULE_BUFF_MONSTERS); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_check", JsonBool(bMonsterBuff)); + NuiSetBindWatch(oPC, nToken, "chbx_buff_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_tooltip", JsonString(" Monsters will cast all longer duration buff spells just before combat starts.")); + NuiSetBind(oPC, nToken, "chbx_full_buff_check", JsonBool(GetLocalInt(oModule, AI_RULE_FULL_BUFF_MONSTERS))); + NuiSetBindWatch(oPC, nToken, "chbx_full_buff_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_full_buff_event", JsonBool(bMonsterBuff)); + NuiSetBind(oPC, nToken, "chbx_full_buff_tooltip", JsonString(" Monsters will cast all buff spells just before combat starts! VERY DIFFICULTY!")); + NuiSetBind(oPC, nToken, "chbx_buff_summons_check", JsonBool(GetLocalInt(oModule, AI_RULE_PRESUMMON))); + NuiSetBindWatch(oPC, nToken, "chbx_buff_summons_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_summons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_check", JsonBool(GetLocalInt(oModule, AI_RULE_AMBUSH))); + NuiSetBindWatch(oPC, nToken, "chbx_ambush_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_companions_check", JsonBool(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS))); + NuiSetBindWatch(oPC, nToken, "chbx_companions_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companions_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_check", JsonBool(GetLocalInt(oModule, AI_RULE_PERM_ASSOC))); + string sModuleName = GetModuleName(); + if(!GetLocalInt(oModule, AI_USING_PRC) && + (sModuleName != "Neverwinter Nights - Infinite Dungeons" || + sModuleName != "Infinite Dungeons [PRC8]")) + { + NuiSetBindWatch(oPC, nToken, "chbx_perm_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_check", JsonBool(GetLocalInt(oModule, AI_RULE_CORPSES_STAY))); + NuiSetBindWatch(oPC, nToken, "chbx_corpses_stay_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_event", JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "txt_perception_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_perception_distance", TRUE); + NuiSetBind(oPC, nToken, "txt_perception_distance_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_perception_distance_tooltip", JsonString(" Range [10 to 60 meters] from the player.")); + NuiSetBindWatch(oPC, nToken, "lbl_perc_dist", TRUE); + int nPercDist = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE); + if(nPercDist < 8 || nPercDist > 11) + { + nPercDist = 11; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, 11); + } + if(nPercDist == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nPercDist == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nPercDist == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oPC, nToken, "lbl_perc_dist_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "lbl_perc_dist_tooltip", JsonString(" Use the mouse wheel to change values.")); + int bWander = GetLocalInt(oModule, AI_RULE_WANDER); + NuiSetBind(oPC, nToken, "chbx_wander_check", JsonBool(bWander)); + NuiSetBindWatch(oPC, nToken, "chbx_wander_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_wander_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_wander_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_wander_distance", TRUE); + NuiSetBind(oPC, nToken, "txt_wander_distance_event", JsonBool(bWander)); + NuiSetBind(oPC, nToken, "chbx_open_doors_check", JsonBool(GetLocalInt(oModule, AI_RULE_OPEN_DOORS))); + NuiSetBindWatch(oPC, nToken, "chbx_open_doors_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_doors_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_open_doors_tooltip", JsonString(" This allows monsters to open doors to hunt you down!")); + NuiSetBind(oPC, nToken, "txt_inc_enc_tooltip", JsonString(" Spawns one extra monster per counter above 1. Adds value to counter per encounter monster spawned.")); + NuiSetBind(oPC, nToken, "txt_inc_enc", JsonString(FloatToString(GetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS), 0, 2))); + NuiSetBindWatch(oPC, nToken, "txt_inc_enc", TRUE); + NuiSetBind(oPC, nToken, "txt_inc_enc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_inc_hp", JsonString(IntToString(GetLocalInt(oModule, AI_INCREASE_MONSTERS_HP)))); + NuiSetBindWatch(oPC, nToken, "txt_inc_hp", TRUE); + NuiSetBind(oPC, nToken, "txt_inc_hp_tooltip", JsonString(" Will increase ALL monsters hitpoints by the%. Upto 500% or 6 times the normal health!")); + NuiSetBind(oPC, nToken, "txt_inc_hp_event", JsonBool(TRUE)); + } + if(nMonsterAI || nAssociateAI) + { + NuiSetBind(oPC, nToken, "chbx_moral_check", JsonBool(GetLocalInt(oModule, AI_RULE_MORAL_CHECKS))); + NuiSetBindWatch (oPC, nToken, "chbx_moral_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_moral_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_check", JsonBool(GetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT))); + NuiSetBindWatch (oPC, nToken, "chbx_advanced_movement_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ilr_check", JsonBool(GetLocalInt(oModule, AI_RULE_ILR))); + NuiSetBindWatch (oPC, nToken, "chbx_ilr_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ilr_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_umd_check", JsonBool(GetLocalInt(oModule, AI_RULE_ALLOW_UMD))); + NuiSetBindWatch (oPC, nToken, "chbx_umd_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_umd_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_check", JsonBool(GetLocalInt(oModule, AI_RULE_HEALERSKITS))); + NuiSetBindWatch (oPC, nToken, "chbx_use_healingkits_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_check", JsonBool(ai_SpellRestricted(SPELL_DARKNESS))); + NuiSetBindWatch (oPC, nToken, "chbx_darkness_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_darkness_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_tooltip", JsonString(" AI will not use the Darkness spell in combat.")); + NuiSetBind(oPC, nToken, "chbx_dispels_check", JsonBool(ai_SpellRestricted(SPELL_DISPEL_MAGIC))); + NuiSetBindWatch (oPC, nToken, "chbx_dispels_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_dispels_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_dispels_tooltip", JsonString(" AI will not use any of the Dispel spells in combat.")); + NuiSetBind(oPC, nToken, "chbx_timestop_check", JsonBool(ai_SpellRestricted(SPELL_TIME_STOP))); + NuiSetBindWatch (oPC, nToken, "chbx_timestop_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_timestop_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_timestop_tooltip", JsonString(" AI will not use the Time Stop spell in combat.")); + } +} +void ai_CreateAssociateCommandNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int bRight, bLeft; + int bIsPC = ai_GetIsCharacter(oAssociate); + int bUsingPCAI = ResManGetAliasFor("xx_pc_1_hb", RESTYPE_NCS) != ""; + int bUsingHenchAI = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS) != ""; + float fHeight = 73.0; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArray(); + json jCol = JsonArray(); + // If all the AI buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMAIAccessVarname) != 203423743) + { + if(bIsPC) + { + bLeft = ai_GetIsServer(); + if(bUsingPCAI || !bLeft) + { + if(bUsingPCAI) + { + jRow = CreateButton(jRow, "AI Menu", "btn_ai_menu", 232.0, 20.0, -1.0, "btn_ai_menu_tooltip"); + } + if(!bLeft) + { + jRow = CreateButton(jRow, "Main Menu", "btn_main_menu", 232.0, 20.0, -1.0, "btn_main_menu_tooltip"); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + else + { + if(bUsingHenchAI) + { + jRow = CreateButton(jRow, "AI Menu", "btn_ai_menu", 232.0, 20.0, -1.0, "btn_ai_menu_tooltip"); + } + jRow = CreateButtonSelect(jRow, "", "btn_widget_onoff", 232.0, 20.0, "btn_widget_onoff_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + // Row 2 ******************************************************************* 500 / 101 + jRow = JsonArray(); + jRow = CreateButtonSelect(jRow, "Lock Widget", "btn_widget_lock", 154.0, 20.0, "btn_widget_lock_tooltip"); + jRow = CreateButton(jRow, "Copy Settings", "btn_copy_settings", 154.0, 20.0, -1.0, "btn_copy_settings_tooltip"); + jRow = CreateButtonSelect(jRow, "Vertical Widget", "btn_vertical_widget", 154.0, 20.0, "btn_vertical_widget_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + bRight = !ai_GetDMWAccessButton(BTN_ASSOC_WIDGETS_OFF); + //bLeft = !ai_GetDMWAccessButton(BTN_CMD_GUARD); + if(bRight)// || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + if(bIsPC && bUsingHenchAI) + { + jRow = CreateButton(jRow, "Associate Widgets", "btn_toggle_assoc_widget", 200.0f, 20.0f, -1.0, "btn_toggle_assoc_widget_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_toggle_assoc_widget", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + //if(bLeft) + //{ + //} + //jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + //fHeight += 28.0; + } + // Row 4 ******************************************************************* 500 / 129 + bRight = !ai_GetDMWAccessButton(BTN_CMD_ACTION); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_GUARD); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_cmd_action", 200.0, 20.0, -1.0, "btn_cmd_action_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_action", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "", "btn_cmd_guard", 200.0, 20.0, -1.0, "btn_cmd_guard_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_guard", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 5 ******************************************************************* 500 / 157 + jRow = JsonArray(); + bRight = !ai_GetDMWAccessButton(BTN_CMD_HOLD); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_ATTACK); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_cmd_hold", 200.0, 20.0, -1.0, "btn_cmd_hold_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_hold", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "", "btn_cmd_attack", 200.0, 20.0, -1.0, "btn_cmd_attack_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_attack", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 6 ******************************************************************* 500 / 213 + bRight = !ai_GetDMWAccessButton(BTN_CMD_FOLLOW); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_FOLLOW_TARGET); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_cmd_follow", 200.0, 20.0, -1.0, "btn_cmd_follow_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_follow", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Select follow target", "btn_follow_target", 200.0, 20.0, -1.0, "btn_follow_target_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_follow_target", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 7 ******************************************************************* 500 / 185 + if(bIsPC) + { + bRight = !ai_GetDMWAccessButton(BTN_CMD_SEARCH); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_STEALTH); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "All Search Mode", "btn_cmd_search", 200.0, 20.0, -1.0, "btn_cmd_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_search", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "All Stealth Mode", "btn_cmd_stealth", 200.0, 20.0, -1.0, "btn_cmd_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_stealth", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + } + // Row 8 ******************************************************************* 500 / 241 + bRight = !ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_PLACE_TRAP); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Combat Tactics", "btn_cmd_ai_script", 200.0, 20.0, -1.0, "btn_cmd_ai_script_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_ai_script", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Place a Trap", "btn_cmd_place_trap", 200.0, 20.0, -1.0, "btn_cmd_place_trap_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_place_trap", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 9 ******************************************************************* 500 / --- + int bMemorize = ai_GetIsSpellCaster(oAssociate); + int bSpellbook = ai_GetIsSpellBookRestrictedCaster(oAssociate); + bRight = !ai_GetDMWAccessButton(BTN_CMD_SPELL_WIDGET); + bLeft = !ai_GetDMWAccessButton(BTN_DM_CMD_MEMORIZE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Set Quick Widget", "btn_quick_widget", 200.0, 20.0, -1.0, "btn_quick_widget_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quick_widget", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) // Memorizes their spells. + { + if(bMemorize == 2 && bSpellbook) + { + jRow = CreateButton(jRow, "Memorize Spells", "btn_spell_memorize", 114.0, 20.0, -1.0, "btn_spell_memorize_tooltip"); + jRow = CreateButton(jRow, "Known Spells", "btn_spell_known", 110.0, 20.0, -1.0, "btn_spell_known_tooltip"); + } + else if(bMemorize == 2) + { + jRow = CreateButton(jRow, "Set Memorize Spells", "btn_spell_memorize", 200.0, 20.0, -1.0, "btn_spell_memorize_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_1", 25.0, 20.0); + } + else if(bSpellbook && !ai_GetIsCharacter(oAssociate)) + { + jRow = CreateButton(jRow, "Set Known Spells", "btn_spell_known", 200.0, 20.0, -1.0, "btn_spell_known_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_1", 25.0, 20.0); + } + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 10 ******************************************************************* 500 / 269 + bRight = !ai_GetDMWAccessButton(BTN_BUFF_SHORT); + bLeft = !ai_GetDMWAccessButton(BTN_BUFF_LONG); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Cast Short Buff spells", "btn_buff_short", 200.0, 20.0, -1.0, "btn_buff_short_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_short", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Cast Long Buff spells", "btn_buff_long", 200.0, 20.0, -1.0, "btn_buff_long_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_long", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 11 ******************************************************************* 500 / 297 + bRight = !ai_GetDMWAccessButton(BTN_BUFF_ALL); + bLeft = !ai_GetDMWAccessButton(BTN_BUFF_REST); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Cast All Buff spells", "btn_buff_all", 200.0, 20.0, -1.0, "btn_buff_all_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_all", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Buff after resting", "btn_buff_rest", 200.0, 20.0, -1.0, "btn_buff_rest_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_rest", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 12 ******************************************************************* 500 / 325 + bRight = !ai_GetDMWAccessButton(BTN_CMD_JUMP_TO); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_GHOST_MODE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "", "btn_jump_to", 200.0, 20.0, -1.0, "btn_jump_to"); + jRow = CreateCheckBox(jRow, "", "chbx_jump_to", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Ghost Mode", "btn_ghost_mode", 200.0, 20.0, -1.0, "btn_ghost_mode_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ghost_mode", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 13 ****************************************************************** 500 / 353 + bRight = !ai_GetDMWAccessButton(BTN_CMD_CAMERA); + bLeft = !ai_GetDMWAccessButton(BTN_CMD_INVENTORY); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Toggle Camera Focus", "btn_camera", 200.0, 20.0, -1.0, "btn_camera_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_camera", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Open/Close Inventory", "btn_inventory", 200.0, 20.0, -1.0, "btn_inventory_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_inventory", 25.0, 20.0); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 14 ******************************************************************* 500 / --- + int bFamiliar = GetHasFeat(FEAT_SUMMON_FAMILIAR, oAssociate, TRUE); + if(!ai_GetDMWAccessButton(BTN_CMD_FAMILIAR) && bFamiliar) + { + jRow = JsonArray(); + jRow = CreateLabel(jRow, "", "lbl_familiar_type", 225.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_familiar_name", 225.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Row 15 ******************************************************************* 500 / --- + jRow = JsonArray(); + jRow = CreateCombo(jRow, ai_CreateCompanionJson(oPC, "hen_familiar"), "cmb_familiar", 200.0, 20.0); + jRow = CreateCheckBox(jRow, "", "chbx_familiar", 25.0, 20.0); + jRow = CreateTextEditBox(jRow, "txtbox", "txt_familiar_name", 50, FALSE, 178.0, 20.0); + jRow = CreateButton(jRow, "", "btn_familiar_name", 55.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 16 ******************************************************************* 500 / --- + int bCompanion = GetHasFeat(FEAT_ANIMAL_COMPANION, oAssociate, TRUE); + if(!ai_GetDMWAccessButton(BTN_CMD_COMPANION) && bCompanion) + { + jRow = JsonArray(); + jRow = CreateLabel(jRow, "", "lbl_companion_type", 225.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_companion_name", 225.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Row 17 ******************************************************************* 500 / --- + jRow = JsonArray(); + jRow = CreateCombo(jRow, ai_CreateCompanionJson(oPC, "hen_companion"), "cmb_companion", 200.0, 20.0); + jRow = CreateCheckBox(jRow, "", "chbx_companion", 25.0, 20.0); + jRow = CreateTextEditBox(jRow, "txtbox", "txt_companion_name", 50, FALSE, 178.0, 20.0); + jRow = CreateButton(jRow, "", "btn_companion_name", 55.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + } + // Row 18+ ****************************************************************** 500 / --- + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jPCPlugins; + if(bIsPC) + { + jPCPlugins = ai_UpdatePluginsForPC(oPC); + // Set the plugins the player can use. + int nIndex; + string sButton, sName; + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + jRow = JsonArray(); + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + if(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else + { + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + break; + } + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + } + // Row 19+ ****************************************************************** 500 / --- + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_info_1", 475.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_COMMAND_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_COMMAND_NUI, sName + " Command Menu", + fX, fY, 500.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Get which buttons are activated. + int bAIWidgetLock = ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType); + int bCmdAction = ai_GetWidgetButton(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType); + int bCmdGuard = ai_GetWidgetButton(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType); + int bCmdHold = ai_GetWidgetButton(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType); + int bCmdSearch = ai_GetWidgetButton(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType); + int bCmdStealth = ai_GetWidgetButton(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType); + int bCmdAttack = ai_GetWidgetButton(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType); + int bCmdFollow = ai_GetWidgetButton(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType); + int bFollowTarget = ai_GetAIButton(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType); + int bCmdAIScript = ai_GetWidgetButton(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType); + int bCmdPlacetrap = ai_GetWidgetButton(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType); + int bSpellWidget = ai_GetWidgetButton(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType); + int bBuffRest = ai_GetWidgetButton(oPC, BTN_BUFF_REST, oAssociate, sAssociateType); + int bBuffShort = ai_GetWidgetButton(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType); + int bBuffLong = ai_GetWidgetButton(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType); + int bBuffAll = ai_GetWidgetButton(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType); + int bJumpTo = ai_GetWidgetButton(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType); + int bGhostMode = ai_GetWidgetButton(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType); + int bCamera = ai_GetWidgetButton(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType); + int bInventory = ai_GetWidgetButton(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType); + int bBtnFamiliar = ai_GetWidgetButton(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType); + int bBtnCompanion = ai_GetWidgetButton(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType); + int bAssocWidgetOff = ai_GetWidgetButton(oPC, BTN_ASSOC_WIDGETS_OFF, oAssociate, sAssociateType); + int bVertical = ai_GetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + string sText; + // Row 1 + // If all the AI buttons are blocked then don't load the menu. + if(GetLocalInt(GetModule(), sDMAIAccessVarname) != 203423743) + { + if(bIsPC) + { + if(bUsingPCAI) + { + NuiSetBind(oPC, nToken, "btn_ai_menu_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_menu_tooltip", JsonString(" " + sName + " AI options")); + } + NuiSetBind(oPC, nToken, "btn_copy_settings_event", JsonBool (TRUE)); + sText = " Copy AI and command settings for one creature to others."; + NuiSetBind(oPC, nToken, "btn_copy_settings_tooltip", JsonString(sText)); + if(!ai_GetIsServer()) + { + NuiSetBind(oPC, nToken, "btn_main_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu_tooltip", JsonString(" Module Options")); + } + } + else + { + if(bUsingHenchAI) + { + NuiSetBind(oPC, nToken, "btn_ai_menu_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_menu_tooltip", JsonString(" " + sName + " AI options")); + } + NuiSetBind(oPC, nToken, "btn_copy_settings_event", JsonBool (TRUE)); + sText = " Copy AI and command settings for one creature to others."; + NuiSetBind(oPC, nToken, "btn_copy_settings_tooltip", JsonString(sText)); + string sText2; + if(ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oAssociate, sAssociateType)) + { + sText = "Off"; sText2 = "on"; + NuiSetBind(oPC, nToken, "btn_widget_onoff", JsonBool(FALSE)); + } + else + { + sText = "On"; sText2 = "off"; + NuiSetBind(oPC, nToken, "btn_widget_onoff", JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "btn_widget_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_onoff_label", JsonString("Widget " + sText)); + NuiSetBind(oPC, nToken, "btn_widget_onoff_tooltip", JsonString( + " Turn " + sName + " widget " + sText2)); + } + } + // Row 2 + NuiSetBind(oPC, nToken, "btn_widget_lock_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_lock", JsonBool(bAIWidgetLock)); + NuiSetBind(oPC, nToken, "btn_widget_lock_tooltip", JsonString( + " Locks " + sName + " widget to the current location.")); + NuiSetBind(oPC, nToken, "btn_widget_size_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_size_tooltip", JsonString( + " Adjusts the size of " + sName + " widget buttons")); + NuiSetBind(oPC, nToken, "btn_vertical_widget_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_vertical_widget", JsonBool(bVertical)); + NuiSetBind(oPC, nToken, "btn_vertical_widget_tooltip", JsonString( + " " + sName + " widget will display vertically")); + // Row 3 + if(bIsPC && bUsingHenchAI) + { + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_event", JsonBool(TRUE)); + if(ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc")) sText = " Associate Widgets [Off]"; + else sText = " Associate Widgets [On]"; + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_toggle_assoc_widget_check", JsonBool (bAssocWidgetOff)); + NuiSetBindWatch (oPC, nToken, "chbx_toggle_assoc_widget_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_toggle_assoc_widget_event", JsonBool(TRUE)); + } + // Row 4 + NuiSetBind(oPC, nToken, "chbx_cmd_action_check", JsonBool (bCmdAction)); + NuiSetBindWatch(oPC, nToken, "chbx_cmd_action_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_action_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_guard_check", JsonBool (bCmdGuard)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_guard_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_guard_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_event", JsonBool (TRUE)); + // Row 5 + NuiSetBind(oPC, nToken, "chbx_cmd_hold_check", JsonBool (bCmdHold)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_hold_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_hold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_attack_check", JsonBool (bCmdAttack)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_attack_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_attack_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_event", JsonBool (TRUE)); + // Row 6 + NuiSetBind(oPC, nToken, "chbx_cmd_follow_check", JsonBool (bCmdFollow)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_follow_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_follow_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_follow_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_follow_target_check", JsonBool (bFollowTarget)); + NuiSetBindWatch (oPC, nToken, "chbx_follow_target_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_follow_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_follow_target_event", JsonBool (TRUE)); + // Row 7 + if(bIsPC) + { + NuiSetBind(oPC, nToken, "chbx_cmd_search_check", JsonBool (bCmdSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_search_event", JsonBool (TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_SEARCH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_search_tooltip", JsonString(" Everyone" + sText + "search mode")); + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_check", JsonBool (bCmdStealth)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_stealth_event", JsonBool (TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_STEALTH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_stealth_tooltip", JsonString(" Everyone" + sText + "stealth mode")); + } + // Command labels + if(bIsPC) sText = " All "; + else sText = " "; + NuiSetBind(oPC, nToken, "btn_cmd_action_label", JsonString(sText + "Action")); + NuiSetBind(oPC, nToken, "btn_cmd_guard_label", JsonString(sText + "Guard Mode")); + NuiSetBind(oPC, nToken, "btn_cmd_hold_label", JsonString(sText + "Hold Mode")); + NuiSetBind(oPC, nToken, "btn_cmd_attack_label", JsonString(sText + "Normal Mode")); + NuiSetBind(oPC, nToken, "btn_cmd_follow_label", JsonString(sText + "Follow Mode")); + NuiSetBind(oPC, nToken, "btn_follow_target_label", JsonString(" Follow Target")); + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(bIsPC) + { + sText = " All associates"; + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode")); + } + else + { + sText = " " + GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode [" + sRange + " meters]")); + } + NuiSetBind(oPC, nToken, "btn_cmd_action_tooltip", JsonString(sText + " do actions")); + NuiSetBind(oPC, nToken, "btn_cmd_guard_tooltip", JsonString(sText + " enter guard mode")); + NuiSetBind(oPC, nToken, "btn_cmd_hold_tooltip", JsonString(sText + " enter hold mode")); + NuiSetBind(oPC, nToken, "btn_cmd_attack_tooltip", JsonString(sText + " enter normal mode")); + object oTarget = GetLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(oTarget != OBJECT_INVALID) sTarget = GetName(oTarget); + else + { + if(ai_GetIsCharacter(oAssociate)) sTarget = "nobody"; + else sTarget = GetName(oPC); + } + NuiSetBind(oPC, nToken, "btn_follow_target_tooltip", JsonString(" " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]")); + // Row 8 + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_check", JsonBool (bCmdAIScript)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_ai_script_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_event", JsonBool (TRUE)); + sText = " Using normal tactics"; + if(ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != "") + { + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript == "ai_a_ambusher") sText = " Ambusher: Attacks from a hidden position"; + else if(sScript == "ai_a_flanker") sText = " Flanker: Attacks enemies engaged with allies"; + else if(sScript == "ai_a_peaceful") sText = " Peaceful: Avoids attacking any enemies if possible"; + else if(sScript == "ai_a_defensive") sText = " Defensive: Attacks then uses Expertise/Parry"; + else if(sScript == "ai_a_ranged") sText = " Ranged: Attacks from range as much as possible"; + else if(sScript == "ai_a_cntrspell") sText = " Counter Spell: Tries to counter enemy spells"; + } + else + { + if(GetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, oAssociate)) sText = "Using ambush tactics"; + else if(GetCombatCondition(X0_COMBAT_FLAG_COWARDLY, oAssociate)) sText = "Using coward tactics"; + else if(GetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, oAssociate)) sText = "Using defensive tactics"; + else if(GetCombatCondition(X0_COMBAT_FLAG_RANGED, oAssociate)) sText = "Using ranged tactics"; + } + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_tooltip", JsonString(sText)); + if(GetSkillRank(SKILL_SET_TRAP, oAssociate, TRUE) > 0) + { + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_check", JsonBool (bCmdPlacetrap)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_place_trap_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_tooltip", JsonString ( + " Place a trap at the location selected")); + } + // Row 9 + NuiSetBind(oPC, nToken, "btn_quick_widget_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_quick_widget_tooltip", JsonString( + " Add/Remove abilities and spells from creatures widget")); + NuiSetBind(oPC, nToken, "chbx_quick_widget_check", JsonBool (bSpellWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_quick_widget_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quick_widget_event", JsonBool(TRUE)); + if(bMemorize == 2) // Memorizes their spells. + { + NuiSetBind(oPC, nToken, "btn_spell_memorize_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_spell_memorize_tooltip", JsonString( + " Change memorized spell list.")); + } + if(bSpellbook) // Change known spells. + { + NuiSetBind(oPC, nToken, "btn_spell_known_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_spell_known_tooltip", JsonString( + " Change known spell list.")); + } + // Row 10 + NuiSetBind(oPC, nToken, "chbx_buff_short_check", JsonBool (bBuffShort)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_short_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_short_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_short_event", JsonBool (TRUE)); + float fDelay = GetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING); + if(fDelay < 0.1) fDelay = 0.1; + string sDelay = FloatToString(fDelay, 0, 1); + NuiSetBind (oPC, nToken, "btn_buff_short_tooltip", JsonString ( + " Buff the party with short duration spells. Cast speed [" + sDelay + "]")); + NuiSetBind(oPC, nToken, "chbx_buff_long_check", JsonBool (bBuffLong)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_long_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_long_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_tooltip", JsonString ( + " Buff the party with long duration spells. Cast speed [" + sDelay + "]")); + // Row 11 + NuiSetBind(oPC, nToken, "chbx_buff_all_check", JsonBool (bBuffAll)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_all_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_all_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_tooltip", JsonString ( + " Buff the party with all spells. Cast speed [" + sDelay + "]")); + if(!bIsPC && ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) == "") + { + NuiSetBind(oPC, nToken, "chbx_buff_rest_check", JsonBool (bBuffRest)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_rest_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_rest_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_rest_event", JsonBool (TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) sText = " [On] Turn buffing after resting off"; + else sText = " [Off] Turn buffing after resting on"; + NuiSetBind (oPC, nToken, "btn_buff_rest_tooltip", JsonString (sText)); + } + // Row 12 + NuiSetBind(oPC, nToken, "chbx_jump_to_check", JsonBool(bJumpTo)); + NuiSetBindWatch (oPC, nToken, "chbx_jump_to_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_jump_to_event", JsonBool(TRUE)); + sText = GetName(oPC); + if(oPC == oAssociate) sName = "everyone"; + else sName = GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_jump_to_label", JsonString("Jump to " + sText)); + NuiSetBind(oPC, nToken, "btn_jump_to_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_to_tooltip", JsonString ( + " Jump " + sName + " to " + sText)); + + NuiSetBind(oPC, nToken, "chbx_ghost_mode_check", JsonBool (bGhostMode)); + NuiSetBindWatch (oPC, nToken, "chbx_ghost_mode_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ghost_mode_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ghost_mode_event", JsonBool (TRUE)); + sText = "On"; + if(ai_GetAIMode(oAssociate, AI_MODE_GHOST)) sText = "Off"; + NuiSetBind(oPC, nToken, "btn_ghost_mode_tooltip", JsonString ( + " Turn " + sText + " clipping through creatures for " + GetName(oAssociate))); + // Row 13 + NuiSetBind(oPC, nToken, "chbx_camera_check", JsonBool (bCamera)); + NuiSetBindWatch (oPC, nToken, "chbx_camera_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString ( + " Toggle camera view for " + sName)); + NuiSetBind(oPC, nToken, "chbx_inventory_check", JsonBool (bInventory)); + NuiSetBindWatch (oPC, nToken, "chbx_inventory_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString ( + " Open " + sName + " inventory")); + // Row 14 & 15 + if(bFamiliar) + { + NuiSetBind(oPC, nToken, "chbx_familiar_check", JsonBool(bBtnFamiliar)); + NuiSetBindWatch (oPC, nToken, "chbx_familiar_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_familiar_event", JsonBool(TRUE)); + int nFamiliar = GetFamiliarCreatureType(oAssociate); + NuiSetBind(oPC, nToken, "cmb_familiar_selected", JsonInt(nFamiliar)); + string sFamiliarName = GetFamiliarName(oAssociate); + NuiSetBind(oPC, nToken, "txt_familiar_name", JsonString(sFamiliarName)); + if(!bIsPC) + { + NuiSetBind(oPC, nToken, "lbl_familiar_type_label", JsonString("Change familiar type")); + NuiSetBind(oPC, nToken, "lbl_familiar_name_label", JsonString("Change familiar name")); + NuiSetBind(oPC, nToken, "cmb_familiar_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_familiar_selected", TRUE); + NuiSetBind(oPC, nToken, "txt_familiar_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_familiar_name", TRUE); + NuiSetBind(oPC, nToken, "btn_familiar_name_label", JsonString("Save")); + } + else + { + NuiSetBind(oPC, nToken, "lbl_familiar_type_label", JsonString("Familiar type")); + NuiSetBind(oPC, nToken, "lbl_familiar_name_label", JsonString("Familiar name")); + } + } + // Row 16 & 17 + if(bCompanion) + { + NuiSetBind(oPC, nToken, "chbx_companion_check", JsonBool(bBtnCompanion)); + NuiSetBindWatch (oPC, nToken, "chbx_companion_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companion_event", JsonBool(TRUE)); + int nCompanion = GetAnimalCompanionCreatureType(oAssociate); + NuiSetBind(oPC, nToken, "cmb_companion_selected", JsonInt(nCompanion)); + string sCompanionName = GetAnimalCompanionName(oAssociate); + NuiSetBind(oPC, nToken, "txt_companion_name", JsonString(sCompanionName)); + if(!bIsPC) + { + NuiSetBind(oPC, nToken, "lbl_companion_type_label", JsonString("Change Companion type")); + NuiSetBind(oPC, nToken, "lbl_companion_name_label", JsonString("Change Companion name")); + NuiSetBind(oPC, nToken, "cmb_companion_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_companion_selected", TRUE); + NuiSetBind(oPC, nToken, "txt_companion_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_companion_name", TRUE); + NuiSetBind(oPC, nToken, "btn_companion_name_label", JsonString("Save")); + } + else + { + NuiSetBind(oPC, nToken, "lbl_companion_type_label", JsonString("Companion type")); + NuiSetBind(oPC, nToken, "lbl_companion_name_label", JsonString("Companion name")); + } + } + if(bIsPC) + { + // Row 18+ + int nIndex, bWidget; + string sButton, sText; + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget < 3) + { + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + } + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + NuiSetBind(oPC, nToken, "chbx_plugin_tooltip", JsonString(" Adds the plugin to your widget.")); + } + // Row 19+ + sText = ai_GetRandomTip(); + NuiSetBind(oPC, nToken, "lbl_info_1_label", JsonString(sText)); +} +void ai_CreateAssociateAINUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int bRight, bLeft; + int nAssociateType = GetAssociateType(oAssociate); + float fHeight = 45.0; + // ************************************************************************* Width / Height + int bIsPC = ai_GetIsCharacter(oAssociate); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jRow = JsonArray(); + json jCol = JsonArray(); + // Row 1 ******************************************************************* 500 / 73 + // If all the AI buttons are blocked then don't load the menu. + if(bIsPC) + { + bRight = GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028; + bLeft = ai_GetIsServer(); + if(!bLeft || bRight) + { + // If all the Command buttons are blocked then don't load the menu. + if(bRight) + { + jRow = CreateButton(jRow, "Command Menu", "btn_command_menu", 200.0, 20.0, -1.0, "btn_command_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(!bLeft) + { + jRow = CreateButton(jRow, "Main Menu", "btn_main_menu", 200.0, 20.0, -1.0, "btn_main_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + } + // Row 2 ******************************************************************* 500 / 73 + bRight = !ai_GetDMAIAccessButton(BTN_AI_LOOT); + if(bRight || !bIsPC) + { + jRow = JsonArray(); + if(!bIsPC) + { + jRow = CreateButton(jRow, "Command Menu", "btn_command_menu", 200.0, 20.0, -1.0, "btn_command_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bRight) + { + jRow = CreateButton(jRow, "Loot Filter", "btn_loot_filter", 200.0, 20.0); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 3 ******************************************************************* 500 / 101 + bRight = TRUE;//!ai_GetDMAIAccessButton(BTN_AI_FOR_PC); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_REDUCE_SPEECH); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Player AI On/Off", "btn_ai", 200.0, 20.0, -1.0, "btn_ai_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ai", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Reduce Speech", "btn_quiet", 200.0, 20.0, -1.0, "btn_quiet_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quiet", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 4 ******************************************************************* 500 / 129 + bRight = !ai_GetDMAIAccessButton(BTN_AI_USE_RANGED); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_STOP_WEAPON_EQUIP); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Ranged Combat", "btn_ranged", 200.0, 20.0, -1.0, "btn_ranged_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ranged", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Equip Best Weapons", "btn_equip_weapon", 200.0, 20.0, -1.0, "btn_equip_weapon_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_equip_weapon", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 5 ******************************************************************* 500 / 157 + bRight = !ai_GetDMAIAccessButton(BTN_AI_USE_SEARCH); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_USE_STEALTH); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Search Mode", "btn_search", 200.0, 20.0, -1.0, "btn_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_search", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Stealth Mode", "btn_stealth", 200.0, 20.0, -1.0, "btn_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_stealth", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 6 ******************************************************************* 500 / 185 + bRight = !ai_GetDMAIAccessButton(BTN_AI_OPEN_DOORS); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_REMOVE_TRAPS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Open Door Mode", "btn_open_door", 200.0, 20.0, -1.0, "btn_open_door_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_open_door", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Disarm Traps Mode", "btn_traps", 200.0, 20.0, -1.0, "btn_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_traps", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 7 ******************************************************************* 500 / 213 + bRight = !ai_GetDMAIAccessButton(BTN_AI_PICK_LOCKS); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_BASH_LOCKS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Pick Locks Mode", "btn_pick_locks", 200.0, 20.0, -1.0, "btn_pick_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_pick_locks", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Bash Mode", "btn_bash_locks", 200.0, 20.0, -1.0, "btn_bash_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_bash_locks", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 8 ******************************************************************* 500 / 241 + bRight = !ai_GetDMAIAccessButton(BTN_AI_MAGIC_LEVEL); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_NO_SPONTANEOUS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Magic usage level", "btn_magic_level", 200.0, 20.0f, -1.0, "btn_magic_level_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_level", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Cleric Spontaneous Casting", "btn_spontaneous", 200.0, 20.0, -1.0, "btn_spontaneous_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_spontaneous", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 9 ******************************************************************* 500 / 269 + bRight = !ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_USE); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_ITEM_USE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Use Magic", "btn_magic", 200.0, 20.0, -1.0, "btn_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Use Magic Items", "btn_magic_items", 200.0, 20.0, -1.0, "btn_magic_items_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_items", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 10 ****************************************************************** 500 / 297 + bRight = !ai_GetDMAIAccessButton(BTN_AI_DEF_MAGIC_USE); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_OFF_MAGIC_USE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Use Defensive Magic Only", "btn_def_magic", 200.0, 20.0, -1.0, "btn_def_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_def_magic", 25.0, 20.0f); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Use Offensive Magic Only", "btn_off_magic", 200.0, 20.0, -1.0, "btn_off_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_off_magic", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 11 ****************************************************************** 500 / 325 + bRight = !ai_GetDMAIAccessButton(BTN_AI_HEAL_OUT); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_HEAL_IN); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Heal % Out of Combat", "btn_heal_out", 200.0, 20.0, -1.0, "btn_heal_out_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_out", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Heal % in Combat", "btn_heal_in", 200.0, 20.0, -1.0, "btn_heal_in_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_in", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 12 ****************************************************************** 500 / 353 + bRight = !ai_GetDMAIAccessButton(BTN_AI_STOP_SELF_HEALING); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_STOP_PARTY_HEALING); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Self Healing", "btn_heals_onoff", 200.0, 20.0, -1.0, "btn_heals_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heals_onoff", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Party Healing", "btn_healp_onoff", 200.0, 20.0, -1.0, "btn_healp_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_healp_onoff", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 13 ****************************************************************** 500 / 391 + bRight = !ai_GetDMAIAccessButton(BTN_AI_STOP_CURE_SPELLS); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_LOOT); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Cast Cure Spells", "btn_cure_onoff", 200.0, 20.0, -1.0, "btn_cure_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cure_onoff", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + if(nAssociateType != ASSOCIATE_TYPE_SUMMONED && nAssociateType != ASSOCIATE_TYPE_DOMINATED) + { + jRow = CreateButton(jRow, "Auto Looting", "btn_loot", 200.0, 20.0, -1.0, "btn_loot_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_loot", 25.0, 20.0); + } + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 14 ****************************************************************** 500 / --- + bRight = !ai_GetDMAIAccessButton(BTN_AI_IGNORE_ASSOCIATES); + bLeft = !ai_GetDMAIAccessButton(BTN_AI_IGNORE_TRAPS); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + jRow = CreateButton(jRow, "Ignore Associates", "btn_ignore_assoc", 200.0, 20.0, -1.0, "btn_ignore_assoc_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_assoc", 25.0, 20.0); + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + jRow = CreateButton(jRow, "Ignore floor Traps", "btn_ignore_traps", 200.0, 20.0, -1.0, "btn_ignore_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_traps", 25.0, 20.0); + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 15 ****************************************************************** 500 / --- + bRight = !ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE); + bLeft = FALSE; //!ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE); + if(bRight || bLeft) + { + jRow = JsonArray(); + if(bRight) + { + if(GetAssociateType(oAssociate) == ASSOCIATE_TYPE_HENCHMAN) + { + jRow = CreateButton(jRow, "Perception Range", "btn_perc_range", 200.0, 20.0, -1.0, "btn_perc_range_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_perc_range", 25.0, 20.0); + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + if(bLeft) + { + } + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 16 ****************************************************************** 500 / --- + bRight = !ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT); + if(bRight) + { + jRow = JsonArray(); + jRow = CreateButton(jRow, "Set Current AI:", "btn_ai_script", 175.0f, 20.0f, -1.0, "btn_ai_script_tooltip"); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_ai_script", 16, FALSE, 145.0f, 20.0f, "txt_ai_script_tooltip"); + jRow = CreateCombo(jRow, ai_CreateAIScriptJson(oPC), "cmb_ai_script", 146.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + // Row 17 ****************************************************************** 500 / --- + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_info", 475.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sText, sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_NUI, sName + " AI Menu", + fX, fY, 500.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Get which buttons are activated. + int bAI = ai_GetAIButton(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType); + int bReduceSpeech = ai_GetAIButton(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType); + int bRanged = ai_GetAIButton(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType); + int bEquipWeapons = ai_GetAIButton(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType); + int bSearch = ai_GetAIButton(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType); + int bStealth = ai_GetAIButton(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType); + int bOpenDoors = ai_GetAIButton(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType); + int bTraps = ai_GetAIButton(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType); + int bPickLocks = ai_GetAIButton(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType); + int bBashLocks = ai_GetAIButton(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType); + int bMagicLevel = ai_GetAIButton(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType); + int bSpontaneous = ai_GetAIButton(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType); + int bNoMagic = ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType); + int bNoMagicItems = ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType); + int bDefMagic = ai_GetAIButton(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType); + int bOffMagic = ai_GetAIButton(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType); + int bHealOut = ai_GetAIButton(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType); + int bHealIn = ai_GetAIButton(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType); + int bSelfHealOnOff = ai_GetAIButton(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType); + int bPartyHealOnOff = ai_GetAIButton(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType); + int bCureOnOff = ai_GetAIButton(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType); + int bIgnoreAssociates = ai_GetAIButton(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType); + int bIgnoreTraps = ai_GetAIButton(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType); + int bLoot = ai_GetAIButton(oPC, BTN_AI_LOOT, oAssociate, sAssociateType); + int bPercRange = ai_GetAIButton(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + // If all the AI buttons are blocked then don't load the menu. + if(bIsPC) + { + bRight = GetLocalInt(GetModule(), sDMWidgetAccessVarname) != 7340028; + if(!ai_GetIsServer() || bRight) + { + // If all the Command buttons are blocked then don't load the menu. + if(bRight) + { + NuiSetBind(oPC, nToken, "btn_command_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_command_menu_tooltip", JsonString(" " + sName + " Command options")); + } + if(!ai_GetIsServer()) + { + NuiSetBind(oPC, nToken, "btn_main_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu_tooltip", JsonString(" Module Options")); + } + fHeight += 28.0; + } + } + // Row 2 + if(!bIsPC) + { + NuiSetBind(oPC, nToken, "btn_command_menu_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_command_menu_tooltip", JsonString(" " + sName + " Command options")); + } + NuiSetBind(oPC, nToken, "btn_loot_filter_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_filter", JsonInt(TRUE)); + // Row 3 + // Only activate ai on/off if this is for the pc. + if(bIsPC && TRUE)//ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) == "") + { + NuiSetBind(oPC, nToken, "chbx_ai_check", JsonBool(bAI)); + NuiSetBindWatch (oPC, nToken, "chbx_ai_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ai_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_event", JsonBool(TRUE)); + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") sText = " AI On"; + else sText = " AI Off"; + NuiSetBind(oPC, nToken, "btn_ai_tooltip", JsonString(sText)); + } + NuiSetBind(oPC, nToken, "chbx_quiet_check", JsonBool(bReduceSpeech)); + NuiSetBindWatch (oPC, nToken, "chbx_quiet_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quiet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_quiet_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) sText = " Reduced Speech On"; + else sText = " Reduces Speech Off"; + NuiSetBind (oPC, nToken, "btn_quiet_tooltip", JsonString(sText)); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_ranged_check", JsonBool(bRanged)); + NuiSetBindWatch(oPC, nToken, "chbx_ranged_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ranged_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ranged_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) sText = " Ranged Off"; + else sText = " Ranged On"; + NuiSetBind (oPC, nToken, "btn_ranged_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_equip_weapon_check", JsonBool(bEquipWeapons)); + NuiSetBindWatch(oPC, nToken, "chbx_equip_weapon_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_equip_weapon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_equip_weapon_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF)) sText = " Equiping Best Weapons Off"; + else sText = " Equiping Best Weapons On"; + NuiSetBind (oPC, nToken, "btn_equip_weapon_tooltip", JsonString(sText)); + // Row 5 + if(GetRacialType(oAssociate) != RACIAL_TYPE_ELF) + { + NuiSetBind(oPC, nToken, "chbx_search_check", JsonBool(bSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sText = " Search mode On"; + else sText = " Search mode Off"; + NuiSetBind (oPC, nToken, "btn_search_tooltip", JsonString(sText)); + } + NuiSetBind(oPC, nToken, "chbx_stealth_check", JsonBool(bStealth)); + NuiSetBindWatch(oPC, nToken, "chbx_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sText = " Stealth mode On"; + else sText = " Stealth mode Off"; + NuiSetBind (oPC, nToken, "btn_stealth_tooltip", JsonString(sText)); + // Row 6 + string sRange = FloatToString(GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "chbx_open_door_check", JsonBool(bOpenDoors)); + NuiSetBindWatch (oPC, nToken, "chbx_open_door_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_door_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_door_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) sText = " Open Doors On [" + sRange + " meters]"; + else sText = " Open Doors Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_open_door_tooltip", JsonString(sText)); + sRange = FloatToString(GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "chbx_traps_check", JsonBool(bTraps)); + NuiSetBindWatch (oPC, nToken, "chbx_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) sText = " Disable Traps On [" + sRange + " meters]"; + else sText = " Disable Traps Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_traps_tooltip", JsonString(sText)); + // Row 7 + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "chbx_pick_locks_check", JsonBool(bPickLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_pick_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_pick_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_pick_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) sText = " Pick locks On [" + sRange + " meters]"; + else sText = " Pick Locks Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_pick_locks_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_bash_locks_check", JsonBool(bBashLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_bash_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_bash_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_bash_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) sText = " Bash On [" + sRange + " meters]"; + else sText = " Bash Off [" + sRange + " meters]"; + NuiSetBind (oPC, nToken, "btn_bash_locks_tooltip", JsonString(sText)); + // Row 8 + string sMagic = IntToString(GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT)); + NuiSetBind(oPC, nToken, "chbx_magic_level_check", JsonBool(bMagicLevel)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_level_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_level_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_level_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_magic_level_tooltip", JsonString(" Magic level [" + sMagic + "]")); + sText = " Spontaneous casting On"; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE)) sText = " Spontaneous casting Off"; + NuiSetBind(oPC, nToken, "chbx_spontaneous_check", JsonBool(bSpontaneous)); + NuiSetBindWatch (oPC, nToken, "chbx_spontaneous_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_tooltip", JsonString(sText)); + // Row 9 + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC)) sText = " Magic Off"; + else sText = " Magic On"; + NuiSetBind(oPC, nToken, "chbx_magic_check", JsonBool(bNoMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_tooltip", JsonString(sText)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) sText = " Magic Items Off"; + else sText = " Magic Items On"; + NuiSetBind(oPC, nToken, "chbx_magic_items_check", JsonBool(bNoMagicItems)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_items_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_tooltip", JsonString(sText)); + // Row 10 + if(ai_GetMagicMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) sText = " Defensive Magic On"; + else sText = " Defensive Magic Off"; + NuiSetBind(oPC, nToken, "chbx_def_magic_check", JsonBool (bDefMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_def_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_tooltip", JsonString(sText)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) sText = " Offensive Magic On"; + else sText = " Offensive Magic Off"; + NuiSetBind(oPC, nToken, "chbx_off_magic_check", JsonBool(bOffMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_off_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_tooltip", JsonString(sText)); + // Row 11 + int nHeal = GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT); + NuiSetBind(oPC, nToken, "chbx_heal_out_check", JsonBool(bHealOut)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_out_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_out_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_out_event", JsonBool(TRUE)); + sText = " Will heal at or below [" + IntToString(nHeal) + "%] health out of combat"; + NuiSetBind(oPC, nToken, "btn_heal_out_tooltip", JsonString(sText)); + nHeal = GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT); + NuiSetBind(oPC, nToken, "chbx_heal_in_check", JsonBool(bHealIn)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_in_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_in_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_in_event", JsonBool (TRUE)); + sText = " Will heal at or below [" + IntToString(nHeal) + "%] health in combat"; + NuiSetBind(oPC, nToken, "btn_heal_in_tooltip", JsonString(sText)); + // Row 12 + NuiSetBind(oPC, nToken, "chbx_heals_onoff_check", JsonBool(bSelfHealOnOff)); + NuiSetBindWatch (oPC, nToken, "chbx_heals_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heals_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heals_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF)) sText = " Self healing Off"; + else sText = " Self healing On"; + NuiSetBind(oPC, nToken, "btn_heals_onoff_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_healp_onoff_check", JsonBool(bPartyHealOnOff)); + NuiSetBind(oPC, nToken, "chbx_healp_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_healp_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_healp_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF)) sText = " Party healing Off"; + else sText = " Party healing On"; + NuiSetBind(oPC, nToken, "btn_healp_onoff_tooltip", JsonString(sText)); + // Row 13 + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_cure_onoff_check", JsonBool(bCureOnOff)); + NuiSetBind(oPC, nToken, "chbx_cure_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_cure_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cure_onoff_event", JsonBool(TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF)) sText = " Cast Cure Spells Off"; + else sText = " Cast Cure Spells On"; + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(sText)); + if(nAssociateType != ASSOCIATE_TYPE_SUMMONED && nAssociateType != ASSOCIATE_TYPE_DOMINATED) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE), 0, 0); + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sText = " Looting On [" + sRange + " meters]"; + else sText = " Looting Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "chbx_loot_check", JsonBool(bLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_loot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_tooltip", JsonString(sText)); + } + // Row 14 + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_check", JsonBool(bIgnoreAssociates)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_assoc_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) sText = " Ignore Enemy Associates On"; + else sText = " Ignore Enemy Associates Off"; + NuiSetBind (oPC, nToken, "btn_ignore_assoc_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "chbx_ignore_traps_check", JsonBool(bIgnoreTraps)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS)) sText = " Ignore Floor Traps On"; + else sText = " Ignore Floor Traps Off"; + NuiSetBind (oPC, nToken, "btn_ignore_traps_tooltip", JsonString(sText)); + // Row 15 + if(!bIsPC) + { + int nRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU"); + if(nRange < 8 || nRange > 11) + { + nRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION); + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION + "_MENU", nRange); + } + if(nRange == 8) sText = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + else if(nRange == 9) sText = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + else if(nRange == 10) sText = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + else sText = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + NuiSetBind(oPC, nToken, "chbx_perc_range_check", JsonBool(bPercRange)); + NuiSetBindWatch (oPC, nToken, "chbx_perc_range_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_tooltip", JsonString(sText)); + } + // Row 16 + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript == "") sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + NuiSetBind(oPC, nToken, "btn_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_script_tooltip", JsonString(" Sets " + GetName(oAssociate) + " to use the ai script in the text box.")); + NuiSetBind(oPC, nToken, "txt_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_ai_script", JsonString(sScript)); + NuiSetBind(oPC, nToken, "txt_ai_script_tooltip", JsonString(" Associate AI scripts must start with ai_a_")); + NuiSetBind(oPC, nToken, "cmb_ai_script_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_ai_script_selected", TRUE); + // Row 17 + sText = ai_GetRandomTip(); + NuiSetBind (oPC, nToken, "lbl_info_label", JsonString(sText)); +} +void ai_SetWidgetBinds(object oPC, object oAssociate, string sAssociateType, int nToken, string sName) +{ + int bBool, bIsPC = ai_GetIsCharacter(oAssociate); + string sText, sRange, sHeal; + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + string sPortrait = GetPortraitResRef(oAssociate); + string sSize; + if(ResManGetAliasFor(sPortrait + "s", RESTYPE_TGA) != "") sSize = "s"; + else if(ResManGetAliasFor(sPortrait + "m", RESTYPE_TGA) != "") sSize = "m"; + else if(ResManGetAliasFor(sPortrait + "l", RESTYPE_TGA)!= "") sSize = "l"; + else if(ResManGetAliasFor(sPortrait + "h", RESTYPE_TGA)!= "") sSize = "h"; + else sSize = "m"; + NuiSetBind(oPC, nToken, "btn_open_main_image", JsonString(sPortrait + sSize)); + NuiSetBind(oPC, nToken, "btn_open_main_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_main_tooltip", JsonString(" " + sName + " widget menu")); + if(ai_GetWidgetButton(oPC, BTN_ASSOC_WIDGETS_OFF, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_event", JsonBool(TRUE)); + if(ai_GetWidgetButton(oPC, BTN_WIDGET_OFF, oPC, "pc")) sText = " Associate Widgets [Off]"; + else sText = " Associate Widgets [On]"; + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_tooltip", JsonString(sText)); + } + if(bIsPC) sText = " All associates"; + else sText = " " + GetName(oAssociate); + if(ai_GetWidgetButton(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString(" Toggle camera view for " + sName)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_action_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_tooltip", JsonString(sText + " do actions")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_guard_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_tooltip", JsonString(sText + " enter guard mode")); + bBool = ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER); + NuiSetBind(oPC, nToken, "btn_cmd_guard_encouraged", JsonBool(bBool)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_hold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_tooltip", JsonString(sText + " enter hold mode")); + bBool = ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND); + NuiSetBind(oPC, nToken, "btn_cmd_hold_encouraged", JsonBool(bBool)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_attack_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_tooltip", JsonString(sText + " enter normal mode")); + if(!bIsPC) + { + if(!ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER) && + !ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND) && + !ai_GetAIMode(oAssociate, AI_MODE_FOLLOW)) bBool = TRUE; + else bBool = FALSE; + if(!bIsPC) NuiSetBind(oPC, nToken, "btn_cmd_attack_encouraged", JsonBool(bBool)); + } + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_follow_event", JsonBool(TRUE)); + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(bIsPC) + { + sText = " All associates"; + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode")); + } + else + { + sText = " " + GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(sText + " enter follow mode [" + sRange + " meters]")); + } + bBool = ai_GetAIMode(oAssociate, AI_MODE_FOLLOW); + if(!bIsPC) NuiSetBind(oPC, nToken, "btn_cmd_follow_encouraged", JsonBool(bBool)); + } + if(ai_GetAIButton(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_follow_target_event", JsonBool(TRUE)); + object oTarget = GetLocalObject(oAssociate, AI_FOLLOW_TARGET); + string sTarget; + if(oTarget != OBJECT_INVALID) sTarget = GetName(oTarget); + else + { + if(ai_GetIsCharacter(oAssociate)) sTarget = "nobody"; + else sTarget = GetName(oPC); + } + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + NuiSetBind(oPC, nToken, "btn_follow_target_tooltip", JsonString(" " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_SEARCH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_search_tooltip", JsonString(" Everyone" + sText + "search mode")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oPC, AI_MODE_AGGRESSIVE_STEALTH)) sText = " leave "; + else sText = " enter "; + NuiSetBind(oPC, nToken, "btn_cmd_stealth_tooltip", JsonString(" Everyone" + sText + "stealth mode")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType)) + { + sText = " Default tactics: Using the creatures base AI script"; + string sIcon = "ir_scommand"; + if(ResManGetAliasFor("0e_ch_1_hb", RESTYPE_NCS) != "") + { + string sScript = GetLocalString(oAssociate, AI_COMBAT_SCRIPT); + if(sScript == "ai_a_ambusher") + { + sText = " Ambusher: Attacks from a hidden position"; + sIcon = "ir_rogue"; + } + else if(sScript == "ai_a_flanker") + { + sText = " Flanker: Attacks enemies engaged with allies"; + sIcon = "ir_invite"; + } + else if(sScript == "ai_a_peaceful") + { + sText = " Peaceful: Avoids attacking any enemies if possible"; + sIcon = "ir_ignore"; + } + else if(sScript == "ai_a_defensive") + { + sText = " Defensive: Attacks then uses Expertise/Parry"; + sIcon = "ir_knockdwn"; + } + else if(sScript == "ai_a_ranged") + { + sText = " Ranged: Attacks from range as much as possible"; + sIcon = "ir_ranger"; + } + else if(sScript == "ai_a_cntrspell") + { + sText = " Counter Spell: Tries to counter enemy spells"; + sIcon = "ir_dcaster"; + } + } + else + { + if(GetCombatCondition(X0_COMBAT_FLAG_AMBUSHER, oAssociate)) sText = "Using ambush tactics"; + if(GetCombatCondition(X0_COMBAT_FLAG_COWARDLY, oAssociate)) sText = "Using coward tactics"; + if(GetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE, oAssociate)) sText = "Using defensive tactics"; + if(GetCombatCondition(X0_COMBAT_FLAG_RANGED, oAssociate)) sText = "Using ranged tactics"; + } + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_tooltip", JsonString(sText)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_tooltip", JsonString(" Place a trap at the location selected")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_short_event", JsonBool(TRUE)); + float fDelay = GetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING); + if(fDelay < 0.1) fDelay = 0.1; + string sDelay = FloatToString(fDelay, 0, 1); + NuiSetBind (oPC, nToken, "btn_buff_short_tooltip", JsonString( + " Buff the party with short duration spells. Cast speed [" + sDelay + "]")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_long_event", JsonBool(TRUE)); + float fDelay = GetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING); + if(fDelay < 0.1) fDelay = 0.1; + string sDelay = FloatToString(fDelay, 0, 1); + NuiSetBind (oPC, nToken, "btn_buff_long_tooltip", JsonString( + " Buff the party with long duration spells. Cast speed [" + sDelay + "]")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_all_event", JsonBool(TRUE)); + float fDelay = GetLocalFloat(oAssociate, AI_DELAY_BUFF_CASTING); + if(fDelay < 0.1) fDelay = 0.1; + string sDelay = FloatToString(fDelay, 0, 1); + NuiSetBind (oPC, nToken, "btn_buff_all_tooltip", JsonString( + " Buff the party with all spells. Cast speed [" + sDelay + "]")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_jump_to_event", JsonBool(TRUE)); + sText = GetName(oPC); + if(oPC == oAssociate) sName = "everyone"; + else sName = GetName(oAssociate); + NuiSetBind(oPC, nToken, "btn_jump_to_tooltip", JsonString(" Jump " + sName + " to " + sText)); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ghost_mode_event", JsonBool (TRUE)); + sText = "On"; + if(ai_GetAIMode(oAssociate, AI_MODE_GHOST)) sText = "Off"; + NuiSetBind(oPC, nToken, "btn_ghost_mode_tooltip", JsonString ( + " Turn " + sText + " clipping through creatures for " + GetName(oAssociate))); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString(" Open " + sName + " inventory")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_familiar_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_familiar_tooltip", JsonString(" Summon " + sName + " familiar.")); + } + if(ai_GetWidgetButton(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_companion_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_companion_tooltip", JsonString(" Open " + sName + " Animal Companion.")); + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_REST, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_buff_rest_event", JsonBool(TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_BUFF_AFTER_REST)) sText = " Turn buffing after resting off"; + else sText = " Turn buffing after resting on."; + NuiSetBind(oPC, nToken, "btn_buff_rest_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ai_event", JsonBool(TRUE)); + if(GetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT) == "xx_pc_1_hb") sText = " AI [On] Turn off"; + else sText = " AI [Off] Turn on"; + NuiSetBind(oPC, nToken, "btn_ai_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_quiet_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DO_NOT_SPEAK)) sText = " Reduced Speech On"; + else sText = " Reduced Speech Off"; + NuiSetBind(oPC, nToken, "btn_quiet_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ranged_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_STOP_RANGED)) sText = " Ranged Off"; + else sText = " Ranged On"; + NuiSetBind(oPC, nToken, "btn_ranged_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_equip_weapon_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_EQUIP_WEAPON_OFF)) sText = " Equiping Best Weapons Off"; + else sText = " Equiping Best Weapons On"; + NuiSetBind(oPC, nToken, "btn_equip_weapon_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sText = " Search On"; + else sText = " Search Off"; + NuiSetBind(oPC, nToken, "btn_search_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sText = " Stealth On"; + else sText = " Stealth Off"; + NuiSetBind(oPC, nToken, "btn_stealth_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_OPEN_DOORS_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_open_door_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_OPEN_DOORS)) sText = " Open Doors On [" + sRange + " meters]"; + else sText = " Open Doors Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_open_door_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_TRAP_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_DISARM_TRAPS)) sText = " Disable Traps On [" + sRange + " meters]"; + else sText = " Disable Traps Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_traps_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_pick_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PICK_LOCKS)) sText = " Pick locks On [" + sRange + " meters]"; + else sText = " Pick Locks Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_pick_locks_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOCK_CHECK_RANGE), 0, 0); + NuiSetBind(oPC, nToken, "btn_bash_locks_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) sText = " Bash On [" + sRange + " meters]"; + else sText = " Bash Off [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_bash_locks_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_magic_level_event", JsonBool(TRUE)); + string sMagic = IntToString(GetLocalInt(oAssociate, AI_DIFFICULTY_ADJUSTMENT)); + NuiSetBind(oPC, nToken, "btn_magic_level_tooltip", JsonString(" Magic Level [" + sMagic + "]")); + } + if(ai_GetAIButton(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType)) + { + string sCasting = " Spontaneous casting On"; + if(ai_GetMagicMode(oAssociate, AI_MAGIC_NO_SPONTANEOUS_CURE)) sCasting = " Spontaneous casting Off"; + NuiSetBind(oPC, nToken, "btn_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_tooltip", JsonString(sCasting)); + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_NO_MAGIC)) sText = " Magic Off"; + else sText = " Magic On"; + NuiSetBind(oPC, nToken, "btn_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_NO_MAGIC_ITEMS)) sText = " Magic Items Off"; + else sText = " Magic Items On"; + NuiSetBind(oPC, nToken, "btn_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_DEFENSIVE_CASTING)) sText = " Defensive Magic On"; + else sText = " Defensive Magic Off"; + NuiSetBind(oPC, nToken, "btn_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType)) + { + if(ai_GetAIMode(oAssociate, AI_MAGIC_OFFENSIVE_CASTING)) sText = " Offensive Magic On"; + else sText = " Offensive Magic Off"; + NuiSetBind(oPC, nToken, "btn_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_heal_out_event", JsonBool(TRUE)); + sHeal = IntToString(GetLocalInt(oAssociate, AI_HEAL_OUT_OF_COMBAT_LIMIT)); + sText = " Will heal at or below [" + sHeal + "%] health out of combat"; + NuiSetBind(oPC, nToken, "btn_heal_out_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_heal_in_event", JsonBool(TRUE)); + sHeal = IntToString(GetLocalInt(oAssociate, AI_HEAL_IN_COMBAT_LIMIT)); + sText = " Will heal at or below [" + sHeal + "%] health in combat"; + NuiSetBind(oPC, nToken, "btn_heal_in_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_heals_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_SELF_HEALING_OFF)) sText = " Self healing Off"; + else sText = " Self healing On"; + NuiSetBind(oPC, nToken, "btn_heals_onoff_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_healp_onoff_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_PARTY_HEALING_OFF)) sText = " Party healing Off"; + else sText = " Party healing On"; + NuiSetBind(oPC, nToken, "btn_healp_onoff_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_cure_onoff_event", JsonBool(TRUE)); + if(ai_GetMagicMode(oAssociate, AI_MAGIC_CURE_SPELLS_OFF)) sText = " Cast Cure Spells Off"; + else sText = " Cast Cure Spells On"; + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_LOOT, oAssociate, sAssociateType)) + { + sRange = FloatToString(GetLocalFloat(oAssociate, AI_LOOT_CHECK_RANGE), 0, 0); + string sLoot = " Looting Off [" + sRange + " meters]"; + if(ai_GetAIMode(oAssociate, AI_MODE_PICKUP_ITEMS)) sLoot = " Looting On [" + sRange + " meters]"; + NuiSetBind(oPC, nToken, "btn_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_tooltip", JsonString(sLoot)); + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ignore_assoc_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_ASSOCIATES)) sText = " Ignore Enemy Associates On"; + else sText = " Ignore Enemy Associates Off"; + NuiSetBind(oPC, nToken, "btn_ignore_assoc_tooltip", JsonString(sText)); + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_ignore_traps_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_IGNORE_TRAPS)) sText = " Ignore Floor Traps On"; + else sText = " Ignore Floor Traps Off"; + NuiSetBind(oPC, nToken, "btn_ignore_traps_tooltip", JsonString(sText)); + } + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + if(ai_GetAIButton(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType)) + { + int nRange = GetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION); + if(nRange < 8 || nRange > 11) + { + nRange = 11; + SetLocalInt(oAssociate, AI_ASSOCIATE_PERCEPTION, 11); + jAIData = JsonArraySet(jAIData, 7, JsonInt(11)); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + if(nRange == 8) sText = " Perception Range Short [10 meters Sight / 10 meters Listen]"; + if(nRange == 9) sText = " Perception Range Medium [20 meters Sight / 20 meters Listen]"; + if(nRange == 10) sText = " Perception Range Long [35 meters Sight / 20 meters Listen]"; + else sText = " Perception Range Default [20 meters Sight / 20 meters Listen]"; + NuiSetBind(oPC, nToken, "btn_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_tooltip", JsonString(sText)); + } + if(bIsPC) + { + int nIndex, bWidget; + string sButton, sName, sText, sScript; + json jPCPlugins = ai_UpdatePluginsForPC(oPC); + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget) + { + sButton = IntToString(nIndex); + sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + sText = " " + sScript + " not found by ResMan!"; + } + else sName = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_tooltip", JsonString(sName)); + } + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + } + if(ai_GetWidgetButton(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType)) + { + NuiSetBind(oPC, nToken, "btn_update_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_update_widget_tooltip", JsonString(" Updates Quick Use Widget")); + json jSpell, jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + object oItem; + if(JsonGetType(jWidget) != JSON_TYPE_NULL) + { + int nLevel, nSpell, nIndex, nClass, nMetaMagic, nDomain, nSubSpell, nFeat, nSAIndex, nUses; + string sSpellIcon, sMetaMagicText, sSubSpell, sClass, sIndex; + while(nIndex < 10) + { + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + sIndex = IntToString(nIndex); + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + if(nClass == -1) // This is an Item. + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = ""; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "uses_" + sIndex + "_text", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else + { + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nFeat) // This is a feat. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + nUses = GetHasFeat(nFeat, oAssociate); + if(nUses > 0) + { + NuiSetBind(oPC, nToken, "uses_" + sIndex + "_text", JsonString(IntToString(nUses))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else // This is a spell. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + nSAIndex = JsonGetInt(JsonArrayGet(jSpell, 6)); + if(nClass == 255) + { + if(GetSpellAbilityReady(oAssociate, nSAIndex)) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (Special Ability / " + IntToString(nLevel) + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else + { + nUses = GetSpellUsesLeft(oAssociate, nClass, nSpell, nMetaMagic, nDomain); + if(nUses > 0) + { + NuiSetBind(oPC, nToken, "uses_" + sIndex + "_text", JsonString(IntToString(nUses))); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + } + } + } + else break; + ++nIndex; + } + while(nIndex < 20) + { + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + sIndex = IntToString(nIndex); + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nClass == -1) // This is an Item. + { + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + if(oItem != OBJECT_INVALID) + { + string sBaseName; + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + int nBaseItemType = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit +" + IntToString(nIprpSubType); + sSpellIcon = "isk_heal"; + sBaseName = "Healer's Kit"; + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sBaseName = "Scroll"; + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) sBaseName = "Potion"; + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) sBaseName = "Wand"; + else sBaseName = ai_StripColorCodes(GetName(GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + int nUses = ai_GetItemUses(oItem, nIprpSubType); + if(nUses) + { + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + if(nUses == 999) sText = ""; + else sText = IntToString(nUses); + NuiSetBind(oPC, nToken, "uses_" + sIndex + "_text", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sBaseName + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else jWidget = JsonArrayDel(jWidget, nIndex--); + } + else if(nFeat) // This is a feat. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + sSpellIcon = ""; + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + if(sSpellIcon == "" || sSpellIcon == "IR_USE") + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + } + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + nUses = GetHasFeat(nFeat, oAssociate); + if(nUses > 0) + { + NuiSetBind(oPC, nToken, "uses_" + sIndex + "_text", JsonString(IntToString(nUses))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName)); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else // This is a spell. + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + //SendMessageToPC(oPC, GetName(oAssociate) + " nSpell: " + IntToString(nSpell) + + // " nClass: " + IntToString(nClass) + " nMetaMagic: " + IntToString(nMetaMagic) + + // " nDomain: " + IntToString(nDomain) + " nLevel: " + IntToString(nLevel)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_image", JsonString(sSpellIcon)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + sSubSpell = Get2DAString("spells", "Master", nSpell); + if(sSubSpell != "") nSpell = StringToInt(sSubSpell); + if(nClass == 255) + { + nSAIndex = JsonGetInt(JsonArrayGet(jSpell, 6)); + if(GetSpellAbilityReady(oAssociate, nSAIndex)) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (Special Ability / " + IntToString(nLevel) + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + else + { + nUses = GetSpellUsesLeft(oAssociate, nClass, nSpell, nMetaMagic, nDomain); + if(nUses > 0) + { + NuiSetBind(oPC, nToken, "uses_" + sIndex + "_text", JsonString(IntToString(nUses))); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevel) + ")")); + } + else NuiSetBind(oPC, nToken, "btn_widget_" + sIndex + "_event", JsonBool(FALSE)); + } + } + } + else break; + ++nIndex; + } + } + } +} +void ai_CreateWidgetNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + if(sAssociateType == "") return; + int bAIWidgetLock = ai_GetWidgetButton(oPC, BTN_WIDGET_LOCK, oAssociate, sAssociateType); + int bVertical = ai_GetWidgetButton(oPC, BTN_WIDGET_VERTICAL, oAssociate, sAssociateType); + float fButtons; + // ************************************************************************* Width / Height + // Row 1 (buttons)********************************************************** + // Setup the main associate button to use their portrait. + json jButton = NuiEnabled(NuiId (NuiButtonImage(NuiBind("btn_open_main_image")), "btn_open_main"), NuiBind("btn_open_main_event")); + jButton = NuiWidth(jButton, 35.0); + jButton = NuiHeight(jButton, 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind ("btn_open_main_tooltip")); + string sPortrait = GetPortraitResRef(oAssociate); + if(ResManGetAliasFor(sPortrait + "s", RESTYPE_TGA) != "") + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 32.0, 50.0)); + else if(ResManGetAliasFor(sPortrait + "m", RESTYPE_TGA) != "") + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 64.0, 100.0)); + else if(ResManGetAliasFor(sPortrait + "l", RESTYPE_TGA)!= "") + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 128.0, 200.0)); + else if(ResManGetAliasFor(sPortrait + "h", RESTYPE_TGA)!= "") + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 256.0, 400.0)); + else jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 64.0, 100.0)); + jButton = NuiAspect(jButton, 1.0); + //jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 32.0, 35.0)); + //jButton = NuiImage(jButton, JsonInt(NUI_ASPECT_FIT100), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_TOP)); + json jRow = JsonArrayInsert(JsonArray(), jButton); + if(ai_GetWidgetButton(oPC, BTN_ASSOC_WIDGETS_OFF, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_invite", "btn_toggle_assoc_widget", 35.0f, 35.0f, 0.0, "btn_toggle_assoc_widget_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_CAMERA, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_examine", "btn_camera", 35.0f, 35.0f, 0.0, "btn_camera_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_ACTION, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_action", "btn_cmd_action", 35.0f, 35.0f, 0.0, "btn_cmd_action_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GUARD, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_guard", "btn_cmd_guard", 35.0f, 35.0f, 0.0, "btn_cmd_guard_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_HOLD, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_standground", "btn_cmd_hold", 35.0f, 35.0f, 0.0, "btn_cmd_hold_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_ATTACK, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_attacknearest", "btn_cmd_attack", 35.0f, 35.0f, 0.0, "btn_cmd_attack_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FOLLOW, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_follow", "btn_cmd_follow", 35.0f, 35.0f, 0.0, "btn_cmd_follow_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_FOLLOW_TARGET, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_follow_target", 35.0f, 35.0f, 0.0, "btn_follow_target_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_SEARCH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_foc_search", "btn_cmd_search", 35.0f, 35.0f, 0.0, "btn_cmd_search_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_STEALTH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_foc_hide", "btn_cmd_stealth", 35.0f, 35.0f, 0.0, "btn_cmd_stealth_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_AI_SCRIPT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "", "btn_cmd_ai_script", 35.0f, 35.0f, 0.0, "btn_cmd_ai_script_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_PLACE_TRAP, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_settrap", "btn_cmd_place_trap", 35.0f, 35.0f, 0.0, "btn_cmd_place_trap_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_SHORT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_cantrips", "btn_buff_short", 35.0f, 35.0f, 0.0, "btn_buff_short_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_LONG, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_cast", "btn_buff_long", 35.0f, 35.0f, 0.0, "btn_buff_long_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_ALL, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_level789", "btn_buff_all", 35.0f, 35.0f, 0.0, "btn_buff_all_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_BUFF_REST, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_rest", "btn_buff_rest", 35.0f, 35.0f, 0.0, "btn_buff_rest_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_JUMP_TO, oAssociate, sAssociateType)) + { + string sImage; + if(oPC == oAssociate) sImage = "dm_jumpall"; + else sImage = "dm_jump"; + jRow = CreateButtonImage(jRow, sImage, "btn_jump_to", 35.0f, 35.0f, 0.0, "btn_jump_to_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_GHOST_MODE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_limbo", "btn_ghost_mode", 35.0f, 35.0f, 0.0, "btn_ghost_mode_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_INVENTORY, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_pickup", "btn_inventory", 35.0f, 35.0f, 0.0, "btn_inventory_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_FAMILIAR, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_familiar", "btn_familiar", 35.0f, 35.0f, 0.0, "btn_familiar_tooltip"); + fButtons += 1.0; + } + if(ai_GetWidgetButton(oPC, BTN_CMD_COMPANION, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ife_animal", "btn_companion", 35.0f, 35.0f, 0.0, "btn_companion_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_FOR_PC, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_ai", "btn_ai", 35.0f, 35.0f, 0.0, "btn_ai_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_REDUCE_SPEECH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_movsilent", "btn_quiet", 35.0f, 35.0f, 0.0, "btn_quiet_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_USE_RANGED, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_archer", "btn_ranged", 35.0f, 35.0f, 0.0, "btn_ranged_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_WEAPON_EQUIP, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_takeitem", "btn_equip_weapon", 35.0f, 35.0f, 0.0, "btn_equip_weapon_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_USE_SEARCH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_search", "btn_search", 35.0f, 35.0f, 0.0, "btn_search_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_USE_STEALTH, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_hide", "btn_stealth", 35.0f, 35.0f, 0.0, "btn_stealth_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_OPEN_DOORS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_open", "btn_open_door", 35.0f, 35.0f, 0.0, "btn_open_door_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_REMOVE_TRAPS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_distrap", "btn_traps", 35.0f, 35.0f, 0.0, "btn_traps_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_PICK_LOCKS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_olock", "btn_pick_locks", 35.0f, 35.0f, 0.0, "btn_pick_locks_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_BASH_LOCKS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_bash", "btn_bash_locks", 35.0f, 35.0f, 0.0, "btn_bash_locks_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_MAGIC_LEVEL, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_control", "btn_magic_level", 35.0f, 35.0f, 0.0, "btn_magic_level_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_NO_SPONTANEOUS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_xability", "btn_spontaneous", 35.0f, 35.0f, 0.0, "btn_spontaneous_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_cntrspell", "btn_magic", 35.0f, 35.0f, 0.0, "btn_magic_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_NO_MAGIC_ITEM_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_moreattacks", "btn_magic_items", 35.0f, 35.0f, 0.0, "btn_magic_items_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_DEF_MAGIC_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_orisons", "btn_def_magic", 35.0f, 35.0f, 0.0, "btn_def_magic_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_OFF_MAGIC_USE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_metamagic", "btn_off_magic", 35.0f, 35.0f, 0.0, "btn_off_magic_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_OUT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "isk_heal", "btn_heal_out", 35.0f, 35.0f, 0.0, "btn_heal_out_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_HEAL_IN, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "dm_heal", "btn_heal_in", 35.0f, 35.0f, 0.0, "btn_heal_in_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_SELF_HEALING, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_heal", "btn_heals_onoff", 35.0f, 35.0f, 0.0, "btn_heals_onoff_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_PARTY_HEALING, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_party", "btn_healp_onoff", 35.0f, 35.0f, 0.0, "btn_healp_onoff_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_STOP_CURE_SPELLS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_accept", "btn_cure_onoff", 35.0f, 35.0f, 0.0, "btn_cure_onoff_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_LOOT, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_barter", "btn_loot", 35.0f, 35.0f, 0.0, "btn_loot_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_ASSOCIATES, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_ignore", "btn_ignore_assoc", 35.0f, 35.0f, 0.0, "btn_ignore_assoc_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_IGNORE_TRAPS, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_abort", "btn_ignore_traps", 35.0f, 35.0f, 0.0, "btn_ignore_traps_tooltip"); + fButtons += 1.0; + } + if(ai_GetAIButton(oPC, BTN_AI_PERC_RANGE, oAssociate, sAssociateType)) + { + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_perc_range", 35.0f, 35.0f, 0.0, "btn_perc_range_tooltip"); + fButtons += 1.0; + } + int bIsPC = ai_GetIsCharacter(oAssociate); + if(bIsPC) + { + json jPCPlugins = ai_UpdatePluginsForPC(oPC); + // Plug in buttons ***************************************************** + int nIndex, bWidget; + string sIcon, sButton; + json jPlugin = JsonArrayGet(jPCPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget == 1) + { + sIcon = JsonGetString(JsonArrayGet(jPlugin, 3)); + sButton = IntToString(nIndex); + jRow = CreateButtonImage(jRow, sIcon, "btn_exe_plugin_" + sButton, 35.0f, 35.0f, 0.0, "btn_exe_plugin_" + sButton + "_tooltip"); + fButtons += 1.0; + } + jPlugin = JsonArrayGet(jPCPlugins, ++nIndex); + } + } + float fHeight, fWidth; + if(bAIWidgetLock) + { + fWidth = 50.0f; + fHeight = 50.0; + } + else if(bVertical) + { + fWidth = 88.0f; + fHeight = 55.0f; + } + else + { + fWidth = 55.0f; + fHeight = 88.0f; + } + // Quick Widget. + int nIndex, nSpell, nLevel, nMetaMagic; + float fQuickWidgetColumns; + string sClass, sLevel, sIndex; + object oItem; + json jSpell; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jCol = JsonArray(); + if(ai_GetWidgetButton(oPC, BTN_CMD_SPELL_WIDGET, oAssociate, sAssociateType) && + JsonGetLength(jWidget) > 0) + { + // Row 2 (Widget Row 1)************************************************* + if(JsonGetType(jWidget) != JSON_TYPE_NULL) + { + fQuickWidgetColumns += 1.0; + int bAdd; + float fSpellButtons; + json jButton, jRectangle, jMetaMagic, jDrawList, jUses; + // Add row to the column. + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + jRow = CreateButtonImage(JsonArray(), "ir_back", "btn_update_widget", 35.0f, 35.0f, 0.0, "btn_update_widget_tooltip"); + //CreateLabel(jRow, "", "blank_label", 35.0, 35.0, 0, 0, 0.0); + while(nIndex < 10) + { + bAdd = TRUE; + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jSpell, 1)) == -1) + { + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + if(oItem == OBJECT_INVALID) + { + bAdd = FALSE; + jWidget = JsonArrayDel(jWidget, nIndex--); + jSpells = JsonArrayInsert(jSpells, jWidget, 2); + jAIData = JsonArrayInsert(jAIData, jSpells, 10); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + } + if(bAdd) + { + sIndex = IntToString(nIndex); + jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + // Metamagic text. + jRectangle = NuiRect(4.0, 24.0, 10.0, 31.0); + jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + // Spell uses text. + jRectangle = NuiRect(24.0, 2.0, 31.0, 8.0); + jUses = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 255), jRectangle, NuiBind("uses_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jUses); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + fSpellButtons += 1.0; + } + } + else break; + ++nIndex; + } + if(fSpellButtons > fButtons) fButtons = fSpellButtons; + // Row 3 (Widget Row 2)************************************************* + if(nIndex > 9 && JsonGetLength(jWidget) > 10) + { + fQuickWidgetColumns += 1.0; + // Add row to the column. + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + jRow = CreateLabel(JsonArray(), "", "blank_label", 35.0, 35.0, 0, 0, 0.0); + while(nIndex < 20) + { + jSpell = JsonArrayGet(jWidget, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + if(JsonGetInt(JsonArrayGet(jSpell, 1)) == -1) + { + oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + if(oItem == OBJECT_INVALID) + { + bAdd = FALSE; + jWidget = JsonArrayDel(jWidget, nIndex--); + jSpells = JsonArrayInsert(jSpells, jWidget, 2); + jAIData = JsonArrayInsert(jAIData, jSpells, 10); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + } + if(bAdd) + { + sIndex = IntToString(nIndex); + jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + // Metamagic text. + jRectangle = NuiRect(4.0, 24.0, 10.0, 31.0); + jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + // Spell uses text. + jRectangle = NuiRect(24.0, 2.0, 31.0, 8.0); + jUses = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 255), jRectangle, NuiBind("uses_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jUses); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + fSpellButtons += 1.0; + } + } + else break; + ++nIndex; + } + } + } + // Add the row to the column. + if(nIndex > 0) + { + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + } + else + { + // Add the row to the column. + if(bVertical) jCol = JsonArrayInsert(jCol, NuiCol(jRow)); + else jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + float fScale = GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE) / 100.0; + float fButtonScale; + // 1.1 = 2.5 2.0 = 6.0 Ranges we need for scales to work correctly. + if(fScale > 1.0) fButtonScale = (fScale - 1.1) / (2.0 - 1.1) * 3.5 + 2.5; + else fButtonScale = 1.0; + if(fButtons > 0.0f) + { + if(bVertical) fWidth = fWidth + fButtons * 35.0f + fButtons * fButtonScale; + else fWidth = fWidth + fButtons * 35.0f; + } + if(fQuickWidgetColumns > 0.0f) + { + if(bVertical) fHeight = fHeight + fQuickWidgetColumns * 39.0f; + else fHeight = fHeight + fQuickWidgetColumns * 39.0f + fQuickWidgetColumns * fButtonScale; + } + // Get the window location to restore it from the database. + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) + { + ai_SetupAssociateData(oPC, oAssociate, sAssociateType); + jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + } + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_WIDGET_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + //SendMessageToPC(oPC, "0i_menu, 2901, sAssociateType: " + sAssociateType + AI_WIDGET_NUI + " jLocations: " + JsonDump(jLocations, 1)); + // Keeps the widgets from bunching up in the top corner. + if(fY == 0.0 && fX == 0.0) + { + int nAssociateType = GetAssociateType(oAssociate); + if(sAssociateType == "pc") fY = 1.0; + else if(nAssociateType == ASSOCIATE_TYPE_FAMILIAR) fY = 96.0 * fScale; + else if(nAssociateType == ASSOCIATE_TYPE_ANIMALCOMPANION) fY = 192.0 * fScale; + else if(nAssociateType == ASSOCIATE_TYPE_SUMMONED) fY = 288.0 * fScale; + else if(nAssociateType == ASSOCIATE_TYPE_DOMINATED) fY = 384.0 * fScale; + else + { + int nIndex = 1; + string sAssociateName = GetName(oAssociate); + while(nIndex < AI_MAX_HENCHMAN) + { + if(sAssociateName == GetName(GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex))) + { + fY = (88.0 + 88.0 * IntToFloat(nIndex - 1)); + break; + } + nIndex++; + } + } + fY = fY * fScale; + } + if(bAIWidgetLock) + { + fX += 4.0f; + // GUI scales are a mess, I just figured them out per scale to keep the widget from moving. + if(fScale == 1.0) fY += 37.0; + else if(fScale == 1.1) fY += 38.0; + else if(fScale == 1.2) fY += 40.0; + else if(fScale == 1.3) fY += 42.0; + else if(fScale == 1.4) fY += 43.0; + else if(fScale == 1.5) fY += 45.0; + else if(fScale == 1.6) fY += 47.0; + else if(fScale == 1.7) fY += 48.0; + else if(fScale == 1.8) fY += 50.0; + else if(fScale == 1.9) fY += 52.0; + else if(fScale == 2.0) fY += 54.0; + } + // Set the layout of the window. + json jLayout; + int nToken, bBool; + string sHeal, sText, sRange; + string sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + if(bVertical) + { + jLayout = NuiRow(jCol); + if(bAIWidgetLock) nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, "AI Widget", fX, fY, fHeight, fWidth, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui"); + else nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, sName + " Widget", fX, fY, fHeight, fWidth, FALSE, FALSE, FALSE, TRUE, TRUE, "0e_nui"); +} + else + { + jLayout = NuiCol(jCol); + if(bAIWidgetLock) nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, "AI Widget", fX, fY, fWidth, fHeight, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui"); + else nToken = SetWindow(oPC, jLayout, sAssociateType + AI_WIDGET_NUI, sName + " Widget", fX, fY, fWidth, fHeight, FALSE, FALSE, FALSE, TRUE, TRUE, "0e_nui"); + } + // Save the associate to the nui. + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + ai_SetWidgetBinds(oPC, oAssociate, sAssociateType, nToken, sName); +} +json ai_CreateLootFilterRow(json jRow, string sLabel, int nIndex) +{ + string sIndex = IntToString(nIndex); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "plc_hold", "txt_gold_" + sIndex, 9, FALSE, 90.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateCheckBox(jRow, sLabel, "chbx_" + sIndex, 200.0, 20.0); + return JsonArrayInsert(jRow, NuiSpacer()); +} +void ai_SetupLootElements(object oPC, object oAssociate, int nToken, int nLootBit, int nIndex) +{ + string sIndex = IntToString(nIndex); + int bLoot = ai_GetLootFilter(oAssociate, nLootBit); + NuiSetBind(oPC, nToken, "chbx_" + sIndex + "_check", JsonBool(bLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_" + sIndex + "_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_" + sIndex + "_event", JsonBool(TRUE)); + string sGold = IntToString(GetLocalInt(oAssociate, AI_MIN_GOLD_ + sIndex)); + NuiSetBind(oPC, nToken, "txt_gold_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_gold_" + sIndex, JsonString(sGold)); + NuiSetBindWatch (oPC, nToken, "txt_gold_" + sIndex, TRUE); +} +void ai_CreateLootFilterNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 318 / 73 + int bIsPC = ai_GetIsCharacter(oAssociate); + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateCheckBox(jRow, "Give all loot to the player", "chbx_give_loot", 200.0, 20.0, "chbx_give_loot_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 *************************************************************** 388 / 101 + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "plc_hold", "txt_max_weight", 9, FALSE, 50.0, 20.0, "txt_max_weight_tooltip"); + jRow = CreateLabel(jRow, "Maximum Weight to pickup", "lbl_weight", 200.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 *************************************************************** 388 / 129 + jRow = JsonArray(); + jRow = CreateButton(jRow, "Set All", "btn_set_all", 110.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_all", 110.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 *************************************************************** 388 / 157 + jRow = JsonArray(); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "Minimum Gold", "lbl_min_gold", 100.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateLabel(jRow, "Items to Pickup", "lbl_pickup", 140.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 *************************************************************** 388 / 185 + jRow = ai_CreateLootFilterRow(JsonArray(), "Plot items", 2); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 *************************************************************** 388 / 213 + jRow = ai_CreateLootFilterRow(JsonArray(), "Armor", 3); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 7 *************************************************************** 388 / 241 + jRow = ai_CreateLootFilterRow(JsonArray(), "Belts", 4); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 8 *************************************************************** 388 / 269 + jRow = ai_CreateLootFilterRow(JsonArray(), "Boots", 5); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 9 *************************************************************** 388 / 297 + jRow = ai_CreateLootFilterRow(JsonArray(), "Cloaks", 6); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 10 *************************************************************** 388 / 325 + jRow = ai_CreateLootFilterRow(JsonArray(), "Gems", 7); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 11 *************************************************************** 388 / 353 + jRow = ai_CreateLootFilterRow(JsonArray(), "Gloves and Bracers", 8); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 12 *************************************************************** 388 / 381 + jRow = ai_CreateLootFilterRow(JsonArray(), "Headgear", 9); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 13 *************************************************************** 388 / 409 + jRow = ai_CreateLootFilterRow(JsonArray(), "Jewelry", 10); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 14 *************************************************************** 388 / 437 + jRow = ai_CreateLootFilterRow(JsonArray(), "Miscellaneous items", 11); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 15 *************************************************************** 388 / 465 + jRow = ai_CreateLootFilterRow(JsonArray(), "Potions", 12); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 16 *************************************************************** 388 / 493 + jRow = ai_CreateLootFilterRow(JsonArray(), "Scrolls", 13); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 17 *************************************************************** 388 / 521 + jRow = ai_CreateLootFilterRow(JsonArray(), "Shields", 14); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 18 *************************************************************** 388 / 549 + jRow = ai_CreateLootFilterRow(JsonArray(), "Wands, Rods, and Staves", 15); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 19 ************************************************************** 388 / 577 + jRow = ai_CreateLootFilterRow(JsonArray(), "Weapons", 16); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 20 ************************************************************** 388 / 605 + jRow = ai_CreateLootFilterRow(JsonArray(), "Arrows", 17); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 21 ************************************************************** 388 / 633 + jRow = ai_CreateLootFilterRow(JsonArray(), "Bolts", 18); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 22 ************************************************************** 388 / 661 + jRow = ai_CreateLootFilterRow(JsonArray(), "Bullets", 19); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_LOOTFILTER_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sText, sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_LOOTFILTER_NUI, sName + " Loot Filter", + fX, fY, 318.0, 673.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui. + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + int bGiveLoot = ai_GetLootFilter(oAssociate, AI_LOOT_GIVE_TO_PC); + NuiSetBind(oPC, nToken, "chbx_give_loot_check", JsonBool (bGiveLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_give_loot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_give_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_give_loot_tooltip", JsonString( + " Check this to make henchman give any loot picked up to the player.")); + // Row 2 + int nWeight = GetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT); + if(nWeight == 0) + { + nWeight = 200; + SetLocalInt(oAssociate, AI_MAX_LOOT_WEIGHT, nWeight); + } + NuiSetBind(oPC, nToken, "txt_max_weight_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_max_weight", JsonString(IntToString(nWeight))); + NuiSetBindWatch (oPC, nToken, "txt_max_weight", TRUE); + NuiSetBind(oPC, nToken, "txt_max_weight_tooltip", JsonString(" Max weighted item you will pickup from 1 to 1,000")); + // Row 3 + NuiSetBind(oPC, nToken, "btn_set_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_set_all", JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_all", JsonInt(TRUE)); + // Row 4 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_PLOT, 2); + // Row 5 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_ARMOR, 3); + // Row 6 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BELTS, 4); + // Row 7 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BOOTS, 5); + // Row 8 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_CLOAKS, 6); + // Row 9 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_GEMS, 7); + // Row 10 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_GLOVES, 8); + // Row 11 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_HEADGEAR, 9); + // Row 12 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_JEWELRY, 10); + // Row 13 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_MISC, 11); + // Row 14 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_POTIONS, 12); + // Row 15 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_SCROLLS, 13); + // Row 16 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_SHIELDS, 14); + // Row 17 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_WANDS_RODS_STAVES, 15); + // Row 18 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_WEAPONS, 16); + // Row 19 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_ARROWS, 17); + // Row 20 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BOLTS, 18); + // Row 21 + ai_SetupLootElements(oPC, oAssociate, nToken, AI_LOOT_BULLETS, 19); +} +void ai_CreateCopySettingsNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 244 / 73 + string sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Copy settings to", "lbl_paste", 220.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 244 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "All Associates", "btn_paste_all", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 2 ******************************************************************* 244 / 129 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Familiar", "btn_paste_familiar", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 244 / 157 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Companion", "btn_paste_companion", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 244 / 213 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Dominated", "btn_paste_dominated", 220.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5+ ******************************************************************* 244 / 185 + float fHeight = 213.0; + int nIndex; + string sAssocName; + object oAssoc; + for(nIndex = 1; nIndex < AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocName = GetName(oAssoc); + if(GetStringRight(sAssocName, 1) == "s") sAssocName = sAssocName + "'"; + else sAssocName = sAssocName + "'s"; + jRow = CreateButton(JsonArray(), sAssocName, "btn_paste_summons" + IntToString(nIndex), 220.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else break; + } + // Row 5+ ****************************************************************** 244 / 241 + for(nIndex = 1; nIndex < AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + sAssocName = GetName(oAssoc); + if(GetStringRight(sAssocName, 1) == "s") sAssocName = sAssocName + "'"; + else sAssocName = sAssocName + "'s"; + jRow = CreateButton(JsonArray(), sAssocName, "btn_paste_henchman" + IntToString(nIndex), 220.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else break; + } + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_COPY_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_COPY_NUI, sName + " Copy Settings Menu", + fX, fY, 244.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui. + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + NuiSetBind(oPC, nToken, "btn_paste_all_event", JsonBool (TRUE)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + NuiSetBind(oPC, nToken, "btn_paste_familiar_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + NuiSetBind(oPC, nToken, "btn_paste_companion_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + NuiSetBind(oPC, nToken, "btn_paste_summons_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + oAssoc = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + NuiSetBind(oPC, nToken, "btn_paste_dominated_event", JsonBool(oAssoc != oAssociate && oAssoc != OBJECT_INVALID)); + for(nIndex = 1; nIndex < AI_MAX_HENCHMAN; nIndex++) + { + oAssoc = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssoc != OBJECT_INVALID) + { + NuiSetBind(oPC, nToken, "btn_paste_henchman" + IntToString(nIndex) + "_event", JsonBool(oAssoc != oAssociate)); + } + else break; + } +} +void ai_CreatePluginNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int nIndex, nButton; + string sButton; + // Row 1 ******************************************************************* 500 / 73 + json jRow = CreateButton(JsonArray(), "Load Plugins", "btn_load_plugins", 150.0f, 20.0f, -1.0, "btn_load_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Load Monster Mods", "btn_load_m_mods", 150.0f, 20.0f, -1.0, "btn_load_m_mods_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Check All", "btn_check_plugins", 80.0f, 20.0f, -1.0, "btn_check_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_plugins", 80.0f, 20.0f, -1.0, "btn_clear_plugins_tooltip"); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Add Plugin", "btn_add_plugin", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_plugin", 16, FALSE, 310.0f, 20.0f, "txt_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 101.0; + // Row 3+ ****************************************************************** 500 / --- + json jPlugins = ai_GetAssociateDbJson(oPC, "pc", "plugins"); + nIndex = 0; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + string sName; + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Remove Plugin", "btn_remove_plugin_" + sButton, 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 290.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + // Get the window location to restore it from the database. + json jLocations = ai_GetAssociateDbJson(oPC, "pc", "locations"); + float fX, fY; + jLocations = JsonObjectGet(jLocations, AI_PLUGIN_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = ai_StripColorCodes(GetName(oPC)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, AI_PLUGIN_NUI, sName + " PEPS Plugin Manager", + fX, fY, 500.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 + NuiSetBind(oPC, nToken, "btn_load_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_load_plugins_tooltip", JsonString(" Load all known PEPS plugins that are in the game files.")); + NuiSetBind(oPC, nToken, "btn_load_m_mods_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_load_m_mods_tooltip", JsonString(" Load all known PEPS monster mods that are in the game files.")); + NuiSetBind(oPC, nToken, "btn_check_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_check_plugins_tooltip", JsonString(" Add all plugins to the players widget.")); + NuiSetBind(oPC, nToken, "btn_clear_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_plugins_tooltip", JsonString(" Remove all plugins from the players widget.")); + // Row 2 + NuiSetBind(oPC, nToken, "btn_add_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_tooltip", JsonString(" Enter an executable script name.")); + // Row 3+ + nIndex = 0; + int bCheck; + string sText; + jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_remove_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bCheck = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bCheck < 3) + { + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bCheck)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + } + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } +} +int ai_SpellNotInList(int nSpell, json jSpellArray) +{ + int nMaxArray = JsonGetLength(jSpellArray); + int nIndex; + while(nIndex < nMaxArray) + { + if(nSpell == JsonGetInt(JsonArrayGet(JsonArrayGet(jSpellArray, nIndex), 0))) return FALSE; + nIndex++; + } + return TRUE; +} +json ai_CheckItemAbilities(json jQuickListArray, object oCreature, object oItem, json jSpell_Icon, json jSpell_Text, int bEquiped = FALSE) +{ + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return jQuickListArray; + int nPerDay, nCharges, nUses, bSaveTalent, nBaseItemType; + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + string sSpellIcon, sSpellName; + itemproperty ipProp = GetFirstItemProperty(oItem); + json jSpell; + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return jQuickListArray; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + nIPType = GetItemPropertyType(ipProp); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + bSaveTalent = TRUE; + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + nCharges = GetItemCharges(oItem); + if((nUses == IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE && nCharges < 1) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE && nCharges < 2) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE && nCharges < 3) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE && nCharges < 4) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE && nCharges < 5)) bSaveTalent = FALSE; + } + else if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1676", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) bSaveTalent = FALSE; + } + if(bSaveTalent) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nBaseItemType = GetBaseItemType(oItem); + if(nBaseItemType == BASE_ITEM_ENCHANTED_SCROLL || + nBaseItemType == BASE_ITEM_SCROLL || + nBaseItemType == BASE_ITEM_SPELLSCROLL) + { + sSpellIcon = Get2DAString("iprp_spells", "Icon", nIprpSubType); + sSpellName = ai_StripColorCodes(GetName(oItem)); + nUses = GetNumStackedItems(oItem); + } + else + { + if(nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS) + { + sSpellName = ai_StripColorCodes(GetName(oItem)); + nUses = GetNumStackedItems(oItem); + } + else if(nBaseItemType == BASE_ITEM_ENCHANTED_WAND || + nBaseItemType == BASE_ITEM_MAGICWAND || + nBaseItemType == FEAT_CRAFT_WAND) + { + sSpellName = ai_StripColorCodes(GetName(oItem)); + nUses = nCharges; + } + else + { + sSpellName = ai_StripColorCodes(GetName(oItem)) + ": "; + sSpellName += GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(nCharges) nUses = nCharges; + else nUses = nPerDay; + } + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + } + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(-1)); // Class is set to -1 for items + jSpell = JsonArrayInsert(jSpell, JsonInt(nUses)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nBaseItemType)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nIprpSubType)); + jSpell = JsonArrayInsert(jSpell, JsonString(GetObjectUUID(oItem))); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + else if(nIPType == ITEM_PROPERTY_HEALERS_KIT) + { + // Must also have ranks in healing kits. + if(GetSkillRank(SKILL_HEAL, oCreature) > 0) + { + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString("isk_heal")); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(ai_StripColorCodes(GetName(oItem)))); + json jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(SPELL_HEALINGKIT)); + jSpell = JsonArrayInsert(jSpell, JsonInt(-1)); // Class is set to -1 for items + jSpell = JsonArrayInsert(jSpell, JsonInt(GetNumStackedItems(oItem))); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jSpell = JsonArrayInsert(jSpell, JsonInt(GetItemPropertyCostTableValue(ipProp))); + jSpell = JsonArrayInsert(jSpell, JsonString(GetObjectUUID(oItem))); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + SetLocalJson(oCreature, "JSPELL_ICON", jSpell_Icon); + SetLocalJson(oCreature, "JSPELL_NAME", jSpell_Text); + return jQuickListArray; +} +void ai_CreateQuickWidgetSelectionNUI(object oPC, object oAssociate) +{ + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + json jRow = JsonArray(); + // Row 1 Classes************************************************************ 414 / 88 + int nClass, nLevel, nIndex; + string sIndex, sClassIcon, sLevelIcon; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + // This saves the class position in the button id so we can get it later. + sIndex = IntToString(nIndex); + sClassIcon = Get2DAString("classes", "Icon", nClass); + jRow = CreateButtonImage(jRow, sClassIcon, "btn_class_" + sIndex, 35.0f, 35.0f, 0.0, "btn_class_" + sIndex + "_tooltip"); + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Levels) ********************************************************** 414 / 131 + jRow = CreateButtonImage(JsonArray(), "", "btn_level_11" , 35.0f, 35.0f, 0.0, "btn_level_11_tooltip"); + jRow = CreateButtonImage(jRow, "", "btn_level_10" , 35.0f, 35.0f, 0.0, "btn_level_10_tooltip"); + for(nIndex = 0; nIndex <= 9; nIndex++) + { + // This saves the level in the button id so we can get it later. + sIndex = IntToString(nIndex); + jRow = CreateButtonImage(jRow, "", "btn_level_" + sIndex, 35.0f, 35.0f, 0.0, "btn_level_" + sIndex + "_tooltip"); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Spell List)******************************************************* 414 / 433 + json jButton = JsonArray(); + jButton = NuiButton(NuiBind("text_spell")); + jButton = NuiId(jButton, "btn_text_spell"); + json jRectangle = NuiRect(4.0, 4.0, 27.0, 27.0); + json jDrawList = JsonArrayInsert(JsonArray(), NuiDrawListImage(JsonBool(TRUE), NuiBind("icon_spell"), jRectangle, JsonInt(NUI_ASPECT_FILL), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_MIDDLE))); + jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_text")); + jDrawList = JsonArrayInsert(jDrawList, jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + json jListTemplate = JsonArrayInsert(JsonArray(), NuiListTemplateCell(jButton, 345.0, FALSE)); + json jInfo = NuiButtonImage(JsonString("gui_cg_qstn_mark")); + jInfo = NuiId(jInfo, "btn_info_spell"); + jListTemplate = JsonArrayInsert(jListTemplate, NuiListTemplateCell(jInfo, 35.0, FALSE)); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiList(jListTemplate, NuiBind("icon_spell"), 35.0), 282.0)); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Widget Label)***************************************************** 414 / 461 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Quick Widget List", "lbl_quick_list", 150.0, 20.0, 0, 0, 0.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Widget row 1)***************************************************** 414 / 504 + jRow = JsonArray(); + for(nIndex = 0; nIndex < 10; nIndex++) + { + // This saves the index location in the json jWidget in the button id for later use. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 (Widget row 2)***************************************************** 414 / 543 + jRow = JsonArray(); + for(nIndex = 10; nIndex < 20; nIndex++) + { + // This saves the index location in the json jWidget in the button id for later use. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_widget_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_widget_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_widget_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_widget_" + sIndex + "_tooltip")); + json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_QUICK_WIDGET_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sText, sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_QUICK_WIDGET_NUI, sName + " Quick Widget Menu", + fX, fY, 414.0, 543.0 + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Set the Layout of the window. + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + json jSpells; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + // Temporary fix for error! :/ + if(JsonGetLength(jAIData) == 0) + { + ai_CheckAssociateData(oPC, oAssociate, sAssociateType, TRUE); + jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(10)); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + nLevel = 10; + } + if(JsonGetLength(jAIData) == 9) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(10)); + jSpells = JsonArrayInsert(jSpells, JsonArray()); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + nLevel = 10; + } + else + { + jSpells = JsonArrayGet(jAIData, 10); + if(JsonGetLength(jSpells) == 0) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(10)); + jSpells = JsonArrayInsert(jSpells, JsonArray()); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + nLevel = 10; + } + else + { + nClass = JsonGetInt(JsonArrayGet(jSpells, 0)); + nLevel = JsonGetInt(JsonArrayGet(jSpells, 1)); + } + } + if(nClass < 1 || nClass > AI_MAX_CLASSES_PER_CHARACTER) nClass = 1; + nClass = GetClassByPosition(nClass, oAssociate); + // Row 1 & 2 Class & Level + int nSpellLevel, nLevelIndex, nClassIndex, nMaxSpellLevel; + string sClass, sLevel, sLevelImage, sLevelIndex; + NuiSetBind(oPC, nToken, "btn_level_11_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_11_tooltip", JsonString(" Item Powers")); + NuiSetBind(oPC, nToken, "btn_level_11_image", JsonString("ir_attack")); + NuiSetBind(oPC, nToken, "btn_level_10_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_10_tooltip", JsonString(" Special Abilities")); + NuiSetBind(oPC, nToken, "btn_level_10_image", JsonString("dm_god")); + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClassIndex = GetClassByPosition(nIndex, oAssociate); + if(nClassIndex != CLASS_TYPE_INVALID) + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClassIndex))); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_tooltip", JsonString(" " + sClass)); + if(nClass == nClassIndex) + { + if(StringToInt(Get2DAString("classes", "SpellCaster", nClass))) + { + int nClassLevel = ai_GetCasterTotalLevel(oAssociate, nClass); + string sSpellsGained = Get2DAString("classes", "SpellGainTable", nClass); + int nMaxSpellLevel = StringToInt(Get2DAString(sSpellsGained, "NumSpellLevels", nClassLevel - 1)); + for(nLevelIndex = 0; nLevelIndex <= 9; nLevelIndex++) + { + sLevelIndex = IntToString(nLevelIndex); + if(nLevelIndex < nMaxSpellLevel) + { + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(TRUE)); + if(nLevelIndex == 0) sLevelImage = "ir_cantrips"; + else if(nLevelIndex < 7)sLevelImage = "ir_level" + sLevelIndex; + else sLevelImage = "ir_level789"; + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_image", JsonString(sLevelImage)); + if(nLevelIndex == 0) sLevel = " Cantrips"; + else if(nLevelIndex == 1) sLevel = " First level"; + else if(nLevelIndex == 2) sLevel = " Second level"; + else if(nLevelIndex == 3) sLevel = " Third level"; + else if(nLevelIndex == 4) sLevel = " Fourth level"; + else if(nLevelIndex == 5) sLevel = " Fifth level"; + else if(nLevelIndex == 6) sLevel = " Sixth level"; + else if(nLevelIndex == 7) sLevel = " Seventh level"; + else if(nLevelIndex == 8) sLevel = " Eighth level"; + else if(nLevelIndex == 9) sLevel = " Ninth level"; + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_tooltip", JsonString(" " + sLevel)); + } + else + { + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(FALSE)); + } + } + NuiSetBind(oPC, nToken, "btn_level_" + IntToString(nLevel) + "_encouraged", JsonBool(TRUE)); + } + // Default to the abilities tab since they are not a caster. + else + { + if(nLevel < 10) nLevel = 10; + for(nLevelIndex = 0; nLevelIndex <= 9; nLevelIndex++) + { + sLevelIndex = IntToString(nLevelIndex); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sLevelIndex + "_event", JsonBool(FALSE)); + } + NuiSetBind(oPC, nToken, "btn_level_10_encouraged", JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "btn_class_" + IntToString(nClass) + "_encouraged", JsonBool(TRUE)); + } + } + } + // Row 3 Items/Abilities/Skills/Spells + int nSpell, nMetaMagic, nDomain, nSubSpell, nSubSpellIndex; + int nSpellSlot, nCounter, nMax2daRow, nFeat; + string sSpellIcon, sSpellName, sMetaMagicText, sClassFeats, sSubSpellIndex; + object oItem; + json jQuickListArray = JsonArray(); + json jSpell; + json jSpell_Icon = JsonArray(); + json jSpell_Text = JsonArray(); + SetLocalJson(oAssociate, "JSPELL_ICON", jSpell_Icon); + SetLocalJson(oAssociate, "JSPELL_NAME", jSpell_Text); + json jMetaMagic_Text = JsonArray(); + // Item powers + if(nLevel == 11) + { + string sSlots; + // Cycle through all the creatures inventory items. + oItem = GetFirstItemInInventory(oAssociate); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(sSlots == "0x00000") + { + jQuickListArray = ai_CheckItemAbilities(jQuickListArray, oAssociate, oItem, jSpell_Icon, jSpell_Text, FALSE); + jSpell_Icon = GetLocalJson(oAssociate, "JSPELL_ICON"); + jSpell_Text = GetLocalJson(oAssociate, "JSPELL_NAME"); + //WriteTimestampedLogEntry("0i_menus, 3643, oAssociate: " + GetName(oAssociate) + + // " jSpell_Text: " + JsonDump(jSpell_Text, 4)); + } + } + oItem = GetNextItemInInventory(oAssociate); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oAssociate); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) + { + jQuickListArray = ai_CheckItemAbilities(jQuickListArray, oAssociate, oItem, jSpell_Icon, jSpell_Text, TRUE); + jSpell_Icon = GetLocalJson(oAssociate, "JSPELL_ICON"); + jSpell_Text = GetLocalJson(oAssociate, "JSPELL_NAME"); + } + oItem = GetItemInSlot(++nSlot, oAssociate); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oAssociate); + if(oItem != OBJECT_INVALID) + { + jQuickListArray = ai_CheckItemAbilities(jQuickListArray, oAssociate, oItem, jSpell_Icon, jSpell_Text, TRUE); + jSpell_Icon = GetLocalJson(oAssociate, "JSPELL_ICON"); + jSpell_Text = GetLocalJson(oAssociate, "JSPELL_NAME"); + } + DeleteLocalJson(oAssociate, "JSPELL_ICON"); + DeleteLocalJson(oAssociate, "JSPELL_NAME"); + } + // Special abilities and skills. + else if(nLevel == 10) + { + json jCreature = ObjectToJson(oAssociate); + json jFeatList = GffGetList(jCreature, "FeatList"); + int nIndex, nSuccessor; + json jFeat = JsonArrayGet(jFeatList, nIndex); + while(JsonGetType(jFeat) != JSON_TYPE_NULL) + { + nFeat = JsonGetInt(GffGetWord(jFeat, "Feat")); + if(Get2DAString("feat", "USESPERDAY", nFeat) != "" || + Get2DAString("feat", "HostileFeat", nFeat) != "") + { + // Check for subfeats. + nSpell = StringToInt(Get2DAString("feat", "SPELLID", nFeat)); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell1", nSpell)); + //SendMessageToPC(oPC, "nFeat: " + IntToString(nFeat) + + // " nSpell: " + IntToString(nSpell) + + // " nSubSpell: " + IntToString(nSubSpell)); + if(nSubSpell) + { + for(nSubSpellIndex = 1; nSubSpellIndex <= 5; nSubSpellIndex++) + { + sSubSpellIndex = IntToString(nSubSpellIndex); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell" + sSubSpellIndex, nSpell)); + //SendMessageToPC(oPC, " nSpell: " + IntToString(nSpell) + + // " nSubSpell: " + IntToString(nSubSpell)); + if(nSubSpell != 0) + { + sSpellIcon = Get2DAString("spells", "iConResRef", nSubSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSubSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSubSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(-1)); // Level + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); // MetaMagic + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // Domain + jSpell = JsonArrayInsert(jSpell, JsonInt(nFeat)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + else if((nFeat < 71 || nFeat > 81)) + { + nSuccessor = StringToInt(Get2DAString("feat", "SUCCESSOR", nFeat)); + if(nSuccessor && GetHasFeat(nSuccessor, oAssociate, TRUE)) + { /* Don't do anything we just skip adding this feat. */} + else + { + sSpellIcon = Get2DAString("feat", "ICON", nFeat); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // Level + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // MetaMagic + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // Domain + jSpell = JsonArrayInsert(jSpell, JsonInt(nFeat)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + jFeat = JsonArrayGet(jFeatList, ++nIndex); + } + // Checks for monsters special abilities. + int nCounter = 0, nPreviousSpell = -1, nMaxSpellAbility = GetSpellAbilityCount(oAssociate); + while(nCounter < nMaxSpellAbility) + { + nSpell = GetSpellAbilitySpell(oAssociate, nCounter); + if(nPreviousSpell != nSpell) + { + nPreviousSpell = nSpell; + // Check for subfeats. + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell1", nSpell)); + if(nSubSpell) + { + for(nSubSpellIndex = 1; nSubSpellIndex <= 5; nSubSpellIndex++) + { + sSubSpellIndex = IntToString(nSubSpellIndex); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell" + sSubSpellIndex, nSpell)); + if(nSubSpell != 0) + { + sSpellIcon = Get2DAString("spells", "iConResRef", nSubSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSubSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSubSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // Level + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); // MetaMagic + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // Domain + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // Feat + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + else + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); // Class - Special abilities is always 255. + jSpell = JsonArrayInsert(jSpell, JsonInt(GetSpellAbilityCasterLevel(oAssociate, nCounter))); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // metamagic + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // domain + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); // feat + // Index of Special ability on monster. + jSpell = JsonArrayInsert(jSpell, JsonInt(nCounter)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + //SendMessageToPC(oPC, "nSpell: " + IntToString(nSpell) + + // " sSpellIcon: " + sSpellIcon + + // " sSpellName: " + sSpellName+ + // " nMaxSlot: " + IntToString(nMaxSpellAbility) + + // " nSpellAbilityIndex: " + IntToString(nCounter)); + } + } + nCounter++; + } + // Used in the execution script to get the special abilities. + //jData = JsonArrayInsert(jData, jQuickListArray); + } + else // Anything else is for spells. + { + // Search all memorized spells for the spell. + //SendMessageToPC(oPC, GetName(oAssociate) + " nClass: " + IntToString(nClass) + + // " nLevelSelected: " + IntToString(nLevel) + + // " nMemorizesSpells: " + Get2DAString("classes", "MemorizesSpells", nClass)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + int nMaxSlot = GetMemorizedSpellCountByLevel(oAssociate, nClass, nLevel); + while(nSpellSlot < nMaxSlot) + { + nSpell = GetMemorizedSpellId(oAssociate, nClass, nLevel, nSpellSlot); + if(nSpell != -1 && ai_SpellNotInList(nSpell, jQuickListArray)) + { + nMetaMagic = GetMemorizedSpellMetaMagic(oAssociate, nClass, nLevel, nSpellSlot); + nDomain = GetMemorizedSpellIsDomainSpell(oAssociate, nClass, nLevel, nSpellSlot); + // Check for subspells. + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell1", nSpell)); + if(nSubSpell) + { + for(nSubSpellIndex = 1; nSubSpellIndex < 6; nSubSpellIndex++) + { + sSubSpellIndex = IntToString(nSubSpellIndex); + nSubSpell = StringToInt(Get2DAString("spells", "SubRadSpell" + sSubSpellIndex, nSpell)); + if(nSubSpell && ai_SpellNotInList(nSubSpell, jQuickListArray)) + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSubSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSubSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSubSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nMetaMagic)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nDomain)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + } + } + else + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nMetaMagic, nDomain); + jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nMetaMagic)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nDomain)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + //SendMessageToPC(oPC, "nSpell: " + IntToString(nSpell) + + // " sSpellIcon: " + sSpellIcon + + // " sSpellName: " + sSpellName+ + // " nMaxSlot: " + IntToString(nMaxSlot) + + // " nSpellSlot: " + IntToString(nSpellSlot)); + } + } + ++nSpellSlot; + } + } + // Non-memorized spells. + else + { + int nMaxSlot = GetKnownSpellCount(oAssociate, nClass, nLevel); + while(nSpellSlot < nMaxSlot) + { + nSpell = GetKnownSpellId(oAssociate, nClass, nLevel, nSpellSlot); + if(nSpell != -1)// && ai_SpellNotInList(nSpell, jQuickListArray)) + { + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(255)); + jSpell = JsonArrayInsert(jSpell, JsonInt(0)); + jQuickListArray = JsonArrayInsert(jQuickListArray, jSpell); + } + ++nSpellSlot; + } + } + } + NuiSetBind(oPC, nToken, "icon_spell", jSpell_Icon); + NuiSetBind(oPC, nToken, "text_spell", jSpell_Text); + NuiSetBind(oPC, nToken, "metamagic_text", jMetaMagic_Text); + jData = JsonArrayInsert(jData, jQuickListArray); + NuiSetUserData(oPC, nToken, jData); + // Row 4 Quick widget list label. + // Row 5 Quick widget List 1 + ai_PopulateWidgetList(oPC, oAssociate, nToken, JsonArrayGet(jSpells, 2)); +} +void ai_CreateSpellMemorizationNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jRow = JsonArray(); + // Row 1 Classes************************************************************ 414 / 73 + int nClass, bCaster, nIndex; + string sIndex, sClassIcon, sLevelIcon; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + if(StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + // This saves the class position in the button id so we can get it later. + sIndex = IntToString(nIndex); + sClassIcon = Get2DAString("classes", "Icon", nClass); + jRow = CreateButtonImage(jRow, sClassIcon, "btn_class_" + sIndex, 35.0f, 35.0f, 0.0, "btn_class_" + sIndex + "_tooltip"); + } + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Levels) ********************************************************** 414 / 116 + jRow = JsonArray(); + for(nIndex = 0; nIndex <= 9; nIndex++) + { + // This saves the level in the button id so we can get it later. + sIndex = IntToString(nIndex); + jRow = CreateButtonImage(jRow, "", "btn_level_" + sIndex, 35.0f, 35.0f, 0.0, "btn_level_" + sIndex + "_tooltip"); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Spell List)******************************************************* 414 / 398 + json jButton = JsonArray(); + jButton = NuiButton(NuiBind("text_spell")); + jButton = NuiId(jButton, "btn_text_spell"); + json jRectangle = NuiRect(4.0, 4.0, 27.0, 27.0); + json jDrawList = JsonArrayInsert(JsonArray(), NuiDrawListImage(JsonBool(TRUE), NuiBind("icon_spell"), jRectangle, JsonInt(NUI_ASPECT_FILL), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_MIDDLE))); + //jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_text")); + //jDrawList = JsonArrayInsert(jDrawList, jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + json jListTemplate = JsonArrayInsert(JsonArray(), NuiListTemplateCell(jButton, 275.0, FALSE)); + json jInfo = NuiButtonImage(JsonString("gui_cg_qstn_mark")); + jInfo = NuiId(jInfo, "btn_info_spell"); + jListTemplate = JsonArrayInsert(jListTemplate, NuiListTemplateCell(jInfo, 35.0, FALSE)); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiList(jListTemplate, NuiBind("icon_spell"), 35.0), 282.0)); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Widget Label)***************************************************** 414 / 426 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + CreateLabel(jRow, "Memorized Spell List", "lbl_spell_list", 150.0, 20.0, 0, 0, 0.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Memorize slots)*************************************************** 414 / 469 + // Get the class and level selected from the database. + int nClassSelected, nLevelSelected; + json jSpells; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + // Temporary fix for error! :/ + if(JsonGetLength(jAIData) == 0) + { + ai_CheckAssociateData(oPC, oAssociate, sAssociateType, TRUE); + jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + } + if(JsonGetLength(jAIData) == 9) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + jSpells = JsonArrayGet(jAIData, 10); + if(JsonGetType(jSpells) == JSON_TYPE_NULL) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + nClassSelected = JsonGetInt(JsonArrayGet(jSpells, 0)); + nLevelSelected = JsonGetInt(JsonArrayGet(jSpells, 1)); + } + } + // If we left the Quick Use widget on Special Abilities (10) or Items (11) goto level 0 + if(nLevelSelected == 10 || nLevelSelected == 11) + { + nLevelSelected = 0; + jSpells = JsonArraySet(jSpells, 1, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + if(nClassSelected < 1 || nClassSelected > AI_MAX_CLASSES_PER_CHARACTER) + { + nClassSelected = 1; + jSpells = JsonArraySet(jSpells, 0, JsonInt(1)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + nClass = GetClassByPosition(nClassSelected, oAssociate); + int nMaxMemorizationSlots = GetMemorizedSpellCountByLevel(oAssociate, nClass, nLevelSelected); + jRow = JsonArray(); + for(nIndex = 0; nIndex < nMaxMemorizationSlots; nIndex++) + { + // This saves the index location of the spell in the list. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_memorized_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_memorized_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_memorized_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_memorized_" + sIndex + "_tooltip")); + //json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + //jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + //jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_SPELL_MEMORIZE_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + string sText, sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_SPELL_MEMORIZE_NUI, sName + " Spell Memorization Menu", + fX, fY, 375.0, 504.0 + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Set the Layout of the window. + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 & 2 Class & Level + int nSpellLevel, nIndexLevel, nMaxSpellLevel; + string sClass, sLevel, sLevelImage, sIndexLevel; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + bCaster = StringToInt(Get2DAString("classes", "SpellCaster", nClass)); + if(bCaster) + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_tooltip", JsonString(" " + sClass)); + if(nClassSelected == nIndex) + { + int nClassLevel = ai_GetCasterTotalLevel(oAssociate, nClass); + string sSpellsGained = Get2DAString("classes", "SpellGainTable", nClass); + int nMaxSpellLevel = StringToInt(Get2DAString(sSpellsGained, "NumSpellLevels", nClassLevel - 1)); + for(nIndexLevel = 0; nIndexLevel <= 9; nIndexLevel++) + { + sIndexLevel = IntToString(nIndexLevel); + if(nIndexLevel < nMaxSpellLevel) + { + if(nIndexLevel == 0) sLevelImage = "ir_cantrips"; + else if(nIndexLevel < 7)sLevelImage = "ir_level" + sIndexLevel; + else sLevelImage = "ir_level789"; + if(nIndexLevel == 0) sLevel = " Cantrips"; + else if(nIndexLevel == 1) sLevel = " First level"; + else if(nIndexLevel == 2) sLevel = " Second level"; + else if(nIndexLevel == 3) sLevel = " Third level"; + else if(nIndexLevel == 4) sLevel = " Fourth level"; + else if(nIndexLevel == 5) sLevel = " Fifth level"; + else if(nIndexLevel == 6) sLevel = " Sixth level"; + else if(nIndexLevel == 7) sLevel = " Seventh level"; + else if(nIndexLevel == 8) sLevel = " Eighth level"; + else if(nIndexLevel == 9) sLevel = " Ninth level"; + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_tooltip", JsonString(" " + sLevel)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString(sLevelImage)); + } + else + { + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(FALSE)); + } + } + NuiSetBind(oPC, nToken, "btn_level_" + IntToString(nLevelSelected) + "_encouraged", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + IntToString(nClassSelected) + "_encouraged", JsonBool(TRUE)); + } + } + } + } + // Row 3 Spells + int nSpellSlot, nSpell, nMetamagic; + json jSpell; + json jWidget = JsonArrayGet(jSpells, 2); + nClass = GetClassByPosition(nClassSelected, oAssociate); + string sSpellIcon, sSpellName, sMetaMagicText; + json jSpellArray = JsonArray(); + json jSpell_Icon = JsonArray(); + json jSpell_Text = JsonArray(); + json jMetaMagic_Text = JsonArray(); + // List the spells they know from their spellbook. + if(Get2DAString("classes", "SpellbookRestricted", nClass) == "1") + { + int nMaxSpells = GetKnownSpellCount(oAssociate, nClass, nLevelSelected); + //WriteTimestampedLogEntry("Maxspells: " + IntToString(nMaxSpells) + + // " nClass: " + IntToString(nClass) + + // " nLevelSelected: " + IntToString(nLevelSelected)); + while(nSpellSlot < nMaxSpells) + { + nSpell = GetKnownSpellId(oAssociate, nClass, nLevelSelected, nSpellSlot); + if(nSpell != -1) + { + jSpellArray = JsonArrayInsert(jSpellArray, JsonInt(nSpell)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //SendMessageToPC(oPC, "SpellBook: nSpell: " + IntToString(nSpell) + + // " sSpellIcon: " + sSpellIcon + + // " sSpellName: " + sSpellName+ + // " nMaxSpells: " + IntToString(nMaxSpells) + + // " nSpellSlot: " + IntToString(nSpellSlot)); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, nClass, nLevelSelected, nSpellSlot); + //jMetaMagic_Text = JsonArrayInsert(jMetaMagic_Text, JsonString(sMetaMagicText)); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + } + ++nSpellSlot; + } + } + // List the spells from the spells.2da file (they get to choose from them all!). + else + { + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + int nMaxSpells = Get2DARowCount("spells"); + while(nSpell < nMaxSpells) + { + sLevel = Get2DAString("spells", sSpellTableColumn, nSpell); + if(sLevel != "") + { + if(StringToInt(sLevel) == nLevelSelected) + { + jSpellArray = JsonArrayInsert(jSpellArray, JsonInt(nSpell)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + } + } + ++nSpell; + } + } + jData = JsonArrayInsert(jData, jSpellArray); + NuiSetUserData(oPC, nToken, jData); + NuiSetBind(oPC, nToken, "icon_spell", jSpell_Icon); + NuiSetBind(oPC, nToken, "text_spell", jSpell_Text); + NuiSetBind(oPC, nToken, "metamagic_text", jMetaMagic_Text); + // Row 4 Spell memorized list label. + // Row 5 Spell memorized List + int nMetaMagic, nDomain; + nIndex = 0; + while(nIndex < nMaxMemorizationSlots) + { + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_event", JsonBool(TRUE)); + if(GetMemorizedSpellId(oAssociate, nClass, nLevelSelected, nIndex) > -1) + { + nSpell = GetMemorizedSpellId(oAssociate, nClass, nLevelSelected, nIndex); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //nMetaMagic = 255; + //nDomain = 0; + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevelSelected) + ")")); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, -1, -1, -1, nMetaMagic, nDomain); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + else + { + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_memorized_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } +} +void ai_CreateSpellKnownNUI(object oPC, object oAssociate) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jRow = JsonArray(); + // Row 1 Classes************************************************************ 414 / 73 + int nClass, bCaster, nIndex; + string sIndex, sClassIcon, sLevelIcon; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + if(StringToInt(Get2DAString("classes", "SpellbookRestricted", nClass))) + { + // This saves the class position in the button id so we can get it later. + sIndex = IntToString(nIndex); + sClassIcon = Get2DAString("classes", "Icon", nClass); + jRow = CreateButtonImage(jRow, sClassIcon, "btn_class_" + sIndex, 35.0f, 35.0f, 0.0, "btn_class_" + sIndex + "_tooltip"); + } + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Levels) ********************************************************** 414 / 116 + jRow = JsonArray(); + for(nIndex = 0; nIndex <= 9; nIndex++) + { + // This saves the level in the button id so we can get it later. + sIndex = IntToString(nIndex); + jRow = CreateButtonImage(jRow, "", "btn_level_" + sIndex, 35.0f, 35.0f, 0.0, "btn_level_" + sIndex + "_tooltip"); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Spell List)******************************************************* 414 / 398 + json jButton = JsonArray(); + jButton = NuiButton(NuiBind("text_spell")); + jButton = NuiId(jButton, "btn_text_spell"); + json jRectangle = NuiRect(4.0, 4.0, 27.0, 27.0); + json jDrawList = JsonArrayInsert(JsonArray(), NuiDrawListImage(JsonBool(TRUE), NuiBind("icon_spell"), jRectangle, JsonInt(NUI_ASPECT_FILL), JsonInt(NUI_HALIGN_CENTER), JsonInt(NUI_VALIGN_MIDDLE))); + //jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_text")); + //jDrawList = JsonArrayInsert(jDrawList, jMetaMagic); + jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + json jListTemplate = JsonArrayInsert(JsonArray(), NuiListTemplateCell(jButton, 275.0, FALSE)); + json jInfo = NuiButtonImage(JsonString("gui_cg_qstn_mark")); + jInfo = NuiId(jInfo, "btn_info_spell"); + jListTemplate = JsonArrayInsert(jListTemplate, NuiListTemplateCell(jInfo, 35.0, FALSE)); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiList(jListTemplate, NuiBind("icon_spell"), 35.0), 282.0)); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (Widget Label)***************************************************** 414 / 426 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + CreateLabel(jRow, "Known Spell List", "lbl_spell_list", 150.0, 20.0, 0, 0, 0.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Memorize slots)*************************************************** 414 / 469 + // Get the class and level selected from the database. + int nClassSelected, nLevelSelected; + json jSpells; + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + // Temporary fix for error! :/ + if(JsonGetLength(jAIData) == 0) + { + ai_CheckAssociateData(oPC, oAssociate, sAssociateType, TRUE); + jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + } + if(JsonGetLength(jAIData) == 9) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArrayInsert(jAIData, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + jSpells = JsonArrayGet(jAIData, 10); + if(JsonGetType(jSpells) == JSON_TYPE_NULL) + { + jSpells = JsonArray(); + jSpells = JsonArrayInsert(jSpells, JsonInt(1)); + jSpells = JsonArrayInsert(jSpells, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + else + { + nClassSelected = JsonGetInt(JsonArrayGet(jSpells, 0)); + nLevelSelected = JsonGetInt(JsonArrayGet(jSpells, 1)); + } + } + // If we left the Quick Use widget on Special Abilities (10) or Items (11) goto level 0 + if(nLevelSelected == 10 || nLevelSelected == 11) + { + nLevelSelected = 0; + jSpells = JsonArraySet(jSpells, 1, JsonInt(0)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + if(nClassSelected < 1 || nClassSelected > AI_MAX_CLASSES_PER_CHARACTER) + { + nClassSelected = 1; + jSpells = JsonArraySet(jSpells, 0, JsonInt(1)); + jAIData = JsonArraySet(jAIData, 10, jSpells); + ai_SetAssociateDbJson(oPC, sAssociateType, "aidata", jAIData); + } + nClass = GetClassByPosition(nClassSelected, oAssociate); + jRow = JsonArray(); + for(nIndex = 0; nIndex < 10; nIndex++) + { + // This saves the index location of the spell in the list. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_known_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_known_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_known_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_known_" + sIndex + "_tooltip")); + //json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + //jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + //jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Do the second row. + jRow = JsonArray(); + for(nIndex = 10; nIndex < 20; nIndex++) + { + // This saves the index location of the spell in the list. + sIndex = IntToString(nIndex); + json jButton = NuiButtonImage(NuiBind("btn_known_" + sIndex + "_image")); + jButton = NuiEnabled(jButton, NuiBind("btn_known_" + sIndex + "_event")); + jButton = NuiId(jButton, "btn_known_" + sIndex); + jButton = NuiWidth(NuiHeight(jButton, 35.0), 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind("btn_known_" + sIndex + "_tooltip")); + //json jRectangle = NuiRect(4.0, 4.0, 10.0, 10.0); + //json jMetaMagic = NuiDrawListText(JsonBool(TRUE), NuiColor(255, 255, 0), jRectangle, NuiBind("metamagic_" + sIndex + "_text")); + //jDrawList = JsonArrayInsert(JsonArray(), jMetaMagic); + //jButton = NuiDrawList(jButton, JsonBool(TRUE), jDrawList); + jRow = JsonArrayInsert(jRow, jButton); + } + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fX, fY; + json jLocations = ai_GetAssociateDbJson(oPC, sAssociateType, "locations"); + jLocations = JsonObjectGet(jLocations, sAssociateType + AI_SPELL_KNOWN_NUI); + if(JsonGetType(jLocations) == JSON_TYPE_NULL) { fX = -1.0; fY = -1.0; } + else + { + fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + } + string sText, sName = ai_StripColorCodes(GetName(oAssociate)); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, sAssociateType + AI_SPELL_KNOWN_NUI, sName + " Spell Known Menu", + fX, fY, 375.0, 539.0 + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + // Set the Layout of the window. + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oAssociate))); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 & 2 Class & Level + int nSpellLevel, nIndexLevel, nMaxSpellLevel, nClassLevel; + string sClass, sLevel, sLevelImage, sIndexLevel, sSpellsGained; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass != CLASS_TYPE_INVALID) + { + bCaster = StringToInt(Get2DAString("classes", "SpellbookRestricted", nClass)); + if(bCaster) + { + sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + sIndex + "_tooltip", JsonString(" " + sClass)); + if(nClassSelected == nIndex) + { + nClassLevel = ai_GetCasterTotalLevel(oAssociate, nClass); + sSpellsGained = Get2DAString("classes", "SpellGainTable", nClass); + nMaxSpellLevel = StringToInt(Get2DAString(sSpellsGained, "NumSpellLevels", nClassLevel - 1)); + for(nIndexLevel = 0; nIndexLevel <= 9; nIndexLevel++) + { + sIndexLevel = IntToString(nIndexLevel); + if(nIndexLevel < nMaxSpellLevel) + { + if(nIndexLevel == 0) sLevelImage = "ir_cantrips"; + else if(nIndexLevel < 7)sLevelImage = "ir_level" + sIndexLevel; + else sLevelImage = "ir_level789"; + if(nIndexLevel == 0) sLevel = " Cantrips"; + else if(nIndexLevel == 1) sLevel = " First level"; + else if(nIndexLevel == 2) sLevel = " Second level"; + else if(nIndexLevel == 3) sLevel = " Third level"; + else if(nIndexLevel == 4) sLevel = " Fourth level"; + else if(nIndexLevel == 5) sLevel = " Fifth level"; + else if(nIndexLevel == 6) sLevel = " Sixth level"; + else if(nIndexLevel == 7) sLevel = " Seventh level"; + else if(nIndexLevel == 8) sLevel = " Eighth level"; + else if(nIndexLevel == 9) sLevel = " Ninth level"; + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_tooltip", JsonString(" " + sLevel)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString(sLevelImage)); + } + else + { + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_level_" + sIndexLevel + "_event", JsonBool(FALSE)); + } + } + NuiSetBind(oPC, nToken, "btn_level_" + IntToString(nLevelSelected) + "_encouraged", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_class_" + IntToString(nClassSelected) + "_encouraged", JsonBool(TRUE)); + } + } + } + } + // Row 3 Spells + int nSpellSlot, nSpell, nMetamagic; + json jSpell; + json jWidget = JsonArrayGet(jSpells, 2); + nClass = GetClassByPosition(nClassSelected, oAssociate); + string sSpellIcon, sSpellName, sMetaMagicText; + json jSpellArray = JsonArray(); + json jSpell_Icon = JsonArray(); + json jSpell_Text = JsonArray(); + json jMetaMagic_Text = JsonArray(); + // List the spells from the spells.2da file (they get to choose from them all!). + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + int nMaxSpells = Get2DARowCount("spells"); + while(nSpell < nMaxSpells) + { + sLevel = Get2DAString("spells", sSpellTableColumn, nSpell); + if(sLevel != "") + { + if(StringToInt(sLevel) == nLevelSelected) + { + jSpellArray = JsonArrayInsert(jSpellArray, JsonInt(nSpell)); + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpell_Icon = JsonArrayInsert(jSpell_Icon, JsonString(sSpellIcon)); + jSpell_Text = JsonArrayInsert(jSpell_Text, JsonString(sSpellName)); + } + } + ++nSpell; + } + jData = JsonArrayInsert(jData, jSpellArray); + NuiSetUserData(oPC, nToken, jData); + NuiSetBind(oPC, nToken, "icon_spell", jSpell_Icon); + NuiSetBind(oPC, nToken, "text_spell", jSpell_Text); + NuiSetBind(oPC, nToken, "metamagic_text", jMetaMagic_Text); + // Row 4 Spell known list label. + // Row 5 Spell known List + int nMetaMagic, nDomain, nMaxKnownSlots; + json jClassList = GetLocalJson(oAssociate, AI_CLASS_LIST_JSON); + if(JsonGetType(jClassList) == JSON_TYPE_NULL) + { + jClassList = ObjectToJson(oAssociate); + jClassList = GffGetList(jClassList, "ClassList"); + SetLocalJson(oAssociate, AI_CLASS_LIST_JSON, jClassList); + } + // Get the correct class array. + nIndex = 0; + json jClass = JsonArrayGet(jClassList, nIndex); + while(JsonGetInt(GffGetInt(jClass, "Class")) != nClass) + { + jClass = JsonArrayGet(jClassList, ++nIndex); + } + json jKnownList = GffGetList(jClass, "KnownList" + IntToString(nLevelSelected)); + string sSpellKnownTable = Get2DAString("classes", "SpellKnownTable", nClass); + if(sSpellKnownTable != "") nMaxKnownSlots = StringToInt(Get2DAString(sSpellKnownTable, "SpellLevel" + IntToString(nLevelSelected), nClassLevel - 1)); + else nMaxKnownSlots = 20; + nIndex = 0; + while(nIndex < 20) + { + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(TRUE)); + if(nIndex < nMaxKnownSlots) + { + jSpell = JsonArrayGet(jKnownList, nIndex); + if(JsonGetType(jSpell) == JSON_TYPE_NULL) + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" Empty known spell slot")); + } + else + { + nSpell = JsonGetInt(GffGetWord(jSpell, "Spell")); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //nMetaMagic = 255; + //nDomain = 0; + sSpellIcon = Get2DAString("spells", "IconResRef", nSpell); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString(sSpellIcon)); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_tooltip", JsonString(" " + sName + " (" + sClass + " / " + IntToString(nLevelSelected) + ")")); + //sMetaMagicText = ai_GetSpellIconAttributes(oAssociate, -1, -1, -1, nMetaMagic, nDomain); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString(sMetaMagicText)); + } + } + else + { + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_image", JsonString("ctl_cg_btn_splvl")); + //NuiSetBind(oPC, nToken, "metamagic_" + sIndex + "_text", JsonString("")); + NuiSetBind(oPC, nToken, "btn_known_" + sIndex + "_event", JsonBool(FALSE)); + } + ++nIndex; + } +} +void ai_CreateDescriptionNUI(object oPC, json jSpell, int nSpell = 0) +{ + // Row 1 ******************************************************************* 500 / 469 + json jRow = CreateImage(JsonArray(), "", "spell_icon", NUI_ASPECT_FIT, NUI_HALIGN_CENTER, NUI_VALIGN_MIDDLE, 40.0, 40.0); + jRow = CreateTextBox(jRow, "spell_text", 380.0, 400.0, FALSE, NUI_SCROLLBARS_Y); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 1 ******************************************************************* 500 / 522 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "OK", "btn_ok", 150.0f, 45.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName, sIcon, sDescription; + int nFeat, nDescription; + int nClass; + if(nSpell) nClass = 0; + else + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + } + if(nClass == -1) + { + if(nSpell == SPELL_HEALINGKIT) + { + sName = "Healer's Kit"; + sIcon = "isk_heal"; + sDescription = GetStringByStrRef(1720); + } + else + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sIcon = Get2DAString("spells", "IconResRef", nSpell); + nDescription = StringToInt(Get2DAString("spells", "SpellDesc", nSpell)); + if(nDescription) sDescription = GetStringByStrRef(nDescription); + else + { + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + sDescription = GetDescription(oItem); + } + } + } + else + { + nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nFeat) + { + if(nSpell) + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sIcon = Get2DAString("spells", "IconResRef", nSpell); + } + else + { + sName = GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))); + sIcon = Get2DAString("feat", "ICON", nFeat); + } + sDescription = GetStringByStrRef(StringToInt(Get2DAString("feat", "DESCRIPTION", nFeat))); + } + else + { + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + sIcon = Get2DAString("spells", "IconResRef", nSpell); + nDescription = StringToInt(Get2DAString("spells", "SpellDesc", nSpell)); + if(nDescription) sDescription = GetStringByStrRef(nDescription); + else + { + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + sDescription = GetDescription(oItem); + } + } + } + int nToken = SetWindow(oPC, jLayout, AI_SPELL_DESCRIPTION_NUI, sName, + -1.0, -1.0, 460.0f, 537.0 + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui"); + json jData = JsonArray(); + jData = JsonArrayInsert(jData, JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + // Row 1 + NuiSetBind(oPC, nToken, "spell_icon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "spell_icon_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "spell_text_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "spell_text", JsonString(sDescription)); + // Row 2 + NuiSetBind(oPC, nToken, "btn_ok_event", JsonBool(TRUE)); +} + diff --git a/_module/nss/0i_menus_dm.nss b/_module/nss/0i_menus_dm.nss new file mode 100644 index 0000000..96fc93f --- /dev/null +++ b/_module/nss/0i_menus_dm.nss @@ -0,0 +1,1410 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_menus_dm +//////////////////////////////////////////////////////////////////////////////// + Include script for handling NUI menus for DMs. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_associates" +string ai_GetRandomDMTip() +{ + int nRoll = Random(44); + return Get2DAString("ai_messages", "Text", nRoll); +} +void ai_SetDMWidgetButton(object oPlayer, int nButton, int bOn = TRUE) +{ + int nWidgetButtons = GetLocalInt(oPlayer, sDMWidgetButtonVarname); + string sName = ai_RemoveIllegalCharacters(GetName(oPlayer)); + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + if(nWidgetButtons == 0) nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(oPlayer, sDMWidgetButtonVarname, nWidgetButtons); + jButtons = JsonArraySet(jButtons, 0, JsonInt(nWidgetButtons)); + ai_SetCampaignDbJson("buttons", jButtons, sName, AI_DM_TABLE); +} +int ai_GetDMWidgetButton(object oPlayer, int nButton) +{ + int nWidgetButtons = GetLocalInt(oPlayer, sDMWidgetButtonVarname); + if(nWidgetButtons == 0) + { + string sName = ai_RemoveIllegalCharacters(GetName(oPlayer)); + json jButtons = ai_GetCampaignDbJson("buttons", sName, AI_DM_TABLE); + nWidgetButtons = JsonGetInt(JsonArrayGet(jButtons, 0)); + } + return nWidgetButtons & nButton; +} +void ai_CreateDMWidgetNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int bAIWidgetLock = ai_GetDMWidgetButton(oPC, BTN_DM_WIDGET_LOCK); + int bCmdGroup1 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP1); + int bCmdGroup2 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP2); + int bCmdGroup3 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP3); + int bCmdGroup4 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP4); + int bCmdGroup5 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP5); + int bCmdGroup6 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP6); + int bCmdCamera = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_CAMERA); + int bCmdInventory = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_INVENTORY); + // Get which buttons are activated. + float fHeight = 92.0f; + if(bAIWidgetLock) fHeight = 59.0f; + float fButtons, fWidth = 86.0f; + // ************************************************************************* Width / Height + // Row 1 (buttons)********************************************************** + // Setup the main associate button to use their portrait. + json jButton = NuiEnabled(NuiId (NuiButtonImage(NuiBind("btn_open_main_image")), "btn_open_main"), NuiBind("btn_open_main_event")); + jButton = NuiWidth(jButton, 35.0); + jButton = NuiHeight(jButton, 35.0); + jButton = NuiMargin(jButton, 0.0); + jButton = NuiTooltip(jButton, NuiBind ("btn_open_main_tooltip")); + jButton = NuiImageRegion(jButton, NuiRect(0.0, 0.0, 32.0, 35.0)); + json jRow = JsonArrayInsert(JsonArray(), jButton); + if(bCmdGroup1) + { + jRow = CreateButtonImage(jRow, "ir_level1", "btn_cmd_group1", 35.0f, 35.0f, 0.0, "btn_cmd_group1_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup2) + { + jRow = CreateButtonImage(jRow, "ir_level2", "btn_cmd_group2", 35.0f, 35.0f, 0.0, "btn_cmd_group2_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup3) + { + jRow = CreateButtonImage(jRow, "ir_level3", "btn_cmd_group3", 35.0f, 35.0f, 0.0, "btn_cmd_group3_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup4) + { + jRow = CreateButtonImage(jRow, "ir_level4", "btn_cmd_group4", 35.0f, 35.0f, 0.0, "btn_cmd_group4_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup5) + { + jRow = CreateButtonImage(jRow, "ir_level5", "btn_cmd_group5", 35.0f, 35.0f, 0.0, "btn_cmd_group5_tooltip"); + fButtons += 1.0; + } + if(bCmdGroup6) + { + jRow = CreateButtonImage(jRow, "ir_level6", "btn_cmd_group6", 35.0f, 35.0f, 0.0, "btn_cmd_group6_tooltip"); + fButtons += 1.0; + } + if(bCmdCamera) + { + jRow = CreateButtonImage(jRow, "ir_examine", "btn_camera", 35.0f, 35.0f, 0.0, "btn_camera_tooltip"); + fButtons += 1.0; + } + if(bCmdInventory) + { + jRow = CreateButtonImage(jRow, "ir_pickup", "btn_inventory", 35.0f, 35.0f, 0.0, "btn_inventory_tooltip"); + fButtons += 1.0; + } + // Plug in buttons ********************************************************* + int nIndex, bWidget; + string sButton, sIcon; + json jPlugins = ai_UpdatePluginsForDM(oPC); + json jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget) + { + sIcon = JsonGetString(JsonArrayGet(jPlugin, 3)); + sButton = IntToString(nIndex); + jRow = CreateButtonImage(jRow, sIcon, "btn_exe_plugin_" + sButton, 35.0f, 35.0f, 0.0, "btn_exe_plugin_" + sButton + "_tooltip"); + fButtons += 1.0; + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + if(fButtons > 1.0f) fWidth = fWidth + ((fButtons - 1.0) * 39.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Get the window location to restore it from the database. + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_WIDGET_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + if(bAIWidgetLock) + { + fX = fX + 4.0f; + fY = fY + 37.0f; + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken; + string sHeal, sText, sRange; + string sDisplayName = GetName(oPC); + if(GetStringRight(sDisplayName, 1) == "s") sDisplayName = sDisplayName + "'"; + else sDisplayName = sDisplayName + "'s"; + if(bAIWidgetLock) nToken = SetWindow(oPC, jLayout, "dm" + AI_WIDGET_NUI, sDisplayName + " Widget", fX, fY, fWidth + 8.0f, fHeight, FALSE, FALSE, FALSE, TRUE, FALSE, "0e_nui_dm"); + else nToken = SetWindow(oPC, jLayout, "dm" + AI_WIDGET_NUI, sDisplayName + " Widget", fX, fY, fWidth + 12.0f, fHeight, FALSE, FALSE, FALSE, TRUE, TRUE, "0e_nui_dm"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + NuiSetBind(oPC, nToken, "btn_open_main_image", JsonString(GetPortraitResRef(oPC) + "s")); + NuiSetBind(oPC, nToken, "btn_open_main_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_main_tooltip", JsonString(" " + sDisplayName + " widget menu")); + string sUUID, sText2, sSpeed; + string sAction = " (Left Action/Right Add)"; + if(bCmdGroup1) + { + NuiSetBind(oPC, nToken, "btn_cmd_group1_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP1"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 1"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group1_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup2) + { + NuiSetBind(oPC, nToken, "btn_cmd_group2_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP2"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 2"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group2_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup3) + { + NuiSetBind(oPC, nToken, "btn_cmd_group3_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP3"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 3"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group3_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup4) + { + NuiSetBind(oPC, nToken, "btn_cmd_group4_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP4"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 4"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group4_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup5) + { + NuiSetBind(oPC, nToken, "btn_cmd_group5_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP5"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 5"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group5_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdGroup6) + { + NuiSetBind(oPC, nToken, "btn_cmd_group6_event", JsonBool(TRUE)); + json jGroup = GetLocalJson(oPC, "DM_GROUP6"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 6"; sText2 = sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group6_tooltip", JsonString(" " + sText + sText2)); + } + if(bCmdCamera) + { + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString(" Select new object to have the camera view.")); + } + if(bCmdInventory) + { + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString(" Open selected creatures inventory.")); + } + /*if(bSearch) + { + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_SEARCH)) sText = " Search On"; + else sText = " Search Off"; + NuiSetBind(oPC, nToken, "btn_search_tooltip", JsonString(sText)); + } + if(bStealth) + { + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + if(ai_GetAIMode(oAssociate, AI_MODE_AGGRESSIVE_STEALTH)) sText = " Stealth On"; + else sText = " Stealth Off"; + NuiSetBind(oPC, nToken, "btn_stealth_tooltip", JsonString(sText)); + } */ + nIndex = 0; + string sScript; + jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + if(bWidget) + { + sButton = IntToString(nIndex); + sScript = JsonGetString(JsonArrayGet(jPlugin, 0)); + if(ResManGetAliasFor(sScript, RESTYPE_NCS) == "") + { + sText = " " + sScript + " not found by ResMan!"; + } + else sName = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_exe_plugin_" + sButton + "_tooltip", JsonString(sName)); + } + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } +} +void ai_CreateDMOptionsNUI(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand (2.0, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + int nMonsterAI = (ResManGetAliasFor("ai_default", RESTYPE_NCS) != ""); + int nAssociateAI = (ResManGetAliasFor("ai_a_default", RESTYPE_NCS) != ""); + string sText = " [Single player]"; + if(ai_GetIsServer()) sText = " [Server]"; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, PHILOS_VERSION + sText, "lbl_version ", 510.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = CreateLabel(JsonArray(), "", "lbl_ai_info", 510.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + jRow = CreateButton(JsonArray(), "Plugin Manager", "btn_plugin_manager", 160.0f, 20.0f, -1.0, "btn_plugin_manager_tooltip"); + //jRow = JsonArrayInsert(jRow, NuiSpacer()); + //jRow = CreateButtonSelect(jRow, "Effect Icons", "btn_effect_icon", 160.0f, 20.0f, "btn_effect_icon_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Widget Manager", "btn_widget_manager", 160.0f, 20.0f, -1.0, "btn_widget_manager_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "SERVER RULES", "lbl_ai_rules", 100.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 112.0; + // Row 5 ******************************************************************* 500 / --- (28) + // Make the AI options a Group. + json jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_max_henchman", 2, FALSE, 30.0f, 20.0f, "txt_max_henchman_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Max number of henchmen that is allowed in your party.", "lbl_max_hench", 416.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_max_henchman_tooltip"); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_xp_scale", 3, FALSE, 40.0f, 20.0f, "txt_xp_scale_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "Modules experience scale.", "lbl_xp_scale", 175.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_xp_scale_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " scale to party.", "chbx_party_scale", 130.0, 20.0, "chbx_party_scale_tooltip"); + jGroupRow = CreateButton(jGroupRow, "Default", "btn_default_xp", 70.0f, 20.0f, -1.0, "btn_default_xp_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 112.0; + if(nMonsterAI || nAssociateAI) + { + jGroupRow = CreateCheckBox(JsonArray(), " Creatures will use advanced combat movement.", "chbx_advanced_movement", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Use item level restrictions for creatures [Default is off].", "chbx_ilr", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use the skill Use Magic Device.", "chbx_umd", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Creatures can use Healing kits.", "chbx_use_healingkits", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Moral checks, wounded creatures may flee during combat.", "chbx_moral", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), " Spells the AI will not use:", "lbl_restrict_spells", 190.0, 20.0, NUI_HALIGN_LEFT); + jGroupRow = CreateCheckBox(jGroupRow, " Darkness", "chbx_darkness", 90.0, 20.0, "chbx_darkness_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Dispels", "chbx_dispels", 90.0, 20.0, "chbx_dispels_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Time Stop", "chbx_timestop", 90.0, 20.0, "chbx_timestop_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 168.0; + } + if(nMonsterAI) + { + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_ai_difficulty", 3, FALSE, 40.0f, 20.0f, "txt_ai_difficulty_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% chance monsters will attack the weakest target.", "lbl_ai_difficulty", 406.0f, 20.0f, NUI_HALIGN_LEFT, 0, -1.0, "txt_ai_difficulty_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_perception_distance", 2, FALSE, 35.0f, 20.0f, "txt_perception_distance_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters is the distance a monster can respond to allies.", "lbl_perception_distance", 411.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "txt_perception_distance_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters buff before combat starts.", "chbx_buff_monsters", 275.0, 20.0, "chbx_buff_monsters_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, " Use all buff spells instead!", "chbx_full_buff", 210.0, 20.0, "chbx_full_buff_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use summons before combat starts.", "chbx_buff_summons", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can use tactics (ambush, defensive, flanker, etc).", "chbx_ambush_monsters", 450.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "Add ", "lbl_inc_enc", 30.0, 20.0, NUI_HALIGN_LEFT, 0, -1.0); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_inc_enc", 4, FALSE, 55.0f, 20.0f, "txt_inc_enc_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "monsters per spawned encounter monster.", "lbl_inc_enc", 357.0, 20.0, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "txt_inc_enc_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateTextEditBox(JsonArray(), "sPlaceHolder", "txt_inc_hp", 3, FALSE, 40.0f, 20.0f, "txt_inc_hp_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "% increase in all monster's hitpoints.", "lbl_inc_hp", 406.0, 20.0, NUI_HALIGN_LEFT); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "***** WARNING! The options below may break the module! *****", "lbl_warning", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can wander upto ", "chbx_wander", 220.0, 20.0, "chbx_warning_tooltip"); + jGroupRow = CreateTextEditBox(jGroupRow, "sPlaceHolder", "txt_wander_distance", 2, FALSE, 35.0f, 20.0f, "chbx_warning_tooltip"); + jGroupRow = CreateLabel(jGroupRow, "meters and ", "lbl_wander_distance", 80.0f, 20.0f, NUI_HALIGN_LEFT, NUI_VALIGN_MIDDLE, 0.0, "chbx_warning_tooltip"); + jGroupRow = CreateCheckBox(jGroupRow, "open doors.", "chbx_open_doors", 100.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Monsters can summon companions.", "chbx_companions", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Summoned associates to remain after masters death.", "chbx_perm_assoc", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateCheckBox(JsonArray(), " Make enemy corpses remain.", "chbx_corpses_stay", 450.0, 20.0, "chbx_warning_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_perc_dist", 450.0f, 20.0f, NUI_HALIGN_LEFT, 0, 0.0, "lbl_perc_dist_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight += 364.0; + } + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_MAIN_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm" + AI_MAIN_NUI, sName + " PEPS Main Menu", + fX, fY, 534.0f, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Save the associate to the nui for use in 0e_nui + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + object oModule = GetModule(); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 - Version label. + // Row 2 + int nUsing; + // Check the monster AI. + string sLocation = ResManGetAliasFor("ai_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_c2_default1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText = "Monster AI working"; + else sText = "Monster AI not working"; + } + else sText = "Monster AI not loaded"; + // Check the associate AI. + sLocation = ResManGetAliasFor("ai_a_default", RESTYPE_NCS); + if(sLocation != "") + { + nUsing = TRUE; + string sLocation = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS); + if(sLocation != "OVERRIDE:" && sLocation != "PATCH:peps" && sLocation != "DEVELOPMENT:") nUsing = FALSE; + if(nUsing) sText += ", Associate AI working"; + else sText += ", Associate AI not working"; + } + else sText += ", Associate AI not loaded"; + // Check for PRC. + sLocation = ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS); + if(sLocation != "") sText += ", PRC loaded."; + else + { + // Check the player AI. + sLocation = ResManGetAliasFor("xx_pc_1_hb", RESTYPE_NCS); + if(sLocation != "") sText += ", Player AI loaded."; + else sText += ", Player AI not loaded."; + } + NuiSetBind(oPC, nToken, "lbl_ai_info_label", JsonString(sText)); + // Row 3 + NuiSetBind(oPC, nToken, "btn_plugin_manager_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_manager_tooltip", JsonString(" Manages external executable scripts.")); + int bEffectIcon = ai_GetMagicMode(oPC, AI_MAGIC_EFFECT_ICON_REPORT); + //NuiSetBind(oPC, nToken, "btn_effect_icon", JsonBool (bEffectIcon)); + //NuiSetBind(oPC, nToken, "btn_effect_icon_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "btn_effect_icon_tooltip", JsonString(" When on sends effect icon reports to the chat screen.")); + NuiSetBind(oPC, nToken, "btn_widget_manager_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_manager_tooltip", JsonString(" Manages widgets the players have access to.")); + // Row 3 Label for AI RULES + // Row 4 + NuiSetBind(oPC, nToken, "txt_max_henchman_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_max_henchman", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_MAX_HENCHMAN)))); + NuiSetBindWatch (oPC, nToken, "txt_max_henchman", TRUE); + NuiSetBind(oPC, nToken, "txt_max_henchman_tooltip", JsonString(" Set max number of henchman allowed (1-12).")); + NuiSetBind(oPC, nToken, "txt_xp_scale_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_xp_scale", JsonString(IntToString(GetModuleXPScale()))); + NuiSetBindWatch (oPC, nToken, "txt_xp_scale", TRUE); + NuiSetBind(oPC, nToken, "txt_xp_scale_tooltip", JsonString(" Set the modules XP scale (0 - 200) Normal D&D is 10.")); + NuiSetBind(oPC, nToken, "chbx_party_scale_check", JsonBool(GetLocalInt(oModule, AI_RULE_PARTY_SCALE))); + NuiSetBindWatch(oPC, nToken, "chbx_party_scale_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_party_scale_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + NuiSetBind(oPC, nToken, "chbx_party_scale_tooltip", JsonString(" PEPS adjusts your XP based on party size from (" + sText + ").")); + NuiSetBind(oPC, nToken, "btn_default_xp_event", JsonBool(TRUE)); + sText = IntToString(GetLocalInt(oModule, AI_RULE_DEFAULT_XP_SCALE)); + NuiSetBind(oPC, nToken, "btn_default_xp_tooltip", JsonString(" Reset the Modules XP to (" + sText + ").")); + if(nMonsterAI) + { + NuiSetBind(oPC, nToken, "txt_ai_difficulty_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_ai_difficulty", JsonString(IntToString(GetLocalInt(oModule, AI_RULE_AI_DIFFICULTY)))); + NuiSetBindWatch(oPC, nToken, "txt_ai_difficulty", TRUE); + int bMonsterBuff = GetLocalInt(oModule, AI_RULE_BUFF_MONSTERS); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_check", JsonBool(bMonsterBuff)); + NuiSetBindWatch(oPC, nToken, "chbx_buff_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_buff_monsters_tooltip", JsonString(" Monsters will cast all longer duration buff spells just before combat starts.")); + NuiSetBind(oPC, nToken, "chbx_full_buff_check", JsonBool(GetLocalInt(oModule, AI_RULE_FULL_BUFF_MONSTERS))); + NuiSetBindWatch(oPC, nToken, "chbx_full_buff_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_full_buff_event", JsonBool(bMonsterBuff)); + NuiSetBind(oPC, nToken, "chbx_full_buff_tooltip", JsonString(" Monsters will cast all buff spells just before combat starts! VERY DIFFICULTY!")); + NuiSetBind(oPC, nToken, "chbx_buff_summons_check", JsonBool(GetLocalInt(oModule, AI_RULE_PRESUMMON))); + NuiSetBindWatch(oPC, nToken, "chbx_buff_summons_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_summons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_check", JsonBool(GetLocalInt(oModule, AI_RULE_AMBUSH))); + NuiSetBindWatch(oPC, nToken, "chbx_ambush_monsters_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ambush_monsters_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_companions_check", JsonBool(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS))); + NuiSetBindWatch(oPC, nToken, "chbx_companions_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companions_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_companions_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_check", JsonBool(GetLocalInt(oModule, AI_RULE_PERM_ASSOC))); + NuiSetBindWatch(oPC, nToken, "chbx_perm_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perm_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_check", JsonBool(GetLocalInt(oModule, AI_RULE_CORPSES_STAY))); + NuiSetBindWatch(oPC, nToken, "chbx_corpses_stay_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_corpses_stay_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + NuiSetBind(oPC, nToken, "txt_perception_distance_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_perception_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_PERCEPTION_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_perception_distance", TRUE); + NuiSetBind(oPC, nToken, "txt_perception_distance_tooltip", JsonString(" Range [10 to 60 meters] from the player.")); + NuiSetBindWatch(oPC, nToken, "lbl_perc_dist", TRUE); + int nPercDist = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE); + if(nPercDist < 8 || nPercDist > 11) + { + nPercDist = 11; + SetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE, 11); + } + if(nPercDist == 8) sText = " Monster perception: Short [10 Sight / 10 Listen]"; + else if(nPercDist == 9) sText = " Monster perception: Medium [20 Sight / 20 Listen]"; + else if(nPercDist == 10) sText = " Monster perception: Long [35 Sight / 20 Listen]"; + else sText = " Monster perception: Default [Monster's default values]"; + NuiSetBind(oPC, nToken, "lbl_perc_dist_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "lbl_perc_dist_tooltip", JsonString(" Use the mouse wheel to change values.")); + int bWander = GetLocalInt(oModule, AI_RULE_WANDER); + NuiSetBind(oPC, nToken, "chbx_wander_check", JsonBool(bWander)); + NuiSetBindWatch(oPC, nToken, "chbx_wander_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_wander_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_wander_distance_event", JsonBool(bWander)); + NuiSetBind(oPC, nToken, "txt_wander_distance", JsonString(FloatToString(GetLocalFloat(oModule, AI_RULE_WANDER_DISTANCE), 0, 0))); + NuiSetBindWatch(oPC, nToken, "txt_wander_distance", TRUE); + NuiSetBind(oPC, nToken, "chbx_wander_tooltip", JsonString(" ** This will break some modules! ** See Readme for issues!")); + NuiSetBind(oPC, nToken, "chbx_open_doors_check", JsonBool(GetLocalInt(oModule, AI_RULE_OPEN_DOORS))); + NuiSetBindWatch(oPC, nToken, "chbx_open_doors_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_doors_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_open_doors_tooltip", JsonString(" This allows monsters to open doors to hunt you down!")); + NuiSetBind(oPC, nToken, "txt_inc_enc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_inc_enc_tooltip", JsonString(" Spawns one extra monster per counter above 1. Adds value to counter per encounter monster spawned.")); + NuiSetBind(oPC, nToken, "txt_inc_enc", JsonString(FloatToString(GetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS), 0, 2))); + NuiSetBindWatch(oPC, nToken, "txt_inc_enc", TRUE); + NuiSetBind(oPC, nToken, "txt_inc_hp_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_inc_hp", JsonString(IntToString(GetLocalInt(oModule, AI_INCREASE_MONSTERS_HP)))); + NuiSetBindWatch(oPC, nToken, "txt_inc_hp", TRUE); + } + if(nMonsterAI || nAssociateAI) + { + NuiSetBind(oPC, nToken, "chbx_moral_check", JsonBool(GetLocalInt(oModule, AI_RULE_MORAL_CHECKS))); + NuiSetBindWatch (oPC, nToken, "chbx_moral_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_moral_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_check", JsonBool(GetLocalInt(oModule, AI_RULE_ADVANCED_MOVEMENT))); + NuiSetBindWatch (oPC, nToken, "chbx_advanced_movement_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_advanced_movement_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_ilr_check", JsonBool(GetLocalInt(oModule, AI_RULE_ILR))); + NuiSetBindWatch (oPC, nToken, "chbx_ilr_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ilr_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_umd_check", JsonBool(GetLocalInt(oModule, AI_RULE_ALLOW_UMD))); + NuiSetBindWatch (oPC, nToken, "chbx_umd_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_umd_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_check", JsonBool(GetLocalInt(oModule, AI_RULE_HEALERSKITS))); + NuiSetBindWatch (oPC, nToken, "chbx_use_healingkits_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_use_healingkits_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_check", JsonBool(ai_SpellRestricted(SPELL_DARKNESS))); + NuiSetBindWatch (oPC, nToken, "chbx_darkness_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_darkness_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_darkness_tooltip", JsonString(" AI will not use the Darkness spell in combat.")); + NuiSetBind(oPC, nToken, "chbx_dispels_check", JsonBool(ai_SpellRestricted(SPELL_DISPEL_MAGIC))); + NuiSetBindWatch (oPC, nToken, "chbx_dispels_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_dispels_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_dispels_tooltip", JsonString(" AI will not use any of the Dispel spells in combat.")); + NuiSetBind(oPC, nToken, "chbx_timestop_check", JsonBool(ai_SpellRestricted(SPELL_TIME_STOP))); + NuiSetBindWatch (oPC, nToken, "chbx_timestop_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_timestop_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_timestop_tooltip", JsonString(" AI will not use the Time Stop spell in combat.")); + } +} +void ai_CreateDMCommandNUI(object oPC) +{ + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = CreateButtonSelect(JsonArray(), "Lock Widget", "btn_widget_lock", 200.0, 20.0, "btn_widget_lock_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_1", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Main Menu", "btn_main_menu", 200.0, 20.0, -1.0, "btn_main_menu_tooltip"); + jRow = CreateLabel(jRow, "", "blank_label_2", 25.0, 20.0); + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = CreateButton(JsonArray(), "", "btn_cmd_group1", 200.0, 20.0, -1.0, "btn_cmd_group1_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group1", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "", "btn_cmd_group2", 200.0, 20.0, -1.0, "btn_cmd_group2_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group2", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 129 + jRow = CreateButton(JsonArray(), "", "btn_cmd_group3", 200.0, 20.0, -1.0, "btn_cmd_group3_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group3", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "", "btn_cmd_group4", 200.0, 20.0, -1.0, "btn_cmd_group4_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group4", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 500 / 157 + jRow = CreateButton(JsonArray(), "", "btn_cmd_group5", 200.0, 20.0, -1.0, "btn_cmd_group5_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group5", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "", "btn_cmd_group6", 200.0, 20.0, -1.0, "btn_cmd_group6_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_group6", 25.0, 20.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 157.0; + // Row 5 ******************************************************************* 500 / --- + jRow = CreateButton(JsonArray(), "Toggle Camera Focus", "btn_camera", 200.0, 20.0, -1.0, "btn_camera_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_camera", 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Open/Close Inventory", "btn_inventory", 200.0, 20.0, -1.0, "btn_inventory_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_inventory", 25.0, 20.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Row 6+ ****************************************************************** 500 / --- + json jDMPlugins = ai_UpdatePluginsForDM(oPC); + // Set the plugins the dm can use. + int nIndex; + string sButton, sName; + json jPlugin = JsonArrayGet(jDMPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(JsonArray(), sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jPlugin = JsonArrayGet(jDMPlugins, ++nIndex); + if(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 200.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0, "chbx_plugin_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + } + else + { + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + break; + } + jPlugin = JsonArrayGet(jDMPlugins, ++nIndex); + } + // Row 7 ****************************************************************** 500 / --- + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "", "lbl_info_1", 475.0, 20.0, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight = fHeight + 28.0; + // Get the window location to restore it from the database. + sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_COMMAND_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sDMName = GetName(oPC); + if(GetStringRight(sDMName, 1) == "s") sDMName = sDMName + "'"; + else sDMName = sDMName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm" + AI_COMMAND_NUI, sDMName + " Command Menu", + fX, fY, 500.0, fHeight + 12.0, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Get which buttons are activated. + int bAIWidgetLock = ai_GetDMWidgetButton(oPC, BTN_DM_WIDGET_LOCK); + int bCmdGroup1 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP1); + int bCmdGroup2 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP2); + int bCmdGroup3 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP3); + int bCmdGroup4 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP4); + int bCmdGroup5 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP5); + int bCmdGroup6 = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_GROUP6); + int bCmdCamera = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_CAMERA); + int bCmdInventory = ai_GetDMWidgetButton(oPC, BTN_DM_CMD_INVENTORY); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set all binds, events, and watches. + // Row 1 + NuiSetBind(oPC, nToken, "btn_widget_lock_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_widget_lock", JsonBool(bAIWidgetLock)); + NuiSetBind(oPC, nToken, "btn_widget_lock_tooltip", JsonString( + " Locks widget to the current location.")); + NuiSetBind(oPC, nToken, "btn_main_menu_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu", JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_main_menu_tooltip", JsonString(" Server menu options")); + NuiSetBind(oPC, nToken, "btn_group_options_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_group_options", JsonInt(TRUE)); + //NuiSetBind(oPC, nToken, "btn_empty_button_event", JsonBool (TRUE)); + //NuiSetBind(oPC, nToken, "btn_empty_button", JsonInt(TRUE)); + //sText = " Copy AI and command settings for one creature to others."; + //NuiSetBind(oPC, nToken, "btn_empty_button_tooltip", JsonString(sText)); + // Row 2 + NuiSetBind(oPC, nToken, "chbx_cmd_group1_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group1_check", JsonBool (bCmdGroup1)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group1_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group1_event", JsonBool (TRUE)); + string sText, sText2, sSpeed; + string sAction = " (Left Action/Right Add)"; + json jGroup = GetLocalJson(oPC, "DM_GROUP1"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + string sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 1"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group1_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group1_tooltip", JsonString(" " + sText2)); + NuiSetBind(oPC, nToken, "chbx_cmd_group2_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group2_check", JsonBool (bCmdGroup2)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group2_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group2_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP2"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 2"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group2_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group2_tooltip", JsonString(" " + sText2)); + // Row 3 + NuiSetBind(oPC, nToken, "chbx_cmd_group3_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group3_check", JsonBool (bCmdGroup3)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group3_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group3_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP3"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 3"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group3_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group3_tooltip", JsonString(" " + sText2)); + NuiSetBind(oPC, nToken, "chbx_cmd_group4_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group4_check", JsonBool (bCmdGroup4)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group4_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group4_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP4"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 4"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group4_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group4_tooltip", JsonString(" " + sText2)); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_cmd_group5_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group5_check", JsonBool (bCmdGroup5)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group5_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group5_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP5"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 5"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group5_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group5_tooltip", JsonString(" " + sText2)); + NuiSetBind(oPC, nToken, "chbx_cmd_group6_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_cmd_group6_check", JsonBool (bCmdGroup6)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_group6_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cmd_group6_event", JsonBool (TRUE)); + jGroup = GetLocalJson(oPC, "DM_GROUP6"); + if(JsonGetInt(JsonArrayGet(jGroup, 0)) == 0) sSpeed = " [Walk]"; + else sSpeed = " [Run]"; + sUUID = JsonGetString(JsonArrayGet(jGroup, 1)); + if(sUUID == "") { sText = "Group 6"; sText2 = sText + sAction; } + else { sText = GetName(GetObjectByUUID(sUUID)) + "'s group"; sText2 = sText + sSpeed; } + NuiSetBind(oPC, nToken, "btn_cmd_group6_label", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_cmd_group6_tooltip", JsonString(" " + sText2)); + // Row 5 + NuiSetBind(oPC, nToken, "chbx_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_camera_check", JsonBool (bCmdCamera)); + NuiSetBindWatch (oPC, nToken, "chbx_camera_check", TRUE); + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString ( + " Toggle camera view for " + sDMName)); + NuiSetBind(oPC, nToken, "chbx_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "chbx_inventory_check", JsonBool (bCmdInventory)); + NuiSetBindWatch (oPC, nToken, "chbx_inventory_check", TRUE); + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString ( + " Open " + sDMName + " inventory")); + // Row 6+ + nIndex = 0; + int bWidget; + jPlugin = JsonArrayGet(jDMPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bWidget = JsonGetInt(JsonArrayGet(jPlugin, 1)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jDMPlugins, ++nIndex); + } + NuiSetBind(oPC, nToken, "chbx_plugin_tooltip", JsonString(" Adds the plugin to your widget.")); + // Row 7 + sText = ai_GetRandomDMTip(); + NuiSetBind(oPC, nToken, "lbl_info_1_label", JsonString(sText)); +} +void ai_CreateDMPluginManagerNUI(object oPC) +{ + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Load All Plugins", "btn_load_plugins", 150.0f, 20.0f, -1.0, "btn_load_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Check All", "btn_check_plugins", 150.0f, 20.0f, -1.0, "btn_check_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_plugins", 150.0f, 20.0f, -1.0, "btn_clear_plugins_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 101 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Add Plugin", "btn_add_plugin", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_plugin", 16, FALSE, 310.0f, 20.0f, "txt_plugin_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 101.0; + // Row 3+ ****************************************************************** 500 / --- + json jPlugins = ai_GetCampaignDbJson("plugins"); + int nIndex = 0; + json jPlugin = JsonArrayGet(jPlugins, nIndex); + string sName, sButton; + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Remove Plugin", "btn_remove_plugin_" + sButton, 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + sName = JsonGetString(JsonArrayGet(jPlugin, 2)); + jRow = CreateButton(jRow, sName, "btn_plugin_" + sButton, 290.0f, 20.0f, -1.0, "btn_plugin_" + sButton + "_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_plugin_" + sButton, 25.0, 20.0); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + // Get the window location to restore it from the database. + sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm" + AI_PLUGIN_NUI); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm" + AI_PLUGIN_NUI, sName + " PEPS Plugin Manager", + fX, fY, 500.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 + NuiSetBind(oPC, nToken, "btn_load_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_load_plugins_tooltip", JsonString(" Load all known PEPS plugins that are in the game files.")); + NuiSetBind(oPC, nToken, "btn_check_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_check_plugins_tooltip", JsonString(" Add all plugins to the players widget.")); + NuiSetBind(oPC, nToken, "btn_clear_plugins_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_plugins_tooltip", JsonString(" Remove all plugins from the players widget.")); + // Row 2 + NuiSetBind(oPC, nToken, "btn_add_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_plugin_tooltip", JsonString(" Enter an executable script name.")); + // Row 3+ + nIndex = 0; + int bCheck; + string sText; + jPlugin = JsonArrayGet(jPlugins, nIndex); + while(JsonGetType(jPlugin) != JSON_TYPE_NULL) + { + sButton = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_remove_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_event", JsonBool(TRUE)); + bCheck = JsonGetInt(JsonArrayGet(jPlugin, 1)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_check", JsonBool(bCheck)); + NuiSetBind(oPC, nToken, "chbx_plugin_" + sButton + "_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_plugin_" + sButton + "_check", TRUE); + sText = " " + JsonGetString(JsonArrayGet(jPlugin, 2)); + NuiSetBind(oPC, nToken, "btn_plugin_" + sButton + "_tooltip", JsonString(sText)); + jPlugin = JsonArrayGet(jPlugins, ++nIndex); + } + NuiSetBind(oPC, nToken, "chbx_plugin_tooltip", JsonString(" Allows players to use this plugin.")); +} +void ai_CreateDMWidgetManagerNUI(object oPC) +{ + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 ******************************************************************* 575 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Check All", "btn_check_buttons", 150.0f, 20.0f, -1.0, "btn_check_buttons_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear All", "btn_clear_buttons", 150.0f, 20.0f, -1.0, "btn_clear_buttons_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 575 / 96 + jRow = CreateLabel(JsonArray(), "This menu manages the PEPS buttons a player may have access to.", "lbl_info1", 636.0, 15.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 575 / 119 + jRow = CreateLabel(JsonArray(), "Having a check next to a button will remove that button from the players menus.", "lbl_info2", 636.0, 15.0); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 ******************************************************************* 575 / 162 + jRow = CreateButtonImage(jRow, "ir_invite", "btn_toggle_assoc_widget", 35.0f, 35.0f, 0.0, "btn_toggle_assoc_widget_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_toggle_assoc_widget", 25.0, 20.0, "btn_toggle_assoc_widget_tooltip"); + + jRow = CreateButtonImage(JsonArray(), "ir_action", "btn_cmd_action", 35.0f, 35.0f, 0.0, "btn_cmd_action_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_action", 25.0, 20.0, "btn_cmd_action_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_guard", "btn_cmd_guard", 35.0f, 35.0f, 0.0, "btn_cmd_guard_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_guard", 25.0, 20.0, "btn_cmd_guard_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_standground", "btn_cmd_hold", 35.0f, 35.0f, 0.0, "btn_cmd_hold_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_hold", 25.0, 20.0, "btn_cmd_hold_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_attacknearest", "btn_cmd_attack", 35.0f, 35.0f, 0.0, "btn_cmd_attack_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_attack", 25.0, 20.0, "btn_cmd_attack_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_follow", "btn_cmd_follow", 35.0f, 35.0f, 0.0, "btn_cmd_follow_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_follow", 25.0, 20.0, "btn_cmd_follow_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_follow_target", 35.0f, 35.0f, 0.0, "btn_follow_target_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_follow_target", 25.0, 20.0, "btn_follow_target_tooltip"); + + jRow = CreateButtonImage(jRow, "ife_foc_search", "btn_cmd_search", 35.0f, 35.0f, 0.0, "btn_cmd_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_search", 25.0, 20.0, "btn_cmd_search_tooltip"); + + jRow = CreateButtonImage(jRow, "ife_foc_hide", "btn_cmd_stealth", 35.0f, 35.0f, 0.0, "btn_cmd_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_stealth", 25.0, 20.0, "btn_cmd_stealth_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_scommand", "btn_cmd_ai_script", 35.0f, 35.0f, 0.0, "btn_cmd_ai_script_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_ai_script", 25.0, 20.0, "btn_cmd_ai_script_tooltip"); + + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 ******************************************************************* 575 / 205 + jRow = CreateButtonImage(jRow, "isk_settrap", "btn_cmd_place_trap", 35.0f, 35.0f, 0.0, "btn_cmd_place_trap_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cmd_place_trap", 25.0, 20.0, "btn_cmd_place_trap_tooltip"); + + jRow = CreateButtonImage(JsonArray(), "isk_spellcraft", "btn_quick_widget", 35.0f, 35.0f, 0.0, "btn_quick_widget_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quick_widget", 25.0, 20.0, "btn_quick_widget_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_lore", "btn_spell_memorize", 35.0f, 35.0f, 0.0, "btn_spell_memorize_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_spell_memorize", 25.0, 20.0, "btn_spell_memorize_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_cantrips", "btn_buff_short", 35.0f, 35.0f, 0.0, "btn_buff_short_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_short", 25.0, 20.0, "btn_buff_short_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_cast", "btn_buff_long", 35.0f, 35.0f, 0.0, "btn_buff_long_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_long", 25.0, 20.0, "btn_buff_long_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_level789", "btn_buff_all", 35.0f, 35.0f, 0.0, "btn_buff_all_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_all", 25.0, 20.0, "btn_buff_all_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_rest", "btn_buff_rest", 35.0f, 35.0f, 0.0, "btn_buff_rest_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_buff_rest", 25.0, 20.0, "btn_buff_rest_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_jump", "btn_jump_to", 35.0f, 35.0f, 0.0, "btn_jump_to_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_jump_to", 25.0, 20.0, "btn_jump_to_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_limbo", "btn_ghost_mode", 35.0f, 35.0f, 0.0, "btn_ghost_mode_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ghost_mode", 25.0, 20.0, "btn_ghost_mode_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_examine", "btn_camera", 35.0f, 35.0f, 0.0, "btn_camera_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_camera", 25.0, 20.0, "btn_camera_tooltip"); + + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 ******************************************************************* 575 / 248 + jRow = CreateButtonImage(jRow, "ir_pickup", "btn_inventory", 35.0f, 35.0f, 0.0, "btn_inventory_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_inventory", 25.0, 20.0, "btn_inventory_tooltip"); + + jRow = CreateButtonImage(JsonArray(), "ife_familiar", "btn_familiar", 35.0f, 35.0f, 0.0, "btn_familiar_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_familiar", 25.0, 20.0, "btn_familiar_tooltip"); + + jRow = CreateButtonImage(jRow, "ife_animal", "btn_companion", 35.0f, 35.0f, 0.0, "btn_companion_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_companion", 25.0, 20.0, "btn_companion_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_ai", "btn_ai", 35.0f, 35.0f, 0.0, "btn_ai_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ai", 25.0, 20.0, "btn_companion_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_movsilent", "btn_quiet", 35.0f, 35.0f, 0.0, "btn_quiet_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_quiet", 25.0, 20.0, "btn_quiet_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_archer", "btn_ranged", 35.0f, 35.0f, 0.0, "btn_ranged_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ranged", 25.0, 20.0, "btn_ranged_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_takeitem", "btn_equip_weapon", 35.0f, 35.0f, 0.0, "btn_equip_weapon_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_equip_weapon", 25.0, 20.0, "btn_equip_weapon_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_search", "btn_search", 35.0f, 35.0f, 0.0, "btn_search_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_search", 25.0, 20.0, "btn_search_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_hide", "btn_stealth", 35.0f, 35.0f, 0.0, "btn_stealth_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_stealth", 25.0, 20.0, "btn_stealth_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_open", "btn_open_door", 35.0f, 35.0f, 0.0, "btn_open_door_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_open_door", 25.0, 20.0, "btn_open_door_tooltip"); + + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 7 ******************************************************************* 575 / 291 + jRow = CreateButtonImage(jRow, "isk_distrap", "btn_traps", 35.0f, 35.0f, 0.0, "btn_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_traps", 25.0, 20.0, "btn_traps_tooltip"); + + jRow = CreateButtonImage(JsonArray(), "isk_olock", "btn_pick_locks", 35.0f, 35.0f, 0.0, "btn_pick_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_pick_locks", 25.0, 20.0, "btn_pick_locks_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_bash", "btn_bash_locks", 35.0f, 35.0f, 0.0, "btn_bash_locks_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_bash_locks", 25.0, 20.0, "btn_bash_locks_tooltip"); + + jRow = CreateButtonImage(jRow, "dm_control", "btn_magic_level", 35.0f, 35.0f, 0.0, "btn_magic_level_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_level", 25.0, 20.0, "btn_magic_level_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_xability", "btn_spontaneous", 35.0f, 35.0f, 0.0, "btn_spontaneous_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_spontaneous", 25.0, 20.0, "btn_spontaneous_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_cntrspell", "btn_magic", 35.0f, 35.0f, 0.0, "btn_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic", 25.0, 20.0, "btn_magic_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_moreattacks", "btn_magic_items", 35.0f, 35.0f, 0.0, "btn_magic_items_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_magic_items", 25.0, 20.0, "btn_magic_items_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_orisons", "btn_def_magic", 35.0f, 35.0f, 0.0, "btn_def_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_def_magic", 25.0, 20.0, "btn_def_magic_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_metamagic", "btn_off_magic", 35.0f, 35.0f, 0.0, "btn_off_magic_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_off_magic", 25.0, 20.0, "btn_off_magic_tooltip"); + + jRow = CreateButtonImage(jRow, "isk_heal", "btn_heal_out", 35.0f, 35.0f, 0.0, "btn_heal_out_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_out", 25.0, 20.0, "btn_heal_out_tooltip"); + + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 8 ******************************************************************* 575 / 334 + jRow = CreateButtonImage(jRow, "dm_heal", "btn_heal_in", 35.0f, 35.0f, 0.0, "btn_heal_in_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heal_in", 25.0, 20.0, "btn_heal_in_tooltip"); + + jRow = CreateButtonImage(JsonArray(), "ir_heal", "btn_heals_onoff", 35.0f, 35.0f, 0.0, "btn_heals_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_heals_onoff", 25.0, 20.0, "btn_heals_onoff_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_party", "btn_healp_onoff", 35.0f, 35.0f, 0.0, "btn_healp_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_healp_onoff", 25.0, 20.0, "btn_healp_onoff_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_accept", "btn_cure_onoff", 35.0f, 35.0f, 0.0, "btn_cure_onoff_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_cure_onoff", 25.0, 20.0, "btn_cure_onoff_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_barter", "btn_loot", 35.0f, 35.0f, 0.0, "btn_loot_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_loot", 25.0, 20.0, "btn_loot_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_ignore", "btn_ignore_assoc", 35.0f, 35.0f, 0.0, "btn_ignore_assoc_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_assoc", 25.0, 20.0, "btn_ignore_assoc_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_abort", "btn_ignore_traps", 35.0f, 35.0f, 0.0, "btn_ignore_traps_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_ignore_traps", 25.0, 20.0, "btn_ignore_traps_tooltip"); + + jRow = CreateButtonImage(jRow, "ir_dmchat", "btn_perc_range", 35.0f, 35.0f, 0.0, "btn_perc_range_tooltip"); + jRow = CreateCheckBox(jRow, "", "chbx_perc_range", 25.0, 20.0, "btn_perc_range_tooltip"); + + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + float fHeight = 334.0; + // Get the window location to restore it from the database. + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + jLocations = JsonObjectGet(jLocations, "dm_widget_manager_nui"); + float fX = JsonGetFloat(JsonObjectGet(jLocations, "x")); + float fY = JsonGetFloat(JsonObjectGet(jLocations, "y")); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "dm_widget_manager_nui", sName + " PEPS DM Widget Manager", + fX, fY, 660.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "0e_nui_dm"); + // Set event watches for save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Row 1 + NuiSetBind(oPC, nToken, "btn_check_buttons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_check_buttons_tooltip", JsonString(" Check all buttons, removing them for all players.")); + NuiSetBind(oPC, nToken, "btn_clear_buttons_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_buttons_tooltip", JsonString(" Clear all buttons, allowing use for all players.")); + // Row 2 & 3 Labels. + // Load all the buttons states. + //int bAIWidgetLock = ai_GetDMWAccessButton(BTN_WIDGET_LOCK); + int bAssocWidgetOff = ai_GetDMWAccessButton(BTN_ASSOC_WIDGETS_OFF); + int bCmdAction = ai_GetDMWAccessButton(BTN_CMD_ACTION); + int bCmdGuard = ai_GetDMWAccessButton(BTN_CMD_GUARD); + int bCmdHold = ai_GetDMWAccessButton(BTN_CMD_HOLD); + int bCmdSearch = ai_GetDMWAccessButton(BTN_CMD_SEARCH); + int bCmdStealth = ai_GetDMWAccessButton(BTN_CMD_STEALTH); + int bCmdAttack = ai_GetDMWAccessButton(BTN_CMD_ATTACK); + int bCmdFollow = ai_GetDMWAccessButton(BTN_CMD_FOLLOW); + int bCmdAIScript = ai_GetDMWAccessButton(BTN_CMD_AI_SCRIPT); + int bCmdPlacetrap = ai_GetDMWAccessButton(BTN_CMD_PLACE_TRAP); + int bSpellWidget = ai_GetDMWAccessButton(BTN_CMD_SPELL_WIDGET); + int bMemorizeSpells = ai_GetDMWAccessButton(BTN_DM_CMD_MEMORIZE); + int bBuffShort = ai_GetDMWAccessButton(BTN_BUFF_SHORT); + int bBuffLong = ai_GetDMWAccessButton(BTN_BUFF_LONG); + int bBuffAll = ai_GetDMWAccessButton(BTN_BUFF_ALL); + int bBuffRest = ai_GetDMWAccessButton(BTN_BUFF_REST); + int bJumpTo = ai_GetDMWAccessButton(BTN_CMD_JUMP_TO); + int bGhostMode = ai_GetDMWAccessButton(BTN_CMD_GHOST_MODE); + int bCamera = ai_GetDMWAccessButton(BTN_CMD_CAMERA); + int bInventory = ai_GetDMWAccessButton(BTN_CMD_INVENTORY); + int bFamiliar = ai_GetDMWAccessButton(BTN_CMD_FAMILIAR); + int bCompanion = ai_GetDMWAccessButton(BTN_CMD_COMPANION); + int bFollowTarget = ai_GetDMAIAccessButton(BTN_AI_FOLLOW_TARGET); + int bAI = ai_GetDMAIAccessButton(BTN_AI_FOR_PC); + int bReduceSpeech = ai_GetDMAIAccessButton(BTN_AI_REDUCE_SPEECH); + int bRanged = ai_GetDMAIAccessButton(BTN_AI_USE_RANGED); + int bEquipWeapons = ai_GetDMAIAccessButton(BTN_AI_STOP_WEAPON_EQUIP); + int bSearch = ai_GetDMAIAccessButton(BTN_AI_USE_SEARCH); + int bStealth = ai_GetDMAIAccessButton(BTN_AI_USE_STEALTH); + int bOpenDoors = ai_GetDMAIAccessButton(BTN_AI_OPEN_DOORS); + int bTraps = ai_GetDMAIAccessButton(BTN_AI_REMOVE_TRAPS); + int bPickLocks = ai_GetDMAIAccessButton(BTN_AI_PICK_LOCKS); + int bBashLocks = ai_GetDMAIAccessButton(BTN_AI_BASH_LOCKS); + int bMagicLevel = ai_GetDMAIAccessButton(BTN_AI_MAGIC_LEVEL); + int bSpontaneous = ai_GetDMAIAccessButton(BTN_AI_NO_SPONTANEOUS); + int bNoMagic = ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_USE); + int bNoMagicItems = ai_GetDMAIAccessButton(BTN_AI_NO_MAGIC_ITEM_USE); + int bDefMagic = ai_GetDMAIAccessButton(BTN_AI_DEF_MAGIC_USE); + int bOffMagic = ai_GetDMAIAccessButton(BTN_AI_OFF_MAGIC_USE); + int bHealOut = ai_GetDMAIAccessButton(BTN_AI_HEAL_OUT); + int bHealIn = ai_GetDMAIAccessButton(BTN_AI_HEAL_IN); + int bSelfHealOnOff = ai_GetDMAIAccessButton(BTN_AI_STOP_SELF_HEALING); + int bPartyHealOnOff = ai_GetDMAIAccessButton(BTN_AI_STOP_PARTY_HEALING); + int bCureOnOff = ai_GetDMAIAccessButton(BTN_AI_STOP_CURE_SPELLS); + int bLoot = ai_GetDMAIAccessButton(BTN_AI_LOOT); + int bIgnoreAssociates = ai_GetDMAIAccessButton(BTN_AI_IGNORE_ASSOCIATES); + int bIgnoreTraps = ai_GetDMAIAccessButton(BTN_AI_IGNORE_TRAPS); + int bPercRange = ai_GetDMAIAccessButton(BTN_AI_PERC_RANGE); + int bBtnFamiliar = ai_GetDMWAccessButton(BTN_CMD_FAMILIAR); + int bBtnCompanion = ai_GetDMWAccessButton(BTN_CMD_COMPANION); + SetLocalInt(oPC, "CHBX_SKIP", TRUE); + DelayCommand(2.0, DeleteLocalInt(oPC, "CHBX_SKIP")); + // Row 4 + NuiSetBind(oPC, nToken, "chbx_toggle_assoc_widget_check", JsonBool (bCmdAction)); + NuiSetBindWatch(oPC, nToken, "chbx_toggle_assoc_widget_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_toggle_assoc_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_toggle_assoc_widget_tooltip", JsonString(" Associate widgets")); + + NuiSetBind(oPC, nToken, "chbx_cmd_action_check", JsonBool (bCmdAction)); + NuiSetBindWatch(oPC, nToken, "chbx_cmd_action_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_action_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_action_tooltip", JsonString(" Action button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_guard_check", JsonBool (bCmdGuard)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_guard_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_guard_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_guard_tooltip", JsonString(" Guard button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_hold_check", JsonBool (bCmdHold)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_hold_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_hold_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_hold_tooltip", JsonString(" Hold button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_attack_check", JsonBool (bCmdAttack)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_attack_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_attack_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_attack_tooltip", JsonString(" Attack button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_follow_check", JsonBool (bCmdFollow)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_follow_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_follow_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_follow_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_follow_tooltip", JsonString(" Follow button")); + + NuiSetBind(oPC, nToken, "chbx_follow_target_check", JsonBool (bFollowTarget)); + NuiSetBindWatch (oPC, nToken, "chbx_follow_target_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_follow_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_follow_target_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_follow_target_tooltip", JsonString(" Follow Target button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_search_check", JsonBool (bCmdSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_search_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_search_tooltip", JsonString(" Search All button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_check", JsonBool (bCmdStealth)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_stealth_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_stealth_tooltip", JsonString(" Stealth All button")); + + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_check", JsonBool (bCmdAIScript)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_ai_script_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_ai_script_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_ai_script_tooltip", JsonString(" Combat Tactics button")); + // Row 5 + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_check", JsonBool (bCmdPlacetrap)); + NuiSetBindWatch (oPC, nToken, "chbx_cmd_place_trap_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cmd_place_trap_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_cmd_place_trap_tooltip", JsonString (" Place Trap button")); + + NuiSetBind(oPC, nToken, "chbx_quick_widget_check", JsonBool (bSpellWidget)); + NuiSetBindWatch (oPC, nToken, "chbx_quick_widget_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quick_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_quick_widget_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_quick_widget_tooltip", JsonString(" Quick Use button")); + + NuiSetBind(oPC, nToken, "chbx_spell_memorize_check", JsonBool (bMemorizeSpells)); + NuiSetBindWatch (oPC, nToken, "chbx_spell_memorize_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_spell_memorize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spell_memorize_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_spell_memorize_tooltip", JsonString(" Memorize Spells button")); + + NuiSetBind(oPC, nToken, "chbx_buff_short_check", JsonBool (bBuffShort)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_short_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_short_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_short_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_buff_short_tooltip", JsonString(" Short Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_buff_long_check", JsonBool (bBuffLong)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_long_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_long_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_long_tooltip", JsonString(" Long Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_buff_all_check", JsonBool (bBuffAll)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_all_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_all_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_all_tooltip", JsonString(" All Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_buff_rest_check", JsonBool (bBuffRest)); + NuiSetBindWatch (oPC, nToken, "chbx_buff_rest_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_buff_rest_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_rest_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_buff_rest_tooltip", JsonString(" Rest Buffing button")); + + NuiSetBind(oPC, nToken, "chbx_jump_to_check", JsonBool(bJumpTo)); + NuiSetBindWatch (oPC, nToken, "chbx_jump_to_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_jump_to_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_to_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_jump_to_tooltip", JsonString(" Jump Associates button")); + + NuiSetBind(oPC, nToken, "chbx_ghost_mode_check", JsonBool (bGhostMode)); + NuiSetBindWatch (oPC, nToken, "chbx_ghost_mode_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ghost_mode_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ghost_mode_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_ghost_mode_tooltip", JsonString(" Ghost mode button")); + + NuiSetBind(oPC, nToken, "chbx_camera_check", JsonBool (bCamera)); + NuiSetBindWatch (oPC, nToken, "chbx_camera_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_camera_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_camera_tooltip", JsonString(" Change Camera button")); + // Row 6 + NuiSetBind(oPC, nToken, "chbx_inventory_check", JsonBool (bInventory)); + NuiSetBindWatch (oPC, nToken, "chbx_inventory_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_inventory_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_inventory_tooltip", JsonString(" Open Inventory button")); + + NuiSetBind(oPC, nToken, "chbx_familiar_check", JsonBool(bBtnFamiliar)); + NuiSetBindWatch (oPC, nToken, "chbx_familiar_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_familiar_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_familiar_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_familiar_tooltip", JsonString(" Change Familiar buttons")); + + NuiSetBind(oPC, nToken, "chbx_companion_check", JsonBool(bBtnCompanion)); + NuiSetBindWatch (oPC, nToken, "chbx_companion_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_companion_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_companion_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_companion_tooltip", JsonString(" Change Animal Companion buttons")); + + NuiSetBind(oPC, nToken, "chbx_ai_check", JsonBool(bAI)); + NuiSetBindWatch (oPC, nToken, "chbx_ai_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ai_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ai_tooltip", JsonString(" Player AI button")); + + NuiSetBind(oPC, nToken, "chbx_quiet_check", JsonBool(bReduceSpeech)); + NuiSetBindWatch (oPC, nToken, "chbx_quiet_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_quiet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_quiet_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_quiet_tooltip", JsonString(" Reduce Speech button")); + + NuiSetBind(oPC, nToken, "chbx_ranged_check", JsonBool(bRanged)); + NuiSetBindWatch(oPC, nToken, "chbx_ranged_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ranged_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ranged_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_ranged_tooltip", JsonString(" Ranged button")); + + NuiSetBind(oPC, nToken, "chbx_equip_weapon_check", JsonBool(bEquipWeapons)); + NuiSetBindWatch(oPC, nToken, "chbx_equip_weapon_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_equip_weapon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_equip_weapon_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_equip_weapon_tooltip", JsonString(" Auto Equip Weapons button")); + + NuiSetBind(oPC, nToken, "chbx_search_check", JsonBool(bSearch)); + NuiSetBindWatch (oPC, nToken, "chbx_search_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_search_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_search_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_search_tooltip", JsonString(" Search button")); + + NuiSetBind(oPC, nToken, "chbx_stealth_check", JsonBool(bStealth)); + NuiSetBindWatch(oPC, nToken, "chbx_stealth_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_stealth_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_stealth_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_stealth_tooltip", JsonString(" Stealth button")); + + NuiSetBind(oPC, nToken, "chbx_open_door_check", JsonBool(bOpenDoors)); + NuiSetBindWatch (oPC, nToken, "chbx_open_door_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_open_door_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_open_door_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_open_door_tooltip", JsonString(" Open Door button")); + // Row 7 + NuiSetBind(oPC, nToken, "chbx_traps_check", JsonBool(bTraps)); + NuiSetBindWatch (oPC, nToken, "chbx_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_traps_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_traps_tooltip", JsonString(" Disable Traps button")); + + NuiSetBind(oPC, nToken, "chbx_pick_locks_check", JsonBool(bPickLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_pick_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_pick_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_pick_locks_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_pick_locks_tooltip", JsonString(" Pick Locks button")); + + NuiSetBind(oPC, nToken, "chbx_bash_locks_check", JsonBool(bBashLocks)); + NuiSetBindWatch(oPC, nToken, "chbx_bash_locks_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_bash_locks_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_bash_locks_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_bash_locks_tooltip", JsonString(" Bash button")); + + NuiSetBind(oPC, nToken, "chbx_magic_level_check", JsonBool(bMagicLevel)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_level_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_level_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_level_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_magic_level_tooltip", JsonString(" Magic Level button")); + + NuiSetBind(oPC, nToken, "chbx_spontaneous_check", JsonBool(bSpontaneous)); + NuiSetBindWatch (oPC, nToken, "chbx_spontaneous_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spontaneous_tooltip", JsonString(" Spontaneous Spells button")); + + NuiSetBind(oPC, nToken, "chbx_magic_check", JsonBool(bNoMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_tooltip", JsonString(" Use Magic button")); + + NuiSetBind(oPC, nToken, "chbx_magic_items_check", JsonBool(bNoMagicItems)); + NuiSetBindWatch (oPC, nToken, "chbx_magic_items_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_magic_items_tooltip", JsonString(" Use Magic Items button")); + + NuiSetBind(oPC, nToken, "chbx_def_magic_check", JsonBool (bDefMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_def_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_def_magic_tooltip", JsonString(" Use Defensive Magic button")); + + NuiSetBind(oPC, nToken, "chbx_off_magic_check", JsonBool(bOffMagic)); + NuiSetBindWatch (oPC, nToken, "chbx_off_magic_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_off_magic_tooltip", JsonString(" Use Offensive Magic button")); + + NuiSetBind(oPC, nToken, "chbx_heal_out_check", JsonBool(bHealOut)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_out_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_out_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_out_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_out_tooltip", JsonString(" Heal Out of Combat button")); + // Row 8 + NuiSetBind(oPC, nToken, "chbx_heal_in_check", JsonBool(bHealIn)); + NuiSetBindWatch (oPC, nToken, "chbx_heal_in_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heal_in_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_in_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_heal_in_tooltip", JsonString(" Heal In Combat button")); + + NuiSetBind(oPC, nToken, "chbx_heals_onoff_check", JsonBool(bSelfHealOnOff)); + NuiSetBindWatch (oPC, nToken, "chbx_heals_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_heals_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heals_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_heals_onoff_tooltip", JsonString(" Heal Self On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_healp_onoff_check", JsonBool(bPartyHealOnOff)); + NuiSetBind(oPC, nToken, "chbx_healp_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_healp_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_healp_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_healp_onoff_tooltip", JsonString(" Heal Party On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_cure_onoff_check", JsonBool(bCureOnOff)); + NuiSetBind(oPC, nToken, "chbx_cure_onoff_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "chbx_cure_onoff_check", TRUE); + NuiSetBind(oPC, nToken, "btn_cure_onoff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cure_onoff_tooltip", JsonString(" Cure Spells On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_loot_check", JsonBool(bLoot)); + NuiSetBindWatch (oPC, nToken, "chbx_loot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_loot_tooltip", JsonString(" Auto Looting button")); + + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_check", JsonBool(bIgnoreAssociates)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_assoc_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_assoc_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_assoc_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_ignore_assoc_tooltip", JsonString(" Ignore Associates On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_ignore_traps_check", JsonBool(bIgnoreTraps)); + NuiSetBindWatch(oPC, nToken, "chbx_ignore_traps_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_ignore_traps_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_ignore_traps_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "btn_ignore_traps_tooltip", JsonString(" Ignore Floor Traps On/Off button")); + + NuiSetBind(oPC, nToken, "chbx_perc_range_check", JsonBool(bPercRange)); + NuiSetBindWatch (oPC, nToken, "chbx_perc_range_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_perc_range_tooltip", JsonString(" Perception Range button")); +} + diff --git a/_module/nss/0i_messages.nss b/_module/nss/0i_messages.nss new file mode 100644 index 0000000..ff01269 --- /dev/null +++ b/_module/nss/0i_messages.nss @@ -0,0 +1,88 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_messages +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include script for sending messages to files and players on the server. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_constants" +#include "0i_color" +// Sets up a Message on the module to be sent to the log and/or players. +// sTextColor color of text sent to the players and DM's. +// Use AI_COLOR_*. Where * is WHITE, RED, GREEN, BLUE, GRAY, or YELLOW. +// If nLog is TRUE it will send the message to the log file. +// If nToDMs is TRUE it will send the message to all DM's. +// If oPC is set to a player then they will get the message as well. +// Messages delivered by script should be colored as follows. +// _Debug message = COLOR_WHITE +// Generic messages for the player = AI_COLOR_YELLOW +// Negative messages for the player = AI_COLOR_RED +// Positive messages for the player = AI_COLOR_GREEN +// System messages, things that are not part of Dnd = COLOR_GRAY +// Descriptive in game messages = COLOR_BLUE +void ai_SendMessages(string sMessage, string sTextColor = AI_COLOR_YELLOW, object oPC = OBJECT_INVALID, int nToDMs = FALSE, int nLog = FALSE); +// Used for _debugging. Keeps all the information organized. +// Sends info to first pc if true and sends information to log file. +// sScriptName is the name of the script calling this function. +// sLineNumber is the line number of the code calling this function. +// sMessage is the description of the debug being sent. +void ai_Debug(string sScriptName, string sLineNumber, string sMessage); +// A counter to track microseconds in code. Start saves the counter. +void ai_Counter_Start(); +// A counter to track microseconds in code. End displays the time between Start +// and End to the log file. +void ai_Counter_End(string sMessage = ""); + +void ai_SendMessages(string sMessage, string sTextColor = AI_COLOR_YELLOW, object oPC = OBJECT_INVALID, int nToDMs = FALSE, int nLog = FALSE) +{ + // if nLog is TRUE send the message to the log file. + if(nLog) + { + sMessage = ai_StripColorCodes(sMessage); + // Add PC name to log to know who it belongs to. + string sLogPCName; + if(oPC != OBJECT_INVALID) sLogPCName = "(" + GetName(oPC) + ") "; + WriteTimestampedLogEntry("*** MESSAGE: " + sLogPCName + " " + sMessage); + } + sMessage = ai_AddColorToText(sMessage, sTextColor); + if(oPC != OBJECT_INVALID) SendMessageToPC(oPC, sMessage); + // If nToDMs is true send message to the DM's online. + if(nToDMs) SendMessageToAllDMs(sMessage); +} +void ai_Debug(string sScriptName, string sLineNumber, string sMessage) +{ + string sName = GetName(OBJECT_SELF); + if(sName == GetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE) && + sName != "") + { + sMessage = "(((DEBUG)))[" + sScriptName + " - " + sLineNumber + " ]" + sMessage; + sMessage = ai_StripColorCodes(sMessage); + WriteTimestampedLogEntry(sMessage); + return; + } + //sMessage = "(((DEBUG)))[" + sScriptName + " - " + sLineNumber + " ]" + sMessage; + //sMessage = ai_StripColorCodes(sMessage); + //SendMessageToPC(GetFirstPC(), sMessage); + //WriteTimestampedLogEntry(sMessage); + //if(GetLocalInt(OBJECT_SELF, "AI_DEBUG")) WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Kirrin") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Dorna Trapspringer") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Dire Spider") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Shadow Priest") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Tomi Undergallows") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Thello Colds") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Gert Sigers") WriteTimestampedLogEntry(sMessage); + //if(GetName(OBJECT_SELF) == "Zombie") WriteTimestampedLogEntry(sMessage); +} +void ai_Counter_Start() +{ + SetLocalInt(GetModule(), "0_MSCounter", GetMicrosecondCounter()); +} +void ai_Counter_End(string sMessage = "") +{ + int nTime = GetMicrosecondCounter(); + nTime = nTime - GetLocalInt(GetModule(), "0_MSCounter"); + float fTime = nTime / 1000000.0; + if(AI_DEBUG) ai_Debug("MICROSECOND_COUNTER", "", "Seconds: " + FloatToString(fTime, 0, 10) + + " Microseconds: " + IntToString(nTime) + " " + sMessage); +} diff --git a/_module/nss/0i_module.nss b/_module/nss/0i_module.nss new file mode 100644 index 0000000..0fb394f --- /dev/null +++ b/_module/nss/0i_module.nss @@ -0,0 +1,592 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_module +//////////////////////////////////////////////////////////////////////////////// + Include script for handling event scripts for injecting the systems into a + module for either single player or a server. +*/////////////////////////////////////////////////////////////////////////////// +#include "x2_inc_switches" +#include "0i_associates" +#include "0i_menus" +#include "0i_menus_dm" +#include "0i_player_target" +#include "0i_gui_events" +// Add to nw_c2_default9 OnSpawn event script of monsters and +int ai_OnMonsterSpawn(object oCreature); +// Add to nw_ch_ac9 OnSpawn event script of henchman. +void ai_OnAssociateSpawn(object oCreature); +// Run all of the game setup scripts and build for PC. +// If oPC is passed as Invalid then it will get the firt PC in the game. +void ai_CheckPCStart(object oPC = OBJECT_INVALID); +// Run all of the games setup scripts and build for DM. +void ai_CheckDMStart(object oDM); +// Checks to see if we should change the monster via Json. +int ai_ChangeMonster(object oCreature, object oModule); +// Checks to see if we should change the associate via Json. +object ai_ChangeAssociate(object oCreature, object oModule); +// Sets the events for oCreature that is a Monster while playing Infinite Dungeons. +void ai_SetIDMonsterEventScripts(object oCreature); +// Sets the events for oCreature that is a monster in while using the PRC and +// playing Infinite Dungeons. +void ai_SetPRCIDMonsterEventScripts(object oCreature); +// Sets the events for oCreature that is an associate while using the PRC. +void ai_SetPRCAssociateEventScripts(object oCreature); +// Reverts single player monster event scripts back to their default. +void ai_ChangeEventScriptsForMonster(object oCreature); +// Reverts single player associates event scripts back to their default. +void ai_ChangeEventScriptsForAssociate(object oCreature); +// If using PRC this will replace some spells with PRC variants. +json ai_ReplaceSpellsWithPRCVariants(object oCreature, json jCreature); + +//****************************************************************************** +//********************* Creature event scripts ********************************* +//****************************************************************************** +int ai_OnMonsterSpawn(object oCreature) +{ + if(GetLocalInt(oCreature, AI_ONSPAWN_EVENT)) return FALSE; + SetLocalInt(oCreature, AI_ONSPAWN_EVENT, TRUE); + object oModule = GetModule(); + int nInfiniteDungeons; + int nPRC = GetLocalInt(oModule, AI_USING_PRC); + // If you are running a server this will not affect the module. + if(!ai_GetIsServer()) + { + ai_CheckPCStart(); + string sModuleName = GetModuleName(); + if(sModuleName == "Neverwinter Nights - Infinite Dungeons" || + sModuleName == "Infinite Dungeons [PRC8]") + { + nInfiniteDungeons = TRUE; + if(nPRC) ai_SetPRCIDMonsterEventScripts(oCreature); + else ai_SetIDMonsterEventScripts(oCreature); + // Fix to get plot givers, finishers from getting killed a lot. + if(GetLocalString(oCreature, "sConversation") == "id1_plotgiver " || + GetLocalString(oCreature, "sConversation") == "id1_plotdest") + { + ChangeToStandardFaction(oCreature, STANDARD_FACTION_MERCHANT); + SetStandardFactionReputation(STANDARD_FACTION_HOSTILE, 50, oCreature); + } + } + } + // PRC and Infinite dungeons has issues with Ondeath script so we just leave it alone. + if(!nPRC && !nInfiniteDungeons) + { + // We change this script so we can setup permanent summons on/off. + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + SetLocalString(oCreature, "AI_ON_DEATH", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_c2_7_ondeath"); + } + if(GetCreatureFlag(oCreature, CREATURE_VAR_IS_INCORPOREAL)) + { + string sCombatAI = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + if (sCombatAI == "") SetLocalString(oCreature, AI_DEFAULT_SCRIPT, "ai_incorporeal"); + } + ai_SetListeningPatterns(oCreature); + ai_SetCreatureAIScript(oCreature); + ai_SetNormalAppearance(oCreature); + ai_SetAura(oCreature); + SetLocalInt(oCreature, AI_HEAL_IN_COMBAT_LIMIT, AI_MONSTER_HEAL_IN_COMBAT_CHANCE); + SetLocalInt(oCreature, AI_HEAL_OUT_OF_COMBAT_LIMIT, AI_MONSTER_HEAL_OUT_COMBAT_CHANCE); + int nMonsterHpIncrease = GetLocalInt(oModule, AI_INCREASE_MONSTERS_HP); + if(nMonsterHpIncrease) + { + int nHp = GetMaxHitPoints(oCreature); + nHp = (nHp * nMonsterHpIncrease) / 100; + effect eHp = EffectTemporaryHitpoints(nHp); + eHp = SupernaturalEffect(eHp); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHp, oCreature); + } + // Check if the monster should change how they search for targets. + if(d100() <= GetLocalInt(GetModule(), AI_RULE_AI_DIFFICULTY)) + { + SetLocalInt(oCreature, AI_RULE_AI_DIFFICULTY, TRUE); + } + // Do json changes after we have setup the creature. + if(ai_ChangeMonster(oCreature, oModule)) return TRUE; + return FALSE; +} +void ai_OnAssociateSpawn(object oCreature) +{ + if(GetLocalInt(oCreature, AI_ONSPAWN_EVENT)) return; + SetLocalInt(oCreature, AI_ONSPAWN_EVENT, TRUE); + int bPRC = GetLocalInt(GetModule(), AI_USING_PRC); + // If you are running a server this will not affect the module. + if(!ai_GetIsServer()) + { + if(bPRC) ai_SetPRCAssociateEventScripts(oCreature); + } + // PRC has issues with Ondeath script so we just leave it alone. + if(!bPRC) + { + // We change this script so we can setup permanent summons on/off. + // If you don't use this you may remove the next three lines. + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + // If our script is set in the OnDeath event then don't save as secondary. + if(sScript != "0e_ch_7_ondeath") + { + SetLocalString(oCreature, "AI_ON_DEATH", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_ch_7_ondeath"); + } + else if(GetLocalString(oCreature, "AI_ON_DEATH") == "0e_ch_7_ondeath") + { + // If we have somehow saved our death script then change to default. + SetLocalString(oCreature, "AI_ON_DEATH", "nw_ch_ac7"); + } + } + // Initialize Associate modes for basic use. + ai_SetListeningPatterns(oCreature); + ai_SetNormalAppearance(oCreature); + ai_SetAssociateAIScript(oCreature, FALSE); + ai_SetAura(oCreature); + if(GetLocalInt(GetModule(), AI_RULE_PARTY_SCALE)) ai_CheckXPPartyScale(oCreature); + // Bioware summoned shadows are not incorporeal, also set the ai code. + if (GetTag(OBJECT_SELF) == "NW_S_SHADOW") + { + SetLocalInt(OBJECT_SELF, "X2_L_IS_INCORPOREAL", TRUE); + SetLocalString(OBJECT_SELF, AI_DEFAULT_SCRIPT, "ai_shadow"); + } +} +void ai_CheckPCStart(object oPC = OBJECT_INVALID) +{ + if(oPC == OBJECT_INVALID) oPC = GetFirstPC(); + // There should always be a PC widget. If it doesn't exist then we assume + // that the module is being loaded or started. + if(!NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI)) + { + object oModule = GetModule(); + // Do PRC check and save variable to the module. + if(ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) != "") + SetLocalInt(oModule, AI_USING_PRC, TRUE); + ai_SetAIRules(); + ai_CheckAssociateData(oPC, oPC, "pc"); + ai_StartupPlugins(oPC); + ai_SetupPlayerTarget(); + ai_SetupModuleGUIEvents(); + ai_CreateWidgetNUI(oPC, oPC); + ai_SetNormalAppearance(oPC); + } +} +void ai_CheckDMStart(object oDM) +{ + if(!NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI)) + { + object oModule = GetModule(); + // Do PRC check and save variable to the module. + if(ResManGetAliasFor("prc_ai_fam_percp", RESTYPE_NCS) != "") + SetLocalInt(oModule, AI_USING_PRC, TRUE); + ai_SetAIRules(); + ai_CheckDMData(oDM); + ai_StartupPlugins(oDM); + ai_SetupPlayerTarget(); + ai_SetupModuleGUIEvents(); + ai_CreateDMWidgetNUI(oDM); + } +} +void ai_CopyMonster(object oCreature, object oModule) +{ + // After setting the monster lets see if we should copy it. + float fMonsterIncrease = GetLocalFloat(oModule, AI_INCREASE_ENC_MONSTERS); + if(GetIsEncounterCreature(oCreature) && fMonsterIncrease > 0.0) + { + int nMonsterIncrease; + float fMonsterCounter = GetLocalFloat(oModule, "AI_MONSTER_COUNTER"); + fMonsterCounter += fMonsterIncrease; + nMonsterIncrease = FloatToInt(fMonsterCounter); + if(nMonsterIncrease > 0) + { + fMonsterCounter = fMonsterCounter - IntToFloat(nMonsterIncrease); + } + SetLocalFloat(oModule, "AI_MONSTER_COUNTER", fMonsterCounter); + while(nMonsterIncrease > 0) + { + CopyObject(oCreature, GetLocation(oCreature), OBJECT_INVALID, "", TRUE); + nMonsterIncrease = nMonsterIncrease - 1; + } + } +} +void ai_CreateMonster(json jCreature, location lLocation, object oModule) +{ + //WriteTimestampedLogEntry("0i_module, 181, " + JsonDump(jCreature, 1)); + object oCreature = JsonToObject(jCreature, lLocation, OBJECT_INVALID, TRUE); + if(AI_DEBUG) ai_Debug("0i_module", "210", "Creating: " + GetName(oCreature)); + // Lets set the new version as spawned so we skip the initial setup again. + SetLocalInt(oCreature, AI_ONSPAWN_EVENT, TRUE); + /*if(GetLocalInt(oModule, AI_RULE_CORPSES_STAY)) + { + SetIsDestroyable(FALSE, FALSE, TRUE, oCreature); + SetLootable(oCreature, TRUE); + } */ + if(AI_DEBUG) ai_Debug("0i_module", "187", GetName(oCreature)); + ai_CopyMonster(oCreature, oModule); + // This is a hak to allow wild shaped creatures to be able to attack! + if(GetHasFeat(FEAT_WILD_SHAPE, oCreature)) + { + AssignCommand(oCreature, ActionUseFeat(FEAT_WILD_SHAPE, oCreature, SUBFEAT_WILD_SHAPE_BADGER)); + DelayCommand(4.0, ai_RemoveASpecificEffect(oCreature, EFFECT_TYPE_POLYMORPH)); + } + return; +} +json ai_SetCompanionSummoning(object oCreature, json jCreature) +{ + if(GetHasFeat(FEAT_SUMMON_FAMILIAR, oCreature, TRUE)) + { + json jFamiliar = JsonObjectGet(jCreature, "FamiliarName"); + jFamiliar = JsonObjectSet(jFamiliar, "value", JsonString("Summoned Familiar")); + jCreature = JsonObjectSet(jCreature, "FamiliarName", jFamiliar); + jFamiliar = JsonObjectGet(jCreature, "FamiliarType"); + jFamiliar = JsonObjectSet(jFamiliar, "value", JsonInt(10)); //JsonInt(Random(11))); + return JsonObjectSet(jCreature, "FamiliarType", jFamiliar); + } + if(GetHasFeat(FEAT_ANIMAL_COMPANION , oCreature, TRUE)) + { + json jCompanion = JsonObjectGet(jCreature, "CompanionName"); + jCompanion = JsonObjectSet(jCompanion, "value", JsonString("Summoned Companion")); + jCreature = JsonObjectSet(jCreature, "CompanionName", jCompanion); + jCompanion = JsonObjectGet(jCreature, "CompanionType"); + jCompanion = JsonObjectSet(jCompanion, "value", JsonInt(Random(9))); + return JsonObjectSet(jCreature, "CompanionType", jCompanion); + } + return jCreature; +} +int ai_ChangeMonster(object oCreature, object oModule) +{ + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oCreature); + // Lets not mess up the cutscenes with silly RULES. + if(GetCutsceneMode(oPC)) return FALSE; + float fDistance = GetDistanceBetween(oCreature, oPC); + // Looks bad to see creatures wink in and out plus could cause module errors. + if(fDistance != 0.0 && fDistance < 20.0) return FALSE; + if(IsInConversation(oCreature)) return FALSE; + json jCreature = ObjectToJson(oCreature, TRUE); + // We now use plugins to mod our monsters. + json jMonsterMods = GetLocalJson(oModule, AI_MONSTER_MOD_JSON); + if(JsonGetType(jMonsterMods) != JSON_TYPE_NULL) + { + SetLocalJson(oModule, AI_MONSTER_JSON, jCreature); + SetLocalObject(oModule, AI_MONSTER_OBJECT, oCreature); + int nIndex; + string sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, nIndex)); + while(sMonsterMod != "") + { + ExecuteScript(sMonsterMod, oPC); + sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, ++nIndex)); + } + jCreature = GetLocalJson(oModule, AI_MONSTER_JSON); + } + int nSummon = GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS) && + (GetHasFeat(FEAT_SUMMON_FAMILIAR, oCreature, TRUE) || + GetHasFeat(FEAT_ANIMAL_COMPANION, oCreature, TRUE)); + int nPercDist = GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE) != 11 && + GetReputation(oCreature, oPC) < 11; + //WriteTimestampedLogEntry(GetName(oCreature) + ": fDistance: " + FloatToString(fDistance, 0, 2) + " nSummon: " + IntToString(nSummon) + + // " nPercDist: " + IntToString(nPercDist) + " Reputation: " + IntToString(GetReputation(oCreature, oPC))); + if(nSummon || nPercDist) + { + location lLocation = GetLocation(oCreature); + if(nPercDist) + { + json jPerception = JsonObjectGet(jCreature, "PerceptionRange"); + jPerception = JsonObjectSet(jPerception, "value", JsonInt(GetLocalInt(oModule, AI_RULE_MON_PERC_DISTANCE))); + jCreature = JsonObjectSet(jCreature, "PerceptionRange", jPerception); + } + if(nSummon) jCreature = ai_SetCompanionSummoning(oCreature, jCreature); + SetLocalInt(oModule, AI_MONSTER_CHANGED, TRUE); + } + // Did any of the Monster mods get used? These are done in independent mod scripts. + if(GetLocalInt(oModule, AI_MONSTER_CHANGED)) + { + SetIsDestroyable(TRUE, FALSE, FALSE, oCreature); + location lLocation = GetLocation(oCreature); + if(AI_DEBUG) ai_Debug("0i_module", "299", "Destroying: " + GetName(oCreature)); + DestroyObject(oCreature); + AssignCommand(oModule, DelayCommand(1.0, ai_CreateMonster(jCreature, lLocation, oModule))); + DeleteLocalInt(oModule, AI_MONSTER_CHANGED); + return TRUE; + } + else ai_CopyMonster(oCreature, oModule); + DeleteLocalJson(oModule, AI_MONSTER_JSON); + DeleteLocalObject(oModule, AI_MONSTER_OBJECT); + // This is a hak to allow wild shaped creatures to be able to attack! + if(GetHasFeat(FEAT_WILD_SHAPE)) + { + AssignCommand(oCreature, ActionUseFeat(FEAT_WILD_SHAPE, oCreature, SUBFEAT_WILD_SHAPE_BADGER)); + DelayCommand(4.0, ai_RemoveASpecificEffect(oCreature, EFFECT_TYPE_POLYMORPH)); + } + return FALSE; +} +// Special event scripts for Infinite Dungeons! +void ai_SetIDMonsterEventScripts(object oCreature) +{ + if(GetIsPC(oCreature)) return; + //if(AI_DEBUG) ai_Debug("0i_module", "433", "Changing " + GetName(oCreature) + "'s Infinte Dungeons event scripts."); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + if(sScript == "x2_def_heartbeat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else if(sScript == "nw_c2_default1") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_HEARTBEAT SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + if(sScript == "x2_def_percept") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_id_events"); + else if(sScript == "nw_c2_default2") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_NOTICE SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + if(sScript == "x2_def_endcombat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_id_events"); + else if(sScript == "nw_c2_default3") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_END_COMBATROUND SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + if(sScript == "x2_def_onconv") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_id_events"); + else if(sScript == "nw_c2_default4") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DIALOGUE_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + if(sScript == "x2_def_attacked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_id_events"); + else if(sScript == "nw_c2_default5") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_MELEE_ATTACKED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + if(sScript == "x2_def_ondamage") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_id_events"); + else if(sScript == "nw_c2_default6") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DAMAGED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + // We don't set OnDeath for Infinite Dungeons! + //********** On Death ********** + //sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + //SetLocalString(oCreature, "AI_ON_DEATH", sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_id_events"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + if(sScript == "x2_def_ondisturb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_id_events"); + else if(sScript == "nw_c2_default8") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DISTURBED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + if(sScript == "x2_def_rested") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_id_events"); + else if(sScript == "nw_c2_defaulta") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_RESTED SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + if(sScript == "x2_def_spellcast") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_id_events"); + else if(sScript == "nw_c2_defaultb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_SPELLCASTAT_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + if(sScript == "x2_def_onblocked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_id_events"); + else if(sScript == "nw_c2_defaulte") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_BLOCKED_BY_DOOR SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); +} +// Special event scripts for Infinite Dungeons with PRC! +void ai_SetPRCIDMonsterEventScripts(object oCreature) +{ + if(GetIsPC(oCreature)) return; + //if(AI_DEBUG) ai_Debug("0i_module", "433", "Changing " + GetName(oCreature) + "'s Infinte Dungeons event scripts for PRC."); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + if(sScript == "x2_def_heartbeat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_id_events"); + else if(sScript == "nw_c2_default1") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_HEARTBEAT SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + if(sScript == "x2_def_percept") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_id_events"); + else if(sScript == "nw_c2_default2") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_NOTICE SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + if(sScript == "x2_def_endcombat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_id_events"); + else if(sScript == "nw_c2_default3") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_END_COMBATROUND SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + if(sScript == "x2_def_onconv") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_id_events"); + else if(sScript == "nw_c2_default4") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DIALOGUE_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + if(sScript == "x2_def_attacked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_id_events"); + else if(sScript == "nw_c2_default5") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_MELEE_ATTACKED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + if(sScript == "x2_def_ondamage") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_id_events"); + else if(sScript == "nw_c2_default6") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DAMAGED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + // We don't set OnDeath for PRC or Infinite dungeons. + //********** On Death ********** + //sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH); + //SetLocalString(oCreature, "AI_ON_DEATH", sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "0e_prc_id_events"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + if(sScript == "x2_def_ondisturb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_id_events"); + else if(sScript == "nw_c2_default8") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_DISTURBED_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + if(sScript == "x2_def_rested") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_id_events"); + else if(sScript == "nw_c2_defaulta") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_RESTED SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + if(sScript == "x2_def_spellcast") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_id_events"); + else if(sScript == "nw_c2_defaultb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_SPELLCASTAT_SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + if(sScript == "x2_def_onblocked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_id_events"); + else if(sScript == "nw_c2_defaulte") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_id_events"); + else if(sScript == "") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_id_events"); + else WriteTimestampedLogEntry("ON_BLOCKED_BY_DOOR SCRIPT ERROR: AI did not capture " + sScript + " script for " + GetName(oCreature) + "."); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); +} +// Special event scripts for PRC associates! +void ai_SetPRCAssociateEventScripts(object oCreature) +{ + if(GetIsPC(oCreature)) return; + //if(AI_DEBUG) ai_Debug("0i_module", "433", "Changing " + GetName(oCreature) + "'s Infinte Dungeons event scripts for PRC."); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac1") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "0e_prc_ch_events"); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac2") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "0e_prc_ch_events"); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac3") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "0e_prc_ch_events"); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac4") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "0e_prc_ch_events"); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac5") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "0e_prc_ch_events"); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac6") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "0e_prc_ch_events"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ac8") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "0e_prc_ch_events"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_ch_events"); + else if(sScript == "nw_ch_aca") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "0e_prc_ch_events"); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_ch_events"); + else if(sScript == "nw_ch_acb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "0e_prc_ch_events"); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + if(sScript == "default") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_ch_events"); + else if(sScript == "nw_ch_ace") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "0e_prc_ch_events"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); +} +void ai_ChangeEventScriptsForMonster(object oCreature) +{ + if(GetIsPC(oCreature)) return; + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "0e_c2_1_hb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_c2_default1"); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + if(sScript == "0e_c2_2_percept") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_c2_default2"); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + if(sScript == "0e_c2_3_endround") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_c2_default3"); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + if(sScript == "0e_c2_4_convers") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_c2_default4"); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + if(sScript == "0e_c2_5_phyatked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_c2_default5"); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + if(sScript == "0e_c2_6_damaged") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_c2_default6"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "nw_c2_deafult7"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + if(sScript == "0e_c2_8_disturb") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_c2_default8"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_c2_defaulta"); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + if(sScript == "0e_c2_b_castat") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_c2_defaultb"); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + if(sScript == "0e_c2_e_blocked") SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_c2_defaulte"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "nw_c2_defaulte"); +} +void ai_ChangeEventScriptsForAssociate(object oCreature) +{ + if(GetIsPC(oCreature)) return; + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_ch_ac1"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_ch_ac2"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_ch_ac3"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_ch_ac4"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_ch_ac5"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_ch_ac6"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DEATH, "nw_ch_ac7"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_ch_ac8"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_ch_aca"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_ch_acb"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_ch_ace"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "nw_ch_acd"); +} diff --git a/_module/nss/0i_nui.nss b/_module/nss/0i_nui.nss new file mode 100644 index 0000000..eab5ee7 --- /dev/null +++ b/_module/nss/0i_nui.nss @@ -0,0 +1,434 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_nui +//////////////////////////////////////////////////////////////////////////////// + Include script for handling window displays. + + Use the following to get/set window information. + string sBind = NuiGetNthBind (oPlayer, nToken, FALSE, #); + json jMenuInfo = NuiGetBind (oPlayer, nToken, sBind); + # Gets json information for window : + 0 - string - "window_title" + 1 - json - "window_geometry" : "h", "w", "x", "y" + 2 - bool - "window_resizable" + 3 - bool - "window_closable" + 4 - bool - "window_transparent" + 5 - bool - "window_border" + + Layout pixel sizes: + Pixel height Title bar 33. + Pixel height Top border 10, between widgets 8, bottom border 10. + Pixel width Left border 10, between widgets 4, right border 10. + + Group outer lines add 12 to the vertical and horizontal lines. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +#include "nw_inc_nui" +struct stComboBox +{ + json jIndex; + json jCombo; + json jRow; + json jResRefArray; + json jWinArray; + json jCanSummon; // Index of all the summons in summons.2da +}; + +// Saves the menu to the campaign database. +void SaveMenuToCampaignDb(object oPC, int nToken, string sWndId); +// Returns the middle of the screen for the x position. +// oPC using the menu. +// fMenuWidth - the width of the menu to display. +float GetGUIWidthMiddle(object oPC, float fMenuWidth); + +// Returns the middle of the screen for the y position. +// oPC using the menu. +// fMenuHeight - the height of the menu to display. +float GetGUIHeightMiddle(object oPC, float fMenuHeight); + +// Checks to see if sWndId is open. +// If the window is open it removes it and returns FALSE +// If the window is closed it returns TRUE +int IsWindowClosed(object oPC, string sWndId); + +// Returns the Window ID (nToken). +// oPC is the PC using the menu. +// jLayout is the Layout of the menu. +// sWinID is the string ID for this window. +// sTitle is the Title of the menu. +// fX is the X position of the menu (-1.0: Centers, -2.0: UpperRight on Mouse, -3.0: Centers top of mouse). +// fY is the Y position of the menu (-1.0: Centers, -2.0: UpperRight on Mouse, -3.0: Centers top of mouse). +// fWidth is the width of the menu. +// fHeight is the height of the menu. +// bResize - TRUE will all it to be resized. +// bCollapse - TRUE will allow the window to be collapsable. +// bClose - TRUE will allow the window to be closed. +// bTransparent - TRUE makes the menu transparent. +// bBorder - TRUE makes the menu have a border. +// sEventScript will fire this event script for this window. +int SetWindow(object oPC, json jLayout, string sWinID, string sTitle, float fX, float fY, float fWidth, float fHeight, int bResize, int bCollapse, int bClose, int bTransparent, int bBorder, string sEventScript = ""); + +// Creates a label element in jRow. +// jRow is the row the label goes into. +// sLabel is the text placed in the label. +// If "" is passed then it will create a bind of sId + "_label". +// fWidth is the width of the label. +// fHeight is the Height of the label. +// nHAlign is horizonal align [NUI_HALING_*]. +// nVAlign is vertial align [NUI_VALING_*]. +// sId is the bind the event uses sId + "_event". +// sTooltip is the tooltip bind value. +json CreateLabel(json jRow, string sLabel, string sId, float fWidth, float fHeight, int nHAlign = 0, int nVAlign = 0, float fMargin = -1.0, string sTooltip = ""); + +// Creates a basic button element in jRow. +// jRow is the row the label goes into. +// sLabel is the text placed in the button. If "" is passed then it will +// create a bind of sId + "_label". +// sId is the binds for the button and the event uses sId + "_event". +// fWidth is the width of the button. +// fHeight is the Height of the button. +// fMargin is the space around the button. +// sTooltip is the tooltip bind value. +json CreateButton(json jRow, string sLabel, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = ""); + +// Creates a basic button select element in jRow. +// jRow is the row the label goes into. +// sLabel is the text placed in the button. If "" is passed then it will +// create a bind of sId + "_label". +// sId is the binds for the button and the event uses sId + "_event". +// fWidth is the width of the button. +// fHeight is the Height of the button. +// sTooltip is the tooltip bind value. +json CreateButtonSelect(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a button element with an image in jRow. +// jRow is the row the label goes into. +// sImage is the resref of the image to use. +// If "" is passed then it will create a bind of sId + "_image". +// sId is the binds for the button and the event uses sId + "_event". +// fWidth is the width of the button. +// fHeight is the Height of the button. +// fMargin is the space around the button. +// sTooltip is the tooltip bind value. +json CreateButtonImage(json jRow, string sResRef, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = ""); + +// Creates a basic text box that is not editable element in jRow. +// jRow is the row the TextEdit box goes into. +// sId is the bind variable so we can change the text. +// fWidth the width of the box. +// fHeight the height of the box. +// bBorder will add border TRUE or remove it FALSE. +// nScroll use NUI_SCROLLBARS_* +// sTooltip is the tooltip bind value. +json CreateTextBox(json jRow, string sId, float fWidth, float fHeight, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_AUTO, string sTooltip = ""); + +// Creates a basic text edit box element in jRow. +// jRow is the row the TextEdit box goes into. +// sPlaceHolderBind is the bind for Placeholder. +// sValueBind is the bind variable so we can change the text. +// nMaxLength is the maximum lenght of the text (1 - 65535) +// bMultiline - True or False that is has multiple lines. +// fWidth the width of the box. +// fHeight the height of the box. +// sTooltip is the tooltip bind value. +json CreateTextEditBox(json jRow, string sPlaceHolderBind, string sValueBind, int nMaxLength, int bMultiline, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a combo box element in jRow. +// jRow is the row the combo goes into. +// jCombo is the elements/list for the combo box. Use NuiComboEntry to add. +// sId is the binds for the combo and the event uses sId + "_event" +// sId + "_selected" is the bind for the selection in the combo box. +// fWidth is the width of the combo. +// fHeight is the Height of the combo. +// sTooltip is the tooltip bind value. +json CreateCombo(json jRow, json jCombo, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates an image element in jRow. +// jRow is the row the Image goes into. +// sImage is the resref of the image to use. If "" is passed then it will +// create a bind of sId + "_image". +// nAspect is the aspect of the image NUI_ASPECT_*. +// nHAlign is the horizontal alignment of the image NUI_HALIGN_*. +// nVAlign is the vertical alignment of the image NUI_VALIGN_*. +// fWidth the width of the box. +// fHeight the height of the box. +// sTooltip is the tooltip bind value. +json CreateImage(json jRow, string sResRef, string sId, int nAspect, int nHAlign, int nVAlign, float fWidth, float fHeight, float fMargin = -1.0, string sToolTip = ""); + +// Creates a check box element in jRow. +// jRow is the row the Checkbox box goes into. +// sLabel is the text placed in the label. +// If "" is passed then it will create a bind of sId + "_label". +// sId is the bind variable so we can change the text. +// sId + "_check" is the Bind:bool for if it is checked or not. +// fWidth is the width of the label. +// fHeight is the Height of the label. +// sTooltip is the tooltip bind value. +json CreateCheckBox(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a slider (Int based) element in jRow +// jRow is the row the Check box goes into. +// sId is the bind name. +// The binds are as follows. +// Value: sId + "_value" +// Minimum: sId + "_min" +// Maximum: sId + "_max" +// Step size: sId + "_stepsize" +// fWidth is the width of the slider. +// fHeight is the Height of the slider. +// sTooltip is the tooltip bind value. +json CreateSlider(json jRow, string sId, float fWidth, float fHeight, string sToolTip = ""); + +// Creates an Options element in jRow. +// jRow is the row the Options will start on. +// sId is the bind name. +// The binds are as follows: +// Value: sId + "_value" +// Event is sId + "_event" +// nDirection: NUI_DIRECTION_* +// fWidth is the width of the options labels. +// fHeight is the height of the options labels. +// sTooltip is the tooltip bind value. +json CreateOptions(json jRow, string sId, int nDirection, json jLabels, float fWidth, float fHeight, string sToolTip = ""); + +// Creates a list element in jRow. +// jRow is the row the list will start on. +// jElements is the list of elements in the list. Use NuiListTemplateCell to add. +// sId is the bind name. +// The binds are Event is sId + "_event". +// Row count is bound to sId + "_count". +// fRowHeight is the height of the rendered rows. +// fWidth is the width of the options labels. +// fHeight is the height of the options labels. +// sTooltip is the tooltip bind value. +json CreateList(json jRow, json jElements, string sId, float fRowHeight, float fWidth, float fHeight, string sTooltip = ""); + +// Placed here temporarily until we can clean up our includes! +void ai_SetDMWAccessButton(int nButton, int bOn = TRUE); +int ai_GetDMWAccessButton(int nButton); +void ai_SetDMAIAccessButton(int nButton, int bOn = TRUE); +int ai_GetDMAIAccessButton(int nButton); + +void SaveMenuToCampaignDb(object oPC, int nToken, string sWndId) +{ + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + string sName = ai_RemoveIllegalCharacters(GetName(oPC)); + json jLocations = ai_GetCampaignDbJson("locations", sName, AI_DM_TABLE); + json jNUI = JsonObjectGet(jLocations, sWndId); + if(JsonGetType(jNUI) == JSON_TYPE_NULL) jNUI = JsonObject(); + jNUI = JsonObjectSet(jNUI, "x", JsonFloat(fX)); + jNUI = JsonObjectSet(jNUI, "y", JsonFloat(fY)); + jLocations = JsonObjectSet(jLocations, sWndId, jNUI); + ai_SetCampaignDbJson("locations", jLocations, sName, AI_DM_TABLE); +} + +float GetGUIWidthMiddle(object oPC, float fMenuWidth) +{ + // Get players window information. + float fGUI_Width = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_WIDTH)); + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + fMenuWidth = fMenuWidth * fGUI_Scale; + return (fGUI_Width / 2.0) - (fMenuWidth / 2.0); +} +float GetGUIHeightMiddle(object oPC, float fMenuHeight) +{ + // Get players window information. + float fGUI_Height = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_HEIGHT)); + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + fMenuHeight = fMenuHeight * fGUI_Scale; + return (fGUI_Height / 2.0) - (fMenuHeight / 2.0); +} +int IsWindowClosed(object oPC, string sWndId) +{ + int nToken = NuiFindWindow(oPC, sWndId); + if(nToken) + { + NuiDestroy(oPC, nToken); + return FALSE; + } + return TRUE; +} +int SetWindow(object oPC, json jLayout, string sWinID, string sTitle, float fX, float fY, float fWidth, float fHeight, int bResize, int bCollapse, int bClose, int bTransparent, int bBorder, string sEventScript = "") +{ + json jWindow; + if (bCollapse) jWindow = NuiWindow (jLayout, NuiBind ("window_title"), NuiBind ("window_geometry"), + NuiBind ("window_resizable"), JsonNull (), NuiBind ("window_closable"), + NuiBind ("window_transparent"), NuiBind ("window_border")); + + else jWindow = NuiWindow (jLayout, NuiBind ("window_title"), NuiBind ("window_geometry"), + NuiBind ("window_resizable"), JsonBool (FALSE), NuiBind ("window_closable"), + NuiBind ("window_transparent"), NuiBind ("window_border")); + + int nToken = NuiCreate (oPC, jWindow, sWinID, sEventScript); + if(!bCollapse && !bClose && !bBorder) NuiSetBind (oPC, nToken, "window_title", JsonBool (FALSE)); + else NuiSetBind (oPC, nToken, "window_title", JsonString (sTitle)); + if (fX == -1.0) fX = GetGUIWidthMiddle (oPC, fWidth); + if (fY == -1.0) fY = GetGUIHeightMiddle (oPC, fHeight); + int nScale = GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE); + if(nScale != 100) + { + fHeight = fHeight * (IntToFloat(1050 - nScale) / 1000.0); + fWidth = fWidth * (IntToFloat(1200 - nScale) / 1000.0); + } + NuiSetBind (oPC, nToken, "window_geometry", NuiRect (fX, + fY, fWidth, fHeight)); + NuiSetBind (oPC, nToken, "window_resizable", JsonBool (bResize)); + NuiSetBind (oPC, nToken, "window_closable", JsonBool (bClose)); + NuiSetBind (oPC, nToken, "window_transparent", JsonBool (bTransparent)); + NuiSetBind (oPC, nToken, "window_border", JsonBool (bBorder)); + return nToken; +} +json CreateLabel(json jRow, string sLabel, string sId, float fWidth, float fHeight, int nHAlign = 0, int nVAlign = 0, float fMargin = -1.0, string sTooltip = "") +{ + json jLabel; + if(sLabel == "") jLabel = NuiId(NuiLabel(NuiBind(sId + "_label"), JsonInt(nHAlign), JsonInt(nVAlign)), sId); + else jLabel = NuiId(NuiLabel(JsonString(sLabel), JsonInt(nHAlign), JsonInt(nVAlign)), sId); + jLabel = NuiWidth(jLabel, fWidth); + jLabel = NuiHeight(jLabel, fHeight); + if (fMargin > -1.0) jLabel = NuiMargin(jLabel, fMargin); + if(sTooltip != "") jLabel = NuiTooltip (jLabel, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jLabel); +} +json CreateButton(json jRow, string sLabel, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = "") +{ + json jButton; + if(sLabel == "") jButton = NuiEnabled(NuiId(NuiButton(NuiBind (sId + "_label")), sId), NuiBind(sId + "_event")); + else jButton = NuiEnabled(NuiId(NuiButton(JsonString(sLabel)), sId), NuiBind(sId + "_event")); + jButton = NuiWidth(jButton, fWidth); + jButton = NuiHeight(jButton, fHeight); + if (fMargin > -1.0) jButton = NuiMargin(jButton, fMargin); + if (sTooltip != "") jButton = NuiTooltip(jButton, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jButton); +} +json CreateButtonSelect(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jButton; + if(sLabel == "") jButton = NuiEnabled(NuiId(NuiButtonSelect(NuiBind (sId + "_label"), NuiBind(sId)), sId), NuiBind(sId + "_event")); + else jButton = NuiEnabled(NuiId(NuiButtonSelect(JsonString(sLabel), NuiBind(sId)), sId), NuiBind(sId + "_event")); + jButton = NuiWidth(jButton, fWidth); + jButton = NuiHeight(jButton, fHeight); + if(sTooltip != "") jButton = NuiTooltip(jButton, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jButton); +} +json CreateButtonImage(json jRow, string sResRef, string sId, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = "") +{ + json jButton; + if(sResRef == "") jButton = NuiEnabled(NuiId (NuiButtonImage(NuiBind(sId + "_image")), sId), NuiBind(sId + "_event")); + else jButton = NuiEnabled(NuiId(NuiButtonImage(JsonString(sResRef)), sId), NuiBind(sId + "_event")); + jButton = NuiWidth(jButton, fWidth); + jButton = NuiHeight(jButton, fHeight); + if(fMargin > -1.0) jButton = NuiMargin(jButton, fMargin); + if(sTooltip != "") jButton = NuiTooltip(jButton, NuiBind (sTooltip)); + jButton = NuiEncouraged(jButton, NuiBind(sId + "_encouraged")); + return JsonArrayInsert(jRow, jButton); +} +json CreateTextBox(json jRow, string sId, float fWidth, float fHeight, int bBorder = TRUE, int nScroll = NUI_SCROLLBARS_AUTO, string sTooltip = "") +{ + json jTextBox = NuiEnabled(NuiText(NuiBind(sId), bBorder, nScroll), NuiBind(sId + "_event")); + jTextBox = NuiWidth(jTextBox, fWidth); + jTextBox = NuiHeight(jTextBox, fHeight); + if(sTooltip != "") jTextBox = NuiTooltip(jTextBox, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, JsonObjectSet(jTextBox, "text_color", NuiColor (255, 0, 0))); +} +json CreateTextEditBox(json jRow, string sPlaceHolderBind, string sValueBind, int nMaxLength, int bMultiline, float fWidth, float fHeight, string sTooltip = "") +{ + json jObject = NuiEnabled(NuiTextEdit(NuiBind(sPlaceHolderBind), NuiBind(sValueBind), nMaxLength, bMultiline), NuiBind(sValueBind + "_event")); + jObject = NuiWidth(jObject, fWidth); + jObject = NuiHeight(jObject, fHeight); + if(sTooltip != "") jObject = NuiTooltip(jObject, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jObject); +} +json CreateCombo(json jRow, json jList, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jCombo; + if(JsonGetType(jList) == JSON_TYPE_NULL) + { + jCombo = NuiId(NuiCombo(NuiBind(sId + "_list"), NuiBind(sId + "_selected")), sId + "_event"); + } + jCombo = NuiId(NuiCombo(jList, NuiBind (sId + "_selected")), sId); + jCombo = NuiEnabled(jCombo, NuiBind (sId + "_event")); + jCombo = NuiWidth(jCombo, fWidth); + jCombo = NuiHeight(jCombo, fHeight); + if(sTooltip != "") jCombo = NuiTooltip(jCombo, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jCombo); +} +json CreateImage(json jRow, string sResRef, string sId, int nAspect, int nHAlign, int nVAlign, float fWidth, float fHeight, float fMargin = -1.0, string sTooltip = "") +{ + json jImage; + if(sResRef == "") jImage = NuiEnabled(NuiId(NuiImage(NuiBind(sId + "_image"), JsonInt(nAspect), JsonInt(nHAlign), JsonInt(nVAlign)), sId), NuiBind(sId + "_event")); + else jImage = NuiEnabled(NuiId(NuiImage(JsonString(sResRef), JsonInt(nAspect), JsonInt(nHAlign), JsonInt(nVAlign)), sId), NuiBind(sId + "_event")); + jImage = NuiWidth(jImage, fWidth); + jImage = NuiHeight(jImage, fHeight); + if (fMargin > -1.0) jImage = NuiMargin(jImage, fMargin); + if(sTooltip != "") jImage = NuiTooltip(jImage, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jImage); +} +json CreateCheckBox(json jRow, string sLabel, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jCheckBox; + if(sLabel == "") jCheckBox = NuiEnabled(NuiId(NuiCheck(NuiBind(sId + "_label"), NuiBind(sId + "_check")), sId), NuiBind(sId + "_event")); + else jCheckBox = NuiEnabled(NuiId(NuiCheck(JsonString(sLabel), NuiBind(sId + "_check")), sId), NuiBind(sId + "_event")); + jCheckBox = NuiWidth(jCheckBox, fWidth); + jCheckBox = NuiHeight(jCheckBox, fHeight); + if (sTooltip != "") jCheckBox = NuiTooltip (jCheckBox, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jCheckBox); +} +json CreateSlider(json jRow, string sId, float fWidth, float fHeight, string sTooltip = "") +{ + json jSlider; + jSlider = NuiEnabled(NuiId(NuiSlider(NuiBind(sId + "_value"), NuiBind(sId + "_min"), NuiBind(sId + "_max"), NuiBind(sId + "_stepsize")), sId), NuiBind(sId + "_event")); + jSlider = NuiWidth(jSlider, fWidth); + jSlider = NuiHeight(jSlider, fHeight); + if(sTooltip != "") jSlider = NuiTooltip(jSlider, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jSlider); +} +json CreateOptions(json jRow, string sId, int nDirection, json jLabels, float fWidth, float fHeight, string sTooltip = "") +{ + json jOption; + jOption = NuiEnabled(NuiId(NuiOptions(nDirection, jLabels, NuiBind(sId + "_value")), sId), NuiBind(sId + "_event")); + jOption = NuiWidth(jOption, fWidth); + jOption = NuiHeight(jOption, fHeight); + if(sTooltip != "") jOption = NuiTooltip (jOption, NuiBind (sTooltip)); + return JsonArrayInsert(jRow, jOption); +} +json CreateList(json jRow, json jElements, string sId, float fRowHeight, float fWidth, float fHeight, string sTooltip = "") +{ + json jList; + jList = NuiId(NuiList(jElements, NuiBind(sId), fRowHeight), sId + "_id"); + jList = NuiWidth(jList, fWidth); + jList = NuiHeight(jList, fHeight); + if (sTooltip != "") jList = NuiTooltip(jList, NuiBind(sTooltip)); + return JsonArrayInsert(jRow, jList); +} +void ai_SetDMWAccessButton(int nButton, int bOn = TRUE) +{ + json jRules = ai_GetCampaignDbJson("rules"); + int nWidgetButtons = JsonGetInt(JsonObjectGet(jRules, sDMWidgetAccessVarname)); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(GetModule(), sDMWidgetAccessVarname, nWidgetButtons); + jRules = JsonObjectSet(jRules, sDMWidgetAccessVarname, JsonInt(nWidgetButtons)); + ai_SetCampaignDbJson("rules", jRules); +} +int ai_GetDMWAccessButton(int nButton) +{ + int nWidgetButtons = GetLocalInt(GetModule(), sDMWidgetAccessVarname); + return nWidgetButtons & nButton; +} +void ai_SetDMAIAccessButton(int nButton, int bOn = TRUE) +{ + json jRules = ai_GetCampaignDbJson("rules"); + int nWidgetButtons = JsonGetInt(JsonObjectGet(jRules, sDMAIAccessVarname)); + if(bOn) nWidgetButtons = nWidgetButtons | nButton; + else nWidgetButtons = nWidgetButtons & ~nButton; + SetLocalInt(GetModule(), sDMAIAccessVarname, nWidgetButtons); + jRules = JsonObjectSet(jRules, sDMAIAccessVarname, JsonInt(nWidgetButtons)); + ai_SetCampaignDbJson("rules", jRules); +} +int ai_GetDMAIAccessButton(int nButton) +{ + int nWidgetButtons = GetLocalInt(GetModule(), sDMAIAccessVarname); + return nWidgetButtons & nButton; +} + diff --git a/_module/nss/0i_player_target.nss b/_module/nss/0i_player_target.nss new file mode 100644 index 0000000..5cdba8e --- /dev/null +++ b/_module/nss/0i_player_target.nss @@ -0,0 +1,652 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_player_target +//////////////////////////////////////////////////////////////////////////////// + Include script for handling player targeting functions. + +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +#include "0i_menus" +// Setup an AI OnPlayerTarget Event script while allowing any module onplayer +// target event script to still work. +void ai_SetupPlayerTarget(); +// Selects a target for oAssocite to follow. +void ai_AllSelectTarget(object oPC, object oAssociate, object oTarget); +// Removes the Cutscene ghosts and Command mode from all associates. +void ai_RemoveAllActionMode(object oPC); +// Once a trap has been selected from the associates inventory move to placing the trap. +void ai_SelectTrap(object oPC, object oAssociate, object oItem); +// Place the selected trap at the location selected by the player for OBJECT_SELF. +void ai_PlaceTrap(object oPC, location lLocation); +// Adds a creature to nGroup for oDM +void ai_AddToGroup(object oDM, object oTarget, string sTargetMode); +// Has nGroup perform an action based on the selected target or location. +void ai_DMAction(object oDM, object oTarget, location lLocation, string sTargetMode); +// Get oPC to select a spell target for oAssociate. +void ai_SelectWidgetSpellTarget(object oPC, object oAssociate, string sElem); +// Updates oAssociates widget by destroying the current one and rebuilding. +void ai_UpdateAssociateWidget(object oPC, object oAssociate); +// Sets oAssociates action mode for nFeat from the quick widget menu +int ai_SetActionMode(object oAssociate, int nFeat); + +void ai_EnterAssociateTargetMode(object oPC, object oAssociate) +{ + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_ACTION"); + SetLocalInt(oPC, AI_TARGET_MODE_ON, TRUE); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_SetupPlayerTarget() +{ + object oModule = GetModule(); + string sModuleTargetEvent = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET); + if(sModuleTargetEvent != "") + { + if(sModuleTargetEvent != "0e_player_target") SetLocalString(oModule, AI_MODULE_TARGET_EVENT, sModuleTargetEvent); + } + SetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET, "0e_player_target"); +} +void ai_ActionAssociate(object oPC, object oTarget, location lLocation, int bActionAll = FALSE) +{ + object oAssociate = OBJECT_SELF; + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + !GetLocalInt(oAssociate, sGhostModeVarname)) + { + effect eGhost = EffectCutsceneGhost(); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oAssociate); + SetLocalInt(oAssociate, sGhostModeVarname, TRUE); + } + int nObjectType = GetObjectType(oTarget); + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, TRUE); + ai_ClearCreatureActions(TRUE); + if(oTarget == GetArea(oPC)) + { + ActionMoveToLocation(lLocation, TRUE); + if(GetLocalObject(oPC, AI_FOLLOW_TARGET) == oAssociate) + { + float fFollowDistance = ai_GetFollowDistance(oPC); + if(GetDistanceBetween(oAssociate, oPC) <= fFollowDistance) + { + DelayCommand(fFollowDistance, AssignCommand(oPC, ActionMoveToObject(oAssociate, TRUE, fFollowDistance))); + } + else AssignCommand(oPC, ActionMoveToObject(oAssociate, TRUE, fFollowDistance)); + } + } + else if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsDead(oTarget)) + { + AssignCommand(oAssociate, ActionDoCommand(ai_SearchObject(oAssociate, oTarget, oPC, TRUE))); + } + else if(GetIsEnemy(oTarget, oAssociate)) + { + // Lock them into attacking this target only. + SetLocalObject(oAssociate, AI_PC_LOCKED_TARGET, oTarget); + // This resets a henchmens failed Moral save in combat. + if(GetLocalString(oAssociate, AI_COMBAT_SCRIPT) == "ai_coward") + { + SetLocalString(oAssociate, AI_COMBAT_SCRIPT, GetLocalString(oAssociate, AI_DEFAULT_SCRIPT)); + } + //if(ai_GetIsInCombat(oAssociate)) ai_DoAssociateCombatRound(oAssociate, oTarget); + //else + //{ + // ai_HaveCreatureSpeak(oAssociate, 5, ":0:1:2:3:6:"); + // ai_StartAssociateCombat(oAssociate, oTarget); + //} + if(ai_GetIsRangeWeapon(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oAssociate))) ActionAttack(oTarget, TRUE); + else ActionAttack(oTarget); + ai_SendMessages(GetName(oAssociate) + " is attacking " + GetName(oTarget), AI_COLOR_RED, oPC); + } + else + { + ActionMoveToObject(oTarget, TRUE); + // Player will be stuck with this variable if they are not using the AI. + DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + ActionDoCommand(ai_ActionTryHealing(oAssociate, oTarget)); + } + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) + { + int bStopAction = !GetLocalInt(oTarget, "AI_CANNOT_TRAP_" + GetTag(oAssociate)); + if(ai_ReactToTrap(oAssociate, oTarget, TRUE)) bStopAction = TRUE; + if(bStopAction) + { + ai_EnterAssociateTargetMode(oPC, oAssociate); + return; + } + } + } + if(GetLocked(oTarget)) ai_AttemptToByPassLock(oAssociate, oTarget, TRUE); + else if(GetIsOpen(oTarget)) ActionCloseDoor(oTarget, TRUE); + else ActionOpenDoor(oTarget, TRUE); + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + ActionPickUpItem(oTarget); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + ActionMoveToObject(oTarget, TRUE); + if(GetHasInventory(oTarget)) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) + { + if(ai_ReactToTrap(oAssociate, oTarget, TRUE)) + { + ai_EnterAssociateTargetMode(oPC, oAssociate); + return; + } + + } + } + if(GetLocked(oTarget)) ai_AttemptToByPassLock(oAssociate, oTarget, TRUE); + else ActionDoCommand(ai_SearchObject(oAssociate, oTarget, oPC, TRUE)); + } + else + { + if(ai_GetAIMode(oAssociate, AI_MODE_BASH_LOCKS)) + { + AssignCommand(oAssociate, ai_ClearCreatureActions()); + // Check to make sure we are using a melee weapon. + if(ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oAssociate)) || + ai_EquipBestMeleeWeapon(oAssociate)) + { + AssignCommand(oAssociate, ActionWait(1.0)); + AssignCommand(oAssociate, ActionAttack(oTarget)); + } + } + else AssignCommand(oAssociate, DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE)); + } + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oPC)) SetTrapDetectedBy(oTarget, oAssociate); + if(GetTrapDetectedBy(oTarget, oAssociate)) ai_ReactToTrap(oAssociate, oTarget, TRUE); + } + } + if(!bActionAll) ai_EnterAssociateTargetMode(oPC, oAssociate); +} +void ai_ActionAllAssociates(object oPC, object oTarget, location lLocation) +{ + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_ActionAssociate(oPC, oTarget, lLocation, TRUE)); + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) AssignCommand(oAssociate, ai_ActionAssociate(oPC, oTarget, lLocation, TRUE)); + } +} +void ai_SelectFollowTarget(object oPC, object oAssociate, object oTarget) +{ + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + int nToken = NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI); + float fRange = GetLocalFloat(oAssociate, AI_FOLLOW_RANGE) + + StringToFloat(Get2DAString("appearance", "PREFATCKDIST", GetAppearanceType(oAssociate))); + string sRange = FloatToString(fRange, 0, 0); + if(oAssociate == oTarget) + { + ai_SetAIMode(oAssociate, AI_MODE_FOLLOW, FALSE); + DeleteLocalObject(oAssociate, AI_FOLLOW_TARGET); + ClearAllActions(FALSE, oAssociate); + string sTarget; + if(ai_GetIsCharacter(oAssociate)) + { + sTarget = "nobody"; + ai_SendMessages(GetName(oAssociate) + " is not following anyone now!", AI_COLOR_YELLOW, oPC); + } + else + { + sTarget = GetName(oPC); + ai_SendMessages(GetName(oAssociate) + " is now following " + sTarget + "!", AI_COLOR_YELLOW, oPC); + } + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + sTarget + " [" + sRange + " meters]"); + } + else + { + ai_SetAIMode(oAssociate, AI_MODE_FOLLOW, TRUE); + SetLocalObject(oAssociate, AI_FOLLOW_TARGET, oTarget); + ai_SendMessages(GetName(oAssociate) + " is now following " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + AssignCommand(oAssociate, ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oAssociate))); + ai_UpdateToolTipUI(oPC, sAssociateType + AI_COMMAND_NUI, sAssociateType + AI_WIDGET_NUI, "btn_follow_target_tooltip", " " + GetName(oAssociate) + " following " + GetName(oTarget) + " [" + sRange + " meters]"); + } + aiSaveAssociateModesToDb(oPC, oAssociate); +} +void ai_RemoveAllActionMode(object oPC) +{ + object oAssociate; + int nIndex; + for(nIndex = 1; nIndex <= AI_MAX_HENCHMAN; nIndex++) + { + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oAssociate != OBJECT_INVALID) + { + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, FALSE); + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + ExecuteScript("nw_ch_ac1", oAssociate); + } + } + for(nIndex = 2; nIndex < 6; nIndex++) + { + oAssociate = GetAssociate(nIndex, oPC); + if(oAssociate != OBJECT_INVALID) + { + ai_SetAIMode(oAssociate, AI_MODE_COMMANDED, FALSE); + if(ai_GetAIMode(oPC, AI_MODE_ACTION_GHOST) && + !ai_GetAIMode(oAssociate, AI_MODE_GHOST) && + GetLocalInt(oAssociate, sGhostModeVarname)) + { + ai_RemoveASpecificEffect(oAssociate, EFFECT_TYPE_CUTSCENEGHOST); + DeleteLocalInt(oAssociate, sGhostModeVarname); + } + ExecuteScript("nw_ch_ac1", oAssociate); + } + } +} +void ai_SelectTrap(object oPC, object oAssociate, object oItem) +{ + if(GetBaseItemType(oItem) != BASE_ITEM_TRAPKIT) + { + ai_SendMessages("A trap kit was not selected.", AI_COLOR_YELLOW, oPC); + return; + } + ai_SendMessages("Now select a location to place the trap.", AI_COLOR_YELLOW, oPC); + SetLocalObject(oAssociate, "AI_TRAP_KIT", oItem); + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_PLACE_TRAP"); + OpenInventory(oAssociate, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_PlaceTrap(object oPC, location lLocation) +{ + object oItem = GetLocalObject(OBJECT_SELF, "AI_TRAP_KIT"); + itemproperty ipTrap = GetFirstItemProperty(oItem); + if(GetItemPropertyType(ipTrap) == ITEM_PROPERTY_TRAP) + { + ActionUseItemAtLocation(oItem, ipTrap, lLocation); + } + else ai_SendMessages("This trap kit does not have a trap property!", AI_COLOR_YELLOW, oPC); +} +void ai_AddToGroup(object oDM, object oTarget, string sTargetMode) +{ + string sGroup = GetStringRight(sTargetMode, 1); + if(oDM == oTarget) + { + ai_SendMessages("Group " + sGroup + " has been cleared.", AI_COLOR_YELLOW, oDM); + string sText = "Group " + sGroup; + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " (Left Action/Right Add)")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " (Left Action/Right Add)")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_label", JsonString(sText)); + DeleteLocalJson(oDM, "DM_GROUP" + sGroup); + return; + } + string sName = GetName(oTarget); + json jGroup = GetLocalJson(oDM, "DM_GROUP" + sGroup); + if(JsonGetType(jGroup) == JSON_TYPE_NULL) + { + string sText = sName + "'s group"; + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_WIDGET_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " [Run]")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_tooltip", JsonString(sText + " [Run]")); + NuiSetBind(oDM, NuiFindWindow(oDM, "dm" + AI_COMMAND_NUI), "btn_cmd_group" + sGroup + "_label", JsonString(sText)); + jGroup = JsonArrayInsert(JsonArray(), JsonInt(1)); + } + string sUUID = GetObjectUUID(oTarget); + int nIndex = 1; + string sListUUID = JsonGetString(JsonArrayGet(jGroup, nIndex)); + while(sListUUID != "") + { + if(sListUUID == sUUID) + { + ai_SendMessages("This creature is already in the group!", AI_COLOR_RED, oDM); + return; + } + sListUUID = JsonGetString(JsonArrayGet(jGroup, ++nIndex)); + } + jGroup = JsonArrayInsert(jGroup, JsonString(sUUID)); + ai_SendMessages(sName + " has been saved to group" + sGroup, AI_COLOR_YELLOW, oDM); + SetLocalJson(oDM, "DM_GROUP" + sGroup, jGroup); + EnterTargetingMode(oDM, OBJECT_TYPE_CREATURE, MOUSECURSOR_PICKUP, MOUSECURSOR_PICKUP_DOWN); +} +void ai_MonsterAction(object oDM, object oTarget, location lLocation, int bRun, int nIndex) +{ + object oCreature = OBJECT_SELF; + int nObjectType = GetObjectType(oTarget); + ai_ClearCreatureActions(TRUE); + if(oTarget == GetArea(oDM)) + { + ActionMoveToLocation(lLocation, bRun); + } + else if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsDead(oTarget)) return; + else if(GetIsEnemy(oTarget, oCreature)) + { + // Lock them into attacking this target only. + SetLocalObject(oCreature, AI_PC_LOCKED_TARGET, oTarget); + // This resets a creatures failed Moral save in combat. + if(GetLocalString(oCreature, AI_COMBAT_SCRIPT) == "ai_coward") + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, GetLocalString(oCreature, AI_DEFAULT_SCRIPT)); + } + if(ai_GetIsInCombat(oCreature)) ai_DoMonsterCombatRound(oCreature); + else + { + ai_HaveCreatureSpeak(oCreature, 5, ":0:1:2:3:6:"); + ai_StartMonsterCombat(oCreature); + } + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group is attacking " + GetName(oTarget), AI_COLOR_RED, oDM); + } + } + else if(oTarget == oDM) + { + if(GetLocalInt(oCreature, "AI_FOLLOWING_DM")) + { + ClearAllActions(FALSE, oCreature); + DeleteLocalInt(oCreature, "AI_FOLLOWING_DM"); + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group has stopped following you.", AI_COLOR_RED, oDM); + } + } + else + { + ActionForceFollowObject(oDM, 4.0); + SetLocalInt(oCreature, "AI_FOLLOWING_DM", TRUE); + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group is following you.", AI_COLOR_RED, oDM); + } + } + } + else + { + ActionMoveToObject(oTarget, TRUE); + // Player will be stuck with this variable if they are not using the AI. + DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + ActionDoCommand(ai_ActionTryHealing(oCreature, oTarget)); + if(nIndex == 1) + { + ai_SendMessages(GetName(oCreature) + "'s group is moving to and attempting to heal " + GetName(oTarget), AI_COLOR_RED, oDM); + } + } + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oDM)) SetTrapDetectedBy(oTarget, oCreature); + if(GetTrapDetectedBy(oTarget, oCreature)) + { + ai_ReactToTrap(oCreature, oTarget, TRUE); + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + else if(GetLocked(oTarget)) ai_AttemptToByPassLock(oCreature, oTarget); + } + else if(GetLocked(oTarget)) ai_AttemptToByPassLock(oCreature, oTarget); + else if(GetIsOpen(oTarget)) + { + ActionCloseDoor(oTarget, TRUE); + } + else ActionOpenDoor(oTarget, TRUE); + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + ActionPickUpItem(oTarget); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + ActionMoveToObject(oTarget, TRUE); + if(GetHasInventory(oTarget)) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oDM)) SetTrapDetectedBy(oTarget, oCreature); + if(GetTrapDetectedBy(oTarget, oCreature)) + { + ai_ReactToTrap(oCreature, oTarget, TRUE); + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + if(GetLocked(oTarget)) + { + if(!ai_AttemptToByPassLock(oCreature, oTarget)) + { + AssignCommand(oCreature, ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oTarget) + " is locked!")); + } + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + else if(GetLocked(oTarget)) + { + if(ai_AttemptToByPassLock(oCreature, oTarget)) + { + AssignCommand(oCreature, ai_HaveCreatureSpeak(oCreature, 0, "This " + GetName(oTarget) + " is locked!")); + } + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); + return; + } + ActionDoCommand(ai_SearchObject(oCreature, oTarget, oDM, TRUE)); + } + DoPlaceableObjectAction(oTarget, PLACEABLE_ACTION_USE); + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + if(GetIsTrapped(oTarget)) + { + if(GetTrapDetectedBy(oTarget, oDM)) SetTrapDetectedBy(oTarget, oCreature); + if(GetTrapDetectedBy(oTarget, oCreature)) ai_ReactToTrap(oCreature, oTarget, TRUE); + } + } + EnterTargetingMode(oDM, OBJECT_TYPE_ALL, MOUSECURSOR_ACTION, MOUSECURSOR_NOWALK); +} +void ai_DMAction(object oDM, object oTarget, location lLocation, string sTargetMode) +{ + string sGroup = GetStringRight(sTargetMode, 1); + json jGroup = GetLocalJson(oDM, "DM_GROUP" + sGroup); + int bRun = JsonGetInt(JsonArrayGet(jGroup, 0)); + int nIndex = 1; + string sUUID = JsonGetString(JsonArrayGet(jGroup, nIndex)); + object oCreature; + while(sUUID != "") + { + oCreature = GetObjectByUUID(sUUID); + AssignCommand(oCreature, ai_MonsterAction(oDM, oTarget, lLocation, bRun, nIndex)); + sUUID = JsonGetString(JsonArrayGet(jGroup, ++nIndex)); + } + if(nIndex == 0) ai_SendMessages("Group" + sGroup + " is empty!", AI_COLOR_RED, oDM); +} +void ai_SelectWidgetSpellTarget(object oPC, object oAssociate, string sElem) +{ + int nIndex; + if(GetStringLength(sElem) == 13) nIndex = StringToInt(GetStringRight(sElem, 2)); + else nIndex = StringToInt(GetStringRight(sElem, 1)); + SetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX", nIndex); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jSpell = JsonArrayGet(jWidget, nIndex); + int nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + int nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + if(nClass == -1) // This is an Item. + { + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jSpell, 5))); + int nBaseItemType = GetBaseItemType(oItem); + int nIprpSubType = JsonGetInt(JsonArrayGet(jSpell, 4)); + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(nIprpSubType == GetItemPropertySubType(ipProperty)) break; + ipProperty = GetNextItemProperty(oItem); + } + if(Get2DAString("spells", "Range", nSpell) == "P" || // Self + nBaseItemType == BASE_ITEM_ENCHANTED_POTION || + nBaseItemType == BASE_ITEM_POTIONS || + nIprpSubType == IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY) + { + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + AssignCommand(oAssociate, ActionUseItemOnObject(oItem, ipProperty, oAssociate)); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + return; + } + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_USE_ITEM"); + if(nSpell == SPELL_HEALINGKIT) + { + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_MAGIC, MOUSECURSOR_NOMAGIC); + return; + } + } + else // Feats, Spells, Special Abilities. + { + int nFeat = JsonGetInt(JsonArrayGet(jSpell, 5)); + if(nFeat) + { + if(!nSpell || Get2DAString("spells", "Range", nSpell) == "P" || // Self + nFeat == FEAT_SUMMON_FAMILIAR || nFeat == FEAT_ANIMAL_COMPANION || + nFeat == FEAT_TURN_UNDEAD) + { + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + // Adjust the spell used for wild shape and other shape feats. + if(nFeat == FEAT_WILD_SHAPE) nSpell += 607; + if(nFeat == FEAT_ELEMENTAL_SHAPE) + { + if(nSpell == 397) nSpell == SUBFEAT_ELEMENTAL_SHAPE_FIRE; + else if(nSpell == 398) nSpell == SUBFEAT_ELEMENTAL_SHAPE_WATER; + else if(nSpell == 399) nSpell == SUBFEAT_ELEMENTAL_SHAPE_EARTH; + else if(nSpell == 400) nSpell == SUBFEAT_ELEMENTAL_SHAPE_AIR; + } + // Do special targeting for attack feats. + if(nFeat == FEAT_STUNNING_FIST || nFeat == FEAT_DIRTY_FIGHTING || + nFeat == FEAT_WHIRLWIND_ATTACK || nFeat == FEAT_QUIVERING_PALM || + nFeat == FEAT_KNOCKDOWN || nFeat == FEAT_IMPROVED_KNOCKDOWN || + nFeat == FEAT_SAP || nFeat == FEAT_KI_DAMAGE || + nFeat == FEAT_DISARM || nFeat == FEAT_IMPROVED_DISARM || + nFeat == FEAT_SMITE_EVIL || nFeat == FEAT_SMITE_GOOD) + { + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_USE_FEAT"); + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, oAssociate); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_ATTACK, MOUSECURSOR_NOATTACK); + } + // Check feat and adjust if it is an action mode feat. + if(!ai_SetActionMode(oAssociate, nFeat)) AssignCommand(oAssociate, ActionUseFeat(nFeat, oAssociate, nSpell)); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + return; + } + SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_USE_FEAT"); + } + else SetLocalString(oPC, AI_TARGET_MODE, "ASSOCIATE_CAST_SPELL"); + } + int nObjectType; + string sTarget = Get2DAString("spells", "TargetType", nSpell); + int nTarget = ai_HexStringToInt(sTarget); + //SendMessageToPC(GetFirstPC(), "nTarget: " + IntToString(nTarget)); + if((nTarget & 1) && !(nTarget & 2) &&!(nTarget & 4)) + { + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(TRUE)); + ai_CastWidgetSpell(oPC, oAssociate, oAssociate, GetLocation(oAssociate)); + DelayCommand(6.0, ai_UpdateAssociateWidget(oPC, oAssociate)); + return; + } + if((nTarget & 1) || (nTarget & 2)) nObjectType += OBJECT_TYPE_CREATURE; + if(nTarget & 4) nObjectType += OBJECT_TYPE_TILE; + if(nTarget & 8) nObjectType += OBJECT_TYPE_ITEM; + if(nTarget & 16) nObjectType += OBJECT_TYPE_DOOR; + if(nTarget & 32) nObjectType += OBJECT_TYPE_PLACEABLE; + if(nTarget & 64) nObjectType += OBJECT_TYPE_TRIGGER; + string sShape = Get2DAString("spells", "TargetShape", nSpell); + int nShape, nSetData; + float fRange; + if(oPC == oAssociate) + { + nSetData = TRUE; + fRange = ai_GetSpellRange(nSpell); + if(fRange == 0.1) fRange = 0.0; + } + if(sShape == "sphere") + { + nShape = SPELL_TARGETING_SHAPE_SPHERE; + nSetData = TRUE; + } + else if(sShape == "rectangle") + { + nShape = SPELL_TARGETING_SHAPE_RECT; + nSetData = TRUE; + } + else if(sShape == "hsphere") + { + nShape = SPELL_TARGETING_SHAPE_HSPHERE; + nSetData = TRUE; + } + else if(sShape == "cone") nShape = SPELL_TARGETING_SHAPE_CONE; + else nShape = SPELL_TARGETING_SHAPE_NONE; + if(nSetData) + { + float fSizeX = StringToFloat(Get2DAString("spells", "TargetSizeX", nSpell)); + float fSizeY = StringToFloat(Get2DAString("spells", "TargetSizeY", nSpell)); + int nFlags = StringToInt(Get2DAString("spells", "TargetFlags", nSpell)); + SetEnterTargetingModeData(oPC, nShape, fSizeX, fSizeY, nFlags, fRange); + } + EnterTargetingMode(oPC, nObjectType, MOUSECURSOR_MAGIC, MOUSECURSOR_NOMAGIC); +} +void ai_UpdateAssociateWidget(object oPC, object oAssociate) +{ + int nUIToken = NuiFindWindow(oPC, ai_GetAssociateType(oPC, oAssociate) + AI_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oAssociate)); + /* Not sure why I did this? + if(oPC != oAssociate) + { + nUIToken = NuiFindWindow(oPC, "pc" + AI_WIDGET_NUI); + if(nUIToken) + { + DelayCommand(0.0, NuiDestroy(oPC, nUIToken)); + DelayCommand(0.1, ai_CreateWidgetNUI(oPC, oPC)); + } + } */ + } +} +int ai_SetActionMode(object oAssociate, int nFeat) +{ + int nMode; + if(nFeat == FEAT_POWER_ATTACK) nMode = ACTION_MODE_POWER_ATTACK; + else if(nFeat == FEAT_RAPID_SHOT) nMode = ACTION_MODE_RAPID_SHOT; + else if(nFeat == FEAT_FLURRY_OF_BLOWS) nMode = ACTION_MODE_FLURRY_OF_BLOWS; + else if(nFeat == FEAT_IMPROVED_POWER_ATTACK) nMode = ACTION_MODE_IMPROVED_POWER_ATTACK; + else if(nFeat == FEAT_EXPERTISE) nMode = ACTION_MODE_EXPERTISE; + else if(nFeat == FEAT_IMPROVED_EXPERTISE) nMode = ACTION_MODE_IMPROVED_EXPERTISE; + else if(nFeat == FEAT_DIRTY_FIGHTING) nMode = ACTION_MODE_DIRTY_FIGHTING; + else if(nFeat == FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE) nMode = 12; // ACTION_MODE_DEFENSIVE_STANCE + if(nMode) + { + SetActionMode(oAssociate, nMode, !GetActionMode(oAssociate, nMode)); + return TRUE; + } + return FALSE; +} diff --git a/_module/nss/0i_spells.nss b/_module/nss/0i_spells.nss new file mode 100644 index 0000000..0440d30 --- /dev/null +++ b/_module/nss/0i_spells.nss @@ -0,0 +1,2423 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// + Script Name: 0i_spells + Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts for base spells. + +Category: + Enhancement E + Protection P +Indiscriminant I + Discriminant D + Range R + Touch T + Summon S + Healing H + Cure C + +Buff Duration: +1 - All +2 - Short +3 - Long + +Buff Target: + 0 - Caster only + 1-6 Str, Dex, Con, Int, Wis, Cha: Highest Ability Score + 7 - Lowest AC + 8 - Lowest AC without AC Bonus + 9 - Highest Atk + 10 - Most Wounded + 11 - Lowest Fortitude + 12 - Lowest Reflex + 13 - Lowest Will + 14 - Lowest total saves + 15 - Buffs an Item + +Buff Groups: +-1 - Elemental Resistances. +-2 - Summons +-3 - AC (Non armor) +-4 - AC (for Armor/Shield) +-5 - Chance to Miss (Invisibility) +-6 - Regeneration +-7 - Globes of Invulnerablitity +-8 - Damage Reduction +-9 - Mantles +-10 - Alignment vs Chaos +-11 - Alignment vs Evil +-12 - Alignment vs Good +-13 - Alignment vs Law +-14 - Atk Bonus (for Weapon) +-15 - Light effects +-16 - Haste effects +-17 - Polymorph effects +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_messages" +#include "0i_states_cond" +#include "0i_items" +#include "X0_I0_POSITION" +struct stSpell +{ + object oPC; + object oCaster; + object oTarget; + int nBuffType; + int nTarget; + int nPosition; + int nClass; + int nLevel; + int nMaxSlots; + int nSlot; +}; +// Gets the total caster levels for nClass for oCreature. +int ai_GetCasterTotalLevel(object oCreature, int nClass); +// Returns TRUE if oCreature can cast nSpell from nLevel. +int ai_GetCanCastSpell(object oCreature, int nSpell, int nClass, int nLevel, int nMetaMagic = 0, int nDomain = 0); +// Returns TRUE if oCreature is immune to petrification. +int ai_IsImmuneToPetrification(object oCaster, object oCreature); +// Returns TRUE if oCreature has an effect from a mind affecting spell. +int ai_DoIHaveAMindAffectingSpellOnMe(object oCreature); +// Returns TRUE if nSpell is a cure spell. +int ai_IsCureSpell(int nSpell); +// Returns TRUE if nSpell is an inflict spell. +int ai_IsInflictSpell(int nSpell); +// Returns TRUE if nSpell is an area of effect spell. +int ai_IsAreaOfEffectSpell(int nSpell); +// Returns 1(TRUE) if oAssociate is a spellcaster. +// Rturns 2(TRUE) if oAssociate is a memorizing spellcaster. +int ai_GetIsSpellCaster(object oAssociate); +// Returns TRUE if oCreature is immune to nSpells effects. +int ai_CreatureImmuneToEffect(object oCaster, object oCreature, int nSpell); +// Returns the ranged of nSpell from the spells.2da(Column "Range"). +// S = 8.0f, M = 20.0f, L = 40.0f, T = 5.0f, else = 0.1f; +float ai_GetSpellRange(int nSpell); +// Returns TRUE if oTarget has a spell that we would want to dispel. +// Checks for harmful effects as well as buffing effects. +int ai_CreatureHasDispelableEffect(object oCaster, object oCreature); +// Remove nEffectType of Type specified on oCreature; +// nEffectType uses the constants EFFECT_TYPE_* +void ai_RemoveASpecificEffect(object oCreature, int nEffectType); +// Returns TRUE if oCreature has nEffectType. +// nEffectType uses the constants EFFECT_TYPE_* +int ai_GetHasEffectType(object oCreature, int nEffectType); +// Checks oCreature for special abilities have a long duration. +void ai_CheckCreatureSpecialAbilities(object oCreature); +// Checks oCreature for the silence effect and if the spell only has a somatic component. +int ai_IsSilenced(object oCreature, int nSpell); +// Returns TRUE if ArcaneSpellFailure is too high to chance casting the spell. +int ai_ArcaneSpellFailureTooHigh(object oCreature, int nClass, int nLevel, int nSlot); +// Returns TRUE if oCaster casts nSpell on oTarget. +// This will only cast the spell if oTarget DOES NOT already have the spell +// effect, and the caster has the spell ready. +int ai_TryToCastSpell(object oCaster, int nSpell, object oTarget); +// In "Buff_Target" column the value of 0 in the "ai_spells.2da" references the Caster. +// In "Buff_Target" column this is value 1-6(STR, DEX, CON, INT, WIS, CHA) in the "ai_spells.2da". +object ai_BuffHighestAbilityScoreTarget(object oCaster, int nSpell, int nAbilityScore, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 7 in the "ai_spells.2da". +object ai_BuffLowestACTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 8 in the "ai_spells.2da". +object ai_BuffLowestACWithOutACBonus(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 9 in the "ai_spells.2da". +object ai_BuffHighestAttackTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 10 in the "ai_spells.2da". +object ai_BuffMostWoundedTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 11 in the "ai_spells.2da". +object ai_BuffLowestFortitudeSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 12 in the "ai_spells.2da". +object ai_BuffLowestReflexSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 13 in the "ai_spells.2da". +object ai_BuffLowestWillSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 14 in the "ai_spells.2da". +object ai_BuffLowestSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// In "Buff_Target" column this is value 15 in the "ai_spells.2da". +object ai_BuffItemTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_"); +// Returns a target for nSpell cast by oCaster based on ai_spells.2da file. +object ai_GetBuffTarget(object oCaster, int nSpell); +// Casts a memorized spell from oCaster of nClass, nSpellLevel, nSpellSlot on oTarget. +void ai_CastMemorizedSpell(object oCaster, int nClass, int nSpellLevel, int nSpellSlot, object oTarget, int bInstant, object oPC = OBJECT_INVALID); +// Casts a known spell from oCaster of nClass, nSpell on oTarget. +void ai_CastKnownSpell(object oCaster, int nClass, int nSpell, object oTarget, int bInstant, object oPC = OBJECT_INVALID); +// Returns true if the spell is cast. +// Checks if they have the spell and will cast it if possible. +int ai_CheckAndCastSpell(object oCaster, int nSpell, int nSpellGroup, float fDelay, object oTarget, object oPC = OBJECT_INVALID); +// Setup monsters for oCaster to buff in ai_CastSpells. +void ai_SetupMonsterBuffTargets(object oCaster); +// Setup the targets for an NPC to buff one of the PC's members or the whole group. +void ai_SetupAllyTargets(object oCaster, object oPC); +// Setup the targets for an NPC to heal one of the PC's members. +void ai_SetupAllyHealingTargets(object oCaster, object oPC); +// Clears the casters buff targets. +void ai_ClearBuffTargets(object oCaster, string sVariable); +// Cycles through a casters spells casting all buffs via actions. +void ai_ActionCastMemorizedBuff(struct stSpell stSpell, float fDelay, int bInstantSpell); +// Cycles through a casters spells casting all buffs via actions. +void ai_ActionCastKnownBuff(struct stSpell stSpell, float fDelay, int bInstantSpell); +// Checks oCaster for buffing spells and casts them based on nTarget; +// These are cast as actions and will happen at the speed based on the delay set +// by the player. 6.0 seconds to 0.1 second. Default 0.1 second. +// nTarget is 0-9 where 0 is all targets, 1 is oPC, 2 is the caster +// 3 Familiar, 4 is Animal Companion, 5 is Summons, 6 is Dominated, and 7+ is henchman. +// Targets must be defined in variable AI_ALLY_TARGET_* where * is 1 to #. +// nBuffType is the duration 1 - all, 2 - short, 3 - long. +void ai_CastBuffs(object oCaster, int nBuffType, int nTarget, object oPC); +// Returns TRUE if oCaster cast spontaneous cure spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastSpontaneousCure(object oCreature, object oTarget, object oPC); +// Returns TRUE if oCaster casts a memorized inflict spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastMemorizedInflict(object oCreature, object oTarget, object oPC, int nClass); +// Returns TRUE if oCaster casts a known inflict spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastKnownInflict(object oCreature, object oTarget, object oPC, int nClass); +// Returns TRUE if oCaster casts a memorized cure spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastMemorizedHealing(object oCreature, object oTarget, object oPC, int nClass); +// Returns TRUE if oCaster casts a known cure spell on oTarget. +// This uses an action and must use AssignCommand or OBJECT_SELF is the caster! +int ai_CastKnownHealing(object oCreature, object oTarget, object oPC, int nClass); +// Returns TRUE if oCreature has an effect that will break their concentration. +int ai_ConcentrationCondition(object oCreature); +// Check to see if a spell's concentration has been broken, works for summons as well. +void ai_SpellConcentrationCheck(object oCaster); +// Returns TRUE if oCreature can safely cast nSpell defensively or has a good +// chance of casting while in melee. +int ai_CastInMelee(object oCreature, int nSpell, int nInMelee); +// Returns a float range for the caster to search for a target of an offensive spell. +float ai_GetOffensiveSpellSearchRange(object oCreature, int nSpell); +// Returns TRUE if nSpell is an inflict spell and will not over heal for nDamage. +int ai_ShouldWeCastThisInflictSpell(int nSpell, int nDamage); +// Returns TRUE if nSpell is a cure spell and will not over heal for nDamage. +int ai_ShouldWeCastThisCureSpell(int nSpell, int nDamage); +// Casts the spell on the current target for oAssociate. +void ai_CastWidgetSpell(object oPC, object oAssociate, object oTarget, location lLocation); +// Uses the feat on the current target for oAssociate. +void ai_UseWidgetFeat(object oPC, object oAssociate, object oTarget, location lLocation); +// Uses the item on the current target for oAssociate. +void ai_UseWidgetItem(object oPC, object oAssociate, object oTarget, location lLocation); +int ai_GetCasterTotalLevel(object oCreature, int nClass) +{ + int nIndex, nCheckClass; + int nLevel = GetLevelByClass(nClass, oCreature); + if(nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_SORCERER || nClass == CLASS_TYPE_WIZARD) + { + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex ++) + { + nCheckClass = GetClassByPosition(nIndex, oCreature); + if(nCheckClass == CLASS_TYPE_PALE_MASTER) + { + nLevel += (GetLevelByClass(CLASS_TYPE_PALE_MASTER, oCreature) + 1) / 2; + } + } + } + return nLevel; +} +int ai_GetCanCastSpell(object oCreature, int nSpell, int nClass, int nLevel, int nMetaMagic = 0, int nDomain = 0) +{ + int nIndex, nSpellCount, nClassPosition, nSlot, nMaxSlots, nPosition = 1; + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClassPosition = GetClassByPosition(nPosition, oCreature); + if(nClassPosition == CLASS_TYPE_INVALID) return FALSE; + if(nClass = nClassPosition) + { + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + while(nSlot < nMaxSlots) + { + if(GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot) == nSpell && + GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) return TRUE; + nSlot++; + } + } + else return GetSpellUsesLeft(oCreature, nClass, nSpell, nMetaMagic, nDomain); + } + } + nPosition++; + } + return FALSE; +} +int ai_IsImmuneToPetrification(object oCaster, object oCreature) +{ + int nAppearance = GetAppearanceType(oCreature); + switch(nAppearance) + { + case APPEARANCE_TYPE_BASILISK: + case APPEARANCE_TYPE_COCKATRICE: + case APPEARANCE_TYPE_MEDUSA: + case APPEARANCE_TYPE_ALLIP: + case APPEARANCE_TYPE_ELEMENTAL_AIR: + case APPEARANCE_TYPE_ELEMENTAL_AIR_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_EARTH: + case APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_FIRE: + case APPEARANCE_TYPE_ELEMENTAL_FIRE_ELDER: + case APPEARANCE_TYPE_ELEMENTAL_WATER: + case APPEARANCE_TYPE_ELEMENTAL_WATER_ELDER: + case APPEARANCE_TYPE_GOLEM_STONE: + case APPEARANCE_TYPE_GOLEM_IRON: + case APPEARANCE_TYPE_GOLEM_CLAY: + case APPEARANCE_TYPE_GOLEM_BONE: + case APPEARANCE_TYPE_GORGON: + case APPEARANCE_TYPE_HEURODIS_LICH: + case APPEARANCE_TYPE_LANTERN_ARCHON: + case APPEARANCE_TYPE_SHADOW: + case APPEARANCE_TYPE_SHADOW_FIEND: + case APPEARANCE_TYPE_SHIELD_GUARDIAN: + case APPEARANCE_TYPE_SKELETAL_DEVOURER: + case APPEARANCE_TYPE_SKELETON_CHIEFTAIN: + case APPEARANCE_TYPE_SKELETON_COMMON: + case APPEARANCE_TYPE_SKELETON_MAGE: + case APPEARANCE_TYPE_SKELETON_PRIEST: + case APPEARANCE_TYPE_SKELETON_WARRIOR: + case APPEARANCE_TYPE_SKELETON_WARRIOR_1: + case APPEARANCE_TYPE_SPECTRE: + case APPEARANCE_TYPE_WILL_O_WISP: + case APPEARANCE_TYPE_WRAITH: + case APPEARANCE_TYPE_BAT_HORROR: + case 405: // Dracolich: + case 415: // Alhoon + case 418: // shadow dragon + case 420: // mithral golem + case 421: // admantium golem + case 430: // Demi Lich + case 469: // animated chest + case 474: // golems + case 475: // golems + return TRUE; + } + // Petrification immunity can also be granted as an item property. + if(ResistSpell(oCaster, oCreature) == 2 ) return TRUE; + // Prevent people from petrifying DM, resulting in GUI even when effect is not successful. + if(!GetPlotFlag(oCreature) && GetIsDM(oCreature)) return TRUE; + return FALSE; +} +int ai_DoIHaveAMindAffectingSpellOnMe(object oCreature) +{ + if(GetHasSpellEffect(SPELL_SLEEP, oCreature) || + GetHasSpellEffect(SPELL_DAZE, oCreature) || + GetHasSpellEffect(SPELL_HOLD_ANIMAL, oCreature) || + GetHasSpellEffect(SPELL_HOLD_MONSTER, oCreature) || + GetHasSpellEffect(SPELL_HOLD_PERSON, oCreature) || + GetHasSpellEffect(SPELL_CHARM_MONSTER, oCreature) || + GetHasSpellEffect(SPELL_CHARM_PERSON, oCreature) || + GetHasSpellEffect(SPELL_CHARM_PERSON_OR_ANIMAL, oCreature) || + GetHasSpellEffect(SPELL_MASS_CHARM, oCreature) || + GetHasSpellEffect(SPELL_DOMINATE_ANIMAL, oCreature) || + GetHasSpellEffect(SPELL_DOMINATE_MONSTER, oCreature) || + GetHasSpellEffect(SPELL_DOMINATE_PERSON, oCreature) || + GetHasSpellEffect(SPELL_CONFUSION, oCreature) || + GetHasSpellEffect(SPELL_MIND_FOG, oCreature) || + GetHasSpellEffect(SPELL_CLOUD_OF_BEWILDERMENT, oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_DOMINATE,oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_CHARM,oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_CONFUSE,oCreature) || + GetHasSpellEffect(SPELLABILITY_BOLT_DAZE,oCreature)) return TRUE; + return FALSE; +} +int ai_IsCureSpell(int nSpell) +{ + switch(nSpell) + { + case SPELL_CURE_CRITICAL_WOUNDS: + case SPELL_CURE_LIGHT_WOUNDS: + case SPELL_CURE_MINOR_WOUNDS: + case SPELL_CURE_MODERATE_WOUNDS: + case SPELL_CURE_SERIOUS_WOUNDS: + case SPELL_HEAL: return TRUE; break; + } + return FALSE; +} +int ai_IsInflictSpell(int nSpell) +{ + switch(nSpell) + { + case SPELL_INFLICT_CRITICAL_WOUNDS: + case SPELL_INFLICT_LIGHT_WOUNDS: + case SPELL_INFLICT_MINOR_WOUNDS: + case SPELL_INFLICT_MODERATE_WOUNDS: + case SPELL_INFLICT_SERIOUS_WOUNDS: + case SPELL_HARM: return TRUE; break; + } + return FALSE; +} +int ai_IsAreaOfEffectSpell(int nSpell) +{ + switch(nSpell) + { + case SPELL_ACID_FOG : + case SPELL_MIND_FOG : + case SPELL_STORM_OF_VENGEANCE: + case SPELL_WEB : + case SPELL_GREASE : + case SPELL_CREEPING_DOOM : +// case SPELL_DARKNESS : + case SPELL_SILENCE : + case SPELL_BLADE_BARRIER : + case SPELL_CLOUDKILL : + case SPELL_STINKING_CLOUD : + case SPELL_WALL_OF_FIRE : + case SPELL_INCENDIARY_CLOUD : + case SPELL_ENTANGLE : + case SPELL_EVARDS_BLACK_TENTACLES: + case SPELL_CLOUD_OF_BEWILDERMENT : + case SPELL_STONEHOLD : + case SPELL_VINE_MINE : + case SPELL_SPIKE_GROWTH : + case SPELL_DIRGE : + case 530 : // vine mine + case 531 : // vine mine + case 532 : // vine mine + case 961 : // Prismatic Sphere + return TRUE; + } + return FALSE; +} +int ai_GetIsSpellCaster(object oAssociate) +{ + int nIndex, nSpellCaster, nClass; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass == CLASS_TYPE_INVALID) return nSpellCaster; + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") return 2; + else nSpellCaster = 1; + } + } + return nSpellCaster; +} +int ai_GetIsSpellBookRestrictedCaster(object oAssociate) +{ + int nIndex, nSpellCaster, nClass; + for(nIndex = 1; nIndex <= AI_MAX_CLASSES_PER_CHARACTER; nIndex++) + { + nClass = GetClassByPosition(nIndex, oAssociate); + if(nClass == CLASS_TYPE_INVALID) return FALSE; + if(Get2DAString("classes", "SpellbookRestricted", nClass) == "1") return TRUE; + } + return FALSE; +} +// This is used to set immunities on a creature not using the AI. +// Should only update every minute. +void ai_SetCreatureItemImmunities(object oCreature) +{ + // Create an Immunity in json so we can check item immunities quickly for non-AI creatures. + SetLocalInt(oCreature, sIPTimeStampVarname, ai_GetCurrentTimeStamp()); + if(AI_DEBUG) ai_Debug("0i_spells", "402", "Checking for Item immunities on " + GetName(oCreature)); + int nSpellImmunity, bHasItemImmunity, nSlot; + json jImmunity = JsonArray(); + DeleteLocalInt(oCreature, sIPImmuneVarname); + DeleteLocalInt(oCreature, sIPResistVarname); + DeleteLocalInt(oCreature, sIPReducedVarname); + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + itemproperty ipProp; + // Cycle through all the creatures equiped items. + object oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 12) + { + if(oItem != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_spells", "416", "Checking Item immunities on " + GetName(oItem)); + ipProp = GetFirstItemProperty(oItem); + // Check for immunities on items. + while(GetIsItemPropertyValid(ipProp)) + { + nIPType = GetItemPropertyType(ipProp); + if(AI_DEBUG) ai_Debug("0i_spells", "422", "ItempropertyType(53/20/23/22): " + IntToString(nIPType)); + if(nIPType == ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL) + { + bHasItemImmunity = TRUE; + nSpellImmunity = GetItemPropertyCostTableValue(ipProp); + nSpellImmunity = StringToInt(Get2DAString("iprp_spellcost", "SpellIndex", nSpellImmunity)); + //if(AI_DEBUG) ai_Debug("0i_talents", "1950", "SpellImmunity to " + Get2DAString("spells", "Label", nSpellImmunity)); + jImmunity = JsonArrayInsert(jImmunity, JsonInt(nSpellImmunity)); + } + else if(nIPType == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "434", "Immune DmgType: nIPSubType: " + IntToString(nIpSubType)); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPImmuneVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "452", "Dmg Resist: nIPSubType: " + IntToString(nIpSubType)); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPResistVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_REDUCTION) + { + int nIpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "470", "Dmg Reduction: nIPSubType: " + IntToString(nIpSubType)); + SetLocalInt(oCreature, sIPReducedVarname, nIpSubType); + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + // If nSpellImmunity has been set then we need to save our Immunity json. + if(bHasItemImmunity) SetLocalJson(oCreature, AI_TALENT_IMMUNITY, jImmunity); + } + oItem = GetItemInSlot(++nSlot, oCreature); + // Make the final check the creatures hide. + if(nSlot == 11) oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + } +} +int ai_CreatureImmuneToEffect(object oCaster, object oCreature, int nSpell) +{ + // This checks for creatures not using the AI system (usually players). + // Creatures using the AI system will always have a value in sIPReducedVarname! + // Updates thier immunity values every minute. Should be good as we only update + // equiped items. Spell effects are checked on the creature and are not saved. + if(AI_DEBUG) + { + if(GetLocalInt(oCreature, sIPReducedVarname) == 0) ai_Debug("0i_spells", "492", + " Immunities last saved: " + IntToString(GetLocalInt(oCreature, sIPTimeStampVarname)) + + " + 60 < " + IntToString(ai_GetCurrentTimeStamp())); + } + if(GetLocalInt(oCreature, sIPReducedVarname) == 0 && + GetLocalInt(oCreature, sIPTimeStampVarname) + 60 < ai_GetCurrentTimeStamp()) ai_SetCreatureItemImmunities(oCreature); + string sIType = Get2DAString("ai_spells", "ImmunityType", nSpell); + // Let us check if the creature is disabled while we look for immunities. + int nDisabled = ai_Disabled(oCreature); + if(AI_DEBUG) ai_Debug("0i_spells", "499", "Checking spell immunity type(" + sIType + ")."); + if(sIType != "") + { + if(sIType == "Death" && GetIsImmune(oCreature, IMMUNITY_TYPE_DEATH)) return TRUE; + else if(sIType == "Level_Drain" && GetIsImmune(oCreature, IMMUNITY_TYPE_NEGATIVE_LEVEL)) return TRUE; + else if(sIType == "Ability_Drain" && GetIsImmune(oCreature, IMMUNITY_TYPE_ABILITY_DECREASE)) return TRUE; + else if(sIType == "Poison" && GetIsImmune(oCreature, IMMUNITY_TYPE_POISON)) return TRUE; + else if(sIType == "Disease" && GetIsImmune(oCreature, IMMUNITY_TYPE_DISEASE)) return TRUE; + else if(sIType == "Curse" && GetIsImmune(oCreature, IMMUNITY_TYPE_CURSED)) return TRUE; + else if(sIType == "Mind_Affecting" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Petrification" && + (ai_IsImmuneToPetrification(oCaster, oCreature) && nDisabled)) return TRUE; + else if(sIType == "Fear" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_FEAR) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Sleep" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_SLEEP) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Paralysis" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_PARALYSIS) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Domination" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_DOMINATE) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Confusion" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_CONFUSED) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Blindness" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_BLINDNESS) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || ai_GetHasEffectType(oCreature, EFFECT_TYPE_BLINDNESS))) return TRUE; + else if(sIType == "Dazed" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_DAZED) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + else if(sIType == "Charm" && + (GetIsImmune(oCreature, IMMUNITY_TYPE_CHARM) || + GetIsImmune(oCreature, IMMUNITY_TYPE_MIND_SPELLS) || nDisabled)) return TRUE; + // Check for damage immunities. + // Negative damage does not work on undead! + else if(sIType == "Negative" && GetRacialType(oCreature) == RACIAL_TYPE_UNDEAD) + { + if(AI_DEBUG) ai_Debug("0i_spell", "538", "Undead are immune to Negative energy!"); + return TRUE; + } + else if(sIType == "Poison" && ai_GetHasEffectType(oCreature, EFFECT_TYPE_POISON)) return TRUE; + else if(sIType == "Disease" && ai_GetHasEffectType(oCreature, EFFECT_TYPE_DISEASE)) return TRUE; + // Elemental damage resistances should be checked. + if(sIType == "Acid" || sIType == "Cold" || sIType == "Fire" || + sIType == "Electricty" || sIType == "Sonic") + { + if(ai_GetHasEffectType(oCreature, EFFECT_TYPE_DAMAGE_RESISTANCE)) + { + if(AI_DEBUG) ai_Debug("0i_spell", "547", GetName(oCreature) + " has damage resistance to my " + sIType + " spell!"); + return TRUE; + } + // Check for resistances and immunities. Treat resistance as immune. + int nIPResist = GetLocalInt(oCreature, sIPResistVarname); + if(AI_DEBUG) ai_Debug("0i_spell", "552", "nIPResist:" + IntToString(nIPResist)); + int nIPImmune = GetLocalInt(oCreature, sIPImmuneVarname) | nIPResist; + if(AI_DEBUG) ai_Debug("0i_spell", "554", "nIPImmune:" + IntToString(nIPImmune)); + int bImmune; + if(nIPImmune > 0) { + + if(sIType == "Acid" && (nIPImmune & DAMAGE_TYPE_ACID)) bImmune = TRUE; + else if(sIType == "Cold" && (nIPImmune & DAMAGE_TYPE_COLD)) bImmune = TRUE; + else if(sIType == "Fire" && (nIPImmune & DAMAGE_TYPE_FIRE)) bImmune = TRUE; + else if(sIType == "Electricity" && (nIPImmune & DAMAGE_TYPE_ELECTRICAL)) bImmune = TRUE; + else if(sIType == "Sonic" && (nIPImmune & DAMAGE_TYPE_SONIC)) bImmune = TRUE; + } + if(bImmune) + { + if(AI_DEBUG) ai_Debug("0i_spell", "567", GetName(oCreature) + " is immune/resistant to my " + sIType + " spell through an item!"); + return TRUE; + } + } + // Lets also check undead and constructs vs mind spells. + int nRace = GetRacialType(oCreature); + int nClass = GetClassByPosition(1, oCreature); + if(nRace == RACIAL_TYPE_UNDEAD || nRace == RACIAL_TYPE_CONSTRUCT || + nClass == CLASS_TYPE_UNDEAD || nClass == CLASS_TYPE_CONSTRUCT) + { + if(sIType == "Mind_Affecting" || sIType == "Fear" || sIType == "Sleep" || + sIType == "Confusion" || sIType == "Blindness" || sIType == "Daze" || + sIType == "Poison" || sIType == "Disease" || sIType == "Charm") + { + if(AI_DEBUG) ai_Debug("0i_spell", "595", GetName(oCreature) + " is immune/resistant to my " + sIType + " spell because they are Undead or a Construct!"); + return TRUE; + } + } + } + int nLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + // Globe spells should be checked... + if((GetHasSpellEffect(SPELL_MINOR_GLOBE_OF_INVULNERABILITY, oCreature) || + GetHasSpellEffect(SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE, oCreature)) && + nLevel < 4 && d100() < 75) return TRUE; + if(GetHasSpellEffect(SPELL_GLOBE_OF_INVULNERABILITY, oCreature) && + nLevel < 5 && d100() < 75) return TRUE; + // Check creatures items for immunity. + int nIndex; + json jSpellImmunity = GetLocalJson(oCreature, AI_TALENT_IMMUNITY); + json jSpell = JsonArrayGet(jSpellImmunity, nIndex); + while(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + if(nSpell == JsonGetInt(jSpell)) + { + if(AI_DEBUG) ai_Debug("0i_spells", "581", GetName(oCreature) + " is immune to the spell via an Item!"); + return TRUE; + } + jSpell = JsonArrayGet(jSpellImmunity, ++nIndex); + } + if(AI_DEBUG) ai_Debug("0i_spell", "586", GetName(oCreature) + " is not immune to the spell."); + return FALSE; +} +float ai_GetSpellRange(int nSpell) +{ + string sRange = Get2DAString("spells", "Range", nSpell); + if(sRange == "S") return AI_SHORT_DISTANCE; + else if(sRange == "M") return AI_MEDIUM_DISTANCE; + else if(sRange == "L") return AI_LONG_DISTANCE; + else if(sRange == "T") return AI_RANGE_MELEE; + return 0.1; +} +int ai_CreatureHasDispelableEffect(object oCaster, object oCreature) +{ + int nSpellID, nLastSpellID, bSpell, nDispelChance; + // Cycle through the targets effects. + effect eEffect = GetFirstEffect(oCreature); + if(AI_DEBUG) ai_Debug("0i_spells", "485", "nSpell: " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", GetEffectSpellId(eEffect)))) + + " oCreature: " + GetName(oCreature)); + while(GetIsEffectValid(eEffect)) + { + nSpellID = GetEffectSpellId(eEffect); + // -1 is not a spell. + if(AI_DEBUG) ai_Debug("0i_spells", "491", "nSpell: (" + IntToString(nSpellID) + ") " + + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpellID)))); + if(nSpellID > -1 && nLastSpellID != nSpellID) + { + // We check if the spell is Hostile(-1) or Helpful(+1). + if(Get2DAString("ai_spells", "HostileSetting", nSpellID) == "1") nDispelChance--; + else nDispelChance++; + if(AI_DEBUG) ai_Debug("0i_spells", "497", "HostileSetting: " + Get2DAString("ai_spells", "HostileSetting", nSpellID) + + " nDispelChance: " + IntToString(nDispelChance)); + } + nLastSpellID = nSpellID; + eEffect = GetNextEffect(oCreature); + } + // if the target has more Helpful spells than harmful spells effecting them + // then use dispel! + if(AI_DEBUG) ai_Debug("0i_spells", "505", "nDispelChance: " + IntToString(nDispelChance)); + return (nDispelChance > 0); +} +void ai_RemoveASpecificEffect(object oCreature, int nEffectType) +{ + effect eEffect = GetFirstEffect(oCreature); + //Search for the effect. + while(GetIsEffectValid(eEffect)) + { + if(GetEffectType(eEffect) == nEffectType) + { + //Remove effect. + RemoveEffect(oCreature, eEffect); + eEffect = GetFirstEffect(oCreature); + } + else eEffect = GetNextEffect(oCreature); + } +} +int ai_GetHasEffectType(object oCreature, int nEffectType) +{ + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)) + { + if(GetEffectType(eEffect, TRUE) == nEffectType) return TRUE; + eEffect = GetNextEffect(oCreature); + } + return FALSE; +} +void ai_CheckCreatureSpecialAbilities(object oCreature) +{ + int nMaxSpecialAbilities = GetSpellAbilityCount(oCreature); + if(nMaxSpecialAbilities) + { + int nIndex, bCanCast; + // Struct is id, ready, level. + int nSpell; + while(nIndex < nMaxSpecialAbilities) + { + nSpell = GetSpellAbilitySpell(oCreature, nIndex); + if(GetSpellAbilityReady(oCreature, nSpell)) + { + bCanCast = FALSE; + if(GetSpellAbilityCasterLevel(oCreature, nIndex) > 4) + { + // 1 Min/Lvl spell that is too low of level so it must be cast at 5th lvl or greater. + if(nSpell == SPELL_FLAME_WEAPON) bCanCast = TRUE; + else if(nSpell == SPELL_BLESS) bCanCast = TRUE; + else if(nSpell == SPELL_AID) bCanCast = TRUE; + else if(nSpell == SPELL_DEATH_WARD) bCanCast = TRUE; + } + if(nSpell == SPELL_ENERGY_BUFFER) bCanCast = TRUE; + else if(nSpell == SPELL_PROTECTION_FROM_ELEMENTS) bCanCast = TRUE; + else if(nSpell == SPELL_RESIST_ELEMENTS) bCanCast = TRUE; + else if(nSpell == SPELL_ENDURE_ELEMENTS) bCanCast = TRUE; + else if(nSpell == SPELL_MAGE_ARMOR) bCanCast = TRUE; + else if(nSpell == SPELL_MAGIC_VESTMENT) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_MAGIC_WEAPON) bCanCast = TRUE; + else if(nSpell == SPELL_MAGIC_WEAPON) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_IX) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_VIII) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_VII) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_VI) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_V) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_IV) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_III) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_II) bCanCast = TRUE; + else if(nSpell == SPELL_SUMMON_CREATURE_I) bCanCast = TRUE; + else if(nSpell == SPELL_BARKSKIN) bCanCast = TRUE; + else if(nSpell == SPELL_SHIELD) bCanCast = TRUE; + else if(nSpell == SPELL_ENTROPIC_SHIELD) bCanCast = TRUE; + else if(nSpell == SPELL_SHIELD_OF_FAITH) bCanCast = TRUE; + else if(nSpell == SPELL_REMOVE_FEAR) bCanCast = TRUE; + else if(nSpell == SPELL_IRONGUTS) bCanCast = TRUE; + else if(nSpell == SPELL_PREMONITION) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_STONESKIN) bCanCast = TRUE; + else if(nSpell == SPELL_GHOSTLY_VISAGE) bCanCast = TRUE; + else if(nSpell == SPELL_IMPROVED_INVISIBILITY) bCanCast = TRUE; + else if(nSpell == SPELL_INVISIBILITY_SPHERE) bCanCast = TRUE; + else if(nSpell == SPELL_INVISIBILITY) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_BULLS_STRENGTH) bCanCast = TRUE; + else if(nSpell == SPELL_BULLS_STRENGTH) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_CATS_GRACE) bCanCast = TRUE; + else if(nSpell == SPELL_CATS_GRACE) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_EAGLE_SPLENDOR) bCanCast = TRUE; + else if(nSpell == SPELL_EAGLE_SPLEDOR) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_ENDURANCE) bCanCast = TRUE; + else if(nSpell == SPELL_ENDURANCE) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_FOXS_CUNNING) bCanCast = TRUE; + else if(nSpell == SPELL_FOXS_CUNNING) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_OWLS_WISDOM) bCanCast = TRUE; + else if(nSpell == SPELL_OWLS_WISDOM) bCanCast = TRUE; + else if(nSpell == SPELL_KEEN_EDGE) bCanCast = TRUE; + else if(nSpell == SPELL_ANIMATE_DEAD) bCanCast = TRUE; + else if(nSpell == SPELL_INVISIBILITY_PURGE) bCanCast = TRUE; + else if(nSpell == SPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE) bCanCast = TRUE; + else if(nSpell == SPELL_DARKFIRE) bCanCast = TRUE; + else if(nSpell == SPELL_NEGATIVE_ENERGY_PROTECTION) bCanCast = TRUE; + else if(nSpell == SPELL_MAGIC_CIRCLE_AGAINST_GOOD) bCanCast = TRUE; + else if(nSpell == SPELL_FREEDOM_OF_MOVEMENT) bCanCast = TRUE; + else if(nSpell == SPELL_NEUTRALIZE_POISON) bCanCast = TRUE; + else if(nSpell == SPELL_MIND_BLANK) bCanCast = TRUE; + else if(nSpell == SPELL_LESSER_MIND_BLANK) bCanCast = TRUE; + else if(nSpell == SPELL_SPELL_RESISTANCE) bCanCast = TRUE; + else if(nSpell == SPELL_PROTECTION_FROM_GOOD) bCanCast = TRUE; + else if(nSpell == SPELL_CREATE_UNDEAD) bCanCast = TRUE; + else if(nSpell == SPELL_PLANAR_ALLY) bCanCast = TRUE; + else if(nSpell == SPELL_LESSER_PLANAR_BINDING) bCanCast = TRUE; + else if(nSpell == SPELL_ETHEREALNESS) bCanCast = TRUE; + else if(nSpell == SPELL_PROTECTION_FROM_SPELLS) bCanCast = TRUE; + else if(nSpell == SPELL_SHADOW_SHIELD) bCanCast = TRUE; + else if(nSpell == SPELL_CREATE_GREATER_UNDEAD) bCanCast = TRUE; + else if(nSpell == SPELL_GREATER_PLANAR_BINDING) bCanCast = TRUE; + if(bCanCast && GetSpellAbilityReady(oCreature, nIndex)) + { + ActionCastSpellAtObject(nSpell, oCreature, 255, 0, 0, 0, TRUE); + } + } + nIndex++; + } + } +} +int ai_IsSilenced(object oCreature, int nSpell) +{ + if(Get2DAString("spells", "VS", nSpell) == "s") return FALSE; + if(ai_GetHasEffectType(oCreature, EFFECT_TYPE_SILENCE)) return TRUE; + return FALSE; +} +int ai_ArcaneSpellFailureTooHigh(object oCreature, int nClass, int nLevel, int nSlot) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "746", "Arcane Spells: " + Get2DAString("classes", "ASF", nClass) + + " Arcane Spell Failure: " + IntToString(GetArcaneSpellFailure(oCreature)) + + " > " + IntToString(AI_ASF_WILL_USE) + " skip."); + if(Get2DAString("classes", "ASF", nClass) == "1" && + GetArcaneSpellFailure(oCreature) > AI_ASF_WILL_USE) + { + if(GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot) == METAMAGIC_STILL) return FALSE; + return TRUE; + } + return FALSE; +} +int ai_TryToCastSpell(object oCaster, int nSpell, object oTarget) +{ + if(GetHasSpell(nSpell, oCaster) && !GetHasSpellEffect(nSpell, oTarget)) + { + ActionCastSpellAtObject(nSpell, oTarget); + return TRUE; + } + return FALSE; +} +int ai_SpellGroupNotCast(object oCreature, string sBuffGroup) +{ + return !GetLocalInt(oCreature, sBuffGroup); +} +void ai_ClearSpellsCastGroups(object oCreature) +{ + int nCounter; + for(nCounter = -1; nCounter <= AI_BUFF_GROUPS; nCounter--) + { + DeleteLocalInt(oCreature, "AI_USED_SPELL_GROUP_" + IntToString(nCounter)); + } +} +int ai_CanUseSpell(object oCaster, object oTarget, int nSpell, int nTargetType) +{ + // Should we ignore associates? + if(ai_GetAIMode(oCaster, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + // For ability scores we return a bonus to the ability to be checked against + // the target with the highest ability getting the spell first. + if(nTargetType == 1) // Ability score buff for strength. + { + // We don't want to buff the strength for someone using weapon finesse! + if(GetHasFeat(FEAT_WEAPON_FINESSE, oTarget)) return -5; + return TRUE; + } + if(nTargetType == 7) // Lowest AC. + { + // Stone bones only effects the undead. + if(nSpell == SPELL_STONE_BONES) + { + if(GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) return FALSE; + } + return TRUE; + } + if(nTargetType == 8) // Lowest AC without AC Bonus. + { + if(nSpell == SPELL_MAGIC_VESTMENT) + { + object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if(oArmor == OBJECT_INVALID) return FALSE; + } + return TRUE; + } + if(nTargetType == 9) // Highest Attack. + { + return TRUE; + } + if(nTargetType == 10) // Most wounded, Lowest Hp. + { + return TRUE; + } + if(nTargetType == 11) // Lowest Fortitude save. + { + return TRUE; + } + if(nTargetType == 12) // Lowest Reflex save. + { + return TRUE; + } + if(nTargetType == 13) // Lowest Will save. + { + return TRUE; + } + if(nTargetType == 14) // Lowest Save. + { + return TRUE; + } + if(nSpell == SPELL_MAGIC_FANG) + { + object oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCaster); + if(oTarget != oCompanion) return FALSE; + } + return TRUE; +} +// Used to check if the targets weapon can be buffed by the spells effects. +int ai_CanItemBeBuffed(int nSpell, object oTarget) +{ + object oWeapon, oArmor; + if(nSpell == SPELL_MAGIC_WEAPON || nSpell == SPELL_GREATER_MAGIC_WEAPON || + nSpell == SPELL_BLADE_THIRST) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ENHANCEMENT_BONUS)) return FALSE; + } + else if(nSpell == SPELL_MAGIC_VESTMENT) + { + oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if(oArmor == OBJECT_INVALID) return FALSE; + if(ai_GetHasItemProperty(oArmor, ITEM_PROPERTY_AC_BONUS)) return FALSE; + } + else if(nSpell == SPELL_DARKFIRE) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, 127)) return FALSE; + } + else if(nSpell == SPELL_FLAME_WEAPON) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, 124)) return FALSE; + } + else if(nSpell == SPELL_KEEN_EDGE) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsSlashingWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_KEEN)) return FALSE; + } + else if(nSpell == SPELL_DEAFENING_CLANG) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, 137)) return FALSE; + } + else if(nSpell == SPELL_BLESS_WEAPON) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP, IP_CONST_RACIALTYPE_UNDEAD)) return FALSE; + } + else if(nSpell == SPELL_HOLY_SWORD) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_HOLY_AVENGER)) return FALSE; + } + else if(nSpell == SPELL_BLACKSTAFF) + { + oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(GetBaseItemType(oWeapon) != BASE_ITEM_QUARTERSTAFF) return FALSE; + if(ai_GetHasItemProperty(oWeapon, ITEM_PROPERTY_ON_HIT_PROPERTIES, IP_CONST_ONHIT_DISPELMAGIC)) return FALSE; + } + return TRUE; +} +// In "Buff_Target" column the value of 0 in the "ai_spells.2da" references the Caster. +// In "Buff_Target" column this is value 1-6(STR, DEX, CON, INT, WIS, CHA) in the "ai_spells.2da". +object ai_BuffHighestAbilityScoreTarget(object oCaster, int nSpell, int nAbilityScore, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup)) return oMaster; + } + int nCntr = 1, nAB, nHighAB, nTarget, nUseSpell; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange) + { + nUseSpell = ai_CanUseSpell(oCaster, oTarget, nSpell, nAbilityScore + 1); + if(nUseSpell == 0) {} + else + { + nAB = GetAbilityScore(oTarget, nAbilityScore) + nUseSpell; + if(nAB > nHighAB) + {nHighAB = nAB; nTarget = nCntr; } + } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 7 in the "ai_spells.2da". +object ai_BuffLowestACTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + object oMaster = GetMaster(); + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 7)) return oMaster; + } + int nCntr = 1, nAC, nLowAC = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAC = GetAC(oTarget); + if(nAC < nLowAC && ai_CanUseSpell(oCaster, oTarget, nSpell, 7)) + {nLowAC = nAC; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); + return oTarget; +} +// In "Buff_Target" column this is value 8 in the "ai_spells.2da". +object ai_BuffLowestACWithOutACBonus(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 8)) return oMaster; + } + int nCntr = 1, nAC, nLowAC = 50, nTarget; + object oItem, oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAC = GetAC(oTarget); + oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + if(nAC < nLowAC && ai_CanUseSpell(oCaster, oTarget, nSpell, 8) && + !GetItemHasItemProperty(oItem, ITEM_PROPERTY_AC_BONUS)) + { + nLowAC = nAC; + nTarget = nCntr; + } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 9 in the "ai_spells.2da". +object ai_BuffHighestAttackTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 9)) return oMaster; + } + int nCntr = 1, nAtk, nHighAtk, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAtk = GetBaseAttackBonus(oTarget); + if(nAtk > nHighAtk && ai_CanUseSpell(oCaster, oTarget, nSpell, 9)) + {nHighAtk = nAtk; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); + return oTarget; +} +// In "Buff_Target" column this is value 10 in the "ai_spells.2da". +object ai_BuffMostWoundedTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 9)) return oMaster; + } + int nCntr = 1, nDmg, nMostDmg, nHp, nLowHp = 10000, nTarget, nHpTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && + ai_SpellGroupNotCast(oTarget, sBuffGroup) && + ai_CanUseSpell(oCaster, oTarget, nSpell, 10)) + { + nHp = GetCurrentHitPoints(oTarget); + nDmg = GetMaxHitPoints(oTarget) - nHp; + if(nDmg > nMostDmg) { nMostDmg = nDmg; nTarget = nCntr; } + if(nHp < nLowHp) { nLowHp = nHp; nHpTarget = nCntr; } + } + // If no one is damage then put regeneration on the lowest hp target. + if(nMostDmg == 0) nTarget = nHpTarget; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 11 in the "ai_spells.2da". +object ai_BuffLowestFortitudeSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 11)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetFortitudeSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 11)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 12 in the "ai_spells.2da". +object ai_BuffLowestReflexSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 12)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetReflexSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 12)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 13 in the "ai_spells.2da". +object ai_BuffLowestWillSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 13)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 100, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetWillSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 13)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 14 in the "ai_spells.2da". +object ai_BuffLowestSaveTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(!GetHasSpellEffect(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup) && + ai_CanUseSpell(oCaster, oMaster, nSpell, 14)) return oMaster; + } + int nCntr = 1, nSave, nLowSave = 200, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && !GetHasSpellEffect(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nSave = GetFortitudeSavingThrow(oTarget) + GetReflexSavingThrow(oTarget) + GetWillSavingThrow(oTarget); + if(nSave < nLowSave && ai_CanUseSpell(oCaster, oTarget, nSpell, 14)) + {nLowSave = nSave; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + else return GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); +} +// In "Buff_Target" column this is value 15 in the "ai_spells.2da". +object ai_BuffItemTarget(object oCaster, int nSpell, string sBuffGroup, float fRange, string sTargetType = "AI_ALLY_TARGET_") +{ + if(ai_GetMagicMode(oCaster, AI_MAGIC_BUFF_MASTER)) + { + object oMaster = GetMaster(); + if(ai_CanItemBeBuffed(nSpell, oMaster) && + ai_SpellGroupNotCast(oMaster, sBuffGroup)) return oMaster; + } + int nCntr = 1, nAtk, nHighAtk = -9999, nTarget; + object oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nCntr)); + while (nCntr < 10) + { + if(oTarget != OBJECT_INVALID && ai_CanItemBeBuffed(nSpell, oTarget) && + GetDistanceBetween(oCaster, oTarget) <= fRange && ai_SpellGroupNotCast(oTarget, sBuffGroup)) + { + nAtk = GetBaseAttackBonus(oTarget); + if(nAtk > nHighAtk) + { nHighAtk = nAtk; nTarget = nCntr; } + } + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(++nCntr)); + } + if(nTarget == 0) return OBJECT_INVALID; + oTarget = GetLocalObject(oCaster, sTargetType + IntToString(nTarget)); + return oTarget; +} +object ai_GetBuffTarget(object oCaster, int nSpell) +{ + object oTarget = OBJECT_INVALID; + string sGroup = Get2DAString("ai_spells", "Buff_Group", nSpell); + if(sGroup == "") sGroup = IntToString(nSpell); + string sBuffGroup = "AI_USED_SPELL_GROUP_" + sGroup; + string sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + if(AI_DEBUG) ai_Debug("0i_spells", "769", "BuffTarget: " + sBuffTarget); + if(sBuffTarget == "0") + { + if(ai_SpellGroupNotCast(oCaster, sBuffGroup) && + !GetHasSpellEffect(nSpell, oCaster) && + ai_CanUseSpell(oCaster, oTarget, nSpell, 0)) + { + oTarget = oCaster; + } + } + else if(sBuffTarget == "1") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_STRENGTH, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "2") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_DEXTERITY, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "3") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_CONSTITUTION, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "4") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_INTELLIGENCE, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "5") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_WISDOM, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "6") + oTarget = ai_BuffHighestAbilityScoreTarget(oCaster, nSpell, ABILITY_CHARISMA, "", AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "7") + oTarget = ai_BuffLowestACTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "8") + oTarget = ai_BuffLowestACWithOutACBonus(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "9") + oTarget = ai_BuffHighestAttackTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "10") + oTarget = ai_BuffMostWoundedTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "11") + oTarget = ai_BuffLowestFortitudeSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "12") + oTarget = ai_BuffLowestReflexSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "13") + oTarget = ai_BuffLowestWillSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "14") + oTarget = ai_BuffLowestSaveTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + else if(sBuffTarget == "15") + oTarget = ai_BuffItemTarget(oCaster, nSpell, sBuffGroup, AI_RANGE_BATTLEFIELD); + if(oTarget != OBJECT_INVALID) + { + SetLocalInt(oTarget, sBuffGroup, TRUE); + DelayCommand(6.0, DeleteLocalInt(oTarget, sBuffGroup)); + } + if(AI_DEBUG) ai_Debug("0i_spells", "939", GetName(oCaster) + " is targeting " + GetName(oTarget) + + " with " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))) + " spell" + + " sBuffGroup: " + sBuffGroup + "."); + return oTarget; +} +void ai_CastMemorizedSpell(object oCaster, int nClass, int nSpellLevel, int nSpellSlot, object oTarget, int bInstant, object oPC = OBJECT_INVALID) +{ + int nDomain; + int nSpell = GetMemorizedSpellId(oCaster, nClass, nSpellLevel, nSpellSlot); + if(GetMemorizedSpellIsDomainSpell(oCaster, nClass, nSpellLevel, nSpellSlot) == 1) nDomain = nSpellLevel; + else nDomain = 0; + int nMetaMagic = GetMemorizedSpellMetaMagic(oCaster, nClass, nSpellLevel, nSpellSlot); + if(AI_DEBUG) ai_Debug("0i_spells", "951", "nSpell: " + IntToString(nSpell) + " oTarget: " + GetName(oTarget) + + " nMetaMagic: " + IntToString(nMetaMagic) + " nDomain: " + IntToString(nDomain) + + " bInstant: " + IntToString(bInstant) + " nClass: " + IntToString(nClass)); + ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain, 0, bInstant); + // Right now I cannot get nClass to work here... + //DelayCommand(fDelay, ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain, 0, TRUE, nClass)); + if(oPC != OBJECT_INVALID) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(GetName(oCaster) + " has cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_GREEN, oPC); + } +} +void ai_CastKnownSpell(object oCaster, int nClass, int nSpell, object oTarget, int bInstant, object oPC = OBJECT_INVALID) +{ + if(AI_DEBUG) ai_Debug("0i_Spells", "965", GetName(oCaster) + " is casting " + IntToString(nSpell)); + ActionCastSpellAtObject(nSpell, oTarget, 255, FALSE, 0, 0, bInstant); + // Right now I cannot get nClass to work here... + //ActionCastSpellAtObject(nSpell, oTarget, 255, FALSE, 0, 0, TRUE, nClass); + if(oPC != OBJECT_INVALID) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(GetName(oCaster) + " has cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_GREEN, oPC); + } +} +int ai_CheckAndCastSpell(object oCaster, int nSpell, int nSpellGroup, float fDelay, object oTarget, object oPC = OBJECT_INVALID) +{ + int nClassCnt = 1, nClass, nMaxSlot, nSpellLevel, nSpellSlot, nMemorizedSpell, nDomain, nMetaMagic; + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + while(nClassCnt <= AI_MAX_CLASSES_PER_CHARACTER && nClass != CLASS_TYPE_INVALID) + { + nClass = GetClassByPosition(nClassCnt); + // Search all memorized spells for the spell. + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + // Check each level starting with the lowest to the highest. + nSpellLevel = 0; + while(nSpellLevel < 10) + { + // Check each slot within each level. + nMaxSlot = GetMemorizedSpellCountByLevel(oCaster, nClass, nSpellLevel); + nSpellSlot = 0; + while(nSpellSlot < nMaxSlot) + { + if(GetMemorizedSpellReady(oCaster, nClass, nSpellLevel, nSpellSlot)) + { + nMemorizedSpell = GetMemorizedSpellId(oCaster, nClass, nSpellLevel, nSpellSlot); + if(AI_DEBUG) ai_Debug("0i_spells", "1326", "nMemorizedSpell: " + IntToString(nMemorizedSpell) + + " nSpell: " + IntToString(nSpell)); + if(nMemorizedSpell == nSpell) + { + ai_CastMemorizedSpell(oCaster, nClass, nSpellLevel, nSpellSlot, oTarget, FALSE, oPC); + return TRUE; + } + } + nSpellSlot++; + } + nSpellLevel++; + } + } + // Check non-memorized known lists for the spell. + else if(GetSpellUsesLeft(oCaster, nClass, nSpell)) + { + ai_CastKnownSpell(oCaster, nClass, nSpell, oTarget, FALSE, oPC); + return TRUE; + } + nClassCnt++; + } + return FALSE; +} +void ai_SetupMonsterBuffTargets(object oCaster) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1020", GetName(oCaster) + " is setting buff targets."); + SetLocalObject (oCaster, "AI_ALLY_TARGET_1" , oCaster); + SetLocalObject (oCaster, "AI_ALLY_TARGET_2", oCaster); + int nCntr = 1; + object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, nCntr); + if(AI_DEBUG) ai_Debug("0i_spells", "864", GetName(oCreature) + " nCntr: " + IntToString(nCntr) + + " Distance: " + FloatToString(GetDistanceBetween(oCaster, oCreature), 0, 2)); + while(oCreature != OBJECT_INVALID && nCntr < 8 && GetDistanceBetween(oCaster, oCreature) < AI_RANGE_CLOSE) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1133", "Setting " + GetName(oCreature) + " as AI_ALLY_TARGET_" + IntToString(nCntr + 2)); + SetLocalObject (oCaster, "AI_ALLY_TARGET_" + IntToString(nCntr + 2), oCreature); + oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_FRIEND, oCaster, ++nCntr); + if(AI_DEBUG) ai_Debug("0i_spells", "1136", GetName(oCreature) + " nCntr: " + IntToString(nCntr) + + " Distance: " + FloatToString(GetDistanceBetween(oCaster, oCreature), 0, 2)); + } +} +void ai_SetupAllyTargets(object oCaster, object oPC) +{ + // Setup our targets. + int nTarget; + if(oCaster != oPC) SetLocalObject (oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oPC); + SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCaster); + object oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oCreature); + int nCntr = 1; + int nMaxHenchman = GetMaxHenchmen() + nTarget; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID && nCntr <= nMaxHenchman) + { + if(oHenchman == OBJECT_INVALID) break; + if(oHenchman != oCaster) SetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(++nTarget), oHenchman); + oHenchman = GetHenchman(oPC, ++nCntr); + } + nCntr = 1; + while(nCntr <= nMaxHenchman) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1166", "AI_ALLY_TARGET_" + IntToString(nCntr) + ": " + + GetName(GetLocalObject(oCaster, "AI_ALLY_TARGET_" + IntToString(nCntr)))); + nCntr++; + } +} +void ai_SetupAllyHealingTargets(object oCaster, object oPC) +{ + int nMaxHenchman = 1; + if(oPC == OBJECT_INVALID) oPC = oCaster; + if(ai_GetAIMode(oCaster, AI_MODE_PARTY_HEALING_OFF)) + { + if(!ai_GetAIMode(oCaster, AI_MODE_SELF_HEALING_OFF)) SetLocalObject(oCaster, "AI_ALLY_HEAL_1", oCaster); + } + else + { + int nTarget; + if(oCaster != oPC) + { + SetLocalObject (oCaster, "AI_ALLY_HEAL_1", oPC); + nTarget++; + } + if(!ai_GetAIMode(oCaster, AI_MODE_SELF_HEALING_OFF)) + { + SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCaster); + } + object oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + oCreature = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oCaster); + if(oCreature != OBJECT_INVALID) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oCreature); + int nCntr = 1; + nMaxHenchman = GetMaxHenchmen() + nTarget; + object oHenchman = GetHenchman(oPC, nCntr); + while(oHenchman != OBJECT_INVALID && nTarget <= nMaxHenchman) + { + if(oHenchman == OBJECT_INVALID) break; + if(oHenchman != oCaster) SetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(++nTarget), oHenchman); + oHenchman = GetHenchman(oPC, ++nCntr); + } + } + int nCntr = 1; + while(nCntr <= nMaxHenchman) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1211", "AI_ALLY_HEAL_" + IntToString(nCntr) + ": " + + GetName(GetLocalObject(oCaster, "AI_ALLY_HEAL_" + IntToString(nCntr++)))); + } +} +void ai_ClearBuffTargets(object oCaster, string sVariable) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1216", GetName(oCaster) + " is clearing " + sVariable + " targets."); + int nIndex; + int nMaxTargets = GetMaxHenchmen() + 6; + for(nIndex = 1; nIndex < nMaxTargets; nIndex++) + { + DeleteLocalObject (oCaster, sVariable + IntToString(nIndex)); + } +} +void ai_CheckForPerDayProperties(object oCreature, object oItem, int nBuffType, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1150", "Checking Item properties on " + GetName(oItem)); + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return; + int nPerDay, nCharges, nUses, nSpellBuffDuration; + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + object oTarget; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1163", "ItempropertyType(15): " + IntToString(GetItemPropertyType(ipProp))); + nIPType = GetItemPropertyType(ipProp); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + // We only check uses per day. + if(AI_DEBUG) ai_Debug("0i_spells", "1172", "Item uses: " + IntToString(nPerDay)); + if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_spells", "1176", "Item uses per day: " + IntToString(nPerDay)); + if(nPerDay > 0) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + if(AI_DEBUG) ai_Debug("0i_spells", "1183", "nSpell: " + IntToString(nSpell) + + " nBuffType: " + IntToString(nBuffType) + + " nSpellBuffDuration: " + IntToString(nSpellBuffDuration)); + if(nBuffType == nSpellBuffDuration || nBuffType == 1) + { + oTarget = ai_GetBuffTarget(oCreature, nSpell); + if(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1190", GetName(oCreature) + " is using" + + GetName(oItem) + " to cast " + IntToString(nSpell) + + " on " + GetName(oTarget)); + ActionUseItemOnObject(oItem, ipProp, oTarget); + } + } + } + } + } + ipProp = GetNextItemProperty(oItem); + } +} +void ai_CheckForPerDayItems(object oCreature, object oPC, int nBuffType) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1198", GetName(oCreature) + ": Checking items for per day buffs."); + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS)) + { + int bEquiped; + string sSlots; + // Cycle through all the creatures inventory items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_talents", "1211", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") ai_CheckForPerDayProperties(oCreature, oItem, nBuffType); + } + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) ai_CheckForPerDayProperties(oCreature, oItem, nBuffType, TRUE); + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + if(oItem != OBJECT_SELF) ai_CheckForPerDayProperties(oCreature, oItem, nBuffType, TRUE); + } + // Clean up our variables. Must be done here since these are actions! + int nCntr; + object oTarget; + while(nCntr < 11) + { + oTarget = GetLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nCntr)); + if(oTarget != OBJECT_INVALID) + { + ai_ClearSpellsCastGroups(oTarget); + DeleteLocalObject(oCreature, "AI_ALLY_TARGET_" + IntToString(nCntr)); + } + nCntr++; + } +} +void ai_CheckForBuffSpells(struct stSpell stSpell, float fDelay, int bInstantSpell) +{ + ai_SetupAllyTargets(stSpell.oCaster, stSpell.oPC); + stSpell.nPosition = 1; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(AI_DEBUG) ai_Debug("0i_spells", "1208", "nClass: " + IntToString(stSpell.nClass)); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + if(AI_DEBUG) ai_Debug("0i_spells", "1210", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + if(AI_DEBUG) ai_Debug("0i_spells", "1214", "Memorizes Spells: " + Get2DAString("classes", "MemorizesSpells", stSpell.nClass)); + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell, fDelay, bInstantSpell)); + return; + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell, fDelay, bInstantSpell)); + return; + } + } + stSpell.nPosition++; + } + ai_CheckForPerDayItems(stSpell.oCaster, stSpell.oPC, stSpell.nBuffType); +} +void ai_ActionCastMemorizedSummons(struct stSpell stSpell, float fDelay, int bInstantSpell) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1122", "Start of ActionCastMemorizedSummons!"); + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + //ai_Debug("0i_spells", "1128", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + //ai_Debug("0i_spells", "1131", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + //ai_Debug("0i_spells", "1134", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + // " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + //ai_Debug("0i_spells", "1238", "Ready: " + IntToString(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot))); + if(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot)) + { + nSpell = GetMemorizedSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + //ai_Debug("0i_spells", "1142", "nSpell: " + IntToString(nSpell)); + if(Get2DAString("ai_spells", "Category", nSpell) == "S") + { + SetLocalInt(stSpell.oCaster, "AI_USED_SPELL_GROUP_-2", TRUE); + ai_CastMemorizedSpell(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot, stSpell.oCaster, bInstantSpell, stSpell.oPC); + stSpell.nPosition = 1; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + DelayCommand(2.0, ai_SetupAllyTargets(stSpell.oCaster, stSpell.oPC)); + DelayCommand(2.0 + 0.5, AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell, fDelay, bInstantSpell))); + return; + } + } + stSpell.nSlot++; + } + stSpell.nLevel--; + //ai_Debug("0i_spells", "1153", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + //ai_Debug("0i_spells", "1164", "nClass: " + IntToString(stSpell.nClass)); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell, fDelay, bInstantSpell)); + return; + } + } + } + ai_CheckForBuffSpells(stSpell, fDelay, bInstantSpell); +} +void ai_ActionCastKnownSummons(struct stSpell stSpell, float fDelay, int bInstantSpell) +{ + //ai_Debug("0i_spells", "1184", "Start of ActionCastKnownSummons!"); + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + //ai_Debug("0i_spells", "1190", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + //ai_Debug("0i_spells", "1193", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + if(stSpell.nMaxSlots) + { + //ai_Debug("0i_spells", "1198", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + // " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + nSpell = GetKnownSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + //ai_Debug("0i_spells", "1203", "Ready: " + IntToString(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell))); + if(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell)) + { + if(Get2DAString("ai_spells", "Category", nSpell) == "S") + { + SetLocalInt(stSpell.oCaster, "AI_USED_SPELL_GROUP_S", TRUE); + //ai_Debug("0i_spells", "1209", "nSpell: " + IntToString(nSpell)); + ai_CastKnownSpell(stSpell.oCaster, stSpell.nClass, nSpell, stSpell.oCaster, bInstantSpell, stSpell.oPC); + stSpell.nPosition = 1; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + ai_SetupAllyTargets(stSpell.oCaster, stSpell.oPC); + DelayCommand(fDelay, AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell, fDelay, bInstantSpell))); + return; + } + } + stSpell.nSlot++; + } + } + stSpell.nLevel--; + //ai_Debug("0i_spells", "1218", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + //ai_Debug("0i_spells", "1229", "nClass: " + IntToString(stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell, fDelay, bInstantSpell)); + return; + } + else stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + } + ai_CheckForBuffSpells(stSpell, fDelay, bInstantSpell); +} +void ai_ActionCastMemorizedBuff(struct stSpell stSpell, float fDelay, int bInstantSpell) +{ + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + ai_Debug("0i_spells", "1252", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + ai_Debug("0i_spells", "1255", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + ai_Debug("0i_spells", "1258", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + ai_Debug("0i_spells", "1262", "Ready: " + IntToString(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot))); + if(GetMemorizedSpellReady(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot)) + { + nSpell = GetMemorizedSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + ai_Debug("0i_spells", "1267", "nBuffType: " + IntToString(stSpell.nBuffType) + + " nSpellBuffDuration: " + IntToString(nSpellBuffDuration) + + " sBuffGroup: " + Get2DAString("ai_spells", "Buff_Group", nSpell)); + if(stSpell.nBuffType == nSpellBuffDuration || stSpell.nBuffType == 1) + { + if(stSpell.nTarget > 0) + { + sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + oTarget = GetLocalObject(stSpell.oCaster, "AI_ALLY_TARGET_" + IntToString(stSpell.nTarget)); + if(sBuffTarget != "0" || (sBuffTarget == "0" && stSpell.oCaster == oTarget)) + { + sBuffGroup = "AI_USED_SPELL_GROUP_" + Get2DAString("ai_spells", "Buff_Group", nSpell); + if(!ai_SpellGroupNotCast(oTarget, sBuffGroup)) oTarget == OBJECT_INVALID; + } + else oTarget == OBJECT_INVALID; + } + else oTarget = ai_GetBuffTarget(stSpell.oCaster, nSpell); + ai_Debug("0i_spells", "1284", "nSpell: " + IntToString(nSpell) + + " oTarget: " + GetName(oTarget)); + if(oTarget != OBJECT_INVALID) + { + ai_CastMemorizedSpell(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot, oTarget, bInstantSpell, stSpell.oPC); + stSpell.nSlot++; + DelayCommand(fDelay, AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell, fDelay, bInstantSpell))); + return; + } + } + } + stSpell.nSlot++; + } + stSpell.nLevel--; + ai_Debug("0i_spells", "1298", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + ai_Debug("0i_spells", "1309", "nClass: " + IntToString(stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell, fDelay, bInstantSpell)); + return; + } + } + } + ai_CheckForPerDayItems(stSpell.oCaster, stSpell.oPC, stSpell.nBuffType); +} +void ai_ActionCastKnownBuff(struct stSpell stSpell, float fDelay, int bInstantSpell) +{ + int nSpell; + string sBuffGroup, sBuffTarget; + object oTarget; + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + //ai_Debug("0i_spells", "1347", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + //ai_Debug("0i_spells", "1350", "nLevel: " + IntToString(stSpell.nLevel)); + while(stSpell.nLevel > -1) + { + if(stSpell.nMaxSlots) + { + //ai_Debug("0i_spells", "1356", "nMaxSlots: " + IntToString(stSpell.nMaxSlots) + + // " nSlots: " + IntToString(stSpell.nSlot)); + while(stSpell.nSlot < stSpell.nMaxSlots) + { + nSpell = GetKnownSpellId(stSpell.oCaster, stSpell.nClass, stSpell.nLevel, stSpell.nSlot); + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + //ai_Debug("0i_spells", "1361", "nBuffType: " + IntToString(stSpell.nBuffType) + + // " nSpellBuffDuration: " + IntToString(nSpellBuffDuration) + + // " sBuffGroup: " + Get2DAString("ai_spells", "Buff_Group", nSpell)); + if(stSpell.nBuffType == nSpellBuffDuration || stSpell.nBuffType == 1) + { + //ai_Debug("0i_spells", "1367", "Ready: " + IntToString(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell))); + if(GetSpellUsesLeft(stSpell.oCaster, stSpell.nClass, nSpell)) + { + if(stSpell.nTarget > 0) + { + sBuffTarget = Get2DAString("ai_spells", "Buff_Target", nSpell); + oTarget = GetLocalObject(stSpell.oCaster, "AI_ALLY_TARGET_" + IntToString(stSpell.nTarget)); + if(sBuffTarget != "0" || (sBuffTarget == "0" && stSpell.oCaster == oTarget)) + { + sBuffGroup = "AI_USED_SPELL_GROUP_" + Get2DAString("ai_spells", "Buff_Group", nSpell); + if(!ai_SpellGroupNotCast(oTarget, sBuffGroup)) oTarget == OBJECT_INVALID; + } + else oTarget == OBJECT_INVALID; + } + else oTarget = ai_GetBuffTarget(stSpell.oCaster, nSpell); + //ai_Debug("0i_spells", "1382", "nSpell: " + IntToString(nSpell) + + // " oTarget: " + GetName(oTarget)); + if(oTarget != OBJECT_INVALID) + { + ai_CastKnownSpell(stSpell.oCaster, stSpell.nClass, nSpell, oTarget, bInstantSpell, stSpell.oPC); + stSpell.nSlot++; + DelayCommand(fDelay, AssignCommand(stSpell.oCaster, ai_ActionCastKnownBuff(stSpell, fDelay, bInstantSpell))); + return; + } + } + } + stSpell.nSlot++; + } + } + stSpell.nLevel--; + //ai_Debug("0i_spells", "1396", "nLevel: " + IntToString(stSpell.nLevel)); + if(stSpell.nLevel > -1) + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + stSpell.nSlot = 0; + } + } + } + stSpell.nPosition++; + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + //ai_Debug("0i_spells", "921", "nClass: " + IntToString(stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + stSpell.nSlot = 0; + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedBuff(stSpell, fDelay, bInstantSpell)); + return; + } + else stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + } + } + ai_CheckForPerDayItems(stSpell.oCaster, stSpell.oPC, stSpell.nBuffType); +} +void ai_CastBuffs(object oCaster, int nBuffType, int nTarget, object oPC) +{ + // buff types: 1 - All, 2 - Short duration, 3 - Long duration + // Buff groups are used to prevent a henchmen to cast spells that have the same effect, + // for example: resist elements and protection from elements are similiar so the henchmen + // would cast only the most powerful among these if he has them both. + if(AI_DEBUG) ai_Debug("0i_spells", "1670", GetName(oCaster) + " is casting buffs: " + IntToString(nBuffType) + + " nTarget: " + IntToString(nTarget) + "!"); + struct stSpell stSpell; + stSpell.oPC = oPC; + stSpell.oCaster = oCaster; + stSpell.nBuffType = nBuffType; + stSpell.nTarget = nTarget; + stSpell.nPosition = 1; + float fDelay = GetLocalFloat(stSpell.oCaster, AI_DELAY_BUFF_CASTING); + int bInstantSpell; + if(fDelay < 4.9) bInstantSpell = TRUE; + else fDelay = 6.0; + // Look for summons spells on All, Long durations and the whole party. + if((nBuffType == 1 || nBuffType == 3) && nTarget == 0 && GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster) == OBJECT_INVALID) + { + while(stSpell.nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + stSpell.nClass = GetClassByPosition(stSpell.nPosition, stSpell.oCaster); + if(AI_DEBUG) ai_Debug("0i_spells", "1684", "nClass: " + IntToString(stSpell.nClass)); + if(stSpell.nClass == CLASS_TYPE_INVALID) break; + if(AI_DEBUG) ai_Debug("0i_spells", "1686", "SpellCaster: " + Get2DAString("classes", "SpellCaster", stSpell.nClass)); + if(Get2DAString("classes", "SpellCaster", stSpell.nClass) == "1") + { + stSpell.nLevel = (GetLevelByPosition(stSpell.nPosition, stSpell.oCaster) + 1) / 2; + if(AI_DEBUG) ai_Debug("0i_spells", "1692", "MemorizesSpells: " + Get2DAString("classes", "MemorizesSpells", stSpell.nClass)); + if(Get2DAString("classes", "MemorizesSpells", stSpell.nClass) == "1") + { + stSpell.nMaxSlots = GetMemorizedSpellCountByLevel(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastMemorizedSummons(stSpell, fDelay, bInstantSpell)); + return; + } + else + { + stSpell.nMaxSlots = GetKnownSpellCount(stSpell.oCaster, stSpell.nClass, stSpell.nLevel); + AssignCommand(stSpell.oCaster, ai_ActionCastKnownSummons(stSpell, fDelay, bInstantSpell)); + return; + } + } + stSpell.nPosition++; + } + // Exit here; if we summoned a monster then it linked off of that spell + // cast to continue the action queue for all buff spell cast actions. + } + ai_CheckForBuffSpells(stSpell, fDelay, bInstantSpell); +} +int ai_CastSpontaneousCure(object oCreature, object oTarget, object oPC) +{ + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) return FALSE; + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_SPONTANEOUS_CURE)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_spells", "1643", GetName(oCreature) + " is looking to cast a spontaneous cure spell."); + if(!GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) return FALSE; + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 4; + int nSpellSave, nSlotSave, nLevelSave = 5; + string sSpellName; + while(nLevel > -1) + { + // We check CLASS_TYPE_CLERIC as thats the only class with spontaneous cure spells. + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, CLASS_TYPE_CLERIC, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1653", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1656", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevel, nSlot)) + { + if(nLevel == 4) nSpell = SPELL_CURE_CRITICAL_WOUNDS; + else if(nLevel == 3) nSpell = SPELL_CURE_SERIOUS_WOUNDS; + else if(nLevel == 2) nSpell = SPELL_CURE_MODERATE_WOUNDS; + else if(nLevel == 1) nSpell = SPELL_CURE_LIGHT_WOUNDS; + else nSpell = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1665", "nSpell: " + IntToString(nSpell)); + if(nSpell) + { + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + SetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevel, nSlot, FALSE); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oPC); + if(AI_DEBUG) ai_Debug("0i_spells", "1673", GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + "."); + ActionCastSpellAtObject(nSpell, oTarget, 255, TRUE); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave) + { + nSpellSave = nSpell; + nLevelSave = nLevel; + nSlotSave = nSlot; + } + } + } + nSlot++; + } + nLevel--; + } + // Did we find a cure spell? If we did then use it. + if(nSpellSave) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1693", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + SetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevelSave, nSlotSave, FALSE); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpellSave))); + ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oPC); + ActionCastSpellAtObject(nSpellSave, oTarget, 255, TRUE); + return TRUE; + } + return FALSE; +} +int ai_CastMemorizedInflict(object oCreature, object oTarget, object oPC, int nClass) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1993", GetName(oCreature) + " is looking to cast a memorized inflict spell."); + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 9; + int nClassSave, nSlotSave, nLevelSave = 10; + while(nLevel > -1) + { + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "2001", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + if(AI_DEBUG) ai_Debug("0i_spells", "2004", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) + { + nSpell = GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot); + if(ai_ShouldWeCastThisInflictSpell(nSpell, nDamage)) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_spells", "2012", GetName(oCreature) + " has cast " + sSpellName + " on " + GetName(oTarget) + "."); + ai_CastMemorizedSpell(oCreature, nClass, nLevel, nSlot, oTarget, FALSE, oPC); + return TRUE; + } + // Save the lowest level inflict spell as we might need to cast it. + else if(nLevel < nLevelSave && (nSpell > 430 && nSpell < 436)) + { + nClassSave = nClass; + nLevelSave = nLevel; + nSlotSave = nSlot; + } + } + nSlot++; + } + nLevel--; + } + // Did we find a cure spell? If we did then use it. + if(nLevelSave < 10) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1740", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + ai_CastMemorizedSpell(oCreature, nClassSave, nLevelSave, nSlotSave, oTarget, FALSE, oPC); + return TRUE; + } + return FALSE; +} +int ai_CastKnownInflict(object oCreature, object oTarget, object oPC, int nClass) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "2041", GetName(oCreature) + " is looking to cast a known inflict spell."); + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 9; + int nClassSave, nSpellSave, nLevelSave = 10; + while(nLevel > -1) + { + nMaxSlots = GetKnownSpellCount(oCreature, nClass, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "2049", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + nSpell = GetKnownSpellId(oCreature, nClass, nLevel, nSlot); + if(AI_DEBUG) ai_Debug("0i_spells", "2053", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetSpellUsesLeft(oCreature, nClass, nSpell))); + if(GetSpellUsesLeft(oCreature, nClass, nSpell)) + { + if(ai_ShouldWeCastThisInflictSpell(nSpell, nDamage)) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_spells", "2060", GetName(oCreature) + " has cast " + sSpellName + " on " + GetName(oTarget) + "."); + ai_CastKnownSpell(oCreature, nClass, nSpell, oTarget, FALSE, oPC); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave && (nSpell > 430 && nSpell < 436)) + { + nClassSave = nClass; + nLevelSave = nLevel; + nSpellSave = nSpell; + } + } + nSlot++; + } + nLevel--; + } + return FALSE; + // Did we find a cure spell? If we did then use it. + if(nLevelSave < 10) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1781", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + ai_CastKnownSpell(oCreature, nClassSave, nSpellSave, oTarget, FALSE, oPC); + return TRUE; + } +} +int ai_CastMemorizedHealing(object oCreature, object oTarget, object oPC, int nClass) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1702", GetName(oCreature) + " is looking to cast a memorized cure spell."); + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 9; + int nClassSave, nSlotSave, nLevelSave = 10; + while(nLevel > -1) + { + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1710", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1713", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) + { + nSpell = GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot); + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_spells", "1721", GetName(oCreature) + " has cast " + sSpellName + " on " + GetName(oTarget) + "."); + ai_CastMemorizedSpell(oCreature, nClass, nLevel, nSlot, oTarget, FALSE, oPC); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave && (nSpell > 30 && nSpell < 36)) + { + nClassSave = nClass; + nLevelSave = nLevel; + nSlotSave = nSlot; + } + } + nSlot++; + } + nLevel--; + } + // Did we find a cure spell? If we did then use it. + if(nLevelSave < 10) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1740", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + ai_CastMemorizedSpell(oCreature, nClassSave, nLevelSave, nSlotSave, oTarget, FALSE, oPC); + return TRUE; + } + return FALSE; +} +int ai_CastKnownHealing(object oCreature, object oTarget, object oPC, int nClass) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1748", GetName(oCreature) + " is looking to cast a known cure spell."); + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + int nSpell, nSlot, nMaxSlots, nLevel = 9; + int nClassSave, nSpellSave, nLevelSave = 10; + while(nLevel > -1) + { + nMaxSlots = GetKnownSpellCount(oCreature, nClass, nLevel); + nSlot = 0; + if(AI_DEBUG) ai_Debug("0i_spells", "1756", "nLevel: " + IntToString(nLevel) + " nMaxSlots: " + IntToString(nMaxSlots)); + while(nSlot < nMaxSlots) + { + nSpell = GetKnownSpellId(oCreature, nClass, nLevel, nSlot); + if(AI_DEBUG) ai_Debug("0i_spells", "1760", "nSlot: " + IntToString(nSlot) + + " Spell Ready: " + IntToString(GetSpellUsesLeft(oCreature, nClass, nSpell))); + if(GetSpellUsesLeft(oCreature, nClass, nSpell)) + { + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_spells", "1767", GetName(oCreature) + " has cast " + sSpellName + " on " + GetName(oTarget) + "."); + ai_CastKnownSpell(oCreature, nClass, nSpell, oTarget, FALSE, oPC); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave && (nSpell > 30 && nSpell < 36)) + { + nClassSave = nClass; + nLevelSave = nLevel; + nSpellSave = nSpell; + } + } + nSlot++; + } + nLevel--; + } + return FALSE; + // Did we find a cure spell? If we did then use it. + if(nLevelSave < 10) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1781", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + ai_CastKnownSpell(oCreature, nClassSave, nSpellSave, oTarget, FALSE, oPC); + return TRUE; + } +} +int ai_ConcentrationCondition(object oCreature) +{ + int nType; + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)) + { + nType = GetEffectType(eEffect); + if(nType == EFFECT_TYPE_STUNNED || nType == EFFECT_TYPE_PARALYZE || + nType == EFFECT_TYPE_SLEEP || nType == EFFECT_TYPE_FRIGHTENED || + nType == EFFECT_TYPE_PETRIFY || nType == EFFECT_TYPE_CONFUSED || + nType == EFFECT_TYPE_DOMINATED || nType == EFFECT_TYPE_POLYMORPH) + { + return TRUE; + } + eEffect = GetNextEffect(oCreature); + } + return FALSE; +} +void ai_SpellConcentrationCheck(object oCaster = OBJECT_SELF) +{ + object oMaster = GetMaster(); + if(GetLocalInt(oCaster,"X2_L_CREATURE_NEEDS_CONCENTRATION")) + { + if(GetIsObjectValid(oMaster)) + { + int nAction = GetCurrentAction(oMaster); + // master doing anything that requires attention and breaks concentration + if(nAction == ACTION_DISABLETRAP || nAction == ACTION_TAUNT || + nAction == ACTION_PICKPOCKET || nAction ==ACTION_ATTACKOBJECT || + nAction == ACTION_COUNTERSPELL || nAction == ACTION_FLAGTRAP || + nAction == ACTION_CASTSPELL || nAction == ACTION_ITEMCASTSPELL) + { + SignalEvent(oCaster,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + else if(ai_ConcentrationCondition(oMaster)) + { + SignalEvent(oCaster,EventUserDefined(X2_EVENT_CONCENTRATION_BROKEN)); + } + } + } +} +int ai_CastInMelee(object oCreature, int nSpell, int nInMelee) +{ + // If this is a spell and we are in melee. + if(nInMelee > 0 && !GetHasFeat(FEAT_EPIC_IMPROVED_COMBAT_CASTING, oCreature)) + { + // Using DC 19 so we will use with up to a 50% failure. + int nSpellLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + int nDC = AI_DEFENSIVE_CASTING_DC + nSpellLevel; + int nRoll = Random(AI_DEFENSIVE_CASTING_DIE) + 1; + int nConcentration = GetSkillRank(SKILL_CONCENTRATION, oCreature); + if(GetHasFeat(FEAT_COMBAT_CASTING, oCreature)) nConcentration += 4; + if(AI_DEBUG) ai_Debug("0i_spells", "1081", "Use Defensive Casting? nDC: " + IntToString(nDC) + " FEAT_COMBAT_CASTING: " + + IntToString(GetHasFeat(FEAT_COMBAT_CASTING, oCreature)) + + " nConcentration: " + IntToString(nConcentration) + " + nRoll: " + IntToString(nRoll)); + if(nConcentration + nRoll > nDC) + { + if(AI_DEBUG) ai_Debug("0i_spells", "1086", GetName(oCreature) + " is casting defensively!"); + SetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST, TRUE); + } + // Defensive casting is a bad idea so maybe casting anyspell is a bad idea. + else + { + object oMelee = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(GetIsObjectValid(oMelee)) + { + nRoll = Random(AI_CASTING_IN_MELEE_ROLL) + 1; + nDC = AI_CASTING_IN_MELEE_DC + nSpellLevel + nInMelee * ai_GetCreatureAttackBonus(oMelee); + if(AI_DEBUG) ai_Debug("0i_spells", "1097", "Cast anyway: nConcentration: " + IntToString(nConcentration) + + " nRoll: " + IntToString(nRoll) + " nDC: " + IntToString(nDC) + + " oMelee: " + GetName(oMelee)); + if(nConcentration + nRoll > nDC) return TRUE; + if(AI_DEBUG) ai_Debug("0i_spells", "1101", GetName(oCreature) + " is not casting in melee against " + GetName(oMelee)); + return FALSE; + } + } + } + // We don't need to cast defensively so lets make sure it's off. + else if(GetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST)) + { + SetActionMode(oCreature, ACTION_MODE_DEFENSIVE_CAST, FALSE); + } + return TRUE; +} +float ai_GetOffensiveSpellSearchRange(object oCreature, int nSpell) +{ + // Search the spell range + the distance to the closest enemy - 7.5 meters). + // This will keep the caster from running up on an enemy to cast. + // But allow them to move up some if needed. + float fRange = ai_GetSpellRange(nSpell); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fEnemyDistance = GetDistanceBetween(oCreature, oNearestEnemy); + // Spell range is less than the nearest enemy. Restrict based on nearest enemy. + // Spell range is less than the nearestenemy. Check enemy action then adjust. + if(fRange < fEnemyDistance) + { + // We check this because if the enemy is moving or has not started acting + // then we don't want to move up on them as they might move towards us! + int nAction = GetCurrentAction(oNearestEnemy); + if(AI_DEBUG) ai_Debug("0i_spells", "2228", GetName(oNearestEnemy) + " current action: " + IntToString(nAction)); + if(nAction != ACTION_MOVETOPOINT || nAction != ACTION_ITEMCASTSPELL || + nAction != ACTION_INVALID || nAction != ACTION_USEOBJECT || + nAction != ACTION_RANDOMWALK) fRange = fEnemyDistance + (fRange - 7.5); + } + if(fRange > AI_RANGE_BATTLEFIELD) return AI_RANGE_BATTLEFIELD; + else if(fRange < 0.1f) return 0.1f; + return fRange; +} +int ai_ShouldWeCastThisInflictSpell(int nSpell, int nDamage) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "2239", "nSpell: " + IntToString(nSpell) + " nDamage: " + + IntToString(nDamage)); + if(nSpell == SPELL_HEAL && nDamage > 50) return TRUE; + else if(nSpell == SPELL_INFLICT_CRITICAL_WOUNDS && nDamage > 31) return TRUE; + else if(nSpell == SPELL_INFLICT_SERIOUS_WOUNDS && nDamage > 23) return TRUE; + else if(nSpell == SPELL_INFLICT_MODERATE_WOUNDS && nDamage > 15) return TRUE; + else if(nSpell == SPELL_INFLICT_LIGHT_WOUNDS && nDamage > 6) return TRUE; + else if(nSpell == SPELL_INFLICT_MINOR_WOUNDS) return TRUE; + return FALSE; +} +int ai_ShouldWeCastThisCureSpell(int nSpell, int nDamage) +{ + if(AI_DEBUG) ai_Debug("0i_spells", "1127", "nSpell: " + IntToString(nSpell) + " nDamage: " + + IntToString(nDamage)); + if(nSpell == SPELL_HEAL && nDamage > 50) return TRUE; + else if(nSpell == SPELL_CURE_CRITICAL_WOUNDS && nDamage > 31) return TRUE; + else if(nSpell == SPELL_CURE_SERIOUS_WOUNDS && nDamage > 23) return TRUE; + else if(nSpell == SPELL_CURE_MODERATE_WOUNDS && nDamage > 15) return TRUE; + else if(nSpell == SPELL_CURE_LIGHT_WOUNDS && nDamage > 6) return TRUE; + else if(nSpell == SPELL_CURE_MINOR_WOUNDS) return TRUE; + return FALSE; +} +void ai_CastWidgetSpell(object oPC, object oAssociate, object oTarget, location lLocation) +{ + int nIndex = GetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + DeleteLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jSpell = JsonArrayGet(jWidget, nIndex); + int nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + int nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + int nMetaMagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + int nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + //SendMessageToPC(oPC, "nSpell: " + IntToString(nSpell) + + // " oTarget: " + GetName(oTarget) + + // " nMetaMagic: " + IntToString(nMetaMagic) + + // " nDomain: " + IntToString(nDomain)); + if(GetCurrentAction(oAssociate) != ACTION_CASTSPELL) AssignCommand(oAssociate, ai_ClearCreatureActions(FALSE)); + if(!GetIsObjectValid(oTarget)) + { + AssignCommand(oAssociate, ActionCastSpellAtLocation(nSpell, lLocation, nMetaMagic, FALSE, 0, FALSE, -1, FALSE, nDomain)); + } + else AssignCommand(oAssociate, ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain)); + +} +void ai_UseWidgetFeat(object oPC, object oAssociate, object oTarget, location lLocation) +{ + int nIndex = GetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + DeleteLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jFeat = JsonArrayGet(jWidget, nIndex); + int nFeat = JsonGetInt(JsonArrayGet(jFeat, 5)); + int nLevel = JsonGetInt(JsonArrayGet(jFeat, 2)); + // We use nLevel at -1 to denote this is a feat with a subradial spell. + int nSubSpell; + if(nLevel == -1) nSubSpell = JsonGetInt(JsonArrayGet(jFeat, 0)); + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(FALSE)); + //SendMessageToPC(oPC, "0i_spells, 2104, nFeat: " + IntToString(nFeat) + " oTarget: " + GetName(oTarget)); + if(!GetIsObjectValid(oTarget)) + { + AssignCommand(oAssociate, ActionUseFeat(nFeat, OBJECT_INVALID, nSubSpell, lLocation)); + } + else AssignCommand(oAssociate, ActionUseFeat(nFeat, oTarget, nSubSpell)); +} +void ai_UseWidgetItem(object oPC, object oAssociate, object oTarget, location lLocation) +{ + int nIndex = GetLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + DeleteLocalInt(oAssociate, "AI_WIDGET_SPELL_INDEX"); + string sAssociateType = ai_GetAssociateType(oPC, oAssociate); + json jAIData = ai_GetAssociateDbJson(oPC, sAssociateType, "aidata"); + json jSpells = JsonArrayGet(jAIData, 10); + json jWidget = JsonArrayGet(jSpells, 2); + json jItem = JsonArrayGet(jWidget, nIndex); + int nSpell = JsonGetInt(JsonArrayGet(jItem, 0)); + int nIprpSubType = JsonGetInt(JsonArrayGet(jItem, 4)); + object oItem = GetObjectByUUID(JsonGetString(JsonArrayGet(jItem, 5))); + itemproperty ipProperty; + if(ai_GetIsInCombat(oAssociate)) AssignCommand(oAssociate, ai_ClearCreatureActions(FALSE)); + if(nSpell == SPELL_HEALINGKIT) + { + ipProperty = GetFirstItemProperty(oItem); + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_HEALERS_KIT) + { + if(ai_GetIsCharacter(oPC)) ai_SendMessages(GetName(oAssociate) + " uses " + GetName(oItem) + " on " + GetName(oTarget) + ".", AI_COLOR_YELLOW, oPC); + AssignCommand(oAssociate, ActionUseItemOnObject(oItem, ipProperty, oTarget)); + return; + } + } + ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(nIprpSubType == GetItemPropertySubType(ipProperty)) break; + ipProperty = GetNextItemProperty(oItem); + } + if(GetIsObjectValid(oTarget)) + { + AssignCommand(oAssociate, ActionUseItemOnObject(oItem, ipProperty, oTarget)); + } + else AssignCommand(oAssociate, ActionUseItemAtLocation(oItem, ipProperty, lLocation)); +} diff --git a/_module/nss/0i_states_cond.nss b/_module/nss/0i_states_cond.nss new file mode 100644 index 0000000..b1a71d3 --- /dev/null +++ b/_module/nss/0i_states_cond.nss @@ -0,0 +1,427 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_states_cond +////////////////////////////////////////////////////////////////////////////////////////////////////// + Include scripts that handle states and conditions for combat. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +#include "0i_messages" +#include "0i_time" +//#include "X0_I0_COMBAT" +// Wrapper for ClearAllActions - we have added extra vars to be cleared as well. +// Note this references OBJECT_SELF! +void ai_ClearCreatureActions(int bClearCombatState = FALSE); +// Used in combat to keep track of the creatures last rounds action. +// One use is to make sure we don't use the same spell on the next round. +// 0+ is the spell that was cast, other actions use AI_LAST_ACTION_* constants. +void ai_SetLastAction(object oCreature, int nAction = AI_LAST_ACTION_NONE); +// Returns TRUE if oCreatures last rounds action is equal to nAction. +// 0+ is the spell that was cast, other actions use AI_LAST_ACTION_* constants. +int ai_CompareLastAction(object oCreature, int nAction); +// Sets the correct listen checks on oCreature. +void ai_SetListeningPatterns(object oCreature); +// Returns TRUE if oCreature is an elemental, undead, or golem i.e. non-living. +int ai_IsNonliving(int nRacialType); +// Returns TRUE if oCreature is in combat. +int ai_GetIsInCombat(object oCreature); +// Sets the time that this oCreature's current combat round started. +// Using action based combat rounds has an unfortunate side effect: +// Once you attack in melee you will continue to attack in melee do to hardcoded +// logic. This will "PUSH" your end of round back until it decides to stop attacking! +// We avoid this by setting the time and if we check for combat and 6 seconds has +// passed then we assume the current round is over, ClearAllActions, and start the next round. +void ai_SetCombatRound(object oCreature); +// Clears the current combat round timer by deleting the value. +void ai_EndCombatRound(object oCreature); +// Returns TRUE if AI_COMBAT_ROUND_IN_SECONDS has not passed since ai_SetCombatRound. +// If it returns FALSE then it will clear the current combat round timer. +int ai_IsInCombatRound(object oCreature, int nCombatRound = AI_COMBAT_ROUND_IN_SECONDS); +// Returns TRUE if oCreature is busy. +// This checks various actions to see if oCreature is busy; +// in combat, busy mode, Actions: attacking, casting spell, counterspelling, +// disabling trap, item casting spell, opening lock, resting, setting trap. +int ai_GetIsBusy(object oCreature); +// Returns a value based on the disabling effect. +// Dead = 1, Bleeding = 2, Dying = 2, Stunned = 29, Confused = 24, Paralyzed = 27 +// Frightened 25, Turned = 35, Petrified = 79, Charmed = 23, Disappearappear = 75, +// Time Stop = 66, Dazed = 28, Sleep = 30. +// Returns FALSE if not Disabled. +int ai_Disabled(object oCreature); +// Set one of the AI_MODE_* bitwise constants on oAssociate to bOn. +void ai_SetAIMode(object oAssociate, int nBit, int bOn = TRUE); +// Return if nMode is set on oAssociate. Uses the AI_MODE_* bitwise constants. +int ai_GetAIMode(object oAssociate, int nBit); +// Set one of the AI_MAGIC_* bitwise constants on oAssociate to bOn. +void ai_SetMagicMode(object oAssociate, int nBit, int bOn = TRUE); +// Return if nMode is set on oAssociate. Uses the AI_MAGIC_* bitwise constants. +int ai_GetMagicMode(object oAssociate, int nBit); +// This is based off of the PC's settings for an associate and other creatures use a default. +// Set one of the AI_LOOT_* bitwise constants on oAssociate to bOn. +void ai_SetLootFilter(object oAssociate, int nBit, int bOn = TRUE); +// Return if nMode is set on oAssociate. Uses the AI_LOOT_* bitwise constants. +int ai_GetLootFilter(object oAssociate, int nBit); +// Set one of the AI_IP_* bitwise constants on oCreature to bOn. +void ai_SetItemProperty(object oCreature, string sVarname, int nBit, int bOn = TRUE); +// Return if nMode is set on oCreature. Uses the AI_IP_* bitwise constants. +int ai_GetItemProperty(object oCreature, string sVarname, int nBit); +// Returns the number of hitpoints a creature must have to not be healed. +// This is based off of the PC's settings for an associate and other creatures use a default. +int ai_GetHealersHpLimit(object oCreature, int bInCombat = TRUE); +// Returns TRUE if nCondition is within nCurrentConditions. +// nCurrentConditions is setup in ai_GetNegativeConditions. +int ai_GetHasNegativeCondition(int nCondition, int nCurrentConditions); +// Returns an integer with bitwise flags set that represent the current negative +// conditions on oCreature. ai_GetHasNegativeCondition uses this function. +int ai_GetNegativeConditions(object oCreature); +// Returns TRUE if oObject is in the line of sight of oCreature. +// If the creature is close LineOfSight doesn't work well. +int ai_GetIsInLineOfSight(object oCreature, object oObject); +// Add the specified condition flag to the behavior state of the caller +void ai_SetBehaviorState(int nCondition, int bValid = TRUE); +// Returns TRUE if the specified behavior flag is set on the caller +int ai_GetBehaviorState(int nCondition); +// Highlights the current mode for the widget passed. +void ai_HighlightWidgetMode(object oPC, object oAssociate, int nToken); +// Checks to see if the party scale is correctly adjusted. +void ai_CheckXPPartyScale(object oCreature); + +void ai_ClearCreatureActions(int bClearCombatState = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_states_cond", "89", GetName(OBJECT_SELF) + " is clearing actions (" + + IntToString(bClearCombatState) + ")!"); + DeleteLocalInt(OBJECT_SELF, AI_CURRENT_ACTION_MODE); + ClearAllActions(bClearCombatState); +} +void ai_SetLastAction(object oCreature, int nAction = AI_LAST_ACTION_NONE) +{ + SetLocalInt(oCreature, sLastActionVarname, nAction); + SetLocalInt(oCreature, sLastActionTimeVarname, ai_GetCurrentTimeStamp()); +} +int ai_CompareLastAction(object oCreature, int nAction) +{ + // Are we checking to see if we cast a spell? + if(nAction == AI_LAST_ACTION_CAST_SPELL && + GetLocalInt(oCreature, sLastActionVarname) > -1) return TRUE; + // Check other last actions. + return (nAction == GetLocalInt(oCreature, sLastActionVarname)); +} +void ai_SetListeningPatterns(object oCreature) +{ + SetListening(oCreature, TRUE); + SetListenPattern(oCreature, AI_I_SEE_AN_ENEMY, AI_ALLY_SEES_AN_ENEMY); + SetListenPattern(oCreature, AI_I_HEARD_AN_ENEMY, AI_ALLY_HEARD_AN_ENEMY); + SetListenPattern(oCreature, AI_ATKED_BY_WEAPON, AI_ALLY_ATKED_BY_WEAPON); + SetListenPattern(oCreature, AI_ATKED_BY_SPELL, AI_ALLY_ATKED_BY_SPELL); + SetListenPattern(oCreature, AI_I_AM_WOUNDED, AI_ALLY_IS_WOUNDED); + SetListenPattern(oCreature, AI_I_AM_DEAD, AI_ALLY_IS_DEAD); + SetListenPattern(oCreature, AI_I_AM_DISEASED, AI_ALLY_IS_DISEASED); + SetListenPattern(oCreature, AI_I_AM_POISONED, AI_ALLY_IS_POISONED); + SetListenPattern(oCreature, AI_I_AM_WEAK, AI_ALLY_IS_WEAK); +} +int ai_IsNonliving(int nRacialType) +{ + switch(nRacialType) + { + case RACIAL_TYPE_CONSTRUCT: + case RACIAL_TYPE_ELEMENTAL: + case RACIAL_TYPE_UNDEAD: return TRUE; + } + return FALSE; +} +int ai_GetIsInCombat(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_states_cond", "110", GetName(oCreature) + " is in Combat: Enemy Numbers = " + IntToString(GetLocalInt(oCreature, AI_ENEMY_NUMBERS))); + + return GetLocalInt(oCreature, AI_ENEMY_NUMBERS); +} +void ai_SetCombatRound(object oCreature) +{ + SetLocalInt(oCreature, "AI_COMBAT_ROUND_START", ai_GetCurrentTimeStamp()); + if(AI_DEBUG) ai_Debug("0i_states_cond", "116", " ===============> " + GetName(oCreature) + " ROUND START:" + IntToString(ai_GetCurrentTimeStamp()) + " <==============="); +} +void ai_EndCombatRound(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_states_cond", "120", " ===============> " + GetName(oCreature) + " ROUND END:" + IntToString(ai_GetCurrentTimeStamp()) + " <==============="); + DeleteLocalInt(oCreature, "AI_COMBAT_ROUND_START"); +} +int ai_IsInCombatRound(object oCreature, int nCombatRound = AI_COMBAT_ROUND_IN_SECONDS) +{ + int nCombatRoundStart = GetLocalInt(oCreature, "AI_COMBAT_ROUND_START"); + if(AI_DEBUG) ai_Debug("0i_states_cond", "148", " nCombatRoundStart: " + IntToString(nCombatRoundStart)); + if(!nCombatRoundStart) return FALSE; + // New combat round calculator. If 6 seconds has passed then we are on a new round! + int nTime = ai_GetCurrentTimeStamp(); + int nCombatRoundTime = nTime - nCombatRoundStart; + if(AI_DEBUG) ai_Debug("0i_states_cond", "153", " nTime + (nTime - Round Start): " + IntToString(nTime) + + "(" + IntToString(nTime - nCombatRoundStart) + ")"); + if(nCombatRoundTime < nCombatRound) return TRUE; + ai_EndCombatRound(oCreature); + return FALSE; +} +// Testing to see if we can fix some delaying in combat. +int ai_GetIsBusy(object oCreature) +{ + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("0i_states_cond", "140", GetName(oCreature) + " Get is Busy, action: " + + IntToString(nAction)); + switch(nAction) + { + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_OPENLOCK : + case ACTION_REST : + case ACTION_DISABLETRAP : + case ACTION_ATTACKOBJECT : + case ACTION_COUNTERSPELL : + case ACTION_SETTRAP : return TRUE; + case ACTION_WAIT : + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("0i_states_cond", "153", "nCombatWait: " + IntToString(nCombatWait) + + " AI_AM_I_SEARCHING: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return TRUE; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + else if(GetLocalInt(oCreature, AI_AM_I_SEARCHING)) DeleteLocalInt(oCreature, AI_AM_I_SEARCHING); + return FALSE; + } + case ACTION_MOVETOPOINT : + { + return ai_GetIsInCombat(oCreature); + } + } + return FALSE; +} +int ai_Disabled(object oCreature) +{ + if(GetIsDead(oCreature)) return 1; + // Check for effects. + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid(eEffect)) + { + switch(GetEffectType(eEffect, TRUE)) + { + WriteTimestampedLogEntry("Effect Type: " + IntToString(GetEffectType(eEffect, TRUE))); + case EFFECT_TYPE_DOMINATED : + case EFFECT_TYPE_CUTSCENE_DOMINATED : + { + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); + return FALSE; + } + case EFFECT_TYPE_STUNNED : + case EFFECT_TYPE_DAZED : + case EFFECT_TYPE_SLEEP : + case EFFECT_TYPE_CONFUSED : + case EFFECT_TYPE_FRIGHTENED : + case EFFECT_TYPE_PARALYZE : + case EFFECT_TYPE_CUTSCENE_PARALYZE : + case EFFECT_TYPE_TURNED : + case EFFECT_TYPE_CHARMED : + case EFFECT_TYPE_PETRIFY : + case EFFECT_TYPE_TIMESTOP : + { + if(AI_DEBUG) ai_Debug("0i_stats_cond", "195", GetName(oCreature) + " is disabled(" + + IntToString(GetEffectType(eEffect)) + ")"); + return GetEffectType(eEffect); + } + } + eEffect = GetNextEffect(oCreature); + } + // Not Commandable is basically disabled as far as the AI is concerned. + if(!GetCommandable(oCreature)) + { + if(AI_DEBUG) ai_Debug("0i_stats_cond", "213", GetName(oCreature) + " is disabled(Not Commandable)!"); + return EFFECT_TYPE_PARALYZE; + } + if(AI_DEBUG) ai_Debug("0i_states_cond", "202", GetName(oCreature) + " is not disabled."); + return FALSE; +} +void ai_SetAIMode(object oAssociate, int nBit, int bOn = TRUE) +{ + int nAIModes = GetLocalInt(oAssociate, sAIModeVarname); + if(bOn) nAIModes = nAIModes | nBit; + else nAIModes = nAIModes & ~nBit; + SetLocalInt(oAssociate, sAIModeVarname, nAIModes); + // Set widget to show the mode they are in. + +} +int ai_GetAIMode(object oAssociate, int nBit) +{ + if(GetLocalInt(oAssociate, sAIModeVarname) & nBit) return TRUE; + return FALSE; +} +void ai_SetMagicMode(object oAssociate, int nBit, int bOn = TRUE) +{ + int nMagicModes = GetLocalInt(oAssociate, sMagicModeVarname); + if(bOn) nMagicModes = nMagicModes | nBit; + else nMagicModes = nMagicModes & ~nBit; + SetLocalInt(oAssociate, sMagicModeVarname, nMagicModes); +} +int ai_GetMagicMode(object oAssociate, int nBit) +{ + if(GetLocalInt(oAssociate, sMagicModeVarname) & nBit) return TRUE; + return FALSE; +} +void ai_SetLootFilter(object oAssociate, int nLootBit, int bOn = TRUE) +{ + int nLootFilter = GetLocalInt(oAssociate, sLootFilterVarname); + if(bOn) nLootFilter = nLootFilter | nLootBit; + else nLootFilter = nLootFilter & ~nLootBit; + SetLocalInt(oAssociate, sLootFilterVarname, nLootFilter); +} +int ai_GetLootFilter(object oAssociate, int nBit) +{ + if(GetLocalInt(oAssociate, sLootFilterVarname) & nBit) return TRUE; + return FALSE; +} +void ai_SetItemProperty(object oCreature, string sVarname, int nBit, int bOn = TRUE) +{ + int nItemProperties = GetLocalInt(oCreature, sVarname); + if(bOn) nItemProperties = nItemProperties | nBit; + else nItemProperties = nItemProperties & ~nBit; + SetLocalInt(oCreature, sVarname, nItemProperties); +} +int ai_GetItemProperty(object oCreature, string sVarname, int nBit) +{ + if(GetLocalInt(oCreature, sVarname) & nBit) return TRUE; + return FALSE; +} +int ai_GetHealersHpLimit(object oCreature, int bInCombat = TRUE) +{ + if(bInCombat) return GetLocalInt(oCreature, AI_HEAL_IN_COMBAT_LIMIT); + else return GetLocalInt(oCreature, AI_HEAL_OUT_OF_COMBAT_LIMIT); +} +int ai_GetHasNegativeCondition(int nCondition, int nCurrentConditions) +{ + return (nCurrentConditions & nCondition); +} +int ai_GetNegativeConditions(object oCreature) +{ + int nCondition, nEffectType; + effect eEffect = GetFirstEffect(oCreature); + while(GetIsEffectValid (eEffect)) + { + // Rage and maybe other abilities might come from the oCreature! + if(GetEffectCreator(eEffect) != oCreature) + { + nEffectType = GetEffectType(eEffect); + switch(nEffectType) + { + case EFFECT_TYPE_DISEASE: nCondition = nCondition | AI_CONDITION_DISEASE; break; + case EFFECT_TYPE_POISON: nCondition = nCondition | AI_CONDITION_POISON; break; + case EFFECT_TYPE_CURSE: nCondition = nCondition | AI_CONDITION_CURSE; break; + case EFFECT_TYPE_BLINDNESS: + case EFFECT_TYPE_DEAF: nCondition = nCondition | AI_CONDITION_BLINDDEAF; break; + case EFFECT_TYPE_ABILITY_DECREASE: nCondition = nCondition | AI_CONDITION_ABILITY_DRAIN; break; + case EFFECT_TYPE_NEGATIVELEVEL: nCondition = nCondition | AI_CONDITION_LEVEL_DRAIN; break; + case EFFECT_TYPE_AC_DECREASE: nCondition = nCondition | AI_CONDITION_AC_DECREASE; break; + case EFFECT_TYPE_ATTACK_DECREASE: nCondition = nCondition | AI_CONDITION_ATK_DECREASE; break; + case EFFECT_TYPE_CHARMED: nCondition = nCondition | AI_CONDITION_CHARMED; break; + case EFFECT_TYPE_CONFUSED: nCondition = nCondition | AI_CONDITION_CONFUSED; break; + case EFFECT_TYPE_DAZED: nCondition = nCondition | AI_CONDITION_DAZED; break; + case EFFECT_TYPE_DAMAGE_DECREASE: nCondition = nCondition | AI_CONDITION_DMG_DECREASE; break; + case EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE: nCondition = nCondition | AI_CONDITION_DMG_I_DECREASE; break; + case EFFECT_TYPE_DOMINATED: nCondition = nCondition | AI_CONDITION_DOMINATED; break; + case EFFECT_TYPE_FRIGHTENED: nCondition = nCondition | AI_CONDITION_FRIGHTENED; break; + case EFFECT_TYPE_PARALYZE: nCondition = nCondition | AI_CONDITION_PARALYZE; break; + case EFFECT_TYPE_SAVING_THROW_DECREASE: nCondition = nCondition | AI_CONDITION_SAVE_DECREASE; break; + case EFFECT_TYPE_SKILL_DECREASE: nCondition = nCondition | AI_CONDITION_SKILL_DECREASE; break; + case EFFECT_TYPE_SLOW: nCondition = nCondition | AI_CONDITION_SLOW; break; + case EFFECT_TYPE_SPELL_RESISTANCE_DECREASE: nCondition = nCondition | AI_CONDITION_SR_DECREASE; break; + case EFFECT_TYPE_STUNNED: nCondition = nCondition | AI_CONDITION_STUNNED; break; + } + } + eEffect = GetNextEffect(oCreature); + } + return nCondition; +} +int ai_GetIsInLineOfSight(object oCreature, object oObject) +{ + // Creatures can block the line of sight so when close we shouldn't check. + if(GetDistanceBetween(oObject, oCreature) <= AI_RANGE_MELEE) return TRUE; + return LineOfSightObject(oCreature, oObject); +} +void ai_SetBehaviorState(int nCondition, int bValid = TRUE) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER"); + if(bValid) + { + nPlot = nPlot | nCondition; + SetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER", nPlot); + } + else + { + nPlot = nPlot & ~nCondition; + SetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER", nPlot); + } +} +int ai_GetBehaviorState(int nCondition) +{ + int nPlot = GetLocalInt(OBJECT_SELF, "NW_BEHAVIOR_MASTER"); + if(nPlot & nCondition) return TRUE; + return FALSE; +} +void ai_HighlightWidgetMode(object oPC, object oAssociate, int nToken) +{ + if(oPC == oAssociate) return; + int bBool; + bBool = ai_GetAIMode(oAssociate,AI_MODE_DEFEND_MASTER); + NuiSetBind(oPC, nToken, "btn_cmd_guard_encouraged", JsonBool(bBool)); + bBool = ai_GetAIMode(oAssociate,AI_MODE_STAND_GROUND); + NuiSetBind(oPC, nToken, "btn_cmd_hold_encouraged", JsonBool(bBool)); + bBool = ai_GetAIMode(oAssociate,AI_MODE_FOLLOW); + NuiSetBind(oPC, nToken, "btn_cmd_follow_encouraged", JsonBool(bBool)); + if(!ai_GetAIMode(oAssociate, AI_MODE_DEFEND_MASTER) && + !ai_GetAIMode(oAssociate, AI_MODE_STAND_GROUND) && + !ai_GetAIMode(oAssociate, AI_MODE_FOLLOW)) bBool = TRUE; + else bBool = FALSE; + NuiSetBind(oPC, nToken, "btn_cmd_attack_encouraged", JsonBool(bBool)); +} +void ai_CheckXPPartyScale(object oCreature) +{ + object oModule = GetModule(); + if(!GetLocalInt(oModule, AI_RULE_PARTY_SCALE)) return; + object oMaster; + if(!ai_GetIsCharacter(oCreature)) + { + oMaster = GetMaster(oCreature); + while(oMaster != OBJECT_INVALID) + { + if(ai_GetIsCharacter(oMaster)) break; + oMaster = GetMaster(oMaster); + } + if(oMaster == OBJECT_INVALID) return; + } + else oMaster = oCreature; + float fDefaultXPScale = IntToFloat(GetLocalInt(oModule, AI_BASE_PARTY_SCALE_XP)); + float fPartySize = 4.0; + int nAssociateType, nHenchman, nHenchAssociate; + object oHenchman; + for(nAssociateType = 1; nAssociateType <= 5; nAssociateType++) + { + if(nAssociateType == ASSOCIATE_TYPE_HENCHMAN) + { + for(nHenchman = 1; nHenchman <= AI_MAX_HENCHMAN; nHenchman++) + { + oHenchman = GetAssociate(nAssociateType, oMaster, nHenchman); + if(oHenchman != OBJECT_INVALID) + { + fPartySize += 1.0; + for(nHenchAssociate = 2; nHenchAssociate <= 5; nHenchAssociate++) + { + if(GetAssociate(nHenchAssociate, oHenchman, 1) != OBJECT_INVALID) fPartySize += 1.0; + } + } + } + } + else if(GetAssociate(nAssociateType, oMaster, 1) != OBJECT_INVALID) fPartySize += 1.0; + } + int nXPScale = FloatToInt(fPartySize / 4.0 * fDefaultXPScale); + //SendMessageToPC(oMaster, GetName(oMaster) + " nXPScale = (3 + fPartySize / 4.0 * fDefaultXPScale)" + + // IntToString(nXPScale) + " = (" + FloatToString(fPartySize, 0, 1) + " / 4.0 * " + + // FloatToString(fDefaultXPScale, 0, 1) + ")"); + SetModuleXPScale(nXPScale); +} + diff --git a/_module/nss/0i_talents.nss b/_module/nss/0i_talents.nss new file mode 100644 index 0000000..693003f --- /dev/null +++ b/_module/nss/0i_talents.nss @@ -0,0 +1,4151 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0i_talents + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Fuctions to use a category of skills, feats, spells, or items. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_combat" +// ***************************************************************************** +// ************************* Try * Defensive Talents *************************** +// ***************************************************************************** +// These functions try to find and use a specific set of talents intelligently. + +// Returns TRUE if oCreature uses a healing talent on oTarge. +// nInMelee is the number of enemies the caller is in melee with. +// If oTarget is set then they will heal that target if they need it. +// Otherwise checks all allies to see who we should heal based on the talent. +int ai_TryHealingTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a cure condition talent on an ally or self. +int ai_TryCureConditionTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a defensive talent. +// Checks for a Defensive talent(Protection, Enhancement, or Summons). +// Randomizes the order to mix up spells in combat. +// if oTarget is set then the defensive talent will be cast on them or OBJECT_SELF. +int ai_TryDefensiveTalents(object oCreature, int nInMelee, int nMaxLevel, int nRound = 0, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a defensive talent. +// Checks the enemy faction for most powerful class and picks a buff based on it. +//int ai_TryAdvancedBuffOnSelf(object oCreature, int nInMelee); +// Set any auras this oCreature has instantly. +// This can be done in the OnSpawn script, heart beat, or Perception. +void ai_SetAura(object oCreature); + +// ***************************************************************************** +// ************************ Try Physical Attack Talents ************************ +// ***************************************************************************** +// These functions try to find and use melee attack talents intelligently. + +// Wrapper for ActionAttack, oCreature uses nAction (attack) on oTarget. +// nInMelee is only used in AI_LAST_ACTION_RANGED_ATK actions. +// bPassive TRUE oCreature will not move while attacking. +// nActionMode, pass the action mode if one is being used. +void ai_ActionAttack(object oCreature, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE, int nActionMode = 0); +// Returns TRUE if oCreature uses a dragons breath talent +// Check for dragon's attacks under TALENT_CATEGORY_DRAGONS_BREATH(19). +// nRound must be supplied so we can keep track of the breath uses. +int ai_TryDragonBreathAttack(object oCreature, int nRound, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a dragons wing attacks. +// Checks to see if a dragon can use its wings on a nearby enemy. +// Checks the right side and then the left side to see if it can attack. +int ai_TryWingAttacks(object oCreature); +// Returns TRUE if oCreature uses a dragons tail slap. +// Looks behind the dragon to see if it can use it's tail slap on an enemy. +int ai_TryTailSlap(object oCreature); +// Returns TRUE if oCreature uses a dragons crush attack. +// Dragon can fly up and crash down on opponents to do bludgeoning damage. +// If 3 times smaller than the dragon they will take extra damage and be +// Knocked Down for 1 round if Reflex save is not made. +int ai_TryCrushAttack(object oCreature, object oTarget); +// Returns TRUE if oCreature uses a dragons tail sweep attack. +// If the enemy is 4 sizes smaller than it the dragon to use its tail to sweep +// behind it doing damage and knocking the opponents down. +int ai_TryTailSweepAttack(object oCreature); +// Returns TRUE if oCreature finds a good target and uses Sneak Attack. +int ai_TrySneakAttack(object oCreature, int nInMelee, int bAlwaysAtk = TRUE); +// Returns TRUE if oCreature finds a good ranged target and uses Sneak Attack. +int ai_TryRangedSneakAttack(object oCreature, int nInMelee); +// Returns TRUE if oCreature uses a harmful ranged talent. +int ai_TryRangedTalents(object oCreature, object oTarget, int nInMelee); +// Returns TRUE if oCreature uses a harmful melee talent. +int ai_TryMeleeTalents(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Charge +int ai_TryCharging(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Grapple +int ai_TryGrappling(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Trip +int ai_TryTripping(object oCreature, object oTarget); +// ***************************************************************************** +// ******************************* Try * Skills ******************************** +// ***************************************************************************** +// These functions try to find and use a specific set of skills intelligently. + +// Wrapper to have oCreature use nSkill on oTarget. +void ai_UseSkill(object oCreature, int nSkill, object oTarget); +// Returns TRUE if oCreature uses the parry skill on someone attacking them. +// Checks if doing a parry might be successful. +int ai_TryParry(object oCreature); +// Returns TRUE if oCreature uses the Taunt skill on oTarget. +// Checks if doing a taunt might be successful against oTarget. +int ai_TryTaunt(object oCreature, object oTarget); +// Returns TRUE if oCreature uses the Animial emapthy skill on oTarget. +// For it to work oTarget must be an Animal, Beast, or Magical Beast. +// Checks if doing Animal Empathy might be successful against oTarget. +int ai_TryAnimalEmpathy(object oCreature, object oTarget = OBJECT_INVALID); +// ***************************************************************************** +// ******************************** Try * Feats ******************************** +// ***************************************************************************** +// These functions try to find and use a specific set of feats intelligently. + +// Wrapper to have oCreature use nFeat on oTarget. +void ai_UseFeat(object oCreature, int nFeat, object oTarget, int nSubFeat = 0); +// Wrapper to have oCreature use nActionMode on oTarget. +// nInMelee is only used in AI_LAST_ACTION_RANGED_ATK actions. +// bPassive TRUE oCreature will not move while attacking. +void ai_UseFeatAttackMode(object oCreature, int nActionMode, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE); +// Returns TRUE if oCreature uses Rage. +// This checks if they are already in a rage and if they have the Rage feat. +int ai_TryBarbarianRageFeat(object oCreature); +// Returns TRUE if oCreature uses Bard song. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryBardSongFeat(object oCreature); +// Returns TRUE if oCreature uses Called shot. +// This checks if they have the feat and if its viable. +int ai_TryCalledShotFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Disarm. +// This checks if they have the feat and if its viable. +int ai_TryDisarmFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Divine Might. +// This only checks if they can use the feat and have turn undead uses left. +int ai_TryDivineMightFeat(object oCreature, int nInMelee); +// Returns TRUE if oCreature uses Divine Shield. +// This only checks if they can use the feat and have turn undead uses left. +int ai_TryDivineShieldFeat(object oCreature, int nInMelee); +// Returns TRUE if oCreature uses Expertise. +// This checks if they have the feat and if its viable. +// Also checks to see if the Improved Expertise feat would be better. +int ai_TryExpertiseFeat(object oCreature); +// Returns TRUE if oCreature uses Flurry of Blows. +// This checks if they have the feat and if its viable. +int ai_TryFlurryOfBlowsFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Improved Expertise. +// This checks if they have the feat and if its viable. +// Also checks to see if the Expertise feat would be better. +int ai_TryImprovedExpertiseFeat(object oCreature); +// Returns TRUE if oCreature uses Improved Power Attack. +// This checks if they have the feat and if its viable. +// Also checks to see if the Power Attack feat would be better. +int ai_TryImprovedPowerAttackFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Ki Damage. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryKiDamageFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Knockdown. +// This checks if they have the feat and if its viable. +int ai_TryKnockdownFeat(object oCreature, object oTarget); +// Returns the spell level value to be used to compare if they should cast a +// spell vs use Polymorph. +int ai_GetHasPolymorphSelfFeat(object oCreature); +// Returns TRUE if oCreature uses a polymorph self feat. +// This checks if they have the feat and will use the best one. +int ai_TryPolymorphSelfFeat(object oCreature); +// Returns TRUE if oCreature uses Power Attack. +// This checks if they have the feat and if its viable. +// Also checks to see if the Improved Power Attack would be better. +int ai_TryPowerAttackFeat(object oCreature, object oEnemy); +// Returns TRUE if oCreature uses Quivering palm. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryQuiveringPalmFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Power Attack. +// This checks if they have the feat and if its viable. +// Using a bow and having arrows should be checked before calling this. +int ai_TryRapidShotFeat(object oCreature, object oTarget, int nInMelee); +// Returns TRUE if oCreature uses Sap. +// This checks if they have the feat and if its viable. +int ai_TrySapFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Smite evil. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TrySmiteEvilFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Smite good. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TrySmiteGoodFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses Stunning fists. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryStunningFistFeat(object oCreature, object oTarget); +// Returns TRUE if oCreature uses a summon animal companion talent. +int ai_TrySummonAnimalCompanionTalent(object oCreature); +// Returns TRUE if oCreature uses a summon familiar talent. +int ai_TrySummonFamiliarTalent(object oCreature); +// Returns TRUE if oCreature uses the Lay on Hands feat talent. +int ai_TryLayOnHands(object oCreature); +// Returns TRUE if oCreature uses a turning talent. +int ai_TryTurningTalent(object oCreature); +// Returns TRUE if oCreature uses Whirlwind. +// This checks if they have the feat and if its viable. +int ai_TryWhirlwindFeat(object oCreature); +// Returns TRUE if oCreature uses Wholeness of Body. +// This checks if they have any uses left, have the feat and if its viable. +int ai_TryWholenessOfBodyFeat(object oCreature); +//:: [PRC8] Tests & runs Awesome Blow +int ai_TryAwesomeBlowFeat(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Bullrush +int ai_TryBullrushFeat(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Overrun +int ai_TryOverrunFeat(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Ranged Disarm +int ai_TryRangedDisarmFeat(object oCreature, object oTarget); +//:: [PRC8] Tests & runs Swarm of Arrows +int ai_TrySwarmofArrowsFeat(object oCreature); +//:: [PRC8] Tests & runs Inlindl School Strike +int ai_TryInlindlSchoolFeat(object oCreature, object oTarget); +// ***************************************************************************** +// ***************************** TALENT SCRIPTS ****************************** +// ***************************************************************************** +// These functions do not fall into another section. + +// Returns the MaxLevel used in GetCreatureTalent for oCreature. +// This checks the level of oCreature. +int ai_GetMonsterTalentMaxLevel(object oCreature); +// Returns the nMaxLevel used in GetCreatureTalent for oCreature. +// This checks the difficulty of the combat and the level of oCreature. +// Return a number equal to 1 and half the level of oCreature upto 10. +// The max spell level used is equal to nMaxLevel or less. +int ai_GetAssociateTalentMaxLevel(object oCreature, int nDifficulty); +// Returns TRUE if oCreature has nTalent. +// nTalent will be a spell in the spells.2da. +int ai_GetHasTalent(object oCreature, int nTalent); +// Saves a talent in JsonArray. +// Array: 0-Type (1-spell, 2-sp ability, 4-feat, 3-item) +// Type 1)spell 0-type, 1-spell, 2-class, 3-level, 4-slot. +// Type 2)sp Ability 0-type, 1-spell, 2-class, 3-level, 4-slot. +// Type 3)feat 0-type, 1-spell, 2- class, 3- level. +// Type 4)item 0-type, 1-spell, 2-item object, 3-level, 4-slot. +// jJsonLevel is the level to place the talent in the json array +// maybe different then the talents actual level which is passed in nLevel. +void ai_SaveTalent(object oCreature, int nClass, int nJsonLevel, int nLevel, int nSlot, int nSpell, int nType, int bBuff, int bPreBuff, int bFullBuff, object oItem = OBJECT_INVALID); +// Removes a talent nSlotIndex from jLevel in jCategory. +void ai_RemoveTalent(object oCreature, json jCategory, json jLevel, string sCategory, int nLevel, int nSlotIndex); +// Saves a creatures talents to variables upon them for combat use. +// bMonster will check to see if they should be buffed when we set the talents. +// bForceTalentSetup - Tells the talent system to force a talent setup but no Buffing. +void ai_SetCreatureTalents(object oCreature, int bMonster, int bForceTalentSetup = FALSE); +// Return TRUE if oCreature spontaneously casts a cure spell from a talent in sCategory. +int ai_UseSpontaneousCureTalentFromCategory(object oCreature, string sCategory, int nInMelee, int nDamage, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses jTalent on oTarget. +// also Returns -1 if oCreature uses jTalent on oTarget with a memorized spell. +// This allows the user to remove jTalent from jLevel in jCategory. +int ai_UseCreatureSpellTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID); +// Return TRUE if oCreature uses a jTalent from oItem on oTarget. +int ai_UseCreatureItemTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID); +// Returns TRUE if oCreature uses a talent from sCategory of nLevel or less. +int ai_UseCreatureTalent(object oCreature, string sCategory, int nInMelee, int nLevel = 10, object oTarget = OBJECT_INVALID); +// Return TRUE if oCreature uses nTalent on oTarget. +int ai_UseTalent(object oCreature, int nTalent, object oTarget); +// Returns TRUE if jTalent is used on oTarget by oCaster. +// Checks the talent type and casts the correct spell. For items it checks uses. +// bCheckPosition will see if we should move back due to spell failure in combat. +int ai_UseTalentOnObject(object oCaster, json jTalent, object oTarget, int nInMelee, int bCheckPosition = TRUE); +// Returns TRUE if jTalent is used at lTarget location by oCaster. +// Checks the talent type and cast the correct spell. For items it checks uses. +int ai_UseTalentAtLocation(object oCaster, json jTalent, object oTarget, int nInMelee); +// Return TRUE if oCreature uses jTalent on oTarget after checking special cases. +int ai_CheckSpecialTalentsandUse(object oCreature, json jTalent, string sCategory, int nInMelee, object oTarget); + +int ai_TryHealingTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID) +{ + // First lets evaluate oTarget and see how strong of a spell we will need. + if(oTarget != OBJECT_INVALID) + { + if(oTarget == oCreature) + { + if(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF)) return FALSE; + } + else if(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + } + // We don't have a target so lets go check for one. + else + { + if(!ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) + { + // Lets not run past an enemy to heal unless we have the feats, bad tactics! + float fRange; + if(ai_CanIMoveInCombat(oCreature)) fRange = AI_RANGE_PERCEPTION; + else + { + fRange = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // Looks bad when your right next to an ally, but technically the enemy is closer. + if(fRange < AI_RANGE_MELEE) fRange = AI_RANGE_MELEE; + } + oTarget = ai_GetAllyToHealTarget(oCreature, fRange); + } + else oTarget = oCreature; + if(oTarget == OBJECT_INVALID) return FALSE; + } + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + int nHp = ai_GetPercHPLoss(oTarget); + int nHpLimit = ai_GetHealersHpLimit(oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "268", "nHp: " + IntToString(nHp) + + "< nHpLimit: " + IntToString(nHpLimit)); + if(nHp > nHpLimit) return FALSE; + int nDamage = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "272", GetName(oTarget) + " has lost " + IntToString(nDamage) + " hitpoints!"); + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + // If they are about to die then throw caution to the wind and HEAL! + if(nHp <= AI_HEALTH_BLOODY || nHp < 11) nInMelee = 0; + int nRace = GetRacialType(oTarget); + if(nRace == RACIAL_TYPE_UNDEAD) + { + json jCategory = GetLocalJson(oCreature, AI_TALENT_TOUCH); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + int nLevel = 4, bFound, nSlotIndex, nMaxSlotIndex, nSpell; + json jLevel, jTalent; + // Loop through nLevels looking for nTalent + while(nLevel > 0) + { + // Get the array of nLevel. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent = JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "296", "jTalent: " + JsonDump(jTalent, 4)); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(nSpell == SPELL_INFLICT_CRITICAL_WOUNDS) + { + bFound = TRUE; + break; + } + else if(nSpell == SPELL_INFLICT_SERIOUS_WOUNDS) + { + bFound = TRUE; + break; + } + else if(nSpell == SPELL_INFLICT_MODERATE_WOUNDS) + { + bFound = TRUE; + break; + } + else if(nSpell == SPELL_INFLICT_LIGHT_WOUNDS) + { + bFound = TRUE; + break; + } + nSlotIndex++; + } + } + if(bFound) break; + nLevel--; + } + if(bFound) + { + if(ai_UseTalentOnObject(oCreature, jTalent, oTarget, nInMelee)) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_TOUCH, nLevel, nSlotIndex); + return TRUE; + } + } + } + else + { + // Do they have Lay on Hands? + if(bUseMagic && GetHasFeat(FEAT_LAY_ON_HANDS, oCreature)) + { + int nCanHeal = GetAbilityModifier(ABILITY_CHARISMA, oCreature) * ai_GetCharacterLevels(oCreature); + if(nCanHeal <= nDamage) + { + ai_UseFeat(oCreature, FEAT_LAY_ON_HANDS, oTarget); + return TRUE; + } + } + int nMaxLevel = 9; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_HEALING, nInMelee, nMaxLevel, oTarget)) return TRUE; + if(AI_DEBUG) ai_Debug("0i_talents", "275", GetName(oCreature) + " has no healing spells!" + + " Cleric lvls: " + IntToString(GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) + + " Sontaneous casting: " + IntToString(ai_GetMagicMode(oCreature, AI_MAGIC_NO_SPONTANEOUS_CURE))); + if(bUseMagic && GetLevelByClass(CLASS_TYPE_CLERIC, oCreature) && + !ai_GetMagicMode(oCreature, AI_MAGIC_NO_SPONTANEOUS_CURE)) + { + // We need to check our talents and see what spells we can convert. + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_PROTECTION, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_TOUCH, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_RANGED, nInMelee, nDamage, oTarget)) return TRUE; + if(ai_UseSpontaneousCureTalentFromCategory(oCreature, AI_TALENT_SUMMON, nInMelee, nDamage, oTarget)) return TRUE; + } + } + return FALSE; +} +int ai_CheckTargetVsConditions(object oTarget, json jTalent, int nConditions) +{ + // Check nCondition for any negative effects based on the talent we have. + switch(JsonGetInt(JsonArrayGet(jTalent, 1))) + { + case SPELL_NEUTRALIZE_POISON : + if(ai_GetHasNegativeCondition(AI_CONDITION_POISON, nConditions)) return TRUE; + break; + case SPELL_REMOVE_DISEASE : + if(ai_GetHasNegativeCondition(AI_CONDITION_DISEASE, nConditions)) return TRUE; + break; + case SPELL_REMOVE_BLINDNESS_AND_DEAFNESS : + if(ai_GetHasNegativeCondition(AI_CONDITION_BLINDDEAF, nConditions)) return TRUE; + break; + case SPELL_REMOVE_FEAR : + if(ai_GetHasNegativeCondition(AI_CONDITION_FRIGHTENED, nConditions)) return TRUE; + break; + case SPELL_REMOVE_CURSE : + if(ai_GetHasNegativeCondition(AI_CONDITION_CURSE, nConditions)) return TRUE; + break; + case SPELL_REMOVE_PARALYSIS : + if(ai_GetHasNegativeCondition(AI_CONDITION_PARALYZE, nConditions)) return TRUE; + break; + case SPELL_CLARITY : + if(ai_GetHasNegativeCondition(AI_CONDITION_DAZED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CHARMED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CONFUSED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_STUNNED, nConditions)) return TRUE; + break; + case SPELL_GREATER_RESTORATION : + if(ai_GetHasNegativeCondition(AI_CONDITION_DAZED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CONFUSED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_DOMINATED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SLOW, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_FRIGHTENED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_STUNNED, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_CHARMED, nConditions)) return TRUE; + case SPELL_RESTORATION : + if(ai_GetHasNegativeCondition(AI_CONDITION_LEVEL_DRAIN, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_BLINDDEAF, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_PARALYZE, nConditions)) return TRUE; + case SPELL_LESSER_RESTORATION : + if(ai_GetHasNegativeCondition(AI_CONDITION_ABILITY_DRAIN, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SAVE_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SR_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_SKILL_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_AC_DECREASE , nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_ATK_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_DMG_DECREASE, nConditions)) return TRUE; + if(ai_GetHasNegativeCondition(AI_CONDITION_DMG_I_DECREASE, nConditions)) return TRUE; + case SPELL_RAISE_DEAD : + case SPELL_RESURRECTION : + if(ai_GetHasNegativeCondition(AI_CONDITION_DEAD, nConditions)) return TRUE; + } + return FALSE; +} +int ai_CheckTalentsVsConditions(object oCreature, int nConditions, int nInMelee, int nLevel, object oTarget) +{ + // Get the saved category from oCreature. + json jCategory = GetLocalJson(oCreature, AI_TALENT_CURE); + if(AI_DEBUG) ai_Debug("0i_talents", "362", "jCategory: " + AI_TALENT_CURE + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) + { + SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, -1); + return FALSE; + } + // Get the max talent level so we can skip the higher ones and save time. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE); + if(AI_DEBUG) ai_Debug("0i_talents", "370", AI_MAX_TALENT + AI_TALENT_CURE + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 10) nLevel = 9; + json jLevel, jTalent; + int nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed; + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + int bUseMagicItems = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS); + if(AI_DEBUG) ai_Debug("0i_talents", "379", "bUseMagic: " + IntToString(bUseMagic) + + " bUseMagicItems: " + IntToString(bUseMagicItems)); + // Loop through nLevels down to 0 looking for the first talent (i.e. the highest). + while(nLevel >= 0) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "387", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex <= nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "396", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetType(jTalent))); + // Check to see if the talent matches oTargets nConditions. + if(ai_CheckTargetVsConditions(oTarget, jTalent, nConditions)) + { + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(bUseMagic) + { + if(nType == AI_TALENT_TYPE_SPELL) + { + if(ai_CastInMelee(oCreature, JsonGetInt(JsonArrayGet(jTalent, 1)), nInMelee)) + { + nTalentUsed = ai_UseCreatureSpellTalent(oCreature, jLevel, jTalent, AI_TALENT_CURE, nInMelee, oTarget); + // -1 means it was a memorized spell and we need to remove it. + //if(nTalentUsed == -1) + //{ + // ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_CURE, nLevel, nSlotIndex); + // return TRUE; + //} + //else + if(nTalentUsed) return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + // Special ability spells do not need to concentrate?! + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, AI_TALENT_CURE, nInMelee, oTarget)) + { + // When the ability is used that slot is now not readied. + // Multiple uses of the same spell are stored in different slots. + ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_CURE, nLevel, nSlotIndex); + return TRUE; + } + } + } + if(bUseMagicItems && nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, AI_TALENT_CURE, nInMelee, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "430", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, AI_TALENT_CURE, nLevel, nSlotIndex); + } + return TRUE; + } + } + } + nSlotIndex++; + } + } + else SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, nLevel - 1); + nLevel--; + } + return FALSE; +} +int ai_TryCureConditionTalent(object oCreature, int nInMelee, object oTarget = OBJECT_INVALID) +{ + // Is Casting Cure spells off? + if(ai_GetMagicMode(oCreature, AI_MAGIC_CURE_SPELLS_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "460", AI_MAX_TALENT + AI_TALENT_CURE + ": " + + IntToString(GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE))); + // If the creature doesn't have cure talents then we set it to -1. + if(GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE) == -1) return FALSE; + // We check targets to see if they need to be cured. + int nNegativeConditions, nTargetNegConds, nIndex, nCnt = 1; + // Check for dead allies. + object oTarget; + object oDead = ai_GetNearestAlly(oCreature, 1, CREATURE_TYPE_IS_ALIVE, FALSE); + if(oDead == OBJECT_INVALID) + { + oTarget = GetLocalObject(oCreature, AI_ALLY + "1"); + while(oTarget != OBJECT_INVALID) + { + nTargetNegConds = ai_GetNegativeConditions(oTarget); + // Should we ignore associates? + if(!ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) || + GetAssociateType(oTarget) < 2) + { + if(nNegativeConditions < nTargetNegConds) + { + nNegativeConditions = nTargetNegConds; + nIndex = nCnt; + } + } + oTarget = GetLocalObject(oCreature, AI_ALLY + IntToString(++nCnt)); + } + // No one has a negative condition then get out. + if(!nNegativeConditions) return FALSE; + oTarget = GetLocalObject(oCreature, AI_ALLY + IntToString(nIndex)); + } + else + { + nNegativeConditions = AI_CONDITION_DEAD; + oTarget = oDead; + } + if(oTarget == oCreature) + { + if(ai_GetAIMode(oCreature, AI_MODE_SELF_HEALING_OFF)) return FALSE; + } + else if(ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "501", "nNegativeConditions: " + IntToString(nNegativeConditions) + + " on " + GetName(oTarget)); + if(ai_CheckTalentsVsConditions(oCreature, nNegativeConditions, nInMelee, 9, oTarget)) return TRUE; + return FALSE; +} +// ***************************************************************************** +// ************************* Try * Defensive Talents *************************** +// ***************************************************************************** +// These functions try to find and use a specific set of talents intelligently. + +int ai_TryDefensiveTalents(object oCreature, int nInMelee, int nMaxLevel, int nRound = 0, object oTarget = OBJECT_INVALID) +{ + // Summons are powerful and should be used as much as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_SUMMON, nInMelee, nMaxLevel, oTarget)) return TRUE; + // Added to reduce casting defensive talents later in combat and constantly. + if(nRound >= d8()) return FALSE; + // Try to mix them up so we don't always cast spells in the same order. + int nRoll = d2(); + if(AI_DEBUG) ai_Debug("0i_talents", "507", "Lets help someone(Check Talents: " +IntToString(nRoll) + + " nMaxLevel: " + IntToString(nMaxLevel) + ")!"); + if(nRoll == 1) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nMaxLevel, oTarget)) return TRUE; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel, oTarget)) return TRUE; + } + else if(nRoll == 2) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel, oTarget)) return TRUE; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nMaxLevel, oTarget)) return TRUE; + } + return FALSE; +} +void ai_SetAura(object oCreature) +{ + // Cycle through a creatures special abilities and use any auras. + int bCanUse, nIndex = 0, nMaxSpAbility = GetSpellAbilityCount(oCreature); + int nSpell = GetSpellAbilitySpell(oCreature, nIndex); + while(nIndex < nMaxSpAbility) + { + bCanUse = FALSE; + if(GetSpellAbilityReady(oCreature, nIndex)) + { + if(nSpell == SPELLABILITY_AURA_BLINDING) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_COLD) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_ELECTRICITY) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_FEAR) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_FIRE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_HORRIFICAPPEARANCE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_MENACE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_HORRIFICAPPEARANCE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_PROTECTION) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_STUN) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_UNEARTHLY_VISAGE) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_UNNATURAL) bCanUse = TRUE; + else if(nSpell == SPELLABILITY_AURA_HORRIFICAPPEARANCE) bCanUse = TRUE; + else if(nSpell == 306 /*SPELLABILITY_AURA_TYRANT_FOG_MIST*/) bCanUse = TRUE; + else if(nSpell == 412 /*SPELLABILITY_AURA_DRAGON_FEAR*/) bCanUse = TRUE; + else if(nSpell == 761 /*SPELLABILITY_AURA_HELLFIRE*/) bCanUse = TRUE; + else if(nSpell == 805/*SPELLABILITY_AURA_TROGLODYTE_STENCH*/) bCanUse = TRUE; + } + if(bCanUse) ActionCastSpellAtObject(nSpell, oCreature, 255, FALSE, 0, 0, TRUE); + nSpell = GetSpellAbilitySpell(oCreature, ++nIndex); + } +} +// ***************************************************************************** +// ************************* Try * Skills ************************************** +// ***************************************************************************** +// These functions try to find and use a specific set of skills intelligently. + +void ai_UseSkill(object oCreature, int nSkill, object oTarget) +{ + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_SKILL); + if(GetIsEnemy(oTarget, oCreature)) SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "498", GetName(oCreature) + " is using skill: " + + GetStringByStrRef(StringToInt(Get2DAString("skills", "Name", nSkill))) + + " on " + GetName(oTarget)); + ActionUseSkill(nSkill, oTarget); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); +} +int ai_TryParry(object oCreature) +{ + // Only use parry on an active melee attacker + object oTarget = GetLastHostileActor(oCreature); + // If we are already in parry mode then lets keep it up. + if(GetActionMode(oCreature, ACTION_MODE_PARRY) && + GetCurrentAction(oCreature) == ACTION_ATTACKOBJECT) return TRUE; + if(oTarget == OBJECT_INVALID || + ai_GetAttackedTarget(oTarget) != oCreature || + !ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget))) return FALSE; + // Only if our parry skill > their attack bonus + 5 + d10 + // Parry has a -4 atk adjustment. Our chance to hit should be 75% + d10. + // EnemyAtk(20) - OurParrySkill(10) = 0 + d10(75% to 25% chance to hit). + int nParrySkill = GetSkillRank(SKILL_PARRY, oCreature); + int nAtk = ai_GetCreatureAttackBonus(oTarget); + if(nAtk - nParrySkill >= 0 + d10()) return FALSE; + ai_EquipBestMeleeWeapon(oCreature, oTarget); + SetActionMode(oCreature, ACTION_MODE_PARRY, TRUE); + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_SKILL); + ActionAttack(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "524", "Using parry against " + GetName(oTarget) + "!"); + return TRUE; +} +int ai_TryTaunt(object oCreature, object oTarget) +{ + int nCoolDown = GetLocalInt(oCreature, "AI_TAUNT_COOLDOWN"); + if(AI_DEBUG) ai_Debug("0i_talents", "530", "Has Taunt Effect? " + + IntToString(ai_GetHasEffectType(oTarget, EFFECT_TYPE_TAUNT)) + + " Cooldown: " + IntToString(nCoolDown)); + if(nCoolDown > 0) + { + SetLocalInt(oCreature, "AI_TAUNT_COOLDOWN", --nCoolDown); + return FALSE; + } + if(!ai_GetHasEffectType(oTarget, EFFECT_TYPE_TAUNT)) return FALSE; + // Check to see if we have a good chance for it to work. + int nTauntRnk = GetSkillRank(SKILL_TAUNT, oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "542", "Check Taunt: TauntRnk: " + IntToString(nTauntRnk) + + " HitDice + 1: " + IntToString(GetHitDice(oCreature) + 1) + + " Concentration: " + IntToString(GetSkillRank(SKILL_CONCENTRATION, oTarget)) + "."); + int nConcentration = GetSkillRank(SKILL_CONCENTRATION, oTarget); + // Our chance is greater than 50%. + if(nTauntRnk <= nConcentration) return FALSE; + ai_UseSkill(oCreature, SKILL_TAUNT, oTarget); + SetLocalInt(oCreature, "AI_TAUNT_COOLDOWN", AI_TAUNT_COOLDOWN); + return TRUE; +} +int ai_TryAnimalEmpathy(object oCreature, object oTarget = OBJECT_INVALID) +{ + if(!GetSkillRank(SKILL_ANIMAL_EMPATHY, oCreature)) return FALSE; + int nCoolDown = GetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN"); + if(AI_DEBUG) ai_Debug("0i_talents", "556", "Has Dominate Effect? " + + IntToString(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DOMINATED)) + + " Cooldown: " + IntToString(nCoolDown)); + if(nCoolDown > 0) + { + SetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN", --nCoolDown); + return FALSE; + } + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetNearestRacialTarget(oCreature, AI_RACIAL_TYPE_ANIMAL_BEAST); + if(oTarget == OBJECT_INVALID) return FALSE; + } + if(!GetObjectSeen(oCreature, oTarget)) return FALSE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DOMINATED) || + GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS) || + GetIsImmune(oTarget, IMMUNITY_TYPE_DOMINATE) || + GetAssociateType(oTarget) != ASSOCIATE_TYPE_NONE) return FALSE; + // Get the race of the target, it only works on Animals, Beasts, and Magical Beasts. + int nRace = GetRacialType(oTarget); + int nDC; + if(nRace == RACIAL_TYPE_ANIMAL) nDC = 5; + else if(nRace == RACIAL_TYPE_BEAST || nRace == RACIAL_TYPE_MAGICAL_BEAST) nDC = 9; + else return FALSE; + // Check to see if we have a good chance for it to work. + int nEmpathyRnk = GetSkillRank(SKILL_ANIMAL_EMPATHY, oCreature); + nDC += GetHitDice(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "632", "Check Animal Empathy: Rnk: " + IntToString(nEmpathyRnk) + + " nDC: " + IntToString(nDC) + "."); + // Our chance is greater than 50%. + if(nEmpathyRnk <= nDC) return FALSE; + ai_UseSkill(oCreature, SKILL_ANIMAL_EMPATHY, oTarget); + SetLocalInt(oCreature, "AI_EMPATHY_COOLDOWN", AI_EMPATHY_COOLDOWN); + return TRUE; +} +// ***************************************************************************** +// ************************* Try * Feats *************************************** +// ***************************************************************************** +// These functions try to find and use a specific set of feats intelligently. + +void ai_UseFeat(object oCreature, int nFeat, object oTarget, int nSubFeat = 0) +{ + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_FEAT); + if(GetIsEnemy(oTarget, oCreature)) SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "600", GetName(oCreature) + " is using feat: " + + GetStringByStrRef(StringToInt(Get2DAString("feat", "FEAT", nFeat))) + + " on " + GetName(oTarget)); + ActionUseFeat(nFeat, oTarget, nSubFeat); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); +} +void ai_UseFeatAttackMode(object oCreature, int nActionMode, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "608", "Action mode (" + IntToString(nActionMode) + ") Is it set?: " + + IntToString(GetActionMode(oCreature, nActionMode))); + if(!GetActionMode(oCreature, nActionMode)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "612", "Setting action mode: " + IntToString(nActionMode)); + SetActionMode(oCreature, nActionMode, TRUE); + SetLocalInt(oCreature, AI_CURRENT_ACTION_MODE, nActionMode); + } + ai_ActionAttack(oCreature, nAction, oTarget, nInMelee, bPassive, nActionMode); +} +int ai_TryBarbarianRageFeat(object oCreature) +{ + // Must not have rage already, must have the feat, and enemy must be strong enough. + if(GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) || + !GetHasFeat(FEAT_BARBARIAN_RAGE, oCreature)) return FALSE; + ai_UseFeat(oCreature, FEAT_BARBARIAN_RAGE, oCreature); + return TRUE; +} +int ai_TryBardSongFeat(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "629", "BardSong Effect: " + IntToString(GetHasSpellEffect(411/*SPELL_BARD_SONG*/)) + + " Level: " + IntToString(GetLevelByClass(CLASS_TYPE_BARD)) + + " HasFeat: " + IntToString(GetHasFeat(FEAT_BARD_SONGS))); + if(GetHasSpellEffect(411/*SPELL_BARD_SONG*/, oCreature) || + !GetHasFeat(FEAT_BARD_SONGS, oCreature)) return FALSE; + ai_UseFeat(oCreature, FEAT_BARD_SONGS, oCreature); + return TRUE; +} +int ai_TryCalledShotFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_CALLED_SHOT, oCreature)) return FALSE; + // Called shot has a -4 to hit adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_CALLED_SHOT, oTarget); + return TRUE; +} +int ai_TryDisarmFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_DISARM, oCreature)) return FALSE; + // If we can't disarm them then get out! + if(!GetIsCreatureDisarmable(oTarget)) return FALSE; + int nEAC = GetAC(oTarget); + int nOAtk = ai_GetCreatureAttackBonus(oCreature); + // The combatant with the larger weapon gains +4 per size category. + // Weapon Size in the baseitems.2da is 1 = Tiny, 2 = Small, 3 = Medium, 4 = Large. + int nOWeaponType = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND)); + int nOWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nOWeaponType)); + int nEWeaponType = GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget)); + int nEWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nEWeaponType)); + nOAtk +=(nOWeaponSize - nEWeaponSize) * 4; + // Do they have Improved Disarm? + if(GetHasFeat(FEAT_IMPROVED_DISARM, oCreature)) nOAtk += 2; + // Disarm has a -6 atk adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -6.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_DISARM, oTarget); + return TRUE; +} +int ai_TryDivineMightFeat(object oCreature, int nInMelee) +{ + if(!GetHasFeat(FEAT_TURN_UNDEAD)) return FALSE; + if(!GetHasFeat(FEAT_DIVINE_MIGHT)) return FALSE; + if(GetHasFeatEffect(FEAT_DIVINE_MIGHT, oCreature)) return FALSE; + if(!nInMelee) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget == OBJECT_INVALID) return FALSE; + float fAtkAdj = IntToFloat(GetAbilityModifier(ABILITY_CHARISMA, oCreature)); + if(!ai_AttackBonusGood(oCreature, oTarget, fAtkAdj)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "722", "USING DIVINE MIGHT on " + GetName(oCreature) + "."); + ai_UseFeat(oCreature, FEAT_DIVINE_MIGHT, oCreature); + return TRUE; +} +int ai_TryDivineShieldFeat(object oCreature, int nInMelee) +{ + if(!GetHasFeat(FEAT_TURN_UNDEAD)) return FALSE; + if(!GetHasFeat(FEAT_DIVINE_SHIELD)) return FALSE; + if(GetHasFeatEffect(FEAT_DIVINE_SHIELD, oCreature)) return FALSE; + if(!nInMelee) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget == OBJECT_INVALID) return FALSE; + float fACAdj = IntToFloat(GetAbilityModifier(ABILITY_CHARISMA, oCreature)); + if(!ai_ACAdjustmentGood(oCreature, oTarget, fACAdj)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "736", "USING DIVINE SHIELD on " + GetName(oCreature) + "."); + ai_UseFeat(oCreature, FEAT_DIVINE_SHIELD, oCreature); + return TRUE; +} +int ai_TryExpertiseFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_EXPERTISE, oCreature)) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + // Expertise has a -5 atk and a +5 AC adjustment. + if(oTarget == OBJECT_INVALID || + !ai_AttackPenaltyOk(oCreature, oTarget, -5.0) || + !ai_ACAdjustmentGood(oCreature, oTarget, 5.0)) + { + SetActionMode(oCreature, ACTION_MODE_EXPERTISE, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "704", "USING EXPERTISE on " + GetName(oTarget) + "."); + ai_UseFeatAttackMode(oCreature, ACTION_MODE_EXPERTISE, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; +} +int ai_TryFlurryOfBlowsFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_FLURRY_OF_BLOWS, oCreature)) return FALSE; + // Flurry of Blows has a -2 atk adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -2.0)) + { + SetActionMode(oCreature, ACTION_MODE_FLURRY_OF_BLOWS, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "718", "USING FLURRY OF BLOWS on " + GetName(oTarget) + "."); + ai_UseFeatAttackMode(oCreature, ACTION_MODE_FLURRY_OF_BLOWS, AI_LAST_ACTION_MELEE_ATK, oTarget, TRUE); + return TRUE; +} +int ai_TryImprovedExpertiseFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_IMPROVED_EXPERTISE, oCreature)) return FALSE; + object oTarget = ai_GetEnemyAttackingMe(oCreature); + // Improved expertise has a -10 atk +10 AC adjustment. + if(oTarget == OBJECT_INVALID || + !ai_AttackPenaltyOk(oCreature, oTarget, -10.0) || + !ai_ACAdjustmentGood(oCreature, oTarget, 10.0)) + { + SetActionMode(oCreature, ACTION_MODE_IMPROVED_EXPERTISE, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "735", "USING IMPROVED EXPERTISE on " + GetName(oTarget) + "."); + ai_UseFeatAttackMode(oCreature, ACTION_MODE_IMPROVED_EXPERTISE, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; +} +int ai_TryImprovedPowerAttackFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_IMPROVED_POWER_ATTACK, oCreature)) return FALSE; + // Improved Power Attack has a -10 atk adjustment. + // If we cannot hit or will kill in one hit then maybe we should use Power Attack instead. + if(ai_PowerAttackGood(oCreature, oTarget, 10.0)) + { + ai_UseFeatAttackMode(oCreature, ACTION_MODE_IMPROVED_POWER_ATTACK, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; + } + SetActionMode(oCreature, ACTION_MODE_IMPROVED_POWER_ATTACK, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return ai_TryPowerAttackFeat(oCreature, oTarget); +} +int ai_TryKiDamageFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_KI_DAMAGE, oCreature)) return FALSE; + // Must have > 40 hitpoints AND + // Damage reduction OR damage resistance + // or just have over 200 hitpoints + int bHasDamageReduction = FALSE; + int bHasDamageResistance = FALSE; + int bHasHitpoints = FALSE; + int bHasMassiveHitpoints = FALSE; + int bOutNumbered; + int nCurrentHP = GetCurrentHitPoints(oTarget); + if(nCurrentHP > 40) bHasHitpoints = TRUE; + if(nCurrentHP > 200) bHasMassiveHitpoints = TRUE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DAMAGE_REDUCTION)) bHasDamageReduction = TRUE; + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_DAMAGE_RESISTANCE)) bHasDamageResistance = TRUE; + if(ai_GetNearestEnemy(oCreature, 3, 7, 7) != OBJECT_INVALID) bOutNumbered = TRUE; + if((!bHasHitpoints || (!bHasDamageReduction && !bHasDamageResistance)) && + (!bHasMassiveHitpoints) && (!bHasHitpoints || !bOutNumbered)) return FALSE; + ai_UseFeat(oCreature, FEAT_KI_DAMAGE, oTarget); + return TRUE; +} +int ai_TryKnockdownFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_KNOCKDOWN, oCreature)) return FALSE; + int nMySize = GetCreatureSize(oCreature); + if(GetHasFeat(FEAT_IMPROVED_KNOCKDOWN, oCreature)) nMySize++; + // Prevent silly use of knockdown on immune or too-large targets. + // Knockdown has a -4 atk adjustment. + if(GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN) || + GetCreatureSize(oTarget) > nMySize + 1 || + !ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_KNOCKDOWN, oTarget); + return TRUE; +} +int ai_GetHasPolymorphSelfFeat(object oCreature) +{ + // Lets check to see if we should actually Polymorph? + if(GetHasFeat(FEAT_EPIC_OUTSIDER_SHAPE)) return 3; + else if(GetHasFeat(FEAT_EPIC_CONSTRUCT_SHAPE)) return 3; + else if(GetHasFeat(FEAT_EPIC_WILD_SHAPE_DRAGON)) return 3; + else if(GetHasFeat(FEAT_EPIC_WILD_SHAPE_UNDEAD)) return 3; + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_4)) return 2; + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_3)) return 2; + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_2)) return 1; + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_1)) return 1; + if(GetHasFeat(FEAT_HUMANOID_SHAPE)) return 0; + else if(GetHasFeat(FEAT_ELEMENTAL_SHAPE)) return 0; + else if(GetHasFeat(FEAT_WILD_SHAPE)) return 0; + return -1; +} +int ai_TryPolymorphSelfFeat(object oCreature) +{ + // Lets check to see if we should actually Polymorph? + if(GetHasFeat(FEAT_EPIC_OUTSIDER_SHAPE)) + { + int nSubFeat = Random(3) + 733; // 733 azer, 734 rakshasa, 735 Slaad. + if(AI_DEBUG) ai_Debug("0i_talents", "863", " Using outsider shape 3 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_EPIC_OUTSIDER_SHAPE, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_EPIC_CONSTRUCT_SHAPE)) + { + int nSubFeat = Random(3) + 738; // 738 Stone, 739 Flesh, 740 Iron. + if(AI_DEBUG) ai_Debug("0i_talents", "868", " Using construct shape 3 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_EPIC_CONSTRUCT_SHAPE, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_EPIC_WILD_SHAPE_DRAGON)) + { + int nSubFeat = Random(3) + 707; // 707 Red, 708 Blue, 709 Green. + if(AI_DEBUG) ai_Debug("0i_talents", "873", " Using dragon shape 3 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_EPIC_WILD_SHAPE_DRAGON, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_EPIC_WILD_SHAPE_UNDEAD)) + { + int nSubFeat = Random(3) + 704; // 704 Risen Lord, 705 Vampire, 706 Spectre. + if(AI_DEBUG) ai_Debug("0i_talents", "878", " Using undead shape 3 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_EPIC_WILD_SHAPE_UNDEAD, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_4)) + { + int nSubFeat; + int nRoll = d3(); + if(nRoll == 1) nSubFeat = 679; // Medusa + else if(nRoll == 2) nSubFeat = 691; // Mindflayer + else nSubFeat = 694; // DireTiger + if(AI_DEBUG) ai_Debug("0i_talents", "887", " Using wild shape 3 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_4, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_3)) + { + int nSubFeat; + int nRoll = d3(); + if(nRoll == 1) nSubFeat = 670; // Basilisk + else if(nRoll == 2) nSubFeat = 673; // Drider + else nSubFeat = 674; // Manticore + if(AI_DEBUG) ai_Debug("0i_talents", "897", " Using wild shape 3 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_3, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_2)) + { + int nSubFeat; + int nRoll = d3(); + if(nRoll == 1) nSubFeat = 672; // Harpy + else if(nRoll == 2) nSubFeat = 678; // Gargoyle + else nSubFeat = 680; // Minotaur + if(AI_DEBUG) ai_Debug("0i_talents", "910", " Using greater wild shape 2 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_2, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_GREATER_WILDSHAPE_1)) + { + int nSubFeat = Random(5) + 658; // Wyrmling + if(AI_DEBUG) ai_Debug("0i_talents", "910", " Using greater wild shape 1 feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_GREATER_WILDSHAPE_1, oCreature, nSubFeat); + return TRUE; + } + if(GetHasFeat(FEAT_HUMANOID_SHAPE)) + { + int nSubFeat = Random(3) + 682; // 682 Drow, 683 Lizard, 684 Kobold. + if(AI_DEBUG) ai_Debug("0i_talents", "915", " Using humanoid shape feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_HUMANOID_SHAPE, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_ELEMENTAL_SHAPE)) + { + int nSubFeat = Random(4) + SUBFEAT_ELEMENTAL_SHAPE_EARTH; + if(AI_DEBUG) ai_Debug("0i_talents", "958", " Using Elemental shape feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_ELEMENTAL_SHAPE, oCreature, nSubFeat); + return TRUE; + } + else if(GetHasFeat(FEAT_WILD_SHAPE)) + { + int nSubFeat; + int nCompanionType = GetAnimalCompanionCreatureType(oCreature); + if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_NONE || + !GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + nSubFeat = Random(5) + SUBFEAT_WILD_SHAPE_BROWN_BEAR; + } + else + { + if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_BADGER) + nSubFeat = SUBFEAT_WILD_SHAPE_BADGER; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_BOAR) + nSubFeat = SUBFEAT_WILD_SHAPE_BOAR; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_BEAR) + nSubFeat = SUBFEAT_WILD_SHAPE_BROWN_BEAR; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_PANTHER) + nSubFeat = SUBFEAT_WILD_SHAPE_PANTHER; + else if(nCompanionType == ANIMAL_COMPANION_CREATURE_TYPE_WOLF) + nSubFeat = SUBFEAT_WILD_SHAPE_WOLF; + else nSubFeat = Random(5) + SUBFEAT_WILD_SHAPE_BROWN_BEAR; + } + if(AI_DEBUG) ai_Debug("0i_talents", "985", " Using wild shape feat: " + IntToString(nSubFeat)); + ai_UseFeat(oCreature, FEAT_WILD_SHAPE, oCreature, nSubFeat); + return TRUE; + } + return FALSE; +} +int ai_TryPowerAttackFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_POWER_ATTACK, oCreature)) return FALSE; + // Power Attack has a -5 atk adjustment. + if(ai_PowerAttackGood(oCreature, oTarget, 5.0)) + { + ai_UseFeatAttackMode(oCreature, ACTION_MODE_POWER_ATTACK, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; + } + SetActionMode(oCreature, ACTION_MODE_POWER_ATTACK, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; +} +int ai_TryQuiveringPalmFeat(object oCreature, object oTarget) +{ + // Must have the feat, and enemy must be lower level, and not immune to crits. + if(!GetHasFeat(FEAT_QUIVERING_PALM, oCreature) || + GetHitDice(oTarget) >= GetHitDice(oCreature) || + GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) return FALSE; + ai_UseFeat(oCreature, FEAT_QUIVERING_PALM, oTarget); + return TRUE; +} +int ai_TryRapidShotFeat(object oCreature, object oTarget, int nInMelee) +{ + if(!GetHasFeat(FEAT_RAPID_SHOT, oCreature)) return FALSE; + // Rapidshot has a -4 atk adjustment. + if(!ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) + { + SetActionMode(oCreature, ACTION_MODE_RAPID_SHOT, FALSE); + DeleteLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + return FALSE; + } + ai_UseFeatAttackMode(oCreature, ACTION_MODE_RAPID_SHOT, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return TRUE; +} +int ai_TrySapFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_SAP, oCreature)) return FALSE; + // Does not work on creatures that cannot be hit by criticals or stunned. + // Sap has a -4 atk adjustment. + if(GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT) || + GetIsImmune(oTarget, IMMUNITY_TYPE_STUN) || + !ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_SAP, oTarget); + return TRUE; +} +int ai_TrySmiteEvilFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_SMITE_EVIL, oCreature) || + GetAlignmentGoodEvil(oTarget) != ALIGNMENT_EVIL || + !ai_StrongOpponent(oCreature, oTarget)) return FALSE; + ai_UseFeat(oCreature, FEAT_SMITE_EVIL, oTarget); + return TRUE; +} +int ai_TrySmiteGoodFeat(object oCreature, object oTarget) +{ + if(!GetHasFeat(FEAT_SMITE_GOOD, oCreature) || + GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD || + !ai_StrongOpponent(oCreature, oTarget)) return FALSE; + ai_UseFeat(oCreature, FEAT_SMITE_GOOD, oTarget); + return TRUE; +} +int ai_TryStunningFistFeat(object oCreature, object oTarget) +{ + // Cannot use if we have a weapon equiped. + if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature) != OBJECT_INVALID) return FALSE; + // Does not work on creatures that cannot be hit by criticals or stunned. + // Stunning Fists has a -4 atk adjustment. + if(!GetHasFeat(FEAT_STUNNING_FIST, oCreature) || + GetIsImmune(oTarget, IMMUNITY_TYPE_CRITICAL_HIT) || + GetIsImmune(oTarget, IMMUNITY_TYPE_STUN) || + !ai_StrongOpponent(oCreature, oTarget) || + !ai_AttackPenaltyOk(oCreature, oTarget, -4.0)) return FALSE; + ai_UseFeat(oCreature, FEAT_STUNNING_FIST, oTarget); + return TRUE; +} +void ai_NameAssociate(object oCreature, int nAssociateType, string sName) +{ + object oAssociate = GetAssociate(nAssociateType, oCreature); + if(GetName(oCreature) != "") return; + SetName(oAssociate, sName); + ChangeFaction(oAssociate, oCreature); +} +int ai_TrySummonAnimalCompanionTalent(object oCreature) +{ + if(!GetHasFeat(FEAT_ANIMAL_COMPANION, oCreature)) return FALSE; + if(GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCreature) != OBJECT_INVALID) return FALSE; + ai_UseFeat(oCreature, FEAT_ANIMAL_COMPANION, oCreature); + DelayCommand(0.0, ai_NameAssociate(oCreature, ASSOCIATE_TYPE_FAMILIAR, "Animal Companion")); + return TRUE; +} +int ai_TrySummonFamiliarTalent(object oCreature) +{ + if(!GetHasFeat(FEAT_SUMMON_FAMILIAR, oCreature)) return FALSE; + if(GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCreature) != OBJECT_INVALID) return FALSE; + ai_UseFeat(oCreature, FEAT_SUMMON_FAMILIAR, oCreature); + DelayCommand(0.0, ai_NameAssociate(oCreature, ASSOCIATE_TYPE_FAMILIAR, "Familiar")); + return TRUE; +} +int ai_TryLayOnHands(object oCreature) +{ + if(!GetHasFeat(FEAT_LAY_ON_HANDS, oCreature)) return FALSE; + // Lets not run past an enemy to use touch atk unless we have the feats, bad tactics! + float fRange; + if(ai_CanIMoveInCombat(oCreature)) fRange = AI_RANGE_PERCEPTION; + else + { + fRange = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // Looks bad when your right next to an ally, but technically the enemy is closer. + if(fRange < AI_RANGE_MELEE) fRange = AI_RANGE_MELEE; + } + object oTarget = ai_GetLowestCRRacialTarget(oCreature, RACIAL_TYPE_UNDEAD, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + ai_UseFeat(oCreature, FEAT_LAY_ON_HANDS, oTarget); + return TRUE; +} +int ai_TryTurningTalent(object oCreature) +{ + if(!GetHasFeat(FEAT_TURN_UNDEAD, oCreature)) return FALSE; + if(ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1043", "Checking for Turning Targets."); + int nHDCount, nHDCount2, nRacial, nHD; + // Get characters levels. + int nClericLevel = GetLevelByClass(CLASS_TYPE_CLERIC, oCreature); + int nPaladinLevel = GetLevelByClass(CLASS_TYPE_PALADIN, oCreature); + int nBlackguardlevel = GetLevelByClass(CLASS_TYPE_BLACKGUARD, oCreature); + int nTotalLevel = GetHitDice(oCreature); + int nTurnLevel = nClericLevel; + int nClassLevel = nClericLevel; + // GZ: Since paladin levels stack when turning, blackguard levels should stack as well + // GZ: but not with the paladin levels (thus else if). + if(nBlackguardlevel - 2 > 0 && nBlackguardlevel > nPaladinLevel) + { + nClassLevel += (nBlackguardlevel - 2); + nTurnLevel += (nBlackguardlevel - 2); + } + else if(nPaladinLevel - 2 > 0) + { + nClassLevel += (nPaladinLevel - 2); + nTurnLevel += (nPaladinLevel - 2); + } + //Flags for bonus turning types + int nElemental = GetHasFeat(FEAT_AIR_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_EARTH_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_FIRE_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_WATER_DOMAIN_POWER, oCreature); + int nVermin = GetHasFeat(FEAT_PLANT_DOMAIN_POWER, oCreature); + int nConstructs = GetHasFeat(FEAT_DESTRUCTION_DOMAIN_POWER, oCreature); + int nGoodOrEvilDomain = GetHasFeat(FEAT_GOOD_DOMAIN_POWER, oCreature) + + GetHasFeat(FEAT_EVIL_DOMAIN_POWER, oCreature); + int nPlanar = GetHasFeat(854, oCreature); + // Get turning check average, modify if have the Sun Domain + int nChrMod = GetAbilityModifier(ABILITY_CHARISMA, oCreature); + int nTurnCheck = 15 + nChrMod; //The roll to apply to the max HD of undead that can be turned --> nTurnLevel + int nTurnHD = 12 + nChrMod + nClassLevel; //The number of HD of undead that can be turned. + if(GetHasFeat(FEAT_SUN_DOMAIN_POWER, oCreature)) + { + nTurnCheck += 2; + nTurnHD += 3; + } + //Determine the maximum HD of the undead that can be turned using a roll of 15 + ChrMod. + if(nTurnCheck == 15) nTurnLevel += 1; + else if(nTurnCheck >= 16 && nTurnCheck <= 18) nTurnLevel += 2; + else if(nTurnCheck >= 19 && nTurnCheck <= 21) nTurnLevel += 3; + else if(nTurnCheck >= 22) nTurnLevel += 4; + // Collect the number of HitDice we will affect. + int nCnt = 1; + object oEnemy = GetNearestCreature(7, 7, oCreature, nCnt); + while(oEnemy != OBJECT_INVALID && nHDCount < nTurnHD && GetDistanceBetween(oEnemy, oCreature) <= 20.0) + { + if(GetIsEnemy(oEnemy, oCreature) && !ai_Disabled(oEnemy)) + { + nRacial = GetRacialType(oEnemy); + nHD = 0; + if(nRacial == RACIAL_TYPE_UNDEAD) nHD = GetHitDice(oEnemy) + GetTurnResistanceHD(oEnemy); + else if(nRacial == RACIAL_TYPE_OUTSIDER && nGoodOrEvilDomain + nPlanar > 0) + { + //Planar turning decreases spell resistance against turning by 1/2 + if(nPlanar) nHD = GetHitDice(oEnemy) + (GetSpellResistance(oEnemy) / 2); + else nHD = GetHitDice(oEnemy) + GetSpellResistance(oEnemy); + } + else if(nRacial == RACIAL_TYPE_VERMIN && nVermin > 0) nHD = GetHitDice(oEnemy); + else if(nRacial == RACIAL_TYPE_ELEMENTAL && nElemental > 0) nHD = GetHitDice(oEnemy); + else if (nRacial == RACIAL_TYPE_CONSTRUCT && nConstructs > 0) nHD = GetHitDice(oEnemy); + // Only count undead we can defeat! + if(AI_DEBUG) ai_Debug("0i_talents", "1110", " nHD: " + IntToString(nHD) + + " nTurnLevel: " + IntToString(nTurnLevel) + + " nTurnHD: " + IntToString(nTurnHD) + + " nHDCount: " + IntToString(nHDCount)); + if(nHD > 0 && nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount)) nHDCount += nHD; + } + oEnemy = GetNearestCreature(7, 7, oCreature, ++nCnt); + } + if(AI_DEBUG) ai_Debug("0i_talents", "1089", "Found " + IntToString(nHDCount) + " hitdice to turn from my location."); + // Lets do one more check to see if we can get a better position to use TurnUndead. + nCnt = 1; + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(GetDistanceBetween(oCreature, oNearestEnemy) > AI_RANGE_MELEE) + { + oEnemy = oNearestEnemy; + if(AI_DEBUG) ai_Debug("0i_talents", "1126", GetName(oEnemy)); + while(oEnemy != OBJECT_INVALID && nHDCount2 < nTurnHD && GetDistanceBetween(oEnemy, oNearestEnemy) <= 20.0) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1129", GetName(oEnemy)); + if(GetIsEnemy(oEnemy, oCreature) && !ai_Disabled(oEnemy)) + { + nRacial = GetRacialType(oEnemy); + nHD = 0; + if(nRacial == RACIAL_TYPE_UNDEAD) nHD = GetHitDice(oEnemy) + GetTurnResistanceHD(oEnemy); + else if(nRacial == RACIAL_TYPE_OUTSIDER && nGoodOrEvilDomain + nPlanar > 0) + { + //Planar turning decreases spell resistance against turning by 1/2 + if(nPlanar) nHD = GetHitDice(oEnemy) + (GetSpellResistance(oEnemy) / 2); + else nHD = GetHitDice(oEnemy) + GetSpellResistance(oEnemy); + } + else if(nRacial == RACIAL_TYPE_VERMIN && nVermin > 0) nHD = GetHitDice(oEnemy); + else if(nRacial == RACIAL_TYPE_ELEMENTAL && nElemental > 0) nHD = GetHitDice(oEnemy); + else if (nRacial == RACIAL_TYPE_CONSTRUCT && nConstructs > 0) nHD = GetHitDice(oEnemy); + // Only count undead we can defeat! + if(AI_DEBUG) ai_Debug("0i_talents", "1140", " nHD: " + IntToString(nHD) + + " nTurnLevel: " + IntToString(nTurnLevel) + + " nTurnHD: " + IntToString(nTurnHD) + + " nHDCount2: " + IntToString(nHDCount2)); + if(nHD > 0 && nHD <= nTurnLevel && nHD <= (nTurnHD - nHDCount2)) nHDCount2 += nHD; + } + oEnemy = GetNearestCreature(7, 7, oNearestEnemy, ++nCnt); + } + } + if(AI_DEBUG) ai_Debug("0i_talents", "1148", "Found " + IntToString(nHDCount2) + " hitdice to turn from enemy location."); + if(nHDCount > nHDCount2) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1176", " My Location - nHDCount: " + IntToString(nHDCount) + + " >= nTurnHD / 2: " + IntToString(nTurnHD / 2)); + if(nHDCount < nTurnHD / 2) return FALSE; + ai_UseFeat(oCreature, FEAT_TURN_UNDEAD, oCreature); + return TRUE; + } + else + { + if(AI_DEBUG) ai_Debug("0i_talents", "1184", " Better location - nHDCount2: " + IntToString(nHDCount2) + + " >= nTurnHD / 2: " + IntToString(nTurnHD / 2)); + if(nHDCount2 < nTurnHD / 2) return FALSE; + ActionMoveToObject(oNearestEnemy, TRUE, 1.0f); + ai_UseFeat(oCreature, FEAT_TURN_UNDEAD, oCreature); + return TRUE; + } + return FALSE; +} +int ai_TryWhirlwindFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_WHIRLWIND_ATTACK, oCreature)) return FALSE; + // Only worth using if there are 3+ targets. + if(AI_DEBUG) ai_Debug("0i_talents", "860", "WHIRLWIND : NumOfEnemies: " + IntToString(ai_GetNumOfEnemiesInGroup(oCreature, 3.0)) + "."); + // Shortened distance so its more effective(went from 5.0 to 2.0 and up to 3.0) + if(ai_GetNumOfEnemiesInGroup(oCreature, 3.0) < d3() + 1) return FALSE; + // * DO NOT WHIRLWIND if any of the targets are "large" or bigger + // * it seldom works against such large opponents. + // * Though its okay to use Improved Whirlwind against these targets + if((!GetHasFeat(FEAT_IMPROVED_WHIRLWIND, oCreature)) || + (GetCreatureSize(ai_GetNearestEnemy(oCreature, 1, 7, 7)) >= CREATURE_SIZE_LARGE && + GetCreatureSize(ai_GetNearestEnemy(oCreature, 2, 7, 7)) >= CREATURE_SIZE_LARGE)) + ai_UseFeat(oCreature, FEAT_WHIRLWIND_ATTACK, oCreature); + return TRUE; +} +int ai_TryWholenessOfBodyFeat(object oCreature) +{ + if(!GetHasFeat(FEAT_WHOLENESS_OF_BODY, oCreature)) return FALSE; + // Get when we are suppose to heal base off conversation with PC or + // on spawn generation. + int nHp = ai_GetPercHPLoss(oCreature); + if(nHp >= AI_HEALTH_WOUNDED) return FALSE; + ai_UseFeat(oCreature, FEAT_WHOLENESS_OF_BODY, oCreature); + return TRUE; +} +//:: [PRC8] Tests & runs Awesome Blow +int ai_TryAwesomeBlowFeat(object oCreature, object oTarget) +{ + //:: FEAT_AWESOME_BLOW (5370) + if(!GetHasFeat(5370, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1250", "ai_TryAwesomeBlowFeat: Sanity Check PASSED!"); + //:: Can't Awesome Blow incorporeal creatures + if(GetLocalInt(oTarget, "X2_L_IS_INCORPOREAL") || ai_GetHasEffectType(oTarget, EFFECT_TYPE_ETHEREAL)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1255", "ai_TryAwesomeBlowFeat: Incorporealty check PASSED!"); + //:: Get sizes + int nSizeCreature = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: Must be larger than target + if(nSizeCreature <= nSizeTarget) + return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1265", "ai_TryAwesomeBlowFeat: Size check PASSED!"); + //:: Should we use Awesome Blow? + if(!ai_CanIAwesomeBlow(oCreature, oTarget)) return FALSE; + ai_UseFeat(oCreature, 5370, oTarget); + return TRUE; +} +//:: [PRC8] Tests & runs Overrun +int ai_TryOverrunFeat(object oCreature, object oTarget) +{ + //:: FEAT_OVERRUN (2811) + if(!GetHasFeat(2811, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1281", "ai_TryOverrunFeat: Sanity Check PASSED!"); + //:: Get sizes + int nSizeCreature = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: One size smaller than target at best. + if(nSizeCreature + 1 <= nSizeTarget) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1291", "ai_TryOverrunFeat: Size Check PASSED!"); + // Should we use Overrun? + if(!ai_CanIOverrun(oCreature, oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1296", "ai_TryOverrunFeat: ai_CanIOverrun Check PASSED!"); + ai_UseFeat(oCreature, 2811, oTarget); + return TRUE; +} +//:: [PRC8] Tests & runs Bullrush +int ai_TryBullrushFeat(object oCreature, object oTarget) +{ + //:: FEAT_BULLRUSH (2810) + //:: FEAT_IMPROVED_BULLRUSH (2806) + //:: FEAT_BULLRUSH_CHARGE (3413) + if(!GetHasFeat(2810 /* FEAT_BULLRUSH */, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1312", "ai_TryBullrushFeat: Sanity Check PASSED!"); + //:: Get sizes + int nSizeCreature = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: One size smaller than target at best + if(nSizeCreature + 1 <= nSizeTarget) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1322", "ai_TryBullrushFeat: Size Check PASSED!"); + if(d10() > 5) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1327", "ai_TryBullrushFeat: Randomizer PASSED!"); + //:: Verify if attempt is reasonable + if(!ai_CanIBullrush(oCreature, oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1333", "ai_TryBullrushFeat: ai_CanIBullrush Check PASSED!"); + //:: Decide whether to charge or not + float fDistance = GetDistanceBetween(oCreature, oTarget); + if (fDistance > 3.0 && GetHasFeat(3413 /* FEAT_BULLRUSH_CHARGE */, oCreature)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1335", "ai_TryBullrushFeat: Using Bullrush Charge."); + ai_UseFeat(oCreature, 3413 /* FEAT_BULLRUSH_CHARGE */, oTarget); + } + else + { + if(AI_DEBUG) ai_Debug("0i_talents", "1340", "ai_TryBullrushFeat: Using Bullrush."); + ai_UseFeat(oCreature, 2810 /* FEAT_BULLRUSH */, oTarget); //:: + } + return TRUE; +} +//:: [PRC8] Tests & runs Ranged Disarm +int ai_TryRangedDisarmFeat(object oCreature, object oTarget) +{ + //:: Sanity checks + if(!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if(!GetHasFeat(5192 /*FEAT_RANGED_DISARM*/, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1339", "ai_TryRangedDisarmFeat: Sanity Check PASSED!"); + //:: Must have a ranged weapon equipped + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + if(!GetIsObjectValid(oWeapon) || !GetWeaponRanged(oWeapon)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1345", "ai_TryRangedDisarmFeat: Equipped w/ Bow Check PASSED!"); + //:: Target must be disarmable + if(!GetLocalInt(GetModule(), "PRC_PNP_DISARM") && !GetIsCreatureDisarmable(oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1350", "ai_TryRangedDisarmFeat: Target Disarmable Check PASSED!"); + //:: Target must be holding a weapon + object oTargetWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!GetIsObjectValid(oTargetWeapon)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1350", "ai_TryRangedDisarmFeat: Target Armed Check PASSED!"); + //:: Check range to target - max 30 feet for this feat + if(GetDistanceBetween(oCreature, oTarget) > 30.0) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1350", "ai_TryRangedDisarmFeat: Target Distance Check PASSED!"); + int nOWeaponType = GetBaseItemType(oWeapon); + int nOWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nOWeaponType)); + int nEWeaponType = GetBaseItemType(oTargetWeapon); + int nEWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nEWeaponType)); + int nSizeBonus = (nOWeaponSize - nEWeaponSize) * 4; + //:: Attack penalty check + if (!ai_AttackPenaltyOk(oCreature, oTarget, IntToFloat(nSizeBonus))) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1350", "ai_TryRangedDisarmFeat: Attack Check PASSED!"); + //:: Execute the feat use + ai_UseFeat(oCreature, 5192 /*FEAT_RANGED_DISARM*/, oTarget); + return TRUE; +} +//:: [PRC8] Tests & runs Swarm of Arrows +int ai_TrySwarmofArrowsFeat(object oCreature) +{ + //:: Sanity checks + if(!GetIsObjectValid(oCreature)) return FALSE; + if(!GetHasFeat(25995 /*FEAT_EPIC_SWARM_OF_ARROWS*/, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1369", "ai_TrySwarmofArrowsFeat: Sanity Check PASSED!"); + //:: Must have a longbow or shortbow equipped + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + int nBaseItem = GetBaseItemType(oWeapon); + if(!GetIsObjectValid(oWeapon)) return FALSE; + if(nBaseItem != BASE_ITEM_LONGBOW && nBaseItem != BASE_ITEM_SHORTBOW) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1377", "ai_TrySwarmofArrowsFeat: Weapon Check PASSED!"); + //:: Are we in melee combat? + //int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //if( !ai_CanIUseRangedWeapon(oCreature, nInMelee)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1382", "ai_TrySwarmofArrowsFeat: Safe Distance DISABLED!"); + //:: Are there 3+ enemies to attack within 30'? + int nNumOfEnemies = ai_GetNumOfEnemiesInGroup(oCreature, FeetToMeters(30.0)); + if(nNumOfEnemies < 3) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1387", "ai_TrySwarmofArrowsFeat: "+IntToString(nNumOfEnemies)+" enemies in range, PASSED!"); + //:: Execute the feat use + ai_UseFeat(oCreature, 25995 /*FEAT_EPIC_SWARM_OF_ARROWS*/, oCreature); + return TRUE; +} +//:: [PRC8] Tests & runs Inlindl School Strike +int ai_TryInlindlSchoolFeat(object oCreature, object oTarget) +{ + if (!GetHasFeat(5284/* FEAT_INLINDL_SCHOOL */, oCreature)) return FALSE; + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature); + int nWeaponType = GetBaseItemType(oWeapon); + int nWeaponSize = StringToInt(Get2DAString("baseitems", "WeaponSize", nWeaponType)); + int nCreatureSize = GetCreatureSize(oCreature); + if(!GetIsObjectValid(oWeapon)) return FALSE; + if(nWeaponType != BASE_ITEM_RAPIER && nWeaponType != 203 /* BASE_ITEM_ELVEN_THINBLADE */ && + nWeaponType != 204 /* BASE_ITEM_ELVEN_COURTBLADE */ && + (nWeaponSize > 3 || nWeaponSize >= nCreatureSize)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1404", "ai_TryInlindlSchoolFeat: Weapon Check PASSED!"); + //:: Are we in melee combat? + if(ai_GetNumOfEnemiesInRange(oCreature) < 1) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1408", "ai_TryInlindlSchoolFeat: Melee Combat DETECTED!"); + int nShieldAC = ai_GetTotalShieldACBonus(oCreature); + if(nShieldAC < 2) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1412", "Inlindl School: Shield AC Check PASSED!"); + float fACPenalty = -1 * IntToFloat(nShieldAC); + if(AI_DEBUG) ai_Debug("0i_talents", "1416", "ai_TryInlindlSchoolFeat >> Att Bonus: " + IntToString(nShieldAC/2) + " AC Malus: "+FloatToString(fACPenalty)+"."); + if(ai_AttackBonusGood(oCreature, oTarget, IntToFloat(nShieldAC/2))) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1420", "ai_TryInlindlSchoolFeat: Att Bonus PASSED!"); + if(ai_ACAdjustmentGood(oCreature, oTarget, fACPenalty)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1424", "ai_TryInlindlSchoolFeat: AC Malus PASSED!"); + //:: Execute the feat use + ai_UseFeat(oCreature, 5284 /*FEAT_INLINDL_SCHOOL*/, oTarget); + return TRUE; +} +// ***************************************************************************** +// ******************** Try Physical Attack Talents **************************** +// ***************************************************************************** +// These functions try to find and use physical attack talents intelligently. + +void ai_ActionAttack(object oCreature, int nAction, object oTarget, int nInMelee = 0, int bPassive = FALSE, int nActionMode = 0) +{ + // If we are doing a ranged attack then check our position on the battlefield. + if(nAction == AI_LAST_ACTION_RANGED_ATK && ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nAction)) return; + ai_SetLastAction(oCreature, nAction); + SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "894", GetName(oCreature) + " is attacking(" + IntToString(nAction) + + ") " + GetName(oTarget) + " Current Action: " + IntToString(GetCurrentAction(oCreature)) + + " Lastround Attacked Target: " + GetName(ai_GetAttackedTarget(oCreature)) + + " bPassive: " + IntToString(bPassive) + " nActionMode: " + IntToString(nActionMode)); + ActionAttack(oTarget, bPassive); + if(nActionMode == 0) ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); +} +void ai_FlyToAttacks(object oCreature, object oTarget) +{ + ai_TryWingAttacks(oCreature); + // If we don't do a Tail sweep attack then see if we can do a Tail slap! + if(!ai_TryTailSweepAttack(oCreature)) ai_TryTailSlap(oCreature); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); +} +void ai_FlyToTarget(object oCreature, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "908", GetName(OBJECT_SELF) + " is flying to " + GetName(oTarget) + "!"); + effect eFly = EffectDisappearAppear(GetLocation(oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oCreature, 3.0f); + DelayCommand(4.0f, ai_FlyToAttacks(oCreature, oTarget)); + // Used to make creature wait before starting its next round. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 5); +} +int ai_TryDragonBreathAttack(object oCreature, int nRound, object oTarget = OBJECT_INVALID) +{ + int nCnt = GetLocalInt(oCreature, "AI_DRAGONS_BREATH"); + if(AI_DEBUG) ai_Debug("0i_talents", "918", "Try Dragon Breath Attack: nRound(" + IntToString(nRound) + ")" + + " <= nCnt(" + IntToString(nCnt) + ")!"); + if(nRound <= nCnt) return FALSE; + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_DRAGONS_BREATH, 20, oCreature); + if(!GetIsTalentValid(tUse)) return FALSE; + if(oTarget == OBJECT_INVALID) + { + string sIndex = IntToString(ai_GetHighestGroupIndexNotInAOE(oCreature)); + oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + if(oTarget == OBJECT_INVALID) return FALSE; + } + SetLocalInt(oCreature, "AI_DRAGONS_BREATH", d4() + nRound); + ActionCastSpellAtObject(GetIdFromTalent(tUse), oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "1019", GetName(oCreature) + " breaths on " + GetName(oTarget) + "!"); + return TRUE; +} +void ai_DragonMeleeAttack(object oCreature, object oTarget, string sDmgDice, string sText) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "941", "oAttacker: " + GetName(oCreature) + + " oTarget: " + GetName(oTarget)); + int nDmg, nCheck, nAB = ai_GetCreatureAttackBonus(oCreature) - 5; + int nAC = GetAC(oTarget); + int nRoll = d20(); + string sHit; + // nCheck is a hit if nCheck > -1 and a miss if < 0; + if(nRoll == 20) nCheck = 20; + // We add one to the check so a equal result is still a hit. + else if(nRoll > 1) nCheck = nRoll + nAB - nAC + 1; + else nCheck == 0; + if(nCheck > 0) + { + nDmg = ai_RollDiceString(sDmgDice); + if(nCheck == 20) nDmg = nDmg * 2; + } + if(nCheck > 0) sHit = "*hit*"; + else sHit = "*miss*"; + string sMessage = ai_AddColorToText(GetName(oCreature) + "'s", AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(sText + "attacks " + GetName(oTarget) + " : " + sHit + " :(" + + IntToString(nRoll) + " + " + IntToString(nAB) + + " = " + IntToString(nRoll + nAB) + ")", AI_COLOR_DARK_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oCreature, sMessage); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + if(AI_DEBUG) ai_Debug("0i_talents", "965", "nAB: " + IntToString(nAB) + + " nAC: " + IntToString(nAC) + " nRoll: " + IntToString(nRoll) + + " nCheck: " + IntToString(nCheck) + " nDmg: " + IntToString(nDmg)); + if(nCheck <= 0) return; + // Apply any damage to the target! + effect eDmg = EffectDamage(nDmg, DAMAGE_TYPE_BLUDGEONING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); +} +// Checks to see if a dragon can use its wings on a nearby enemy. +// Checks the right side and then the left side to see if it can attack. +int ai_TryWingAttacks(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "977", GetName(oCreature) + " is checking for wing Attacks!"); + // Only Medium size dragons can use thier wings in combat. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-39, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 5) return FALSE; + int nDragonSize; + string sDmgDice, sMessage; + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 12) { fSize = 5.0f; nDragonSize = 3; sDmgDice = "1d4"; } // Medium + else if(nHitDice < 18) { fSize = 10.0f; nDragonSize = 4; sDmgDice = "1d6"; } // Large + else if(nHitDice < 30) { fSize = 10.0f; nDragonSize = 5; sDmgDice = "1d8"; } // Huge + else if(nHitDice < 40) { fSize = 15.0f; nDragonSize = 6; sDmgDice = "2d6"; } // Gargantuan + else { fSize = 15.0f; nDragonSize = 7; sDmgDice = "2d8"; } // Colossal + // Add half the dragons strength modifier. + int nDmg = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmg > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmg / 2); + if(AI_DEBUG) ai_Debug("0i_talents", "994", "nHitDice: " + IntToString(nHitDice) + + " nDragonSize: " + IntToString(nDragonSize) + + " sDmgDice: " + sDmgDice + " nDmg: " + IntToString(nDmg)); + // Get the closest enemy to our right wing. + location lWing = GetFlankingRightLocation(oCreature); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lWing); + while(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1002", "oTarget: " + GetName(oTarget)); + if(GetIsEnemy(oTarget, oCreature) && !GetIsDead(oTarget)) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lWing); + } + if(oTarget != OBJECT_INVALID) ai_DragonMeleeAttack(oCreature, oTarget, sDmgDice, " right wing "); + // Get the closest enemy to our left wing. + lWing = GetFlankingLeftLocation(oCreature); + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lWing); + while(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1012", "oTarget: " + GetName(oTarget)); + if(GetIsEnemy(oTarget, oCreature) && !GetIsDead(oTarget)) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lWing); + } + if(oTarget != OBJECT_INVALID) ai_DragonMeleeAttack(oCreature, oTarget, sDmgDice, " left wing "); + return TRUE; +} +// Looks behind the dragon to see if it can use it's tail slap on an enemy. +int ai_TryTailSlap(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1022", GetName(OBJECT_SELF) + " is checking for tail slap Attack!"); + // Only Large size dragons can use thier tail in combat. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-39, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 11) return FALSE; + int nDragonSize; + string sDmgDice, sMessage; + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 12) { fSize = 5.0f; nDragonSize = 3; sDmgDice = "1d4"; } // Medium + else if(nHitDice < 18) { fSize = 10.0f; nDragonSize = 4; sDmgDice = "1d6"; } // Large + else if(nHitDice < 30) { fSize = 10.0f; nDragonSize = 5; sDmgDice = "1d8"; } // Huge + else if(nHitDice < 40) { fSize = 15.0f; nDragonSize = 6; sDmgDice = "2d6"; } // Gargantuan + else { fSize = 15.0f; nDragonSize = 7; sDmgDice = "2d8"; } // Colossal + // Add one and a half the dragons strength modifier. + int nDmg = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmg > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmg + nDmg / 2); + if(AI_DEBUG) ai_Debug("0i_talents", "1039", "nHitDice: " + IntToString(nHitDice) + + " nDragonSize: " + IntToString(nDragonSize) + + " sDmgDice: " + sDmgDice + " nDmg: " + IntToString(nDmg)); + // Get the closest enemy to our tail. + location lTail = GetBehindLocation(oCreature); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lTail); + while(oTarget != OBJECT_INVALID) + { + if(GetIsEnemy(oTarget, oCreature) && !GetIsDead(oTarget)) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lTail); + } + if(oTarget != OBJECT_INVALID) ai_DragonMeleeAttack(oCreature, oTarget, sDmgDice, " tail ");\ + return TRUE; +} +void ai_CrushEffect(object oCreature, object oBaseTarget, int nHitDice) +{ + int nDragonSize, nAtkValue, nDC = ai_GetDragonDC(oCreature); + string sDmgDice, sMessage; + location lImpact = GetLocation(oBaseTarget); + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 30) { fSize = 15.0f; nDragonSize = 5; sDmgDice = "2d8"; } // Huge + else if(nHitDice < 40) { fSize = 25.0f; nDragonSize = 6; sDmgDice = "4d6"; } // Gargantuan + else { fSize = 45.0f; nDragonSize = 7; sDmgDice = "4d8"; } // Colossal + // Add the dragons strength modifier 1.5 times. + int nDmgBonus = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmgBonus > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmgBonus + nDmgBonus / 2); + // Dragon flies up and then crushes the area below it. + effect eDmg, eKnockDown = EffectKnockdown(); + effect eImpact = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lImpact); + while(oTarget != OBJECT_INVALID) + { + if(ai_GetIsCharacter(oTarget)) DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget)); + // If they have evasion they automatically dodge the crush attack. + if(!GetHasFeat(FEAT_EVASION, oTarget) && oTarget != oCreature) + { + if(!ReflexSave(oTarget, nDC, SAVING_THROW_TYPE_NONE, oCreature)) + { + eDmg =EffectDamage(ai_RollDiceString(sDmgDice), DAMAGE_TYPE_BLUDGEONING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + sMessage = ai_AddColorToText(GetName(oCreature), AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(" crushes " + GetName(oTarget) + ".", AI_COLOR_DARK_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + // Must be 3 sizes smaller to be affected by extra damage and knockdown. + if(nDragonSize - 2 < GetCreatureSize(oTarget)) + { + if(!GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN)) + { + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oTarget, 6.0f); + } + } + } + } + else + { + if(ai_GetIsCharacter(oTarget)) + { + sMessage = ai_AddColorToText(GetName(oTarget), AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(" dodges the crush attack from " + GetName(oTarget) + ".", AI_COLOR_DARK_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lImpact); + } + // Now do normal attacks! + ai_FlyToAttacks(oCreature, oBaseTarget); +} +int ai_TryCrushAttack(object oCreature, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1110", GetName(OBJECT_SELF) + " is checking for crush Attack!"); + // Only Huge size dragons can use crush attack. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-39, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 17) return FALSE; + int nCrush = GetLocalInt(oCreature, "0_DRAGON_CRUSH") - 1; + if(nCrush > 0) + { + SetLocalInt(oCreature, "0_DRAGON_CRUSH", nCrush); + return FALSE; + } + effect eFly = EffectDisappearAppear(GetLocation(oTarget)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oCreature, 3.0f); + DelayCommand(4.0f, ai_CrushEffect(oCreature, oTarget, nHitDice)); + // Used to make creature wait before starting its next round. + SetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS, 5); + // We only crush every 3 rounds if we can. + SetLocalInt(oCreature, "0_DRAGON_CRUSH", 3); + return TRUE; +} +int ai_TryTailSweepAttack(object oCreature) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1132", GetName(oCreature) + " is checking for tail sweep Attack!"); + // Only Gargantuan size dragons can use tail sweep attack. + // We use HitDice to base size S:1-5, M:6-11, L:12-17, H:18-29, G:30-40, C:40+. + int nHitDice = GetHitDice(oCreature); + if(nHitDice <= 29) return FALSE; + int nSweep = GetLocalInt(oCreature, "0_DRAGON_SWEEP") - 1; + if(nSweep > 0) + { + SetLocalInt(oCreature, "0_DRAGON_SWEEP", nSweep); + return FALSE; + } + int nDragonSize, nAtkValue, nDC = ai_GetDragonDC(oCreature); + string sDmgDice, sMessage; + float fSize; + // Get the stats based on the size of the dragon. + if(nHitDice < 33) { fSize = 15.0f; nDragonSize = 6; sDmgDice = "2d6"; } // Gargantuan + else { fSize = 40.0f; nDragonSize = 7; sDmgDice = "2d8"; } // Colossal + location lImpact = GetBehindLocation(oCreature); + // We always sweep if we have the opportunity. + // Add the dragons strength modifier 1.5 times. + int nDmgBonus = GetAbilityModifier(ABILITY_STRENGTH, oCreature); + if(nDmgBonus > 0) sDmgDice = sDmgDice + "+" + IntToString(nDmgBonus + nDmgBonus / 2); + // Sweeps any creatures behind them. + effect eDmg; + effect eKnockDown = EffectKnockdown(); + object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fSize, lImpact); + while(oTarget != OBJECT_INVALID) + { + sMessage = ai_AddColorToText(GetName(oCreature), AI_COLOR_LIGHT_MAGENTA) + + ai_AddColorToText(" sweeps " + GetName(oTarget) + ".", AI_COLOR_ORANGE); + if(ai_GetIsCharacter(oTarget)) SendMessageToPC(oTarget, sMessage); + // If they have evasion they automatically dodge the sweep attack. + if(!GetHasFeat(FEAT_EVASION, oTarget) && oTarget != oCreature) + { + if(!ReflexSave(oTarget, nDC, SAVING_THROW_TYPE_NONE, oCreature)) + { + eDmg = EffectDamage(ai_RollDiceString(sDmgDice), DAMAGE_TYPE_BLUDGEONING); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eDmg, oTarget); + // Must be 4 sizes smaller to be affected by extra damage and knockdown. + if(nDragonSize - 3 < GetCreatureSize(oTarget)) + { + if(!GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN)) + { + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockDown, oTarget, 12.0f); + } + } + } + } + oTarget = GetNextObjectInShape(SHAPE_SPHERE, fSize, lImpact); + } + // We only sweep every 3 rounds if we can. + SetLocalInt(oCreature, "0_DRAGON_SWEEP", 3); + return TRUE; +} +int ai_TrySneakAttack(object oCreature, int nInMelee, int bAlwaysAtk = TRUE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1188", GetName(OBJECT_SELF) + " is checking for melee Sneak Attack!"); + if(!GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) return FALSE; + // Lets get the nearest target that is attacking someone besides me. + object oTarget = OBJECT_INVALID; + oTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + string sIndex; + // Check if we have Mobility, Spring Attack or a good tumble. + // if we do then look for other targets besides who we are in melee with. + if(!nInMelee) sIndex = IntToString(ai_GetBestSneakAttackIndex(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk)); + // If there are few enemies then we can safely move around. + else if(nInMelee < 3 || ai_CanIMoveInCombat(oCreature)) + { + sIndex = IntToString(ai_GetBestSneakAttackIndex(oCreature, AI_RANGE_MELEE)); + } + // Ok we are in a serious fight so lets not give attack of opportunities. + else sIndex = IntToString(ai_GetNearestPhysicalIndex(oCreature, AI_RANGE_MELEE)); + oTarget = GetLocalObject(oCreature, AI_ENEMY + sIndex); + } + if(oTarget == OBJECT_INVALID) return FALSE; + int nRacialType = GetRacialType(oTarget); + if(nRacialType == RACIAL_TYPE_CONSTRUCT || nRacialType == RACIAL_TYPE_UNDEAD) return FALSE; + if(ai_GetHasEffectType(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) return FALSE; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return TRUE; +} +int ai_TryRangedSneakAttack(object oCreature, int nInMelee) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1209", GetName(oCreature) + " is checking for a Ranged Sneak Attack!"); + // If we have Sneak Attack then we should be attacking targets that + // are busy fighting so we can get extra damage. + if(!GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) return FALSE; + object oTarget = OBJECT_INVALID; + oTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = GetLocalObject(oCreature, AI_ENEMY + IntToString(ai_GetBestSneakAttackIndex(oCreature))); + if(oTarget == OBJECT_INVALID) return FALSE; + int nRacialType = GetRacialType(oTarget); + if(nRacialType == RACIAL_TYPE_CONSTRUCT || nRacialType == RACIAL_TYPE_UNDEAD) return FALSE; + if(ai_GetHasEffectType(oTarget, IMMUNITY_TYPE_CRITICAL_HIT)) return FALSE; + // If we have a target and are not within 30' then move within 30'. + if(GetDistanceToObject(oTarget) > AI_RANGE_CLOSE) ActionMoveToObject(oTarget, TRUE, AI_RANGE_CLOSE); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return TRUE; +} +int ai_TryRangedTalents(object oCreature, object oTarget, int nInMelee) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1593", "Check category melee talents!"); + if(ai_TryRapidShotFeat(oCreature, oTarget, nInMelee)) return TRUE; + return FALSE; +} +int ai_TryMeleeTalents(object oCreature, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1224", "Check category melee talents!"); + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_MELEE, 20, oCreature); + if(!GetIsTalentValid(tUse)) return FALSE; + int nId = GetIdFromTalent(tUse); + if(AI_DEBUG) ai_Debug("0i_talents", "1228", "TALENT_CATEGORY_MELEE_TALENTS nId: " + IntToString(nId)); + if(nId == FEAT_POWER_ATTACK) { if(ai_TryPowerAttackFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_EXPERTISE) { if(ai_TryExpertiseFeat(oCreature)) return TRUE; } + else if(nId == FEAT_KNOCKDOWN) { if(ai_TryKnockdownFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_SMITE_EVIL) { if(ai_TrySmiteEvilFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_SMITE_GOOD) { if(ai_TrySmiteGoodFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_IMPROVED_POWER_ATTACK) { if(ai_TryImprovedPowerAttackFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_IMPROVED_EXPERTISE) { if(ai_TryImprovedExpertiseFeat(oCreature)) return TRUE; } + else if(nId == FEAT_FLURRY_OF_BLOWS) { if(ai_TryFlurryOfBlowsFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_STUNNING_FIST) { if(ai_TryStunningFistFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_SAP) { if(ai_TrySapFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_DISARM) { if(ai_TryDisarmFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_KI_DAMAGE) { if(ai_TryKiDamageFeat(oCreature, oTarget)) return TRUE; } + else if(nId == FEAT_CALLED_SHOT) { if(ai_TryCalledShotFeat(oCreature, oTarget)) return TRUE; } + else if(GetLocalInt(GetModule(), AI_USING_PRC)) + { + if(nId == 2822) { if(ai_TryTripping(oCreature, oTarget)) return TRUE; } //:: FEAT_CM_TRIP (2822) + else if(nId == 2823) { if(ai_TryCharging(oCreature, oTarget)) return TRUE; } //:: FEAT_CM_CHARGE (2823) + else if(nId == 5370) { if(ai_TryAwesomeBlowFeat(oCreature, oTarget)) return TRUE; } //:: FEAT_AWESOME_BLOW (5370) + else if(nId == 2810) { if(ai_TryBullrushFeat(oCreature, oTarget)) return TRUE; } //:: FEAT_BULLRUSH (2810) + else if(nId == 3414) { if(ai_TryGrappling(oCreature, oTarget)) return TRUE; } //:: FEAT_CM_GRAPPLE (3414) + else if(nId == 2811) { if(ai_TryOverrunFeat(oCreature, oTarget)) return TRUE; } //:: FEAT_OVERRUN (2811) + else if(nId == 5284) { if(ai_TryInlindlSchoolFeat(oCreature, oTarget)) return TRUE; } //:: FEAT_INLINDL_SCHOOL (5284) + } + return FALSE; +} +//:: [PRC8] Tests & runs Trip +int ai_TryTripping(object oCreature, object oTarget) +{ + //:: FEAT_TRIP (2822) + //:: FEAT_IMPROVED_TRIP (2807) + //:: Sanity checks + if(!GetIsObjectValid(oCreature) || !GetIsObjectValid(oTarget)) return FALSE; + if(!GetHasFeat(2822, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1862", "ai_TryTripping: Sanity Checks PASSED!"); + /* int nCoolDown = GetLocalInt(oCreature, "AI_TRIP_COOLDOWN"); + if(nCoolDown > 0) + { + SetLocalInt(oCreature, "AI_TRIP_COOLDOWN", --nCoolDown); + return FALSE; + } */ + int nMySize = GetCreatureSize(oCreature); + int nTheirSize = GetCreatureSize(oTarget); + //:: Prevent silly use of knockdown on immune or too-large targets. + if(GetIsImmune(oTarget, IMMUNITY_TYPE_KNOCKDOWN) || nTheirSize > nMySize + 1) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1879", "ai_TryTripping: Immunity Checks PASSED!"); + if(!ai_CanITrip(oCreature, oTarget)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1883", "ai_TryTripping: ai_CanITrip Check PASSED!"); + ai_UseFeat(oCreature, 2822 /* FEAT_TRIP */, oTarget); + //SetLocalInt(oCreature, "AI_TRIP_COOLDOWN", AI_TRIP_COOLDOWN); + return TRUE; +} +//:: [PRC8] Tests & runs Charge +int ai_TryCharging(object oCreature, object oTarget) +{ + //:: FEAT_CM_CHARGE (2823) + //:: FEAT_BULLRUSH_CHARGE (3413) + //:: FEAT_MINOTAUR_CHARGE (4668) + //:: FEAT_ACROBATIC_CHARGE (2808) + //:: FEAT_SHIELD_CHARGE (3256) + //:: FEAT_POWERFUL_CHARGE (3506) + //:: FEAT_GREATER_POWERFUL_CHARGE (3507) + //:: FEAT_RHINO_TRIBE_CHARGE (3508) + //:: FEAT_FURIOUS_CHARGE (3509) + //:: FEAT_RECKLESS_CHARGE (3510) + //:: FEAT_COBALT_CHARGE (8878) + if (!GetHasFeat(2823, oCreature)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1901", "ai_TryCharging: Sanity Check PASSED!"); + int nChargeScore = GetHasFeat(2823, oCreature) + // FEAT_CM_CHARGE + GetHasFeat(3413, oCreature) + // FEAT_BULLRUSH_CHARGE + GetHasFeat(4668, oCreature) + // Minotaur + GetHasFeat(2808, oCreature) + // Acrobatic + GetHasFeat(3256, oCreature) + // Shield + GetHasFeat(3506, oCreature) + // Powerful + GetHasFeat(3507, oCreature) + // Greater Powerful + GetHasFeat(3508, oCreature) + // Rhino Tribe + GetHasFeat(3509, oCreature) + // Furious + GetHasFeat(3510, oCreature) + // Reckless + GetHasFeat(8878, oCreature); // Cobalt + if(AI_DEBUG) ai_Debug("0i_talents", "1915", "ai_TryCharging: Charge Score is: "+IntToString(nChargeScore)+"."); + //:: Charge inclination threshold check + if(d20() > 7 + nChargeScore) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1921", "ai_TryCharging: Threshold Check PASSED!"); + //:: Movement check + float f2DASpeed = StringToFloat(Get2DAString("racialtypes", "Endurance", GetRacialType(oCreature))); + if(AI_DEBUG) ai_Debug("0i_talents", "1925", "ai_TryCharging >> 2DA speed is: "+FloatToString(f2DASpeed)+"."); + float fCreatureSpeed = IntToFloat(10 * GetMovementRate(oCreature)); + if(AI_DEBUG) ai_Debug("0i_talents", "1929", "ai_TryCharging >> Creature speed is: "+FloatToString(fCreatureSpeed)+"."); + float fChargeSpeed = (f2DASpeed > fCreatureSpeed) ? f2DASpeed : fCreatureSpeed; + if(AI_DEBUG) ai_Debug("0i_talents", "1929", "ai_TryCharging >> Charge speed is: "+FloatToString(fChargeSpeed)+"."); + //:: If target is too far away to reach in one round, return + if (GetDistanceBetween(oCreature, oTarget) > 2.0 * fChargeSpeed) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1935", "ai_TryCharging: Distance to Target (far) Check PASSED!"); + //:: If target is too close, return + if (GetDistanceBetween(oCreature, oTarget) < FeetToMeters(11.0)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1941", "ai_TryCharging: Distance to Target (near) Check PASSED!"); + //:: Check AB and AC gain/loss + if (!ai_AttackPenaltyOk(oCreature, oTarget, 2.0)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1945", "ai_TryCharging: Attack Mod Check PASSED!"); + if (!ai_ACAdjustmentGood(oCreature, oTarget, -2.0)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1948", "ai_TryCharging: AC Penalty Check PASSED!"); + //:: Use Charge + ai_UseFeat(oCreature, 2823 /* FEAT_CM_CHARGE */, oTarget); + return TRUE; +} +//:: [PRC8] Tests & runs Grapple +int ai_TryGrappling(object oCreature, object oTarget) +{ + //:: FEAT_CM_GRAPPLE (3414) + //:: FEAT_IMPROVED_GRAPPLE (2804) + //:: FEAT_DEVASTATING_GRAPPLE (4246) + if(!GetHasFeat(3414, oCreature)) return FALSE; + //:: Can't grapple incorporeal or ethereal creatures + if(GetLocalInt(oTarget, "X2_L_IS_INCORPOREAL") || ai_GetHasEffectType(oTarget, EFFECT_TYPE_ETHEREAL)) return FALSE; + //:: Get sizes + int nSizeCreature = GetCreatureSize(oCreature); + int nSizeTarget = GetCreatureSize(oTarget); + //:: Must not be grappling up 2+ size categories + if (nSizeTarget - nSizeCreature >= 2) return FALSE; + //:: Should we attempt a grapple? + if (!ai_CanIGrapple(oCreature, oTarget)) return FALSE; + //:: Use the grapple feat + ai_UseFeat(oCreature, 3414, oTarget); + return TRUE; +} +// ***************************************************************************** +// ***************************** TALENT SCRIPTS ****************************** +// ***************************************************************************** +// These functions do not fall into another section. + +int ai_GetMonsterTalentMaxLevel(object oCreature) +{ + return 9; + //int nMaxLevel = (ai_GetCharacterLevels(oCreature) + 1) / 2; + //if(nMaxLevel > 9) nMaxLevel = 9; + //if(AI_DEBUG) ai_Debug("0i_talents", "1258", "nMaxLevel: " + IntToString(nMaxLevel)); + //return nMaxLevel; +} +int ai_GetAssociateTalentMaxLevel(object oCreature, int nDifficulty) +{ + int nLevel = (ai_GetCharacterLevels(oCreature) + 1) / 2; + if(nLevel > 20) nLevel = 20; + int nMaxLevel = (nLevel * nDifficulty) / 20; + if(nMaxLevel < 1) nMaxLevel = 1; + if(AI_DEBUG) ai_Debug("0i_talents", "1267", "nLevel: " + IntToString(nLevel) + + " nMaxLevel: " + IntToString(nMaxLevel)); + return nMaxLevel; +} +int ai_GetHasTalent(object oCreature, int nTalent) +{ + string sCategory = Get2DAString("ai_spells", "Category", nTalent); + json jCategory = GetLocalJson(oCreature, sCategory); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + int nLevel, nSlot, nSlotIndex, nMaxSlotIndex, nSpell; + json jLevel, jTalent; + // Loop through nLevels looking for nTalent + while(nLevel <= 9) + { + // Get the array of nLevel. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(nSpell == nTalent) return TRUE; + nSlotIndex++; + } + } + nLevel++; + } + return FALSE; +} +object ai_CheckTalentForBuffing(object oCreature, string sCategory, int nSpell) +{ + // Should we buff this monster caster? Added legacy code just in case. + if(sCategory == "P" || sCategory == "E" || + (sCategory == "S" && GetLocalInt(GetModule(), AI_RULE_PRESUMMON))) return ai_GetBuffTarget(oCreature, nSpell); + return OBJECT_INVALID; +} +int ai_UseBuffTalent(object oCreature, int nClass, int nLevel, int nSlot, int nSpell, int nType, object oTarget, object oItem) +{ + if(nType == AI_TALENT_TYPE_SPELL) + { + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot)) + { + ai_CastMemorizedSpell(oCreature, nClass, nLevel, nSlot, oTarget, TRUE); + return TRUE; + } + } + else if(GetSpellUsesLeft(oCreature, nClass, nSpell)) + { + ai_CastKnownSpell(oCreature, nClass, nSpell, oTarget, TRUE); + return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + ActionCastSpellAtObject(nSpell, oTarget, 255, FALSE, 0, 0, TRUE, 255); + } + /* This will not work as there is no cheat option for using an item. + else if(nType == AI_TALENT_TYPE_ITEM) + { + int nBaseItem = GetBaseItemType(oItem); + if(!AI_BUFF_MONSTER_POTIONS && + (nBaseItem == BASE_ITEM_POTIONS || nBaseItem == BASE_ITEM_ENCHANTED_POTION)) return FALSE; + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(nIndex++ == nSlot) break; + ipProp = GetNextItemProperty(oItem); + } + // Cast items have the following: + // 1)Single_Use. + // 2-6) Charges/Use [Note: 7 is 0 charges per use]. + // 8-12) Uses/Day [Note: 13 is unlimited uses per day]. + // We set the slot to -1 to let the other function know we need this talent removed. + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses == 1) jTalent = JsonArrayInsert(jTalent, JsonInt(-1), 4); + else if(nUses > 1 && nUses < 7) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1319", "Item charges: " + IntToString(GetItemCharges(oItem))); + int nCharges = GetItemCharges(oItem); + if(nUses == 6 && nCharges == 1 || nUses == 5 && nCharges < 4 || + nUses == 4 && nCharges < 6 || nUses == 3 && nCharges < 8 || + nUses == 2 && nCharges < 10) return FALSE; + } + else if(nUses > 7 && nUses < 13) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1327", "Item uses: " + IntToString(GetItemPropertyUsesPerDayRemaining(oItem, ipProp))); + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(nUses == 8 && nPerDay == 1 || nUses == 9 && nPerDay < 4 || + nUses == 10 && nPerDay < 6 || nUses == 11 && nPerDay < 8 || + nUses == 12 && nPerDay < 10) return FASLE; + } + ActionUseItemOnObject(oItem, ipProp, oTarget, nSubIndex); + return TRUE; + } */ + return FALSE; +} +int ai_SpellRestricted(int nSpell) +{ + json jRSpells = GetLocalJson(GetModule(), AI_RULE_RESTRICTED_SPELLS); + int nIndex, nMaxIndex = JsonGetLength(jRSpells); + while(nIndex < nMaxIndex) + { + if(JsonGetInt(JsonArrayGet(jRSpells, nIndex)) == nSpell) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1703", IntToString(nSpell) + " is has been restricted and will be ignored!"); + return TRUE; + } + nIndex++; + } + return FALSE; +} +void ai_SaveTalent(object oCreature, int nClass, int nJsonLevel, int nLevel, int nSlot, int nSpell, int nType, int bMonster, int bPreBuff, int bFullBuff, object oItem = OBJECT_INVALID) +{ + // Players/Admins can restrict some spells. + if(ai_SpellRestricted(nSpell)) return; + // Get the talent category, we organize all talents by categories. + string sCategory = Get2DAString("ai_spells", "Category", nSpell); + // If it is a blank talent or it is an Area of Effect talent we skip. + if(sCategory == "" || sCategory == "A") return; + // Check to see if we should be prebuffing. + if(bMonster && bPreBuff) + { + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + if(nSpellBuffDuration == 3 || (nSpellBuffDuration == 2 && bFullBuff)) + { + object oTarget = ai_CheckTalentForBuffing(oCreature, sCategory, nSpell); + if(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1794", GetName(oCreature) + " is prebuffing with spell " + IntToString(nSpell)); + if(ai_UseBuffTalent(oCreature, nClass, nLevel, nSlot, nSpell, nType, oTarget, oItem)) return; + } + } + } + json jCategory = GetLocalJson(oCreature, sCategory); + // With no jCategory then we make one with all 0-9 levels. + if(JsonGetType(jCategory) == JSON_TYPE_NULL) + { + jCategory = JsonArray(); + jCategory = JsonArrayInsert(jCategory, JsonArray(), 0); + int nNewLevel = 9; + while(nNewLevel > 0) + { + jCategory = JsonArrayInsert(jCategory, JsonArray()); + nNewLevel--; + } + } + // Get the current Level so we can save to it. + json jLevel = JsonArrayGet(jCategory, nJsonLevel); + json jTalent = JsonArray(); + if(nType == AI_TALENT_TYPE_SPELL || nType == AI_TALENT_TYPE_SP_ABILITY) + { + jTalent = JsonArrayInsert(jTalent, JsonInt(nType), 0); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSpell)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nClass)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nLevel)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSlot)); + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + jTalent = JsonArrayInsert(jTalent, JsonInt(nType), 0); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSpell)); + jTalent = JsonArrayInsert(jTalent, JsonString(ObjectToString(oItem))); + jTalent = JsonArrayInsert(jTalent, JsonInt(nLevel)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSlot)); + } + jLevel = JsonArrayInsert(jLevel, jTalent); + jCategory = JsonArraySet(jCategory, nJsonLevel, jLevel); + SetLocalJson(oCreature, sCategory, jCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "1835", sCategory + ": " + JsonDump(jCategory, 1)); + // Set AI_MAX_TALENT if this talent is higher than the maximum. + if(nJsonLevel > GetLocalInt(oCreature, AI_MAX_TALENT + sCategory)) + { + SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nJsonLevel); + } + if(AI_DEBUG) ai_Debug("0i_talents", "1841", "AI_MAX_TALENT: " + + IntToString(GetLocalInt(oCreature, AI_MAX_TALENT + sCategory)) + + " nJsonLevel: " + IntToString(nJsonLevel)); +} +// For removing used up spell slots. +void ai_RemoveTalent(object oCreature, json jCategory, json jLevel, string sCategory, int nLevel, int nSlotIndex) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1848", "removing Talent from slot: " + IntToString(nSlotIndex)); + jLevel = JsonArrayDel(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "1850", "jLevel: " + JsonDump(jLevel, 2)); + jCategory = JsonArraySet(jCategory, nLevel, jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1852", "jCategory: " + JsonDump(jCategory, 2)); + SetLocalJson(oCreature, sCategory, jCategory); +} +// For removing Sorcerer/Bard spell levels once used up. +void ai_RemoveTalentLevel(object oCreature, json jCategory, json jLevel, string sCategory, int nLevel) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1858", "removing Talent level: " + IntToString(nLevel)); + jCategory = JsonArrayDel(jCategory, nLevel); + jCategory = JsonArraySet(jCategory, nLevel, JsonArray()); + if(AI_DEBUG) ai_Debug("0i_talents", "1861", "jCategory: " + JsonDump(jCategory, 2)); + SetLocalJson(oCreature, sCategory, jCategory); +} +/******************************************************************************* + New Set Talents by Level then category. +*******************************************************************************/ +/*void ai_SaveTalentByLevel(object oCreature, int nClass, int nJsonLevel, int nLevel, int nSlot, int nSpell, int nType, int bMonster, int bPreBuff, int bFullBuff, object oItem = OBJECT_INVALID) +{ + // Players/Admins can restrict some spells. + if(ai_SpellRestricted(nSpell)) return; + // Get the talent category, we organize all talents by categories. + string sCategory = Get2DAString("ai_spells", "Category", nSpell); + // If it is a blank talent or it is an Area of Effect talent we skip. + if(sCategory == "" || sCategory == "A") return; + // Check to see if we should be prebuffing. + if(bMonster && bPreBuff) + { + int nSpellBuffDuration = StringToInt(Get2DAString("ai_spells", "Buff_Duration", nSpell)); + if(nSpellBuffDuration == 3 || (nSpellBuffDuration == 2 && bFullBuff)) + { + object oTarget = ai_CheckTalentForBuffing(oCreature, sCategory, nSpell); + if(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1794", GetName(oCreature) + " is prebuffing with spell " + IntToString(nSpell)); + if(ai_UseBuffTalent(oCreature, nClass, nLevel, nSlot, nSpell, nType, oTarget, oItem)) return; + } + } + } + string sLevel = IntToString(nLevel); + // Get the Level saved to Json. + json jLevel = GetLocalJson(oCreature, "SPELL_LEVEL_" + sLevel); + // If jLevel is not created we set it up. + if(JsonGetType(jLevel) == JSON_TYPE_NULL) jLevel = JsonArray(); + json jTalent = JsonArray(); + if(nType == AI_TALENT_TYPE_SPELL || nType == AI_TALENT_TYPE_SP_ABILITY) + { + jTalent = JsonArrayInsert(jTalent, JsonInt(nType), 0); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSpell)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nClass)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nLevel)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSlot)); + jTalent = JsonArrayInsert(jTalent, JsonString(sCategory)); + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + jTalent = JsonArrayInsert(jTalent, JsonInt(nType), 0); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSpell)); + jTalent = JsonArrayInsert(jTalent, JsonString(ObjectToString(oItem))); + jTalent = JsonArrayInsert(jTalent, JsonInt(nLevel)); + jTalent = JsonArrayInsert(jTalent, JsonInt(nSlot)); + jTalent = JsonArrayInsert(jTalent, JsonString(sCategory)); + } + jLevel = JsonArrayInsert(jLevel, jTalent); + SetLocalJson(oCreature, "SPELL_LEVEL_" + sLevel, jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2265", sLevel + ": " + JsonDump(jLevel, 1)); + // Set AI_MAX_TALENT if this talent is higher than the maximum. + if(nJsonLevel > GetLocalInt(oCreature, AI_MAX_LEVEL + sLevel)) + { + SetLocalInt(oCreature, AI_MAX_LEVEL + sLevel, nJsonLevel); + } + if(AI_DEBUG) ai_Debug("0i_talents", "2271", "AI_MAX_LEVEL: " + + IntToString(GetLocalInt(oCreature, AI_MAX_LEVEL + sLevel)) + + " nJsonLevel: " + IntToString(nJsonLevel)); +} +// For removing used up spell slots. +void ai_RemoveTalentByLevel(object oCreature, json jLevel, int nLevel, int nSlotIndex) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "2278", "removing Talent from slot: " + IntToString(nSlotIndex)); + jLevel = JsonArrayDel(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "2280", "jLevel: " + JsonDump(jLevel, 2)); + SetLocalJson(oCreature, "SPELL_LEVEL_" + IntToString(nLevel), jLevel); +} +// For removing Sorcerer/Bard spell levels once used up. +void ai_RemoveTalentLevelByLevel(object oCreature, int nLevel) +{ + DeleteLocalJson(oCreature, "SPELL_LEVEL_" + IntToString(nLevel)); +} +void ai_SetCreatureSpellTalentsByLevel(object oCreature, int bMonster, int bPreBuff, int bFullBuff) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1417", GetName(oCreature) + ": Setting Spell Talents for combat [Buff: " + + IntToString(bMonster) + "]."); + // Cycle through all classes and spells. + int nClassPosition = 1, nMaxSlot, nLevel, nSlot, nSpell, nIndex, nMetaMagic; + int nClass = GetClassByPosition(nClassPosition, oCreature); + while(nClassPosition <= AI_MAX_CLASSES_PER_CHARACTER && nClass != CLASS_TYPE_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "nClass: " + IntToString(nClass) + + " nClassPosition: " + IntToString(nClassPosition) + + " SpellCaster: " + Get2DAString("classes", "SpellCaster", nClass) + + " Memorized: " + Get2DAString("classes", "MemorizesSpells", nClass)); + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + // Search all memorized spells for the spell. + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + // Check each level organizing from highest to lowest. + nLevel = (GetLevelByPosition(nClassPosition, oCreature) + 1) / 2; + if(nLevel > 9) nLevel = 9; + while(nLevel > -1) + { + // Check each slot within each level. + nMaxSlot = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1434", "nClass: " + IntToString(nClass) + + " nLevel: " + IntToString(nLevel) + " nMaxSlot: " + + IntToString(nMaxSlot)); + nSlot = 0; + while(nSlot < nMaxSlot) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1440", "nSlot: " + IntToString(nSlot) + " nSpell: " + + IntToString(GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot)) + " spell memorized: " + + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot) == 1) + { + nSpell = GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot); + /* Spells are already at the higher level when saved as a talent. + // Move a spell up to a different JsonLevel as higher Jsonlevel + // spells usually get cast first. + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + if(nMetaMagic > 0) + { + if(nMetaMagic == METAMAGIC_STILL) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_EXTEND) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_SILENT) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_EMPOWER) nMetaMagic = 2; + else if(nMetaMagic == METAMAGIC_MAXIMIZE) nMetaMagic = 3; + else if(nMetaMagic == METAMAGIC_QUICKEN) nMetaMagic = 4; + nAdjLevel = nLevel + nMetaMagic; + if(nAdjLevel > 9) nAdjLevel = 9; + } + else nAdjLevel = nLevel; + ai_SaveTalentByLevel(oCreature, nClass, nLevel, nLevel, nSlot, nSpell, AI_TALENT_TYPE_SPELL, bMonster, bPreBuff, bFullBuff); + } + nSlot++; + } + nLevel--; + } + } + // Check non-memorized known lists for the spell. + else + { + // Check each level starting with the highest to lowest. + nLevel = (GetLevelByPosition(nClassPosition, oCreature) + 1) / 2; + if(nLevel > 9) nLevel = 9; + while(nLevel > -1) + { + // Check each slot within each level. + nMaxSlot = GetKnownSpellCount(oCreature, nClass, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1462", "nClass: " + IntToString(nClass) + + " nLevel: " + IntToString(nLevel) + " nMaxSlot: " + + IntToString(nMaxSlot)); + nSlot = 0; + while(nSlot < nMaxSlot) + { + nSpell = GetKnownSpellId(oCreature, nClass, nLevel, nSlot); + if(AI_DEBUG) ai_Debug("0i_talents", "1469", "nSlot: " + IntToString(nSlot) + + " nSpell: " + IntToString(nSpell) + " nUsesLeft: " + + IntToString(GetSpellUsesLeft(oCreature, nClass, nSpell))); + if(GetSpellUsesLeft(oCreature, nClass, nSpell) > 0) + { + ai_SaveTalentByLevel(oCreature, nClass, nLevel, nLevel, nSlot, nSpell, AI_TALENT_TYPE_SPELL, bMonster, bPreBuff, bFullBuff); + } + nSlot++; + } + nLevel--; + } + } + } + nClassPosition++; + nClass = GetClassByPosition(nClassPosition, oCreature); + } +} +void ai_SetCreatureSpecialAbilityTalentsByLevel(object oCreature, int bMonster, int bPreBuff, int bFullBuff) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1488", GetName(oCreature) + ": Setting Special Ability Talents for combat."); + // Cycle through all the creatures special abilities. + int nMaxSpecialAbilities = GetSpellAbilityCount(oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "1491", IntToString(nMaxSpecialAbilities) + " Spell abilities."); + if(nMaxSpecialAbilities) + { + int nIndex, nSpell, nLevel; + while(nIndex < nMaxSpecialAbilities) + { + nSpell = GetSpellAbilitySpell(oCreature, nIndex); + if(GetSpellAbilityReady(oCreature, nSpell)) + { + nLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + ai_SaveTalentByLevel(oCreature, 255, nLevel, nLevel, nIndex, nSpell, AI_TALENT_TYPE_SP_ABILITY, bMonster, bPreBuff, bFullBuff); + } + nIndex++; + } + } +} +void ai_CheckItemPropertiesByLevel(object oCreature, object oItem, int bMonster, int bPreBuff, int bFullBuff, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1509", "Checking Item properties on " + GetName(oItem)); + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return; + // Get or create an Immunity in json so we can check item immunities quickly. + int nSpellImmunity, bHasItemImmunity, nPerDay, nCharges, nUses, bSaveTalent; + json jImmunity = GetLocalJson(oCreature, AI_TALENT_IMMUNITY); + if(JsonGetType(jImmunity) == JSON_TYPE_NULL) jImmunity = JsonArray(); + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + nIPType = GetItemPropertyType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1895", "ItempropertyType(15/80/53): " + IntToString(nIPType)); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + bSaveTalent = TRUE; + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + nCharges = GetItemCharges(oItem); + if(AI_DEBUG) ai_Debug("0i_talents", "1530", "Charges per use: " + IntToString(nUses) + + " Item charges: " + IntToString(nCharges)); + if((nUses == IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE && nCharges < 1) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE && nCharges < 2) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE && nCharges < 3) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE && nCharges < 4) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE && nCharges < 5)) bSaveTalent = FALSE; + } + else if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1676", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) bSaveTalent = FALSE; + } + if(bSaveTalent) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nLevel = StringToInt(Get2DAString("iprp_spells", "InnateLvl", nIprpSubType)); + ai_SaveTalentByLevel(oCreature, 255, nLevel, nLevel, nIndex, nSpell, AI_TALENT_TYPE_ITEM, bMonster, bPreBuff, bFullBuff, oItem); + } + } + else if(nIPType == ITEM_PROPERTY_HEALERS_KIT) + { + // Lets set Healing kits as Cure Light Wounds since they heal 1d20 in combat. + nSpell = SPELL_CURE_MINOR_WOUNDS; + // Save the healer kit as level 9 so we can use them first. + // Must also have ranks in healing kits. + if(GetSkillRank(SKILL_HEAL, oCreature) > 0) + { + ai_SaveTalent(oCreature, 255, 7, 0, nIndex, nSpell, AI_TALENT_TYPE_ITEM, bMonster, bPreBuff, bFullBuff, oItem); + } + } + if(bEquiped) + { + if(nIPType == ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL) + { + bHasItemImmunity = TRUE; + nSpellImmunity = GetItemPropertyCostTableValue(ipProp); + nSpellImmunity = StringToInt(Get2DAString("iprp_spellcost", "SpellIndex", nSpellImmunity)); + //if(AI_DEBUG) ai_Debug("0i_talents", "1950", "SpellImmunity to " + Get2DAString("spells", "Label", nSpellImmunity)); + jImmunity = JsonArrayInsert(jImmunity, JsonInt(nSpellImmunity)); + } + else if(nIPType == ITEM_PROPERTY_HASTE) + { + SetLocalInt(oCreature, sIPHasHasteVarname, TRUE); + } + else if(nIPType == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1957", "nIPSubType: " + IntToString(nIpSubType)); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPImmuneVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPResistVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_REDUCTION) + { + int nIpSubType = GetItemPropertySubType(ipProp); + SetLocalInt(oCreature, sIPReducedVarname, nIpSubType); + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + // If any Immunity has been set then we need to save our Immunity json. + if(bHasItemImmunity) SetLocalJson(oCreature, AI_TALENT_IMMUNITY, jImmunity); +} +void ai_SetCreatureItemTalentsByLevel(object oCreature, int bMonster, int bPreBuff, int bFullBuff) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1561", GetName(oCreature) + ": Setting Item Talents for combat."); + int bEquiped; + // Set the Immunities to -1 so we know they were set incase there are no immunities. + SetLocalInt(oCreature, sIPReducedVarname, -1); + string sSlots; + // Cycle through all the creatures inventory items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_talents", "1572", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") ai_CheckItemPropertiesByLevel(oCreature, oItem, bMonster, bPreBuff, bFullBuff); + } + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) ai_CheckItemPropertiesByLevel(oCreature, oItem, bMonster, bPreBuff, bFullBuff, TRUE); + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + if(oItem != OBJECT_INVALID) ai_CheckItemPropertiesByLevel(oCreature, oItem, bMonster, bPreBuff, bFullBuff, TRUE); +} +void ai_SetCreatureTalentsByLevel(object oCreature, int bMonster, int bForceTalentSetup = FALSE) +{ + //json jCreature = ObjectToJson(oCreature); + //if(AI_DEBUG) ai_Debug("0i_talents", "2072", GetName(oCreature) + " jCreature: " + JsonDump(jCreature, 4)); + if(GetLocalInt(oCreature, AI_TALENTS_SET) && !bForceTalentSetup) return; + SetLocalInt(oCreature, AI_TALENTS_SET, TRUE); + object oModule = GetModule(); + int bPreBuff = GetLocalInt(GetModule(), AI_RULE_BUFF_MONSTERS) || (GetLocalInt(oCreature, "NW_GENERIC_MASTER") & 0x04000000); + int bFullBuff = GetLocalInt(GetModule(), AI_RULE_FULL_BUFF_MONSTERS); + if(bForceTalentSetup) bPreBuff = FALSE; + ai_Counter_Start(); + ai_SetCreatureSpellTalentsByLevel(oCreature, bMonster, bPreBuff, bFullBuff); + ai_Counter_End(GetName(oCreature) + ": Spell Talents"); + ai_SetCreatureSpecialAbilityTalentsByLevel(oCreature, bMonster, bPreBuff, bFullBuff); + ai_Counter_End(GetName(oCreature) + ": Special Ability Talents"); + DeleteLocalJson(oCreature, AI_TALENT_IMMUNITY); + ai_SetCreatureItemTalentsByLevel(oCreature, bMonster, bPreBuff, bFullBuff); + ai_Counter_End(GetName(oCreature) + ": Item Talents"); + if(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS) && + GetLocalInt(oModule, AI_RULE_PRESUMMON) && bMonster && bPreBuff) + { + ai_TrySummonFamiliarTalent(oCreature); + ai_TrySummonAnimalCompanionTalent(oCreature); + } + // AI_CAT_CURE is setup differently we save the level as the highest. + //if(JsonGetType(GetLocalJson(oCreature, AI_TALENT_CURE)) != JSON_TYPE_NULL) SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, 9); + // With spontaneous cure spells we need to clear this as the number of spells don't count. + //if(GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_HEALING, 0); +} */ +/******************************************************************************* + Old Set talents by category then level. +*******************************************************************************/ +void ai_SetCreatureSpellTalents(object oCreature, int bMonster, int bPreBuff, int bFullBuff) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1417", GetName(oCreature) + ": Setting Spell Talents for combat [Buff: " + + IntToString(bMonster) + "]."); + // Cycle through all classes and spells. + int nClassPosition = 1, nMaxSlot, nLevel, nSlot, nSpell, nIndex, nMetaMagic; + int nClass = GetClassByPosition(nClassPosition, oCreature); + while(nClassPosition <= AI_MAX_CLASSES_PER_CHARACTER && nClass != CLASS_TYPE_INVALID) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "nClass: " + IntToString(nClass) + + " nClassPosition: " + IntToString(nClassPosition) + + " SpellCaster: " + Get2DAString("classes", "SpellCaster", nClass) + + " Memorized: " + Get2DAString("classes", "MemorizesSpells", nClass)); + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + // Search all memorized spells for the spell. + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + // Check each level organizing from highest to lowest. + nLevel = (GetLevelByPosition(nClassPosition, oCreature) + 1) / 2; + if(nLevel > 9) nLevel = 9; + while(nLevel > -1) + { + // Check each slot within each level. + nMaxSlot = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1434", "nClass: " + IntToString(nClass) + + " nLevel: " + IntToString(nLevel) + " nMaxSlot: " + + IntToString(nMaxSlot)); + nSlot = 0; + while(nSlot < nMaxSlot) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1440", "nSlot: " + IntToString(nSlot) + " nSpell: " + + IntToString(GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot)) + " spell memorized: " + + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlot) == 1) + { + nSpell = GetMemorizedSpellId(oCreature, nClass, nLevel, nSlot); + /* Spells are already at the higher level when saved as a talent. + // Move a spell up to a different JsonLevel as higher Jsonlevel + // spells usually get cast first. + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + if(nMetaMagic > 0) + { + if(nMetaMagic == METAMAGIC_STILL) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_EXTEND) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_SILENT) nMetaMagic = 1; + else if(nMetaMagic == METAMAGIC_EMPOWER) nMetaMagic = 2; + else if(nMetaMagic == METAMAGIC_MAXIMIZE) nMetaMagic = 3; + else if(nMetaMagic == METAMAGIC_QUICKEN) nMetaMagic = 4; + nAdjLevel = nLevel + nMetaMagic; + if(nAdjLevel > 9) nAdjLevel = 9; + } + else nAdjLevel = nLevel; */ + ai_SaveTalent(oCreature, nClass, nLevel, nLevel, nSlot, nSpell, AI_TALENT_TYPE_SPELL, bMonster, bPreBuff, bFullBuff); + } + nSlot++; + } + nLevel--; + } + } + // Check non-memorized known lists for the spell. + else + { + // Check each level starting with the highest to lowest. + nLevel = (GetLevelByPosition(nClassPosition, oCreature) + 1) / 2; + if(nLevel > 9) nLevel = 9; + while(nLevel > -1) + { + // Check each slot within each level. + nMaxSlot = GetKnownSpellCount(oCreature, nClass, nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1462", "nClass: " + IntToString(nClass) + + " nLevel: " + IntToString(nLevel) + " nMaxSlot: " + + IntToString(nMaxSlot)); + nSlot = 0; + while(nSlot < nMaxSlot) + { + nSpell = GetKnownSpellId(oCreature, nClass, nLevel, nSlot); + if(AI_DEBUG) ai_Debug("0i_talents", "1469", "nSlot: " + IntToString(nSlot) + + " nSpell: " + IntToString(nSpell) + " nUsesLeft: " + + IntToString(GetSpellUsesLeft(oCreature, nClass, nSpell))); + if(GetSpellUsesLeft(oCreature, nClass, nSpell) > 0) + { + ai_SaveTalent(oCreature, nClass, nLevel, nLevel, nSlot, nSpell, AI_TALENT_TYPE_SPELL, bMonster, bPreBuff, bFullBuff); + } + nSlot++; + } + nLevel--; + } + } + } + nClassPosition++; + nClass = GetClassByPosition(nClassPosition, oCreature); + } +} +void ai_SetCreatureSpecialAbilityTalents(object oCreature, int bMonster, int bPreBuff, int bFullBuff) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1488", GetName(oCreature) + ": Setting Special Ability Talents for combat."); + // Cycle through all the creatures special abilities. + int nMaxSpecialAbilities = GetSpellAbilityCount(oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "1491", IntToString(nMaxSpecialAbilities) + " Spell abilities."); + if(nMaxSpecialAbilities) + { + int nIndex, nSpell, nLevel; + while(nIndex < nMaxSpecialAbilities) + { + nSpell = GetSpellAbilitySpell(oCreature, nIndex); + if(GetSpellAbilityReady(oCreature, nSpell)) + { + nLevel = StringToInt(Get2DAString("spells", "Innate", nSpell)); + ai_SaveTalent(oCreature, 255, nLevel, nLevel, nIndex, nSpell, AI_TALENT_TYPE_SP_ABILITY, bMonster, bPreBuff, bFullBuff); + } + nIndex++; + } + } +} +void ai_CheckItemProperties(object oCreature, object oItem, int bMonster, int bPreBuff, int bFullBuff, int bEquiped = FALSE) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1509", "Checking Item properties on " + GetName(oItem)); + // We have established that we can use the item if it is equiped. + if(!bEquiped && !ai_CheckIfCanUseItem(oCreature, oItem)) return; + // Get or create an Immunity in json so we can check item immunities quickly. + int nSpellImmunity, bHasItemImmunity, nPerDay, nCharges, nUses, bSaveTalent; + json jImmunity = GetLocalJson(oCreature, AI_TALENT_IMMUNITY); + if(JsonGetType(jImmunity) == JSON_TYPE_NULL) jImmunity = JsonArray(); + int nIprpSubType, nSpell, nLevel, nIPType, nIndex; + itemproperty ipProp = GetFirstItemProperty(oItem); + // Lets skip this if there are no properties. + if(!GetIsItemPropertyValid(ipProp)) return; + // Check for cast spell property and add them to the talent list. + while(GetIsItemPropertyValid(ipProp)) + { + nIPType = GetItemPropertyType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1895", "ItempropertyType(15/80/53): " + IntToString(nIPType)); + if(nIPType == ITEM_PROPERTY_CAST_SPELL) + { + bSaveTalent = TRUE; + // Get how they use the item (charges or uses per day). + nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses > 1 && nUses < 7) + { + nCharges = GetItemCharges(oItem); + if(AI_DEBUG) ai_Debug("0i_talents", "1530", "Charges per use: " + IntToString(nUses) + + " Item charges: " + IntToString(nCharges)); + if((nUses == IP_CONST_CASTSPELL_NUMUSES_1_CHARGE_PER_USE && nCharges < 1) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_2_CHARGES_PER_USE && nCharges < 2) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_3_CHARGES_PER_USE && nCharges < 3) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_4_CHARGES_PER_USE && nCharges < 4) || + (nUses == IP_CONST_CASTSPELL_NUMUSES_5_CHARGES_PER_USE && nCharges < 5)) bSaveTalent = FALSE; + } + else if(nUses > 7 && nUses < 13) + { + nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1676", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 0) bSaveTalent = FALSE; + } + if(bSaveTalent) + { + // SubType is the ip spell index for iprp_spells.2da + nIprpSubType = GetItemPropertySubType(ipProp); + nSpell = StringToInt(Get2DAString("iprp_spells", "SpellIndex", nIprpSubType)); + nLevel = StringToInt(Get2DAString("iprp_spells", "InnateLvl", nIprpSubType)); + ai_SaveTalent(oCreature, 255, nLevel, nLevel, nIndex, nSpell, AI_TALENT_TYPE_ITEM, bMonster, bPreBuff, bFullBuff, oItem); + } + } + else if(nIPType == ITEM_PROPERTY_HEALERS_KIT) + { + // Lets set Healing kits as Cure Light Wounds since they heal 1d20 in combat. + nSpell = SPELL_CURE_MINOR_WOUNDS; + // Save the healer kit as level 9 so we can use them first. + // Must also have ranks in healing kits. + if(GetSkillRank(SKILL_HEAL, oCreature) > 0) + { + ai_SaveTalent(oCreature, 255, 7, 0, nIndex, nSpell, AI_TALENT_TYPE_ITEM, bMonster, bPreBuff, bFullBuff, oItem); + } + } + if(bEquiped) + { + if(nIPType == ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL) + { + bHasItemImmunity = TRUE; + nSpellImmunity = GetItemPropertyCostTableValue(ipProp); + nSpellImmunity = StringToInt(Get2DAString("iprp_spellcost", "SpellIndex", nSpellImmunity)); + //if(AI_DEBUG) ai_Debug("0i_talents", "1950", "SpellImmunity to " + Get2DAString("spells", "Label", nSpellImmunity)); + jImmunity = JsonArrayInsert(jImmunity, JsonInt(nSpellImmunity)); + } + else if(nIPType == ITEM_PROPERTY_HASTE) + { + SetLocalInt(oCreature, sIPHasHasteVarname, TRUE); + } + else if(nIPType == ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1957", "nIPSubType: " + IntToString(nIpSubType)); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPImmuneVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_RESISTANCE) + { + int nBit, nIpSubType = GetItemPropertySubType(ipProp); + if(nIpSubType == 0) nBit = DAMAGE_TYPE_BLUDGEONING; + else if(nIpSubType == 1) nBit = DAMAGE_TYPE_PIERCING; + else if(nIpSubType == 2) nBit = DAMAGE_TYPE_SLASHING; + else if(nIpSubType == 5) nBit = DAMAGE_TYPE_MAGICAL; + else if(nIpSubType == 6) nBit = DAMAGE_TYPE_ACID; + else if(nIpSubType == 7) nBit = DAMAGE_TYPE_COLD; + else if(nIpSubType == 8) nBit = DAMAGE_TYPE_DIVINE; + else if(nIpSubType == 9) nBit = DAMAGE_TYPE_ELECTRICAL; + else if(nIpSubType == 10) nBit = DAMAGE_TYPE_FIRE; + else if(nIpSubType == 11) nBit = DAMAGE_TYPE_NEGATIVE; + else if(nIpSubType == 12) nBit = DAMAGE_TYPE_POSITIVE; + else if(nIpSubType == 13) nBit = DAMAGE_TYPE_SONIC; + if(nBit > 0) ai_SetItemProperty(oCreature, sIPResistVarname, nBit, TRUE); + } + else if(nIPType == ITEM_PROPERTY_DAMAGE_REDUCTION) + { + int nIpSubType = GetItemPropertySubType(ipProp); + SetLocalInt(oCreature, sIPReducedVarname, nIpSubType); + } + } + nIndex++; + ipProp = GetNextItemProperty(oItem); + } + // If any Immunity has been set then we need to save our Immunity json. + if(bHasItemImmunity) SetLocalJson(oCreature, AI_TALENT_IMMUNITY, jImmunity); +} +void ai_SetCreatureItemTalents(object oCreature, int bMonster, int bPreBuff, int bFullBuff) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1561", GetName(oCreature) + ": Setting Item Talents for combat."); + int bEquiped; + // Set the Immunities to -1 so we know they were set incase there are no immunities. + SetLocalInt(oCreature, sIPReducedVarname, -1); + string sSlots; + // Cycle through all the creatures inventory items. + object oItem = GetFirstItemInInventory(oCreature); + while(oItem != OBJECT_INVALID) + { + if(GetIdentified(oItem)) + { + // Does the item need to be equiped to use its powers? + sSlots = Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)); + if(AI_DEBUG) ai_Debug("0i_talents", "1572", GetName(oItem) + " requires " + Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) + " slots."); + if(sSlots == "0x00000") ai_CheckItemProperties(oCreature, oItem, bMonster, bPreBuff, bFullBuff); + } + oItem = GetNextItemInInventory(oCreature); + } + int nSlot; + // Cycle through all the creatures equiped items. + oItem = GetItemInSlot(nSlot, oCreature); + while(nSlot < 11) + { + if(oItem != OBJECT_INVALID) ai_CheckItemProperties(oCreature, oItem, bMonster, bPreBuff, bFullBuff, TRUE); + oItem = GetItemInSlot(++nSlot, oCreature); + } + oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature); + if(oItem != OBJECT_INVALID) ai_CheckItemProperties(oCreature, oItem, bMonster, bPreBuff, bFullBuff, TRUE); +} +void ai_SetCreatureTalents(object oCreature, int bMonster, int bForceTalentSetup = FALSE) +{ + //json jCreature = ObjectToJson(oCreature); + //if(AI_DEBUG) ai_Debug("0i_talents", "2072", GetName(oCreature) + " jCreature: " + JsonDump(jCreature, 4)); + if(GetLocalInt(oCreature, AI_TALENTS_SET) && !bForceTalentSetup) return; + SetLocalInt(oCreature, AI_TALENTS_SET, TRUE); + object oModule = GetModule(); + int bPreBuff = GetLocalInt(GetModule(), AI_RULE_BUFF_MONSTERS) || (GetLocalInt(oCreature, "NW_GENERIC_MASTER") & 0x04000000); + int bFullBuff = GetLocalInt(GetModule(), AI_RULE_FULL_BUFF_MONSTERS); + if(bForceTalentSetup) bPreBuff = FALSE; + ai_Counter_Start(); + ai_SetCreatureSpellTalents(oCreature, bMonster, bPreBuff, bFullBuff); + ai_Counter_End(GetName(oCreature) + ": Spell Talents"); + ai_SetCreatureSpecialAbilityTalents(oCreature, bMonster, bPreBuff, bFullBuff); + ai_Counter_End(GetName(oCreature) + ": Special Ability Talents"); + DeleteLocalJson(oCreature, AI_TALENT_IMMUNITY); + ai_SetCreatureItemTalents(oCreature, bMonster, bPreBuff, bFullBuff); + ai_Counter_End(GetName(oCreature) + ": Item Talents"); + if(GetLocalInt(oModule, AI_RULE_SUMMON_COMPANIONS) && + GetLocalInt(oModule, AI_RULE_PRESUMMON) && bMonster && bPreBuff) + { + ai_TrySummonFamiliarTalent(oCreature); + ai_TrySummonAnimalCompanionTalent(oCreature); + } + // AI_CAT_CURE is setup differently we save the level as the highest. + //if(JsonGetType(GetLocalJson(oCreature, AI_TALENT_CURE)) != JSON_TYPE_NULL) SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_CURE, 9); + // With spontaneous cure spells we need to clear this as the number of spells don't count. + //if(GetLevelByClass(CLASS_TYPE_CLERIC, oCreature)) SetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_HEALING, 0); +} +int ai_UseSpontaneousCureTalentFromCategory(object oCreature, string sCategory, int nInMelee, int nDamage, object oTarget = OBJECT_INVALID) +{ + // Get the saved category from oCreature. + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2095", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + int nLevel = 4; + // If there are no talents at lower levels then start at the lower level. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2100", AI_MAX_TALENT + sCategory + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 5) nLevel = 4; + json jLevel, jTalent, jLevelSave; + int nTalentType, nTalentClass, nTalentSlot, nSpell; + int nSlotIndex, nMaxSlotIndex, nMaxNoTalentLevel, nSpellSave, nLevelSave, nSlotSave; + string sSpellName; + // Loop through nLevels down to nMinNoTalentLevel looking for the first talent + // (i.e. the highest or best?). + while(nLevel > -1) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2116", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "2125", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nTalentType = JsonGetInt(JsonArrayGet(jTalent, 0)); + nTalentClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + // We can only convert spells from the cleric class. + if(nTalentType == AI_TALENT_TYPE_SPELL && nTalentClass == CLASS_TYPE_CLERIC) + { + if(nLevel == 4) nSpell = SPELL_CURE_CRITICAL_WOUNDS; + else if(nLevel == 3) nSpell = SPELL_CURE_SERIOUS_WOUNDS; + else if(nLevel == 2) nSpell = SPELL_CURE_MODERATE_WOUNDS; + else if(nLevel == 1) nSpell = SPELL_CURE_LIGHT_WOUNDS; + else nSpell = 0; + if(AI_DEBUG) ai_Debug("0i_talents", "2137", "nSpell: " + IntToString(nSpell)); + if(nSpell) + { + if(ai_ShouldWeCastThisCureSpell(nSpell, nDamage)) + { + + nTalentSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + SetMemorizedSpellReady(oCreature, nTalentClass, nLevel, nTalentSlot, FALSE); + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(ai_GetIsCharacter(oCreature)) ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oCreature); + if(AI_DEBUG) ai_Debug("0i_talents", "2148", GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + "."); + ActionCastSpellAtObject(nSpell, oTarget, 255, TRUE); + return TRUE; + } + // Save the lowest level cure spell as we might need to cast it. + else if(nLevel < nLevelSave) + { + jLevelSave = jLevel; + nLevelSave = nLevel; + nSlotSave = nTalentSlot; + nSpellSave = nSpell; + } + } + } + nSlotIndex++; + } + } + else SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nLevel - 1); + nLevel--; + } + // Did we find a spell? If we did then use it. + if(nSpellSave) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2171", GetName(oCreature) + " has cast the lowest level cure spell on " + GetName(oTarget) + "."); + SetMemorizedSpellReady(oCreature, CLASS_TYPE_CLERIC, nLevelSave, nSlotSave, FALSE); + ai_RemoveTalent(oCreature, jCategory, jLevelSave, sCategory, nLevelSave, nSlotSave); + sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpellSave))); + if(ai_GetIsCharacter(oCreature)) ai_SendMessages(GetName(oCreature) + " has spontaneously cast " + sSpellName + " on " + GetName(oTarget) + ".", AI_COLOR_MAGENTA, oCreature); + ActionCastSpellAtObject(nSpellSave, oTarget, 255, TRUE); + return TRUE; + } + return FALSE; +} +int ai_UseCreatureSpellTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID) +{ + // Check for polymorph, spells cannot be used while polymorphed. + if(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature)) return FALSE; + // Get the spells information so we can check if they still have it. + int nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + int nLevel = JsonGetInt(JsonArrayGet(jTalent, 3)); + int nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + if(ai_IsSilenced(oCreature, JsonGetInt(JsonArrayGet(jTalent, 2)))) + { + if(GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot) != METAMAGIC_SILENT) + { + object oAOE = GetNearestObjectByTag("VFX_MOB_SILENCE", oCreature); + float fDistance = GetDistanceBetween(oAOE, oCreature); + if(fDistance != 0.0 && fDistance <= 4.0) + { + location lLocation = GetRandomLocation(GetArea(oCreature), oCreature, 5.0); + ai_ClearCreatureActions(); + if(AI_DEBUG) ai_Debug("0i_talents", "2225", GetName(oCreature) + " is moving out of a silence effect!"); + ActionMoveToLocation(lLocation, TRUE); + return TRUE; + } + else return FALSE; + } + } + if(ai_ArcaneSpellFailureTooHigh(oCreature, nClass, nLevel, nSlot)) return FALSE; + return ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget); +} +int ai_UseCreatureItemTalent(object oCreature, json jLevel, json jTalent, string sCategory, int nInMelee, object oTarget = OBJECT_INVALID) +{ + object oItem = StringToObject(JsonGetString(JsonArrayGet(jTalent, 2))); + int nItemType = GetBaseItemType(oItem); + // Check if the item is a potion since there are some special cases. + if(nItemType == BASE_ITEM_POTIONS || nItemType == BASE_ITEM_ENCHANTED_POTION) + { + // Potions cause attack of opportunities and this could be deadly! + // Removed for healing potions as that is one time you would use potions in melee. + if(sCategory != AI_TALENT_HEALING) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1925", "Using a non-healing potion nInMelee: " + IntToString(nInMelee)); + if(nInMelee > 1) return FALSE; + // Don't use potions on allies that are not within 3 meters. + if(GetDistanceBetween(oCreature, oTarget) > 3.1) return FALSE; + } + // For now we are allowing creatures to use "give" potions to others + // unless the player is using a healing potion and has party healing turned off. + else if(oCreature != oTarget && ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + } + // Check for polymorph, only potions can be used while polymorphed. + else if(GetAppearanceType(oCreature) != ai_GetNormalAppearance(oCreature)) return FALSE; + else if(nItemType == BASE_ITEM_HEALERSKIT) + { + if(!GetLocalInt(GetModule(), AI_RULE_HEALERSKITS)) return FALSE; + if(oCreature != oTarget && ai_GetAIMode(oCreature, AI_MODE_PARTY_HEALING_OFF)) return FALSE; + if(AI_DEBUG) ai_Debug("0i_talents", "1724", "Using " + GetName(oItem) + " nInMelee: " + IntToString(nInMelee) + + " targeting: " + GetName(oTarget)); + ai_SetLastAction(oCreature, AI_LAST_ACTION_USED_ITEM); + ActionUseItemOnObject(oItem, GetFirstItemProperty(oItem), oTarget); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + return TRUE; + } + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget)) return TRUE; + return FALSE; +} +void ai_UpdateMaxTalentLevel(object oCreature, json jCategory, string sCategory, int nMaxTalentLevel, int nLevel) +{ + // We only reduce the MaxTalentLevel if this is the top most talent level. + if(nMaxTalentLevel == nLevel) + { + json jLevel = JsonArrayGet(jCategory, --nLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2331", "jLevel length: " + IntToString(JsonGetLength(jLevel))); + while(JsonGetLength(jLevel) == 0 && nLevel > -1) + { + jLevel = JsonArrayGet(jCategory, --nLevel); + } + if(AI_DEBUG) ai_Debug("0i_talents", "2335", "Setting AI_MAX_TALENT_" + sCategory + " to " + IntToString(nLevel)); + SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nLevel); + } +} +/******************************************************************************* + New talent system that checks by level then category. +*******************************************************************************/ +/*int ai_UseCreatureTalentByLevel(object oCreature, int nInMelee, int nLevel = 10, object oTarget = OBJECT_INVALID) +{ + string sLevel = IntToString(nLevel); + // Get the Max Talent Level to see if we even need to pull this talent. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_LEVEL + sLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2394", AI_MAX_LEVEL + sLevel + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel == -1) return FALSE; + // If there are no talents at higher levels then start at the lowest talent level. + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 10) nLevel = 9; + json jTalent; + int bHasTalent, nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed, nSpell; + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + int bUseMagicItems = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS); + if(AI_DEBUG) ai_Debug("0i_talents", "2413", "bUseMagic: " + IntToString(bUseMagic) + + " bUseMagicItems: " + IntToString(bUseMagicItems)); + // Loop through nLevels starting at the highest then going to the lowest. + // (i.e. the highest or best is our assumption). + // Get the saved level from oCreature. + json jLevel = GetLocalJson(oCreature, "SPELL_LEVEL_" + IntToString(nLevel)); + if(AI_DEBUG) ai_Debug("0i_talents", "3091", "jLevel: " + IntToString(nLevel) + " " + JsonDump(jLevel, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) + { + SetLocalInt(oCreature, AI_MAX_LEVEL + sCategory, -1); + return FALSE; + } + while(nLevel > -1) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2422", "Level: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + bHasTalent = TRUE; + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "2432", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(bUseMagic) + { + if(nType == AI_TALENT_TYPE_SPELL) + { + nTalentUsed = ai_UseCreatureSpellTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget); + // -1 means it was a memorized spell and we need to remove it. + if(nTalentUsed == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + return TRUE; + } + // There are no more spell slots left for non-memorizing caster so remove the level. + else if(nTalentUsed == -2) + { + ai_RemoveTalentLevel(oCreature, jCategory, jLevel, sCategory, nLevel); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + } + else if(nTalentUsed) return TRUE; + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + // Special ability spells do not need to concentrate?! + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget)) + { + // When the ability is used that slot is now not readied. + // Multiple uses of the same spell are stored in different slots. + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + return TRUE; + } + } + } + if(bUseMagicItems && nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2473", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + } + return TRUE; + } + } + //else if(nType == AI_TALENT_TYPE_FEAT) {} + nSlotIndex++; + } + } + else if(!bHasTalent) SetLocalInt(oCreature, AI_MAX_LEVEL + sCategory, nLevel - 1); + nLevel--; + } + return FALSE; +} +int ai_UseTalentByLevel(object oCreature, int nTalent, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1912", GetName(oCreature) + " is trying to use " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nTalent))) + + " on " + GetName(oTarget)); + // Get the saved category from oCreature. + string sCategory = Get2DAString("ai_spells", "Category", nTalent); + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "1917", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + json jLevel, jTalent; + int nLevel, nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed, nSpell; + // Loop through nLevels down to nMinNoTalentLevel looking for the first talent + // (i.e. the highest or best?). + while(nLevel <= 9) + { + // Get the array of nLevel. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1925", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "1936", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(nSpell == nTalent) + { + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL || nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(ai_UseTalentOnObject(oCreature, jTalent, oTarget, 0)) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, sCategory, 0, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1955", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + } + return TRUE; + } + } + } + nSlotIndex++; + } + } + nLevel++; + } + return FALSE; +} */ +/******************************************************************************* + Old talent system that checks by category then level. +*******************************************************************************/ +int ai_UseCreatureTalent(object oCreature, string sCategory, int nInMelee, int nLevel = 10, object oTarget = OBJECT_INVALID) +{ + // Get the Max Talent Level to see if we even need to pull this talent. + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2394", AI_MAX_TALENT + sCategory + ": " + + IntToString(nMaxTalentLevel) + + " nLevel: " + IntToString(nLevel)); + if(nMaxTalentLevel == -1) return FALSE; + // Get the saved category from oCreature. + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "2326", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) + { + SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, -1); + return FALSE; + } + // If there are no talents at higher levels then start at the lowest talent level. + if(nMaxTalentLevel < nLevel) nLevel = nMaxTalentLevel; + if(nLevel < 0 || nLevel > 10) nLevel = 9; + json jLevel, jTalent; + int bHasTalent, nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed, nSpell; + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + int bUseMagicItems = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC_ITEMS); + if(AI_DEBUG) ai_Debug("0i_talents", "2413", "bUseMagic: " + IntToString(bUseMagic) + + " bUseMagicItems: " + IntToString(bUseMagicItems)); + // Loop through nLevels starting at the highest then going to the lowest. + // (i.e. the highest or best is our assumption). + while(nLevel > -1) + { + // Get the array of nLevel cycling down to 0. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "2422", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + bHasTalent = TRUE; + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "2432", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(bUseMagic) + { + if(nType == AI_TALENT_TYPE_SPELL) + { + // Check to make sure they still have this spell. + nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + if(AI_DEBUG) ai_Debug("0i_talents", "3290", GetName(oCreature) + " Memorizes Spells? " + + Get2DAString("classes", "MemorizesSpells", nClass)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + if(AI_DEBUG) ai_Debug("0i_talents", "3294", " Spell Memorized? " + + IntToString(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlotIndex))); + if(GetMemorizedSpellReady(oCreature, nClass, nLevel, nSlotIndex) < 1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + } + else if(ai_UseCreatureSpellTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget)) return TRUE; + } + else if(!GetSpellUsesLeft(oCreature, nClass, JsonGetInt(JsonArrayGet(jTalent, 1)))) + { + ai_RemoveTalentLevel(oCreature, jCategory, jLevel, sCategory, nLevel); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + nTalentUsed = FALSE; + } + else if(ai_UseCreatureSpellTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget)) return TRUE; + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + // Special ability spells do not need to concentrate?! + if(ai_CheckSpecialTalentsandUse(oCreature, jTalent, sCategory, nInMelee, oTarget)) + { + // When the ability is used that slot is now not readied. + // Multiple uses of the same spell are stored in different slots. + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + return TRUE; + } + } + } + else if(bUseMagicItems && nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, sCategory, nInMelee, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2473", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + if(nMaxSlotIndex == 1) ai_UpdateMaxTalentLevel(oCreature, jCategory, sCategory, nMaxTalentLevel, nLevel); + } + return TRUE; + } + } + //else if(nType == AI_TALENT_TYPE_FEAT) {} + nSlotIndex++; + } + } + else if(!bHasTalent) SetLocalInt(oCreature, AI_MAX_TALENT + sCategory, nLevel - 1); + nLevel--; + } + return FALSE; +} +int ai_UseTalent(object oCreature, int nTalent, object oTarget) +{ + if(AI_DEBUG) ai_Debug("0i_talents", "1912", GetName(oCreature) + " is trying to use " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nTalent))) + + " on " + GetName(oTarget)); + // Get the saved category from oCreature. + string sCategory = Get2DAString("ai_spells", "Category", nTalent); + json jCategory = GetLocalJson(oCreature, sCategory); + if(AI_DEBUG) ai_Debug("0i_talents", "1917", "jCategory: " + sCategory + " " + JsonDump(jCategory, 2)); + if(JsonGetType(jCategory) == JSON_TYPE_NULL) return FALSE; + json jLevel, jTalent; + int nLevel, nClass, nSlot, nType, nSlotIndex, nMaxSlotIndex, nTalentUsed, nSpell; + // Loop through nLevels down to nMinNoTalentLevel looking for the first talent + // (i.e. the highest or best?). + while(nLevel <= 9) + { + // Get the array of nLevel. + jLevel = JsonArrayGet(jCategory, nLevel); + nMaxSlotIndex = JsonGetLength(jLevel); + if(AI_DEBUG) ai_Debug("0i_talents", "1925", "nLevel: " + IntToString(nLevel) + + " nMaxSlotIndex: " + IntToString(nMaxSlotIndex)); + if(nMaxSlotIndex > 0) + { + // Get the talent within nLevel cycling from the first to the last. + nSlotIndex = 0; + while (nSlotIndex < nMaxSlotIndex) + { + jTalent= JsonArrayGet(jLevel, nSlotIndex); + if(AI_DEBUG) ai_Debug("0i_talents", "1936", "nSlotIndex: " + IntToString(nSlotIndex) + + " jTalent Type: " + IntToString(JsonGetInt(JsonArrayGet(jTalent, 0)))); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + if(nSpell == nTalent) + { + nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL || nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(ai_UseTalentOnObject(oCreature, jTalent, oTarget, 0)) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + return TRUE; + } + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + // Items do not need to concentrate. + if(ai_UseCreatureItemTalent(oCreature, jLevel, jTalent, sCategory, 0, oTarget)) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1955", "Checking if Item is used up: " + + IntToString(JsonGetInt(JsonArrayGet(jTalent, 4)))); + if(JsonGetInt(JsonArrayGet(jTalent, 4)) == -1) + { + ai_RemoveTalent(oCreature, jCategory, jLevel, sCategory, nLevel, nSlotIndex); + } + return TRUE; + } + } + } + nSlotIndex++; + } + } + nLevel++; + } + return FALSE; +} +// Lets do a check right before we cast the spell to see if the target is still good. +void ai_CheckSpellTarget(object oCreature, object oTarget) +{ + if(GetIsDead(oTarget)) + { + //SendMessageToPC(GetFirstPC(), "0i_talents, 2864, " + GetName(oCreature) + + //" is stopping our spell casting because " + GetName(oTarget) + " is dead!"); + //WriteTimestampedLogEntry("0i_talents, 2864, " + GetName(oCreature) + + //" is stopping our spell casting because " + GetName(oTarget) + " is dead!"); + ai_ClearCreatureActions(); + ExecuteScript("0e_do_combat_rnd", oCreature); + } +} +int ai_UseTalentOnObject(object oCreature, json jTalent, object oTarget, int nInMelee, int bCheckPosition = TRUE) +{ + int nClass, nLevel, nSlot, nMetaMagic, nDomain; + int nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + int nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL) + { + if(!ai_CastInMelee(oCreature, nSpell, nInMelee)) return FALSE; + nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nLevel = JsonGetInt(JsonArrayGet(jTalent, 3)); + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + if(GetMemorizedSpellIsDomainSpell(oCreature, nClass, nLevel, nSlot) == 1) nDomain = nLevel; + else nDomain = 0; + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + } + else + { + nMetaMagic = METAMAGIC_NONE; + nDomain = 0; + } + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1790", GetName(oCreature) + " is using a special ability!"); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nClass = 255; + if(bCheckPosition && ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + object oItem = StringToObject(JsonGetString(JsonArrayGet(jTalent, 2))); + int nBaseItemType = GetBaseItemType(oItem); + if(bCheckPosition && ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell, nBaseItemType)) return TRUE; + int nIndex, nSubIndex = 0; + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(nIndex++ == nSlot) break; + ipProp = GetNextItemProperty(oItem); + } + // Cast items have the following: + // 1)Single_Use. + // 2-6) Charges/Use [Note: 7 is 0 charges per use]. + // 8-12) Uses/Day [Note: 13 is unlimited uses per day]. + // We set the slot to -1 to let the other function know we need this talent removed. + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses == 1) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1816", "Single Use item."); + if(AI_DEBUG) ai_Debug("0i_talents", "1817", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + else if(nUses > 1 && nUses < 7) + { + int nCharges = GetItemCharges(oItem); + // If the item is equipable then do not use the last charge! + if(Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) != "0x00000") + { + if(nCharges <= 7 - nUses) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "Item charges: " + IntToString(nCharges)); + if(nCharges < (7 - nUses) * 2) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1829", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + } + else if(nUses > 7 && nUses < 13) + { + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(AI_DEBUG) ai_Debug("0i_talents", "1837", "Item uses: " + IntToString(nPerDay)); + if(nPerDay == 1) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1842", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + } + // Lets not always use unlimited items! + else if(nUses == 7 || nUses == 13) + { + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + } + ai_SetLastAction(oCreature, nSpell); + ActionUseItemOnObject(oItem, ipProp, oTarget, nSubIndex); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + if(AI_DEBUG) ai_Debug("0i_talents", "1850", GetName(oCreature) + " is using " + GetName(oItem) + " on " + GetName(oTarget)); + return TRUE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1853", "nMetaMagic: " + IntToString(nMetaMagic) + + " nDomain: " + IntToString(nDomain) + " nClass: " + IntToString(nClass)); + ai_SetLastAction(oCreature, nSpell); + ActionCastSpellAtObject(nSpell, oTarget, nMetaMagic, FALSE, nDomain, 0, FALSE, nClass, FALSE); + // This was added to do a second check right before they cast to make sure + // the target was not killed between us deciding to cast and then casting! + DelayCommand(2.5, ai_CheckSpellTarget(oCreature, oTarget)); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + // Temp Debug!!!!! + //string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + //SendMessageToPC(GetFirstPC(), "0i_talents, 1859 " + GetName(oCreature) + " is casting " + sSpellName + " on " + GetName(oTarget)); + // Temp Debug!!!!! + if(AI_DEBUG) + { + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + ai_Debug("0i_talents", "1859", GetName(oCreature) + " is casting " + sSpellName + " on " + GetName(oTarget)); + } + return TRUE; +} +int ai_UseTalentAtLocation(object oCreature, json jTalent, object oTarget, int nInMelee) +{ + int nSpell, nClass, nLevel, nSlot, nMetaMagic, nDomain; + int nType = JsonGetInt(JsonArrayGet(jTalent, 0)); + if(nType == AI_TALENT_TYPE_SPELL) + { + if(!ai_CastInMelee(oCreature, nSpell, nInMelee)) return FALSE; + nClass = JsonGetInt(JsonArrayGet(jTalent, 2)); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nLevel = JsonGetInt(JsonArrayGet(jTalent, 3)); + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + if(GetMemorizedSpellIsDomainSpell(oCreature, nClass, nLevel, nSlot) == 1) nDomain = nLevel; + else nDomain = 0; + nMetaMagic = GetMemorizedSpellMetaMagic(oCreature, nClass, nLevel, nSlot); + } + else + { + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nMetaMagic = METAMAGIC_NONE; + nDomain = 0; + } + } + else if(nType == AI_TALENT_TYPE_SP_ABILITY) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1888", GetName(oCreature) + " is using a special ability!"); + nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + nClass = 255; + } + else if(nType == AI_TALENT_TYPE_ITEM) + { + object oItem = StringToObject(JsonGetString(JsonArrayGet(jTalent, 2))); + int nBaseItemType = GetBaseItemType(oItem); + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell, nBaseItemType)) return TRUE; + int nIndex; + int nSubIndex = JsonGetInt(JsonArrayGet(jTalent, 3));; + nSlot = JsonGetInt(JsonArrayGet(jTalent, 4)); + itemproperty ipProp = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProp)) + { + if(nIndex++ == nSlot) break; + ipProp = GetNextItemProperty(oItem); + } + // Cast items have the following: + // 1)Single_Use. + // 2-6) Charges/Use [Note: 7 is 0 charges per use]. + // 8-12) Uses/Day [Note: 13 is unlimited uses per day]. + // We set the slot to -1 to let the other function know we need this talent removed. + int nUses = GetItemPropertyCostTableValue(ipProp); + if(nUses == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + else if(nUses > 1 && nUses < 7) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1915", "Item charges: " + IntToString(GetItemCharges(oItem))); + int nCharges = GetItemCharges(oItem); + // If the item is equipable then do not use the last charge! + if(Get2DAString("baseitems", "EquipableSlots", GetBaseItemType(oItem)) != "0x00000") + { + if(nCharges <= 7 - nUses) return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "1824", "Item charges: " + IntToString(nCharges)); + if(nCharges < (7 - nUses) * 2) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1829", "Stack size: " + IntToString(GetItemStackSize(oItem))); + // We also must check for stack size. + if(GetItemStackSize(oItem) == 1) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + } + else if(nUses > 7 && nUses < 13) + { + if(AI_DEBUG) ai_Debug("0i_talents", "1923", "Item uses: " + IntToString(GetItemPropertyUsesPerDayRemaining(oItem, ipProp))); + int nPerDay = GetItemPropertyUsesPerDayRemaining(oItem, ipProp); + if(nUses == 8 && nPerDay == 1 || nUses == 9 && nPerDay < 4 || + nUses == 10 && nPerDay < 6 || nUses == 11 && nPerDay < 8 || + nUses == 12 && nPerDay < 10) JsonArrayInsertInplace(jTalent, JsonInt(-1), 4); + } + // Lets not always use unlimited items! + else if(nUses == 7 || nUses == 13) + { + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + } + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + ai_SetLastAction(oCreature, nSpell); + ActionUseItemAtLocation(oItem, ipProp, GetLocation(oTarget), nSubIndex); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + if(AI_DEBUG) ai_Debug("0i_talents", "1934", GetName(oCreature) + " is using " + GetName(oItem) + " at a location."); + return TRUE; + } + if(ai_CheckCombatPosition(oCreature, oTarget, nInMelee, nSpell)) return TRUE; + ai_SetLastAction(oCreature, nSpell); + ActionCastSpellAtLocation(nSpell, GetLocation(oTarget), nMetaMagic, FALSE, 0, FALSE, nClass, FALSE, nDomain); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + string sSpellName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(AI_DEBUG) ai_Debug("0i_talents", "1943", GetName(oCreature) + " is casting " + sSpellName + " at a location!"); + return TRUE; +} +int ai_CheckSpecialTalentsandUse(object oCreature, json jTalent, string sCategory, int nInMelee, object oTarget) +{ + int nSpell = JsonGetInt(JsonArrayGet(jTalent, 1)); + // This checks to see if they tried to cast this spell last round and if we + // are trying to cast it again before at least 3 seconds is up then the spell + // is being canceled... remove this spell and look for another! + if(ai_CompareLastAction(oCreature, nSpell) && + ai_GetCurrentTimeStamp() - GetLocalInt(oCreature, sLastActionTimeVarname) < 2) + { + if(AI_DEBUG) + { + int nLastTime = GetLocalInt(oCreature, sLastActionTimeVarname); + int nCurrentTime = ai_GetCurrentTimeStamp(); + ai_Debug("0i_talents", "3634", "Same spell cast within less than 2 seconds!" + + " nSpell: " + IntToString(nSpell) + " nLastActionTime: " + IntToString(nLastTime) + + " nCurrentTime: " + IntToString(nCurrentTime) + " Difference: " + IntToString(nCurrentTime - nLastTime)); + } + return FALSE; + } + if(AI_DEBUG) ai_Debug("0i_talents", "3637", "nSpell: " + GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))) + + " sCategory: " + sCategory); + if(sCategory == AI_TALENT_DISCRIMINANT_AOE) + { + //ai_Debug("0i_talents", "1953", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Check to see if Disjunction should *not* be cast. + if(nSpell == SPELL_MORDENKAINENS_DISJUNCTION) + { + // Our master does not want us using any type of dispel! + if(ai_GetMagicMode(oCreature, AI_MAGIC_STOP_DISPEL)) return FALSE; + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + // Get the biggest group we can. + int nIndex = ai_GetHighestGroupIndexNotInAOE(oCreature); + if(nIndex == 0) + { + nIndex = ai_GetHighestGroupIndex(oCreature); + if(nIndex == 0) return FALSE; + } + oTarget = GetLocalObject(oCreature, AI_ENEMY + IntToString(nIndex)); + if(!ai_CreatureHasDispelableEffect(oCreature, oTarget)) return FALSE; + // Maybe we should do an area of effect instead? + int nEnemies = ai_GetNumOfEnemiesInRange(oTarget, 5.0); + if(nEnemies > 2) + { + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + } + } + // These spells have a Range of Personal i.e. cast on themselves, and + // an Area of Effect of Colossal (10.0). + else if(nSpell == SPELL_FIRE_STORM || nSpell == SPELL_STORM_OF_VENGEANCE) + { + // Make sure we have enough enemies to use this on. + int nEnemies = ai_GetNumOfEnemiesInRange(oCreature, 10.0); + if(nEnemies < 2) return FALSE; + // Get the nearest target to check defenses on. + oTarget = ai_GetNearestTarget(oCreature, 10.0); + if(!ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + } + else if(nSpell == SPELL_UNDEATH_TO_DEATH) + { + float fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + int nUndead = ai_GetRacialTypeCount(oCreature, RACIAL_TYPE_UNDEAD, fRange); + if(nUndead < 3) return FALSE; + oTarget = ai_GetLowestCRRacialTarget(oCreature, RACIAL_TYPE_UNDEAD, fRange); + } + else if(nSpell == SPELLABILITY_PULSE_DROWN) + { + if(nInMelee > 1) + { + oTarget = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + int nRace = GetRacialType(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "2778", "nRace(10/24/16): " + IntToString(nRace)); + if(nRace != RACIAL_TYPE_CONSTRUCT && + nRace != RACIAL_TYPE_UNDEAD && + nRace != RACIAL_TYPE_ELEMENTAL) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2783", "Using Pulse Drown talent!"); + if(ai_UseTalentOnObject(oCreature, jTalent, oCreature, nInMelee, FALSE)) return TRUE; + } + } + return FALSE; + } + else if(nSpell == SPELLABILITY_PULSE_WHIRLWIND) + { + if(nInMelee > 1) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2793", "Using Pulse Whirlwind talent!"); + if(ai_UseTalentOnObject(oCreature, jTalent, oCreature, nInMelee, FALSE)) return TRUE; + } + return FALSE; + } + // Get a target for discriminant spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetGroupTargetNotInAOE(oCreature, fRange); + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetGroupTarget(oCreature, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + if(GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + } + else if(sCategory == AI_TALENT_INDISCRIMINANT_AOE) + { + //ai_Debug("0i_talents", "1991", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // These spells have a Range of Personal i.e. cast on themselves, and + // an Area of Effect of Colossal (10.0). + if(nSpell == SPELL_METEOR_SWARM) + { + // Make sure we have enough enemies and few allies to hit. + int nAllies = ai_GetNumOfAlliesInGroup(oCreature, 10.0); + int nEnemies = ai_GetNumOfEnemiesInRange(oCreature, 10.0); + if(nAllies > 1 || nEnemies < 2) return FALSE; + // Get the nearest target to check defenses on. + oTarget = ai_GetNearestTarget(oCreature, 10.0); + if(!ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + if(ai_UseTalentAtLocation(oCreature, jTalent, oCreature, nInMelee)) return TRUE; + } + // Get a target for indiscriminant spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + float fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetGroupTargetNotInAOE(oCreature, fRange); + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetGroupTarget(oCreature, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + // Check for the number of allies, if there are too many then skip. + int nRoll = d6() + 1; + if(GetAssociateType(oCreature)) nRoll = d3(); + int nAllies = ai_GetNumOfAlliesInGroup(oTarget, AI_RANGE_CLOSE); + if(AI_DEBUG) ai_Debug("0i_talents", "2084", "Num of Allies in range: " + IntToString(nAllies)+ + " < nRoll: " + IntToString(nRoll)); + if(nAllies >= nRoll) return FALSE; + } + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Check if the Sleep spells are being used appropriately. + if(nSpell == SPELL_SLEEP) + { + if(GetHitDice(oTarget) > 4) return FALSE; + } + // Lets only use silence on casters. + else if(nSpell == SPELL_SILENCE) + { + if(!ai_CheckClassType(oTarget, AI_CLASS_TYPE_CASTER)) + { + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + } + else if(sCategory == AI_TALENT_RANGED) + { + //ai_Debug("0i_talents", "2045", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Check to see if Dispel Magic and similar spells should *not* be cast + if(nSpell == SPELL_DISPEL_MAGIC || nSpell == SPELL_LESSER_DISPEL || + nSpell == SPELL_GREATER_DISPELLING) + { + // Our master does not want us using any type of dispel! + if(ai_GetMagicMode(oCreature, AI_MAGIC_STOP_DISPEL)) return FALSE; + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + // Lets get a caster as they should have more buffs. + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, fRange); + // No caster then get the most powerful enemy! + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetHighestCRTarget(oCreature, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + if(!ai_CreatureHasDispelableEffect(oCreature, oTarget)) return FALSE; + // Maybe we should do an area of effect instead? + int nEnemies = ai_GetNumOfEnemiesInRange(oTarget, 5.0); + if(nEnemies > 2) + { + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + } + } + // Make sure the spell will work on the target. + else if(nSpell == SPELL_HOLD_PERSON || nSpell == SPELL_DOMINATE_PERSON || + nSpell == SPELL_CHARM_PERSON) + { + if(oTarget != OBJECT_INVALID) + { + int nRaceType = GetRacialType(oTarget); + if(AI_DEBUG) ai_Debug("0i_talents", "2075", " Person Spell race: " + IntToString(nRaceType)); + if((nRaceType > 6 && nRaceType < 12) || nRaceType > 15) oTarget = OBJECT_INVALID; + } + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetNearestRacialTarget(oCreature, AI_RACIAL_TYPE_HUMANOID, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + else if(nSpell == SPELL_HOLD_ANIMAL || nSpell == SPELL_DOMINATE_ANIMAL) + { + if(oTarget != OBJECT_INVALID) + { + if(GetRacialType(oTarget) != RACIAL_TYPE_ANIMAL) oTarget = OBJECT_INVALID; + } + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetNearestRacialTarget(oCreature, AI_RACIAL_TYPE_ANIMAL_BEAST, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + // Get a target for ranged spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetSpellTargetBasedOnSaves(oCreature, nSpell, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + if(GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Don't use Domination spells on players! They don't work. + if((nSpell == SPELL_DOMINATE_MONSTER || nSpell == SPELL_DOMINATE_PERSON)) + { + if(ai_GetIsCharacter(oTarget)) return FALSE; + } + // Check to see if they have the shield spell up. + else if(nSpell == SPELL_MAGIC_MISSILE) + { + if(GetHasSpellEffect(SPELL_SHIELD, oTarget)) return FALSE; + } + // Scare only works on 5 hitdice or less. + else if(nSpell == SPELL_SCARE) + { + if(GetHitDice(oTarget) > 5) return FALSE; + } + // Don't use drown against nonliving opponents. + else if(nSpell == SPELL_DROWN) + { + if(ai_IsNonliving(GetRacialType(oTarget))) return FALSE; + } + // Don't use Power Word Kill on Targets with more than 100hp + else if(nSpell == SPELL_POWER_WORD_KILL) + { + if(GetCurrentHitPoints(oTarget) <= 100) return FALSE; + } + } + else if(sCategory == AI_TALENT_TOUCH) + { + //ai_Debug("0i_talents", "2139", "CompareLastAction: " + + // IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + //if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Get a target for touch spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + oTarget = ai_GetSpellTargetBasedOnSaves(oCreature, nSpell, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) return FALSE; + } + if(GetHasSpellEffect(nSpell, oTarget) || + !ai_CastOffensiveSpellVsTarget(oCreature, oTarget, nSpell) || + ai_CreatureImmuneToEffect(oCreature, oTarget, nSpell)) return FALSE; + } + else if(sCategory == AI_TALENT_HEALING) + { + int nHpLost = ai_GetPercHPLoss(oTarget); + // If the target is bloody then just use the best we have! + if(nHpLost > AI_HEALTH_BLOODY) + { + // Make sure we should use a mass heal on us or an ally! + // Two allies need healing or one is almost dead to use mass heal! + if(nSpell == SPELL_MASS_HEAL) + { + int bWoundedAlly; + object oAlly = ai_GetNearestAlly(oTarget); + if(oAlly != OBJECT_INVALID) + { + // If we don't have a nearby ally that needs healed then skip. + if(ai_GetPercHPLoss(oAlly) > AI_HEALTH_WOUNDED || + GetDistanceBetween(oCreature, oAlly) > 9.0f) return FALSE; + } + } + // Make sure they have taken enough damage. + int nHpDmg = GetMaxHitPoints(oTarget) - GetCurrentHitPoints(oTarget); + if(!ai_ShouldWeCastThisCureSpell(nSpell, nHpDmg)) return FALSE; + } + } + else if(sCategory == AI_TALENT_ENHANCEMENT) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2713", "CompareLastAction: " + + IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + if(nSpell == SPELL_INVISIBILITY || nSpell == SPELL_SANCTUARY) + { + // Lets not run past an enemy to cast an enhancement unless we have + // the ability to move in combat, bad tactics! + float fRange; + if(ai_CanIMoveInCombat(oCreature)) fRange = AI_RANGE_PERCEPTION; + else + { + fRange = GetDistanceBetween(oCreature, GetLocalObject(oCreature, AI_ENEMY_NEAREST)) - 3.0f; + // Looks bad when your right next to an ally, but technically the enemy is closer. + if(fRange < AI_RANGE_MELEE) fRange = AI_RANGE_MELEE; + } + oTarget = ai_GetAllyToHealTarget(oCreature, fRange); + if(oTarget != OBJECT_INVALID) + { + int nHp = ai_GetPercHPLoss(oTarget); + int nHpLimit = ai_GetHealersHpLimit(oCreature); + if(nHp > nHpLimit) return FALSE; + } + } + if(nSpell == SPELL_PRAYER) + { + int nEnemies = ai_GetNumOfEnemiesInRange(oCreature, 10.0); + int nAllies = ai_GetNumOfAlliesInGroup(oCreature, 10.0); + if(nEnemies + nAllies < 5) return FALSE; + oTarget = oCreature; + } + // Since haste does not have an effect when it comes from items when we + // check for item properties we set this variable so we know they have it. + else if(nSpell == SPELL_HASTE && GetLocalInt(oCreature, sIPHasHasteVarname)) return FALSE; + // Only reason to cast Ultravision(Darkvision) in combat is if a Darkness + // spell is nearby. + else if(nSpell == SPELL_DARKVISION) + { + int nCnt = 1, bCastSpell; + string sAOEType; + object oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, nCnt); + while(oAOE != OBJECT_INVALID && GetDistanceBetween(oCreature, oAOE) <= AI_RANGE_PERCEPTION) + { + // AOE's have the tag set to the "LABEL" in vfx_persistent.2da + sAOEType = GetTag(oAOE); + if(AI_DEBUG) ai_Debug("0i_talents", "2759", "Ultravision check; AOE tag: " + sAOEType); + if(sAOEType == "VFX_PER_DARKNESS") + { + if(!GetHasFeat(FEAT_DARKVISION)) bCastSpell = TRUE; + break; + } + oAOE = GetNearestObject(OBJECT_TYPE_AREA_OF_EFFECT, oCreature, ++nCnt); + } + if(!bCastSpell) return FALSE; + } + // Get a target for enhancement spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + // Get talents range and target. + float fRange = ai_GetSpellRange(nSpell); + // Personal spell + if(fRange == 0.1f) oTarget = oCreature; + // Range/Touch spell + else oTarget = ai_GetAllyBuffTarget(oCreature, nSpell, fRange); + } + if(AI_DEBUG) ai_Debug("0i_talents", "2260", " oTarget: " + GetName(oTarget) + + " HasSpellEffect: " + IntToString(GetHasSpellEffect(nSpell, oTarget))); + if(oTarget == OBJECT_INVALID || GetHasSpellEffect(nSpell, oTarget)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Weapon enhancing spells only work on melee weapons! + if(nSpell == SPELL_MAGIC_WEAPON || nSpell == SPELL_GREATER_MAGIC_WEAPON || + nSpell == SPELL_BLESS_WEAPON || nSpell == SPELL_FLAME_WEAPON || + nSpell == SPELL_DARKFIRE) + { + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + if(!ai_GetIsMeleeWeapon(oWeapon)) return FALSE; + } + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + else if(sCategory == AI_TALENT_PROTECTION) + { + if(AI_DEBUG) ai_Debug("0i_talents", "2281", "CompareLastAction: " + + IntToString(ai_CompareLastAction(oCreature, nSpell))); + // If we used this spell talent last round then don't use it this round. + if(ai_CompareLastAction(oCreature, nSpell)) return FALSE; + // Stone bones only effects the undead. + if(nSpell == SPELL_STONE_BONES) + { + if(oTarget != OBJECT_INVALID) + { + if(GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD) oTarget = OBJECT_INVALID; + } + if(oTarget == OBJECT_INVALID) + { + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + oTarget = ai_GetNearestRacialTarget(oCreature, RACIAL_TYPE_UNDEAD, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + } + else if(nSpell == SPELL_MAGIC_FANG) + { + oTarget = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oCreature); + if(oTarget == OBJECT_INVALID) return FALSE; + } + // Lets see if we should cast resistances in our current situation, + // lets check for enemy casters that may have energy damaging spells, or energy weapons. + else if(nSpell == SPELL_ENDURE_ELEMENTS || nSpell == SPELL_PROTECTION_FROM_ELEMENTS || + nSpell == SPELL_RESIST_ELEMENTS || nSpell == SPELL_ENERGY_BUFFER) + { + int bCastSpell; + object oEnemy = ai_GetEnemyAttackingMe(oCreature); + if(oEnemy != OBJECT_INVALID) + { + object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oEnemy); + if(oWeapon == OBJECT_INVALID) oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oEnemy); + if(oWeapon == OBJECT_INVALID) oWeapon = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oEnemy); + if(AI_DEBUG) ai_Debug("0i_talents", "2812", GetName(oEnemy) + " is using weapon: " + GetName(oWeapon)); + if(oWeapon != OBJECT_INVALID) + { + itemproperty nProperty = GetFirstItemProperty(oWeapon); + while(GetIsItemPropertyValid(nProperty)) + { + if(GetItemPropertyType(nProperty) == ITEM_PROPERTY_DAMAGE_BONUS) + { + int nSubType = GetItemPropertySubType(nProperty); + if(AI_DEBUG) ai_Debug("0i_talents", "2821", GetName(oWeapon) + " has PropertySubType: " + + IntToString(nSubType) + " If equals [6,7,9,10,13] don't cast!"); + if(nSubType == 6 || nSubType == 7 || nSubType == 9 || + nSubType == 10 || nSubType == 13) + { + bCastSpell = TRUE; + break; + } + } + nProperty = GetNextItemProperty(oWeapon); + } + } + } + if(ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER) != OBJECT_INVALID) bCastSpell = TRUE; + if(!bCastSpell) return FALSE; + } + // Get a target for protection spells if one is not already set. + if(oTarget == OBJECT_INVALID) + { + // Get talents range and target. + float fRange = ai_GetSpellRange(nSpell); + // Personal spell + if(fRange == 0.1f) oTarget = oCreature; + // Range/Touch spell + else oTarget = ai_GetAllyBuffTarget(oCreature, nSpell, fRange); + if(oTarget == OBJECT_INVALID) return FALSE; + } + if(GetHasSpellEffect(nSpell, oTarget)) return FALSE; + //********************************************************************** + //********** These spells are checked after picking a target *********** + //********************************************************************** + // Don't double up Stoneskin, Ghostly visage, or Ethereal visage. + if(nSpell == SPELL_GHOSTLY_VISAGE || nSpell == SPELL_ETHEREAL_VISAGE || + nSpell == SPELL_STONESKIN) + { + if(GetHasSpellEffect(SPELL_ETHEREAL_VISAGE, oTarget) || + GetHasSpellEffect(SPELL_STONESKIN, oTarget) || + GetHasSpellEffect(SPELL_GHOSTLY_VISAGE, oTarget)) return FALSE; + } + // Don't use displacement if we are invisible! + else if(nSpell == SPELL_DISPLACEMENT) + { + if(GetHasSpellEffect(SPELL_INVISIBILITY, oTarget) || + GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY, oTarget) || + GetHasSpellEffect(SPELL_INVISIBILITY_SPHERE, oTarget) || + GetHasSpellEffect(SPELL_DISPLACEMENT, oTarget)) return FALSE; + } + // Should we ignore associates? + if(ai_GetAIMode(oCreature, AI_MODE_IGNORE_ASSOCIATES) && + GetAssociateType(oTarget) > 1) return FALSE; + } + else if(sCategory == AI_TALENT_SUMMON) + { + if(GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCreature) != OBJECT_INVALID) return FALSE; + if(oTarget == OBJECT_INVALID) + { + /* Removed for now, summons creature in location that enemy was... looks bad. + float fRange; + if(nInMelee) fRange = AI_RANGE_MELEE; + else fRange = ai_GetOffensiveSpellSearchRange(oCreature, nSpell); + // Select lowest enemy combat target for summons. + oTarget = ai_GetLowestCRTarget(oCreature, fRange); + if(oTarget == OBJECT_INVALID) oTarget = oCreature; + */ + oTarget = oCreature; + if(ai_UseTalentAtLocation(oCreature, jTalent, oTarget, nInMelee)) + { + DelayCommand(4.0, ai_NameAssociate(oCreature, ASSOCIATE_TYPE_SUMMONED, "")); + return TRUE; + } + } + } + else if(sCategory == AI_TALENT_CURE) + { + } + if(ai_UseTalentOnObject(oCreature, jTalent, oTarget, nInMelee)) return TRUE; + return FALSE; +} diff --git a/_module/nss/0i_time.nss b/_module/nss/0i_time.nss new file mode 100644 index 0000000..78d6ec9 --- /dev/null +++ b/_module/nss/0i_time.nss @@ -0,0 +1,67 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_time +//////////////////////////////////////////////////////////////////////////////// + Include script for handling all time functions for the server. + + Lokey's functions: +int GetPosixTimestamp(); +string GetCurrentDateTime(); + +*/////////////////////////////////////////////////////////////////////////////// +// Returns a Timestamp in seconds since 1970-01-01. +int ai_GetCurrentTimeStamp(); +// Returns a formated date, good for Dating logs and text. +string GetCurrentDateTime(); +// Sends a server shutdown message 1800 seconds i.e 30 minutes before. +// nDuration is in seconds. i.e. one hours is 3600 defaults to 24 hours (86400). +// Should be put into the servers OnHeartBeat. +void CheckServerShutdownMessage(int nDuration = 86400); +/// Returns the current time formatted according to the provided sqlite date time format string. +/// Format string as used by sqlites STRFTIME(). +/// Returns the current time in the requested format. Empty string on error. +string SQLite_GetFormattedSystemTime(string format); +/// Returns the number of milliseconds since midnight on January 1, 1970. +int SQLite_GetTimeMilliseconds(); +/// Returns the date in the format (mm/dd/yyyy). +string SQLite_GetSystemDate(); +/// Returns the current time in the format (24:mm:ss). +string SQLite_GetSystemTime(); + +int ai_GetCurrentTimeStamp() +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "SELECT STRFTIME('%s', 'now')"); + SqlStep(query); + return SqlGetInt(query, 0); +} +string GetCurrentDateTime() +{ + sqlquery sqlQuery = SqlPrepareQueryObject(GetModule(), "SELECT datetime('now', 'localtime')"); + SqlStep(sqlQuery); + return SqlGetString(sqlQuery, 0); +} +struct SQLite_MillisecondTimeStamp +{ + int seconds; ///< Seconds since epoch + int milliseconds; ///< Milliseconds +}; +string SQLite_GetFormattedSystemTime(string format) +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "SELECT STRFTIME(@format, 'now', 'localtime')"); + SqlBindString(query, "@format", format); + SqlStep(query); // sqlite returns NULL for invalid format in STRFTIME() + return SqlGetString(query, 0); +} +int SQLite_GetTimeMillisecond() +{ + sqlquery query = SqlPrepareQueryObject(GetModule(), "select cast((julianday('now') - 2440587.5) * 86400 * 1000 as integer)"); + SqlStep(query); + return SqlGetInt(query, 0); +} +string SQLite_GetSystemDate() +{ + return SQLite_GetFormattedSystemTime("%m/%d/%Y"); +} +string SQLite_GetSystemTime() +{ + return SQLite_GetFormattedSystemTime("%H:%M:%S"); +} diff --git a/_module/nss/ai_a_ambusher.nss b/_module/nss/ai_a_ambusher.nss new file mode 100644 index 0000000..f3f424b --- /dev/null +++ b/_module/nss/ai_a_ambusher.nss @@ -0,0 +1,105 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_ambusher +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to ambush creatures by hiding or turning invisible. + OBJECT_SELF is the creature running the ai. + * This assumes we are not invisible since the ai_a_invisible script should fire if we are. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "19", GetName(oCreature) + " is using ambusher tactics: " + + " oNearestEnemy: " + GetName(oNearestEnemy) + " fDistance: " + + FloatToString(GetDistanceBetween(oNearestEnemy, oCreature), 0, 2)); + if(GetDistanceBetween(oNearestEnemy, oCreature) > AI_RANGE_CLOSE) + { + // Has our master told us to not use magic? + if(!ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + } + } + // Check the battle field to see if anyone see us? + int nEnemyIndex = ai_GetNearestIndexThatSeesUs(oCreature); + // If seen, can we try to hide now? + if(nEnemyIndex) + { + // Check for an attacker and can they see through invisibility? + object oAttacker = ai_GetEnemyAttackingMe(oCreature); + int bCanSeeInvisible; + if(oAttacker != OBJECT_INVALID) + { + bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_SEEINVISIBLE); + if(!bCanSeeInvisible) bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_TRUESEEING); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_5_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_10_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_60_FEET, oCreature); + } + if(!bCanSeeInvisible) + { + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "55", GetName(oCreature) + " is using hide in plain sight!"); + ClearAllActions(TRUE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + return; + } + } + // Does not have hide in plain sight. + else + { + string sEnemyIndex = IntToString(nEnemyIndex); + float fEnemyDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sEnemyIndex); + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "66", "fDistance: " + FloatToString(fEnemyDistance, 0, 2)); + if(fEnemyDistance > 20.0) + { + int bTried = GetLocalInt(oCreature, AI_TRIED_TO_HIDE); + if(!bTried) + { + // Move away so we can hide. + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "73", GetName(oCreature) + " is trying to move away to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + sEnemyIndex); + ActionMoveAwayFromObject(oEnemy, TRUE, AI_RANGE_BATTLEFIELD); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + else SetLocalInt(oCreature, AI_TRIED_TO_HIDE, GetLocalInt(oCreature, AI_TRIED_TO_HIDE) - 1); + } + // We have been seen by an enemy near us so drop stealth. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + } + // The enemy can see through stealth so lets drop it. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + // We are not in stealth mode so and no one sees us so lets hide. + else if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + // Use any hiding talents we have + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "97", GetName(oCreature) + " is trying to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + // If we have givin up on stealth do our normal actions. + string sScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + if(sScript == "ai_a_ambusher" || sScript == "") sScript = "ai_a_default"; + if(AI_DEBUG) ai_Debug("ai_a_ambusher", "101", "Executing Script: " + sScript); + ExecuteScript(sScript, oCreature); +} diff --git a/_module/nss/ai_a_atk_casters.nss b/_module/nss/ai_a_atk_casters.nss new file mode 100644 index 0000000..e1a8b4f --- /dev/null +++ b/_module/nss/ai_a_atk_casters.nss @@ -0,0 +1,159 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_atk_casters +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to the nearest casting creatures. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + int bAlwaysAtk = !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "80", "Check for ranged attack on nearest casting enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "119", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) + { + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget == OBJECT_INVALID) + { + // Are we in melee? If so try to get the nearest enemy in melee. + if(nInMelee > 0) + { + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + } + // If not then lets go find someone to attack! + else + { + // Get the nearest enemy. + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + } + } + } + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "149", GetName(oTarget) + " is the nearest target for melee combat!"); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("ai_a_atk_casters", "154", "Do melee attack against (caster/nearest): " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} + diff --git a/_module/nss/ai_a_atk_nearest.nss b/_module/nss/ai_a_atk_nearest.nss new file mode 100644 index 0000000..1261dc7 --- /dev/null +++ b/_module/nss/ai_a_atk_nearest.nss @@ -0,0 +1,80 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_atk_nearest +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to the nearest target. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} + diff --git a/_module/nss/ai_a_atk_warrior.nss b/_module/nss/ai_a_atk_warrior.nss new file mode 100644 index 0000000..fe6dc71 --- /dev/null +++ b/_module/nss/ai_a_atk_warrior.nss @@ -0,0 +1,159 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_atk_warrior +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to the nearest casting creatures. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + int bAlwaysAtk = !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + if(AI_DEBUG) ai_Debug("0i_actions", "496", "Check for ranged attack on nearest casting enemy!"); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the nearest targets first. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("0i_actions", "519", "Do ranged attack against nearest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("ai_a_atk_warrior", "119", "Check for melee attack on nearest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) + { + object oPCTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + if(oPCTarget == OBJECT_INVALID) + { + // Are we in melee? If so try to get the nearest enemy in melee. + if(nInMelee > 0) + { + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE, AI_ENEMY, bAlwaysAtk); + } + // If not then lets go find someone to attack! + else + { + // Get the nearest enemy. + oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_WARRIOR, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + // If we didn't get a target then get any target within range. + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_PERCEPTION, AI_ENEMY, bAlwaysAtk); + } + } + } + // We might not have a target this is fine as sometimes we don't want to attack! + if(AI_DEBUG) ai_Debug("ai_a_atk_warrior", "149", GetName(oTarget) + " is the nearest target for melee combat!"); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + if(AI_DEBUG) ai_Debug("ai_a_atk_warrior", "154", "Do melee attack against (caster/nearest): " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} + diff --git a/_module/nss/ai_a_barbarian.nss b/_module/nss/ai_a_barbarian.nss new file mode 100644 index 0000000..525cfc3 --- /dev/null +++ b/_module/nss/ai_a_barbarian.nss @@ -0,0 +1,87 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_barbarian +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Barbarian class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oTarget; + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature)) + { + //************************* HEALING & CURES ************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************ CLASS FEATURES ************************* + if(ai_TryBarbarianRageFeat(oCreature)) return; + // ************************* SPELL TALENTS ************************* + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************* SPELL TALENTS ************************* + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ Ranged feat attacks ************************ + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + // *************************** Melee feat attacks ************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_bard.nss b/_module/nss/ai_a_bard.nss new file mode 100644 index 0000000..05166ff --- /dev/null +++ b/_module/nss/ai_a_bard.nss @@ -0,0 +1,83 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_bard +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Bard class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryBardSongFeat(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_cleric.nss b/_module/nss/ai_a_cleric.nss new file mode 100644 index 0000000..b138f62 --- /dev/null +++ b/_module/nss/ai_a_cleric.nss @@ -0,0 +1,102 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_cleric +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Cleric class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ************************** CLASS FEATURES *************************** + // Turning is basically a powerful AOE so treat it like one. + if(ai_TryTurningTalent(oCreature)) return; + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + } + // SIMPLE+ - Offensive talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_cntrspell.nss b/_module/nss/ai_a_cntrspell.nss new file mode 100644 index 0000000..a1bc9ec --- /dev/null +++ b/_module/nss/ai_a_cntrspell.nss @@ -0,0 +1,69 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_cntrspell +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the combat mode counter spell. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // We are not in melee combat then we don't attack. + int bAttack = nInMelee; + if(!bAttack) + { + // If there are no casters, i.e. CLERIC or MAGES in the battle then attack. + struct stClasses stClasses = ai_GetFactionsClasses(oCreature); + if(!stClasses.CLERICS && !stClasses.MAGES) bAttack = TRUE; + } + // If we are not attacking and using magic then setup for counter spelling. + if(!bAttack && !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC)) + { + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "30", " Counterspell Mode? " + + IntToString(GetActionMode(OBJECT_SELF, ACTION_MODE_COUNTERSPELL))); + if(!GetActionMode(oCreature, ACTION_MODE_COUNTERSPELL)) + { + object oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + // We can only counter spells from a hasted caster if we are hasted as well. + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_HASTE) && + !ai_GetHasEffectType(oCreature, EFFECT_TYPE_HASTE)) + { + // If we have haste then we should cast it. + if(GetHasSpell(SPELL_HASTE, oCreature)) + { + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "42", "Opponent is hasted! Casting Haste."); + ActionCastSpellAtObject(SPELL_HASTE, oCreature); + ai_SetLastAction(oCreature, SPELL_HASTE); + return; + } + // If not then we need to go into normal combat. + else + { + if(AI_DEBUG) ai_Debug("ai_cntrspell", "50", "Opponent is hasted! Using ranged AI."); + ExecuteScript("ai_a_ranged"); + return; + } + } + if(oTarget != OBJECT_INVALID) + { + // First a good tactic for counter spelling is to be invisible. + if(ai_TryToBecomeInvisible(oCreature)) return; + // If we have attempted to become invisible or are invisible then + // it is time to counter spell. + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "61", "Setting Counterspell mode!"); + ActionCounterSpell(oTarget); + return; + } + } + } + if(AI_DEBUG) ai_Debug("ai_a_cntrspell", "67", "Situation is not good for counterspelling! Using ranged AI."); + ExecuteScript("ai_a_ranged"); +} diff --git a/_module/nss/ai_a_default.nss b/_module/nss/ai_a_default.nss new file mode 100644 index 0000000..6491fdf --- /dev/null +++ b/_module/nss/ai_a_default.nss @@ -0,0 +1,84 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_no_modes +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to not use any combat modes during combat ai. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryPolymorphSelfFeat(oCreature)) return; + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnBest(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} + diff --git a/_module/nss/ai_a_defensive.nss b/_module/nss/ai_a_defensive.nss new file mode 100644 index 0000000..983e6e6 --- /dev/null +++ b/_module/nss/ai_a_defensive.nss @@ -0,0 +1,77 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_defensive +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates put in to a defensive mode to protect themselves. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy and the difficulty of the battle. + 2 - Check for healing potions if this is a simple+ battle. + 3 - Check moral if wounded and is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff if this is a difficult+ battle. + 6 - Check for defensive ability such as knockdown, expertise or parry. + 7 - If we can't fight defensive then flee. + 8 - If we are out of range with no ability then stand and watch. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(AI_DEBUG) ai_Debug("ai_a_defensive", "25", "oNearest Enemy: " + GetName(oNearestEnemy) + + " Distance to Nearest Enemy: " + FloatToString(GetDistanceToObject(oNearestEnemy), 0, 2)); + // ALWAYS - Check for healing and cure talents. + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // SIMPLE+ - Check for moral and get what spell power we should be using. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // DIFFICULT+ - Class talents, Offensive AOE's, Defensive talents, and Potion talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS **************** + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if (ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound, oTarget)) return; + } + } + object oTarget; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + if(nInMelee > 0) + { + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + oTarget = ai_GetHighestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune. + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if (ai_TryParry (oCreature)) return; + // We have tried everything to protect ourselves so the only thing left + // to do is man up and attack! + ai_DoPhysicalAttackOnLowestCR(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + return; + } + //********************** PHYSICAL ATTACKS ******************************** + // Even in defensive mode we want to be in battle so go find someone! + ai_DoPhysicalAttackOnBest(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} diff --git a/_module/nss/ai_a_druid.nss b/_module/nss/ai_a_druid.nss new file mode 100644 index 0000000..ce2d265 --- /dev/null +++ b/_module/nss/ai_a_druid.nss @@ -0,0 +1,120 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_druid +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Druid class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + object oTarget = OBJECT_INVALID; + // Get the Spell Level we should still cast before turning into our polymorph form. + int nSpellLevel = ai_GetHasPolymorphSelfFeat(oCreature); + int nMaxTalentLevel; + if(AI_DEBUG) ai_Debug("ai_a_druid", "31", "nSpellLevel: " + IntToString(nSpellLevel)); + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_SUMMON); + if(AI_DEBUG) ai_Debug("ai_a_druid", "47", "nMaxTalentLevel 'S' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_SUMMON, nInMelee, nMaxLevel, oTarget)) return; + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_PROTECTION); + if(AI_DEBUG) ai_Debug("ai_a_druid", "51", "nMaxTalentLevel 'P' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel, oTarget)) return; + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_ENHANCEMENT); + if(AI_DEBUG) ai_Debug("ai_a_druid", "55", "nMaxTalentLevel 'E' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nMaxLevel, oTarget)) return; + } + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0) + { + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_TOUCH); + if(AI_DEBUG) ai_Debug("ai_druid", "69", "nMaxTalentLevel 'T' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + } + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_RANGED); + if(AI_DEBUG) ai_Debug("ai_druid", "74", "nMaxTalentLevel 'R' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + if(nDifficulty >= AI_COMBAT_MODERATE && ai_TryPolymorphSelfFeat(oCreature)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_fighter.nss b/_module/nss/ai_a_fighter.nss new file mode 100644 index 0000000..5434180 --- /dev/null +++ b/_module/nss/ai_a_fighter.nss @@ -0,0 +1,82 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: 0i_a_fighter +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Fighter class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_flanker.nss b/_module/nss/ai_a_flanker.nss new file mode 100644 index 0000000..16fdbcb --- /dev/null +++ b/_module/nss/ai_a_flanker.nss @@ -0,0 +1,123 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_flanker +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to flank the enemy and not charge into combat. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + oTarget = GetLocalObject(oCreature, AI_PC_LOCKED_TARGET); + // ************************** Melee feat attacks ************************* + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + // Lets get the nearest target that is attacking someone besides me. We want to flank! + if(oTarget == OBJECT_INVALID) + { + if(!nInMelee) oTarget = ai_GetFlankTarget(oCreature); + // If there are few enemies then we can safely move around. + else if(nInMelee < 3 || ai_CanIMoveInCombat(oCreature)) + { + oTarget = ai_GetFlankTarget(oCreature, AI_RANGE_MELEE); + } + // Ok we are in a serious fight so lets not give attacks of opportunities. + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + // If there are no enemies being attacked then lets stay back. + if(oTarget == OBJECT_INVALID) + { + if(nInMelee) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + // ************************** Ranged feat attacks ************************** + else if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + // Make sure we are not the only one here. Moving around looks funny when we are by ourselves. + else if(ai_GetNearestAlly(oCreature, 1, 7, 7) == OBJECT_INVALID) + { + oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + } + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + // Are we too far from our master? + object oMaster = GetMaster(); + if(GetDistanceBetween(oMaster, oCreature) > AI_RANGE_LONG) + { + ActionMoveToObject(oMaster, TRUE, AI_RANGE_CLOSE); + return; + } + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/_module/nss/ai_a_invisible.nss b/_module/nss/ai_a_invisible.nss new file mode 100644 index 0000000..a660c84 --- /dev/null +++ b/_module/nss/ai_a_invisible.nss @@ -0,0 +1,123 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_invisible +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to use when they are invisible. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // Has our master told us to not use magic? + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_EASY) + { + // *************************** SPELL TALENTS *************************** + if(ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) return; + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound, oTarget)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Melee feat attacks ************************* + // If we won't loose invisibility then ranged attacks are ok! + // ************************ RANGED ATTACKS ******************************* + if(GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY) || GetHasSpellEffect(SPELLABILITY_AS_IMPROVED_INVISIBLITY)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_MELEE, 20, oCreature); + if(GetIsTalentValid(tUse)) + { + int nId = GetIdFromTalent(tUse); + if(nId == FEAT_POWER_ATTACK) { if(ai_TryPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KNOCKDOWN) { if(ai_TryKnockdownFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_EVIL) { if(ai_TrySmiteEvilFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_GOOD) { if(ai_TrySmiteGoodFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_IMPROVED_POWER_ATTACK) { if(ai_TryImprovedPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_FLURRY_OF_BLOWS) { if(ai_TryFlurryOfBlowsFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_STUNNING_FIST) { if(ai_TryStunningFistFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SAP) { if(ai_TrySapFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_DISARM) { if(ai_TryDisarmFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KI_DAMAGE) { if(ai_TryKiDamageFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_CALLED_SHOT) { if(ai_TryCalledShotFeat(oCreature, oTarget)) return; } + } + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} + diff --git a/_module/nss/ai_a_monk.nss b/_module/nss/ai_a_monk.nss new file mode 100644 index 0000000..a690c16 --- /dev/null +++ b/_module/nss/ai_a_monk.nss @@ -0,0 +1,82 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_monk +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Monk class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryWholenessOfBodyFeat(oCreature)) return; + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_no_cmb_mode.nss b/_module/nss/ai_a_no_cmb_mode.nss new file mode 100644 index 0000000..5a3981c --- /dev/null +++ b/_module/nss/ai_a_no_cmb_mode.nss @@ -0,0 +1,131 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_o_cmb_modes +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to not use any combat modes during combat ai. + OBJECT_SELF is the creature running the ai. + Our actions. + 1 - Get nearest enemy. + 2 - Check for healing and curing first. + 3 - Check moral if wounded and this is a simple+ battle. + 4 - Check for a magical ranged attack if not in melee and a difficult+ battle. + 5 - Check for a buff or summons if this is a difficult+ battle. + 6 - Check for a Class ability and an offensive spell if this is a simple+ battle. + 7 - Check for a physical attack. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "78", "Check for ranged attack on weakest enemy!"); + object oTarget; + int bAlwaysAtk = !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + !ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && + ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the weaker targets. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "105", GetName(OBJECT_SELF) + " does ranged attack on weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "117", "Check for melee attack on weakest enemy!"); + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee, bAlwaysAtk)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, bAlwaysAtk); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee, bAlwaysAtk); + if(oTarget != OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("ai_a_no_modes", "126", GetName(OBJECT_SELF) + " does melee attack against weakest: " + GetName(oTarget) + "!"); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} + diff --git a/_module/nss/ai_a_paladin.nss b/_module/nss/ai_a_paladin.nss new file mode 100644 index 0000000..7e2391a --- /dev/null +++ b/_module/nss/ai_a_paladin.nss @@ -0,0 +1,110 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_paladin +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Paladin class. + Paladins always protect their masters and face the strongest opponents first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + } + if(!ai_GetMagicMode(oCreature, AI_MAGIC_OFFENSIVE_CASTING)) + { + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + // Does our master want to be buffed first? + object oTarget = OBJECT_INVALID; + if(ai_GetMagicMode(oCreature, AI_MAGIC_BUFF_MASTER)) oTarget = GetMaster(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, 0, oTarget)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + } + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + if(ai_TryLayOnHands(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = OBJECT_INVALID; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Paladins ALWAYS protect their masters first! + oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Paladins face off against the strongest opponents first. + if(!nInMelee) oTarget = ai_GetHighestCRPhysicalTarget(oCreature); + else oTarget = ai_GetHighestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Paladins ALWAYS protect their masters first! + oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + int bCheckCombat = ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK); + if(bCheckCombat) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, FALSE); + // If always attacking Paladins ALWAYS attack the strongest opponent. + else oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_peaceful.nss b/_module/nss/ai_a_peaceful.nss new file mode 100644 index 0000000..b9bd310 --- /dev/null +++ b/_module/nss/ai_a_peaceful.nss @@ -0,0 +1,81 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_a_peaceful +//////////////////////////////////////////////////////////////////////////////// + ai script mode for associates to use when they should remain out of combat. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + // In Melee combat! + if(nInMelee > 0) + { + // If we are not being attacked then we should back out of combat. + if(ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID) + { + if(AI_DEBUG) ai_Debug("ai_a_peaceful", "23", GetName(oCreature) + " is moving away from " + GetName(oNearestEnemy) + + "[" + FloatToString(AI_RANGE_MELEE - fDistance + 1.0, 0, 2) + "]" + " to use a ranged weapon."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + // Lets move just out of melee range! + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, AI_RANGE_CLOSE + 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return; + } + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune. + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if (ai_TryParry(oCreature)) return; + // We have tried everything to protect ourselves so the only thing left + // to do is man up and attack! + // Physical attacks are under TALENT_CATEGORY_HARMFUL_MELEE(22). + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); + return; + } + if(fDistance <= AI_RANGE_LONG) + { + if(AI_DEBUG) ai_Debug("ai_a_peaceful", "49", GetName(oCreature) + " is moving away from " + GetName(oNearestEnemy) + + "[" + FloatToString(AI_RANGE_LONG - fDistance, 0, 2) + "]" + "."); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MOVE); + // Lets move out of close range! + ActionMoveAwayFromObject(oNearestEnemy, TRUE, AI_RANGE_LONG + 2.0); + ActionDoCommand(ExecuteScript("0e_do_combat_rnd", oCreature)); + return; + } + //************************* OUT OF COMBAT ************************** + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, 0, oCreature)) return; + if(ai_TryCureConditionTalent(oCreature, 0)) return; + //************************** DEFENSIVE TALENTS *************************** + // Has our master told us to not use magic? + int bUseMagic = !ai_GetMagicMode(oCreature, AI_MAGIC_NO_MAGIC); + if(bUseMagic) + { + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + // Summons are powerfull and should be used as much as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_SUMMON, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel)) return; + } + // Stand and watch the battle we don't want to provoke anyone! + if(AI_DEBUG) ai_Debug("ai_a_peaceful", "80", GetName(oCreature) + " is holding here."); +} diff --git a/_module/nss/ai_a_polymorphed.nss b/_module/nss/ai_a_polymorphed.nss new file mode 100644 index 0000000..e566632 --- /dev/null +++ b/_module/nss/ai_a_polymorphed.nss @@ -0,0 +1,58 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_polymorphed +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for polymorphed associates. + We check for abilities based on the form we are using and if we should polymorph back. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(GetPercentageHPLoss(oCreature) <= AI_HEALTH_BLOODY) + { + if(AI_DEBUG) ai_Debug("ai_a_polymorphed", "20", "We are wounded and are transforming back!"); + ai_RemoveASpecificEffect(oCreature, EFFECT_TYPE_POLYMORPH); + DeleteLocalInt(oCreature, AI_POLYMORPHED); + // We need to create the creatures normal forms talent list. + DelayCommand(0.0, ai_ClearTalents(oCreature)); + DelayCommand(0.1, ai_SetCreatureTalents(oCreature, FALSE, TRUE)); + return; + } + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // When polymorphed we turn back then check moral. + //if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + // If we don't find a target then we don't want to fight anyone! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_ranged.nss b/_module/nss/ai_a_ranged.nss new file mode 100644 index 0000000..5b98865 --- /dev/null +++ b/_module/nss/ai_a_ranged.nss @@ -0,0 +1,157 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_ranged +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates to use the ranged ai. + OBJECT_SELF is the creature running the ai. + Will attempt to use ranged weapons until surrounded. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + // Turning is basically a powerful AOE so treat it like one. + if(ai_TryTurningTalent(oCreature)) return; + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED)) + { + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + nInMelee < 3) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Lets defend master, nearest favored enemy, ranged, sneak, weakest targets. + if(!nInMelee) + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget == ai_GetRangedTarget(oCreature); + if(oTarget == OBJECT_INVALID && ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else + { + if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + } + } + } + // ************************** Melee feat attacks ************************* + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(nInMelee) + { + oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + } + if(oNearestEnemy != OBJECT_INVALID) + { + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + float fRange = AI_RANGE_LONG; + if(GetIsAreaInterior(GetArea(oCreature))) fRange = AI_RANGE_CLOSE; + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) fRange = AI_RANGE_CLOSE; + if(fDistance < fRange) + { + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, fRange - fDistance + 2.0); + } + } + else ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} + diff --git a/_module/nss/ai_a_ranger.nss b/_module/nss/ai_a_ranger.nss new file mode 100644 index 0000000..b359a5b --- /dev/null +++ b/_module/nss/ai_a_ranger.nss @@ -0,0 +1,96 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_ranger +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Ranger class. + Rangers will take out favored enemies first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Our master may have setup to check difficulty before we move into melee. + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_PERCEPTION, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_rogue.nss b/_module/nss/ai_a_rogue.nss new file mode 100644 index 0000000..ad7c290 --- /dev/null +++ b/_module/nss/ai_a_rogue.nss @@ -0,0 +1,83 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_rogue +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Rogue class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_sorcerer.nss b/_module/nss/ai_a_sorcerer.nss new file mode 100644 index 0000000..ac5062a --- /dev/null +++ b/_module/nss/ai_a_sorcerer.nss @@ -0,0 +1,75 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_sorcerer +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Sorcerer class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_a_taunter.nss b/_module/nss/ai_a_taunter.nss new file mode 100644 index 0000000..b06fed8 --- /dev/null +++ b/_module/nss/ai_a_taunter.nss @@ -0,0 +1,53 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_a_taunter +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using defined to use the taunt skill. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + //************************** SKILL FEATURES ************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // ************************** CLASS FEATURES *************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Class and Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + // ************************** CLASS FEATURES *************************** + if(ai_TryTurningTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // Taunt the nearest target! + if (ai_TryTaunt (oCreature, ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee))) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnLowestCR(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); +} diff --git a/_module/nss/ai_a_wizard.nss b/_module/nss/ai_a_wizard.nss new file mode 100644 index 0000000..0249788 --- /dev/null +++ b/_module/nss/ai_a_wizard.nss @@ -0,0 +1,77 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_a_wizard +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for associates using the Wizard class. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + int nDifficulty = ai_GetDifficulty(oCreature); + int nMaxLevel; + // Check for moral and get the maximum spell level we should use. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(nInMelee && ai_MoralCheck(oCreature)) return; + nMaxLevel = ai_GetAssociateTalentMaxLevel(oCreature, nDifficulty); + } + // Skill, Class, Offensive AOE's, and Defensive talents. + if(nDifficulty >= AI_COMBAT_MODERATE) + { + // ************************** CLASS FEATURES *************************** + if(ai_TrySummonFamiliarTalent(oCreature)) return; + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + } + // Offensive single target talents. + if(nDifficulty >= AI_COMBAT_EFFORTLESS) + { + if(!ai_GetMagicMode(oCreature, AI_MAGIC_DEFENSIVE_CASTING)) + { + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + } + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Are we suppose to protect our master first? + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) + { + // Lets pick off the weakest targets. + if(!nInMelee) oTarget = ai_GetLowestCRPhysicalTarget(oCreature); + else oTarget = ai_GetLowestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_GetAIMode(oCreature, AI_MODE_DEFEND_MASTER)) oTarget = ai_GetLowestCRAttackerOnMaster(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetBestTargetForMeleeCombat(oCreature, nInMelee, !ai_GetAIMode(oCreature, AI_MODE_CHECK_ATTACK)); + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, FALSE); +} diff --git a/_module/nss/ai_ambusher.nss b/_module/nss/ai_ambusher.nss new file mode 100644 index 0000000..829a3da --- /dev/null +++ b/_module/nss/ai_ambusher.nss @@ -0,0 +1,100 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_ambusher +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for ambushing creatures (Any). + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // Rule used to disable ambush if the player wants to. + if(!GetLocalInt(GetModule(), AI_RULE_AMBUSH)) + { + ExecuteScript("ai_default", oCreature); + return; + } + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + // Check the battle field to see if anyone see us? + int nEnemyIndex = ai_GetNearestIndexThatSeesUs(oCreature); + // If seen, can we try to hide now? + if(nEnemyIndex) + { + // Check for an attacker and can they see through invisibility? + object oAttacker = ai_GetEnemyAttackingMe(oCreature); + int bCanSeeInvisible; + if(oAttacker != OBJECT_INVALID) + { + bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_SEEINVISIBLE); + if(!bCanSeeInvisible) bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_TRUESEEING); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_5_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_10_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_60_FEET, oCreature); + } + if(AI_DEBUG) ai_Debug("ai_ambusher", "43", "bCanSeeInvisible: " + IntToString(bCanSeeInvisible)); + if(!bCanSeeInvisible) + { + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("ai_ambusher", "50", GetName(oCreature) + " is using hide in plain sight!"); + ClearAllActions(TRUE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + return; + } + } + // Does not have hide in plain sight. + else + { + string sEnemyIndex = IntToString(nEnemyIndex); + float fEnemyDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sEnemyIndex); + if(AI_DEBUG) ai_Debug("ai_ambusher", "61", "fDistance: " + FloatToString(fEnemyDistance, 0, 2)); + if(fEnemyDistance >= AI_RANGE_LONG) + { + int bTried = GetLocalInt(oCreature, AI_TRIED_TO_HIDE); + if(!bTried) + { + // Move away so we can hide. + if(AI_DEBUG) ai_Debug("ai_ambusher", "68", GetName(oCreature) + " is trying to move away to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + sEnemyIndex); + ActionMoveAwayFromObject(oEnemy, TRUE, AI_RANGE_BATTLEFIELD); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + else SetLocalInt(oCreature, AI_TRIED_TO_HIDE, GetLocalInt(oCreature, AI_TRIED_TO_HIDE) - 1); + } + // We have been seen by an enemy too close to us so drop stealth. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + } + // The enemy can see through stealth so lets drop it. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + // We are not in stealth mode so lets get there. + else if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + // Use any hiding talents we have + if(AI_DEBUG) ai_Debug("ai_ambusher", "88", GetName(oCreature) + " is trying to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + // If we have givin up on stealth do our normal actions. + string sScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + if(sScript == "ai_ambusher" || sScript == "") sScript = "ai_default"; + if(AI_DEBUG) ai_Debug("ai_ambusher", "96", "sScript: " + sScript + " AI_DEFAULT_SCRIPT: " + GetLocalString(oCreature, AI_DEFAULT_SCRIPT)); + ExecuteScript(sScript, oCreature); +} diff --git a/_module/nss/ai_barbarian.nss b/_module/nss/ai_barbarian.nss new file mode 100644 index 0000000..56604ba --- /dev/null +++ b/_module/nss/ai_barbarian.nss @@ -0,0 +1,71 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_barbarian +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Barbarian. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oTarget; + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature)) + { + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS ***************************** + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + } + // ***************************** MELEE ATTACKS *************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_bard.nss b/_module/nss/ai_bard.nss new file mode 100644 index 0000000..d26236c --- /dev/null +++ b/_module/nss/ai_bard.nss @@ -0,0 +1,67 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_bard +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Bard. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBardSongFeat(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_bloodmane.nss b/_module/nss/ai_bloodmane.nss new file mode 100644 index 0000000..456fbe4 --- /dev/null +++ b/_module/nss/ai_bloodmane.nss @@ -0,0 +1,38 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_bloodmane +////////////////////////////////////////////////////////////////////////////////////////////////////// + AI combat action scripts for Bloodmane - Orc Warlord(Barbarian - Example). + To use this AI set the variable string "AI_DEFAULT_SCRIPT" to "ai_bloodmane" on the creature. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + //************************************************************************** + //************************ START SPECIAL AI SCRIPTS ************************ + //************************************************************************** + int nRound = ai_GetCurrentRound(oCreature); + // First round cuss and animate! + if(nRound == 1) + { + // Make him taunt the player! + ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT); + PlayVoiceChat(Random(4), oCreature); + } + // Second round go into a Rage. + else if(nRound == 2) + { + // Use Rage! + if(ai_TryBarbarianRageFeat(oCreature)) return; + // If for some reason he doesn't have a rage then charge into melee! + object oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, ai_GetNumOfEnemiesInRange(oCreature)); + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + // Change Bloodmane's ai to Barbarian since we are done with his special ai. + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_barbarian"); + } + //************************************************************************** + //************************ END SPECIAL AI SCRIPTS ************************** + //************************************************************************** +} diff --git a/_module/nss/ai_cleric.nss b/_module/nss/ai_cleric.nss new file mode 100644 index 0000000..9b256c0 --- /dev/null +++ b/_module/nss/ai_cleric.nss @@ -0,0 +1,68 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_cleric +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Cleric. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryTurningTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_cntrspell.nss b/_module/nss/ai_cntrspell.nss new file mode 100644 index 0000000..04939c9 --- /dev/null +++ b/_module/nss/ai_cntrspell.nss @@ -0,0 +1,68 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_cntrspell +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the combat mode counter spell. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + // We are not in melee combat then we don't attack. + int bAttack = nInMelee; + if(!bAttack) + { + // If there are no casters, i.e. CLERIC or MAGES in the battle then attack. + struct stClasses stClasses = ai_GetFactionsClasses(oCreature); + if(!stClasses.CLERICS && !stClasses.MAGES) bAttack = TRUE; + } + // If we are not attacking then setup for counter spelling. + if(!bAttack) + { + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(AI_DEBUG) ai_Debug("ai_cntrspell", "29", " Counterspell Mode? " + + IntToString(GetActionMode(OBJECT_SELF, ACTION_MODE_COUNTERSPELL))); + if(!GetActionMode(oCreature, ACTION_MODE_COUNTERSPELL)) + { + object oTarget = ai_GetNearestClassTarget(oCreature, AI_CLASS_TYPE_CASTER); + // We can only counter spells from a hasted caster if we are hasted as well. + if(ai_GetHasEffectType(oTarget, EFFECT_TYPE_HASTE) && + !ai_GetHasEffectType(oCreature, EFFECT_TYPE_HASTE)) + { + // If we have haste then we should cast it. + if(GetHasSpell(SPELL_HASTE, oCreature)) + { + if(AI_DEBUG) ai_Debug("ai_cntrspell", "41", "Opponent is hasted! Casting Haste."); + ActionCastSpellAtObject(SPELL_HASTE, oCreature); + ai_SetLastAction(oCreature, SPELL_HASTE); + return; + } + // If not then we need to go into normal combat. + else + { + if(AI_DEBUG) ai_Debug("ai_cntrspell", "49", "Opponent is hasted! Using ranged AI."); + ExecuteScript("ai_ranged"); + return; + } + } + if(oTarget != OBJECT_INVALID) + { + // First a good tactic for counter spelling is to be invisible. + if(ai_TryToBecomeInvisible(oCreature)) return; + // If we have attempted to become invisible or are invisible then + // it is time to counter spell. + if(AI_DEBUG) ai_Debug("ai_cntrspell", "60", "Setting Counterspell mode!"); + ActionCounterSpell(oTarget); + return; + } + } + } + if(AI_DEBUG) ai_Debug("ai_cntrspell", "66", "Situation is not good for counterspelling! Using ranged AI."); + ExecuteScript("ai_ranged"); +} diff --git a/_module/nss/ai_coward.nss b/_module/nss/ai_coward.nss new file mode 100644 index 0000000..b88e424 --- /dev/null +++ b/_module/nss/ai_coward.nss @@ -0,0 +1,133 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_coward +//////////////////////////////////////////////////////////////////////////////// + ai script for cowardly creatures (Any) used when they fail a moral check or + when associates are to remain out of combat. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with us. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + // If we have been healed up then get back in there! + if(ai_GetPercHPLoss(oCreature) > AI_HEALTH_WOUNDED) + { + string sDefaultCombatScript = GetLocalString(oCreature, AI_DEFAULT_SCRIPT); + SetLocalString(oCreature, AI_COMBAT_SCRIPT, sDefaultCombatScript); + ExecuteScript(sDefaultCombatScript, oCreature); + return; + } + // In Melee combat! + if(nInMelee) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune. + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if (ai_TryParry(oCreature)) return; + // We have tried everything to protect ourselves so the only thing left + // to do is man up and attack! + // Physical attacks are under TALENT_CATEGORY_HARMFUL_MELEE(22). + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); + return; + } + else + { + // If can turn invisible then we should probably do that! + if(ai_UseTalent(oCreature, SPELL_IMPROVED_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_INVISIBILITY_SPHERE, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_SANCTUARY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELL_ETHEREALNESS, oCreature)) return; // Greater Sanctuary + if(ai_UseTalent(oCreature, SPELLABILITY_AS_IMPROVED_INVISIBLITY, oCreature)) return; + if(ai_UseTalent(oCreature, SPELLABILITY_AS_INVISIBILITY, oCreature)) return; + // If we are seen by the enemy we need to move back so we can hide. + int nEnemyIndex = ai_GetNearestIndexThatSeesUs(oCreature); + if(nEnemyIndex) + { + // Check for an attacker and can they see through invisibility? + object oAttacker = ai_GetEnemyAttackingMe(oCreature); + int bCanSeeInvisible; + if(oAttacker != OBJECT_INVALID) + { + bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_SEEINVISIBLE); + if(!bCanSeeInvisible) bCanSeeInvisible = ai_GetHasEffectType(oAttacker, EFFECT_TYPE_TRUESEEING); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_5_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_10_FEET, oCreature); + if(!bCanSeeInvisible) bCanSeeInvisible = GetHasFeat(FEAT_BLINDSIGHT_60_FEET, oCreature); + } + if(!bCanSeeInvisible) + { + if(GetHasFeat(FEAT_HIDE_IN_PLAIN_SIGHT, oCreature)) + { + if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("ai_coward", "74", GetName(oCreature) + " is using hide in plain sight!"); + ClearAllActions(TRUE); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + return; + } + } + // Does not have hide in plain sight. + else + { + string sEnemyIndex = IntToString(nEnemyIndex); + float fEnemyDistance = GetLocalFloat(oCreature, AI_ENEMY_RANGE + sEnemyIndex); + if(AI_DEBUG) ai_Debug("ai_coward", "85", "fDistance: " + FloatToString(fEnemyDistance, 0, 2)); + if(fEnemyDistance >= AI_RANGE_CLOSE) + { + int bTried = GetLocalInt(oCreature, AI_TRIED_TO_HIDE); + if(!bTried) + { + // Move away so we can hide. + if(AI_DEBUG) ai_Debug("ai_coward", "93", GetName(oCreature) + " is trying to move away to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + object oEnemy = GetLocalObject(oCreature, AI_ENEMY + sEnemyIndex); + ActionMoveAwayFromObject(oEnemy, TRUE, AI_RANGE_BATTLEFIELD); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + else SetLocalInt(oCreature, AI_TRIED_TO_HIDE, GetLocalInt(oCreature, AI_TRIED_TO_HIDE) - 1); + } + // We have been seen by an enemy near us so drop stealth. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + } + // The enemy can see through stealth so lets drop it. + else SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + } + // We are not in stealth mode so lets get there. + else if(!GetActionMode(oCreature, ACTION_MODE_STEALTH)) + { + // Use any hiding talents we have + if(AI_DEBUG) ai_Debug("ai_coward", "113", GetName(oCreature) + " is trying to hide!"); + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetLocalInt(oCreature, AI_TRIED_TO_HIDE, 3); + return; + } + } + // Either we cannot go into stealth or we are in stealth so do something else. + //************************* OUT OF MELEE COMBAT ************************** + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, 0, oCreature)) return; + if(ai_TryCureConditionTalent(oCreature, 0)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //************************** DEFENSIVE TALENTS *************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel)) return; + // Stand and watch the battle we don't want to provoke anyone! + if(AI_DEBUG) ai_Debug("ai_coward", "132", GetName(oCreature) + " is holding here."); +} diff --git a/_module/nss/ai_default.nss b/_module/nss/ai_default.nss new file mode 100644 index 0000000..f84f6f7 --- /dev/null +++ b/_module/nss/ai_default.nss @@ -0,0 +1,50 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_default +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for default creatures(Any). + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryPolymorphSelfFeat(oCreature)) return; + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); +} diff --git a/_module/nss/ai_defensive.nss b/_module/nss/ai_defensive.nss new file mode 100644 index 0000000..15f5275 --- /dev/null +++ b/_module/nss/ai_defensive.nss @@ -0,0 +1,48 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_defensive +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures put in to a defensive mode to protect themselves(Any). + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel)) return; + //******************** DEFENSIVE MELEE FEATS ***************************** + if(nInMelee > 0) + { + if(ai_TryImprovedExpertiseFeat(oCreature)) return; + if(ai_TryExpertiseFeat(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget == OBJECT_INVALID) oTarget = oNearestEnemy; + // Use knockdown when appropriate and the target is not immune + if(ai_TryKnockdownFeat(oCreature, oTarget)) return; + if(ai_TryParry(oCreature)) return; + } + //********************** PHYSICAL ATTACKS ******************************** + // Even in defensive mode we want to be in battle so go find someone! + ai_DoPhysicalAttackOnNearest(oCreature, nInMelee); +} diff --git a/_module/nss/ai_dragon.nss b/_module/nss/ai_dragon.nss new file mode 100644 index 0000000..a82362c --- /dev/null +++ b/_module/nss/ai_dragon.nss @@ -0,0 +1,51 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_dragon +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for dragons. + OBJECT_SELF is the dragons running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Dragons do not flee! if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // ************************ MELEE ATTACKS ******************************** + object oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(GetDistanceBetween(oCreature, oTarget) > AI_RANGE_CLOSE) + { + // Can we do a crush attack(HD 18+)? + if(ai_TryCrushAttack(oCreature, oTarget)) return; + ai_FlyToTarget(oCreature, oTarget); + return; + } + if(ai_TryDragonBreathAttack(oCreature, nRound)) return; + ai_TryWingAttacks(oCreature); + // If we don't do a Tail sweep attack(HD 30+) then see if we can do a Tail slap(HD 12+)! + if(!ai_TryTailSweepAttack(oCreature)) ai_TryTailSlap(oCreature); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_dragon_boss.nss b/_module/nss/ai_dragon_boss.nss new file mode 100644 index 0000000..fc85f9b --- /dev/null +++ b/_module/nss/ai_dragon_boss.nss @@ -0,0 +1,103 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_dragon_boss +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script a unique dragon that lives deep in a dark cave using it as a defense. + OBJECT_SELF is the dragon running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //************************************************************************** + //************************ ROUND BASED AI SCRIPTS ************************* + //************************************************************************** + int nRound = ai_GetCurrentRound(oCreature); + // First time fly to our enemy, the rest of combat lets not do that! + object oTarget; + if(!GetLocalInt(OBJECT_SELF, "AI_DONE_FLYING")) + { + SetLocalInt(OBJECT_SELF, "AI_DONE_FLYING", TRUE); + oTarget = ai_GetLowestCRTarget(oCreature); + // We assign the voice to the PC so they get to hear it. + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); + AssignCommand(oPC, PlaySound("vs_ndredm_bat2")); + // Can we do a crush attack(HD 18+)? + if(ai_TryCrushAttack(oCreature, oTarget)) return; + ai_FlyToTarget(oCreature, oTarget); + return; + } + else if(nRound == 2) + { + oTarget = ai_GetLowestCRTarget(oCreature, AI_RANGE_CLOSE); + ai_TryDragonBreathAttack(oCreature, nRound, oTarget); + return; + } + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Check to see if we need to retreat to get healing. + int nPercentageHP = ai_GetPercHPLoss(oCreature); + //ai_Debug("ai_dragon_boss", "43", "nPercentageHP: " + IntToString(nPercentageHP)); + if(nPercentageHP < 75 && !GetLocalInt(oCreature, "AI_HOME")) + { + string sWaypoint; + // If we are below half then go to last defensive position. + if(nPercentageHP < 50) + { + SetLocalInt(oCreature, "AI_HOME", TRUE); + sWaypoint = "0_wp_dragon2"; + } + // else we just go back a little bit to heal up. + else sWaypoint = "0_wp_dragon1"; + if(!GetLocalInt(oCreature, sWaypoint)) + { + string sVoice; + switch(d6()) + { + case 1 : + case 2 : sVoice = "vs_ndredm_attk"; break; + case 3 :sVoice = "vs_ndredm_heal"; break; + case 4 :sVoice = "vs_ndredm_help"; break; + case 5 :sVoice = "vs_ndredm_no"; break; + case 6 :sVoice = "vs_ndredm_bat3"; break; + } + SetImmortal(oCreature, TRUE); + DelayCommand(6.0f, SetImmortal(oCreature, FALSE)); + AssignCommand(ai_GetNearestTarget(oCreature), PlaySound(sVoice)); + object oWaypoint = GetNearestObjectByTag(sWaypoint); + //ai_Debug("ai_dragon_boss", "71", "Flying to " + sWaypoint + "."); + effect eFly = EffectDisappearAppear(GetLocation(oWaypoint)); + ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oCreature, 6.0f); + SetLocalInt(oCreature, sWaypoint, TRUE); + return; + } + } + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // ************************ MELEE ATTACKS ******************************** + oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryDragonBreathAttack(oCreature, nRound)) return; + ai_TryWingAttacks(oCreature); + // If we don't do a Tail sweep attack(HD 30+) then see if we can do a Tail slap(HD 12+)! + if(!ai_TryTailSweepAttack(oCreature)) ai_TryTailSlap(oCreature); + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_druid.nss b/_module/nss/ai_druid.nss new file mode 100644 index 0000000..aebbb0e --- /dev/null +++ b/_module/nss/ai_druid.nss @@ -0,0 +1,93 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_druid +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Druid. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS) && ai_TrySummonAnimalCompanionTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + // Get the Spell Level we should still cast before turning into our polymorph form. + int nSpellLevel = ai_GetHasPolymorphSelfFeat(oCreature); + if(AI_DEBUG) ai_Debug("ai_druid", "30", "nSpellLevel: " + IntToString(nSpellLevel)); + int nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_SUMMON); + if(AI_DEBUG) ai_Debug("ai_druid", "32", "nMaxTalentLevel 'S' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_SUMMON, nInMelee, nMaxLevel)) return; + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_PROTECTION); + if(AI_DEBUG) ai_Debug("ai_druid", "36", "nMaxTalentLevel 'P' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_PROTECTION, nInMelee, nMaxLevel)) return; + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_ENHANCEMENT); + if(AI_DEBUG) ai_Debug("ai_druid", "40", "nMaxTalentLevel 'E' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_ENHANCEMENT, nInMelee, nMaxLevel)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0) + { + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_TOUCH); + if(AI_DEBUG) ai_Debug("ai_druid", "48", "nMaxTalentLevel 'T' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + } + nMaxTalentLevel = GetLocalInt(oCreature, AI_MAX_TALENT + AI_TALENT_RANGED); + if(AI_DEBUG) ai_Debug("ai_druid", "53", "nMaxTalentLevel 'R' " + IntToString(nMaxTalentLevel)); + if(nSpellLevel < nMaxTalentLevel && + ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + if(ai_TryPolymorphSelfFeat(oCreature)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + // All else fails lets see if we have any good potions. + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Lets pick off the nearest targets. + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_fighter.nss b/_module/nss/ai_fighter.nss new file mode 100644 index 0000000..9602923 --- /dev/null +++ b/_module/nss/ai_fighter.nss @@ -0,0 +1,65 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_fighter +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Fighter. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //***************** OFFENSIVE AREA OF EFFECT TALENTS ********************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + // *********************** DEFENSIVE TALENTS ***************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //******************* OFFENSIVE TARGETED TALENTS ************************* + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS **************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // **************************** MELEE ATTACKS **************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_flanker.nss b/_module/nss/ai_flanker.nss new file mode 100644 index 0000000..86fc7a3 --- /dev/null +++ b/_module/nss/ai_flanker.nss @@ -0,0 +1,102 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_flanker +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for monsters to flank the enemy and not charge into combat. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //***************** OFFENSIVE AREA OF EFFECT TALENTS ********************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + // *********************** DEFENSIVE TALENTS ***************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //******************* OFFENSIVE TARGETED TALENTS ************************* + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Melee feat attacks ************************* + // Lets get the nearest target that is attacking someone besides me. We want to flank! + if(oTarget == OBJECT_INVALID) + { + if(!nInMelee) oTarget = ai_GetFlankTarget(oCreature); + // If there are few enemies then we can safely move around. + else if(nInMelee < 3 || ai_CanIMoveInCombat(oCreature)) + { + oTarget = ai_GetFlankTarget(oCreature, AI_RANGE_MELEE); + } + // Ok we are in a serious fight so lets not give attack of opportunities. + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + // If there are no enemies being attacked then lets stay back. + if(oTarget == OBJECT_INVALID) + { + if(nInMelee) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Lets get the strongest melee opponent in melee with us. + object oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + // ************************** Ranged feat attacks ************************** + if(!ai_GetAIMode(oCreature, AI_MODE_STOP_RANGED) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + oTarget = ai_GetNearestPhysicalTarget(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + } + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/_module/nss/ai_incorporeal.nss b/_module/nss/ai_incorporeal.nss new file mode 100644 index 0000000..14c1a76 --- /dev/null +++ b/_module/nss/ai_incorporeal.nss @@ -0,0 +1,85 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_incorporeal +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures that are incorporeal. + oCreature is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + if (nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + if(ai_TrySummonFamiliarTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if (!GetHasFeatEffect (FEAT_BARBARIAN_RAGE, oCreature) && ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (ai_TryRangedSneakAttack (oCreature, nInMelee)) return; + string sIndex; + if (!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget (oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRapidShotFeat (oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + // If we are using our hands then do a touch attack instead. + if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND) == OBJECT_INVALID) + { + // If they don't have a claw then we need to do a special attack instead. + if(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L) != OBJECT_INVALID) + { + // Randomize so they don't appear synchronized. + float fDelay = IntToFloat(Random(2) + 1); + DelayCommand(fDelay, ActionCastSpellAtObject (769/*Shadow_Attack*/, oTarget, METAMAGIC_ANY, TRUE)); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MELEE_ATK); + SetLocalObject(oCreature, AI_ATTACKED_PHYSICAL, oTarget); + } + else ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_invisible.nss b/_module/nss/ai_invisible.nss new file mode 100644 index 0000000..7d8863a --- /dev/null +++ b/_module/nss/ai_invisible.nss @@ -0,0 +1,93 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_invisible +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures(Any) that are invisible. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + // Skill, Class, Offensive AOE's, and Defensive talents. + // *************************** SPELL TALENTS *************************** + // ********** PROTECTION/ENHANCEMENT/SUMMON TALENTS ************ + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + // ************************** CLASS FEATURES *************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + // ******************* OFFENSIVE AOE TALENTS *********************** + // Check the battlefield for a group of enemies to shoot a big spell at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // If we won't loose invisibility then ranged attacks are ok! + // ************************ RANGED ATTACKS ******************************* + if(GetHasSpellEffect(SPELL_IMPROVED_INVISIBILITY) || GetHasSpellEffect(SPELLABILITY_AS_IMPROVED_INVISIBLITY)) + { + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************** Melee feat attacks ************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetLowestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + talent tUse = GetCreatureTalentBest(TALENT_CATEGORY_HARMFUL_MELEE, 20, oCreature); + if(GetIsTalentValid(tUse)) + { + int nId = GetIdFromTalent(tUse); + if(nId == FEAT_POWER_ATTACK) { if(ai_TryPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KNOCKDOWN) { if(ai_TryKnockdownFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_EVIL) { if(ai_TrySmiteEvilFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SMITE_GOOD) { if(ai_TrySmiteGoodFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_IMPROVED_POWER_ATTACK) { if(ai_TryImprovedPowerAttackFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_FLURRY_OF_BLOWS) { if(ai_TryFlurryOfBlowsFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_STUNNING_FIST) { if(ai_TryStunningFistFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_SAP) { if(ai_TrySapFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_DISARM) { if(ai_TryDisarmFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_KI_DAMAGE) { if(ai_TryKiDamageFeat(oCreature, oTarget)) return; } + else if(nId == FEAT_CALLED_SHOT) { if(ai_TryCalledShotFeat(oCreature, oTarget)) return; } + } + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_monk.nss b/_module/nss/ai_monk.nss new file mode 100644 index 0000000..d087073 --- /dev/null +++ b/_module/nss/ai_monk.nss @@ -0,0 +1,65 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_monk +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Monk. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + //*************************** HEALING & CURES **************************** + if (ai_TryWholenessOfBodyFeat (oCreature)) return; + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (!nInMelee) oTarget = ai_GetNearestPhysicalTarget (oCreature); + else oTarget = ai_GetNearestPhysicalTarget (oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if (ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_paladin.nss b/_module/nss/ai_paladin.nss new file mode 100644 index 0000000..46efe88 --- /dev/null +++ b/_module/nss/ai_paladin.nss @@ -0,0 +1,71 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_paladin +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Paladin. + Paladins face the strongest opponents on the battlefield first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryTurningTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + if(ai_TryDivineShieldFeat(oCreature, nInMelee)) return; + if(ai_TryDivineMightFeat(oCreature, nInMelee)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Paladins face the biggest challenges first! + if(!nInMelee) oTarget = ai_GetHighestCRPhysicalTarget(oCreature); + else oTarget = ai_GetHighestCRPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + // Paladins face the biggest challenges first! + oTarget = ai_GetHighestCRTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_polymorphed.nss b/_module/nss/ai_polymorphed.nss new file mode 100644 index 0000000..6c1ab1f --- /dev/null +++ b/_module/nss/ai_polymorphed.nss @@ -0,0 +1,65 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_polymorphed +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for polymorphed creatures. + We check for abilities based on the form we are using and if we should polymorph back. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(GetPercentageHPLoss(oCreature) <= AI_HEALTH_BLOODY) + { + if(AI_DEBUG) ai_Debug("ai_polymorphed", "20", "We are wounded and are transforming back!"); + ai_RemoveASpecificEffect(oCreature, EFFECT_TYPE_POLYMORPH); + DeleteLocalInt(oCreature, AI_POLYMORPHED); + // We need to create the creatures normal forms talent list. + DelayCommand(0.0, ai_ClearTalents(oCreature)); + DelayCommand(0.1, ai_SetCreatureTalents(oCreature, TRUE, TRUE)); + return; + } + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + // When polymorphed we turn back then check moral. + // if(nInMelee && ai_MoralCheck(oCreature)) return; + // Skill, Class, Offensive AOE's, and Defensive talents. + // *************************** SPELL TALENTS *************************** + if(ai_CheckForAssociateSpellTalent(oCreature, nInMelee, nMaxLevel)) return; + // Class and Offensive single target talents. + // *************************** SPELL TALENTS *************************** + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS **************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // **************************** MELEE ATTACKS **************************** + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_ranged.nss b/_module/nss/ai_ranged.nss new file mode 100644 index 0000000..d64fc0a --- /dev/null +++ b/_module/nss/ai_ranged.nss @@ -0,0 +1,144 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_ranged +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for monsters to use the ranged ai. + OBJECT_SELF is the creature running the ai. + Will attempt to use ranged weapons/spells until surrounded. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Check for moral and get the maximum spell level we should use. + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + // ************************** CLASS FEATURES ******************************* + if(ai_TryTurningTalent(oCreature)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + object oTarget; + // ************************** Ranged feat attacks ************************** + if(!GetHasFeatEffect(FEAT_BARBARIAN_RAGE, oCreature) && + (nInMelee < 3 || ai_GetEnemyAttackingMe(oCreature) == OBJECT_INVALID)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + // Lets pick off the ranged then nearest targets. + if(!nInMelee) + { + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget == ai_GetRangedTarget(oCreature); + if(oTarget == OBJECT_INVALID && ai_TryRangedSneakAttack(oCreature, nInMelee)) return; + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature); + } + else + { + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else + { + if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + } + } + // ************************** Melee feat attacks ************************* + object oNearestEnemy = GetLocalObject(oCreature, AI_ENEMY_NEAREST); + if(nInMelee) + { + oTarget = ai_GetEnemyAttackingMe(oCreature); + if(oTarget != OBJECT_INVALID) + { + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if(ai_TrySneakAttack(oCreature, nInMelee)) return; + if(ai_TryWhirlwindFeat(oCreature)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + return; + } + } + } + if(oNearestEnemy != OBJECT_INVALID) + { + float fDistance = GetDistanceBetween(oCreature, oNearestEnemy); + float fRange = AI_RANGE_LONG; + if(GetHasFeat(FEAT_SNEAK_ATTACK, oCreature)) fRange = AI_RANGE_CLOSE; + if(fDistance < fRange) + { + int bRun = ai_CanIMoveInCombat(oCreature); + ActionMoveAwayFromObject(oNearestEnemy, bRun, fRange - fDistance + 2.0); + } + } + else ai_SearchForHiddenCreature(oCreature, FALSE, OBJECT_INVALID, AI_RANGE_CLOSE); +} + diff --git a/_module/nss/ai_ranger.nss b/_module/nss/ai_ranger.nss new file mode 100644 index 0000000..08a6d5a --- /dev/null +++ b/_module/nss/ai_ranger.nss @@ -0,0 +1,79 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_ranger +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Ranger. + Need to add ---> Rangers will take out favored enemies first! + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS) && ai_TrySummonAnimalCompanionTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature); + } + else + { + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + } + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestFavoredEnemyTarget(oCreature, AI_RANGE_MELEE); + if(oTarget == OBJECT_INVALID) oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryMeleeTalents(oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_rogue.nss b/_module/nss/ai_rogue.nss new file mode 100644 index 0000000..ed270d4 --- /dev/null +++ b/_module/nss/ai_rogue.nss @@ -0,0 +1,66 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_rogue +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Rogue. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (ai_TryRangedSneakAttack (oCreature, nInMelee)) return; + oTarget = ai_GetNearestPhysicalTarget (oCreature); + if(oTarget != OBJECT_INVALID) + { + if (ai_TryRapidShotFeat (oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + if (ai_TrySneakAttack (oCreature, nInMelee)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if (ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_shadow.nss b/_module/nss/ai_shadow.nss new file mode 100644 index 0000000..e708d27 --- /dev/null +++ b/_module/nss/ai_shadow.nss @@ -0,0 +1,77 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_shadow +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures that are incorporeal. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + // Shadows do not flee! if(nInMelee && ai_MoralCheck()) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************ RANGED ATTACKS ******************************* + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + string sIndex; + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee); + if(oTarget != OBJECT_INVALID) + { + // If we are using our hands then do a touch attack instead. + if(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND) == OBJECT_INVALID) + { + if(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L) != OBJECT_INVALID) + { + // Randomize so they don't appear synchronized. + float fDelay = IntToFloat(Random(2) + 1); + DelayCommand(fDelay, ActionCastSpellAtObject (769/*Shadow_Attack*/, oTarget, METAMAGIC_ANY, TRUE)); + ai_SetLastAction(oCreature, AI_LAST_ACTION_MELEE_ATK); + SetLocalObject (oCreature, AI_ATTACKED_PHYSICAL, oTarget); + } + } + else ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_sorcerer.nss b/_module/nss/ai_sorcerer.nss new file mode 100644 index 0000000..afbf502 --- /dev/null +++ b/_module/nss/ai_sorcerer.nss @@ -0,0 +1,61 @@ +/*//////////////////////////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_sorcerer +////////////////////////////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Sorcerer. + OBJECT_SELF is the creature running the ai. +*///////////////////////////////////////////////////////////////////////////////////////////////////// +// Programmer: Philos +////////////////////////////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************* OFFENSIVE TARGETED TALENTS *********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************** RANGED ATTACKS ***************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, FALSE); + // I have a target now lets see if we want to move in! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/_module/nss/ai_taunter.nss b/_module/nss/ai_taunter.nss new file mode 100644 index 0000000..89aae52 --- /dev/null +++ b/_module/nss/ai_taunter.nss @@ -0,0 +1,78 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: ai_taunter +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using defined to use the taunt skill. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange (oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck (oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + //**************************** SKILL FEATURES **************************** + if(ai_TryAnimalEmpathy(oCreature)) return; + //**************************** CLASS FEATURES **************************** + if(ai_TryBarbarianRageFeat(oCreature)) return; + if(ai_TryBardSongFeat(oCreature)) return; + if(ai_TryTurningTalent(oCreature)) return; + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS)) + { + if(ai_TrySummonFamiliarTalent(oCreature)) return; + if(ai_TrySummonAnimalCompanionTalent(oCreature)) return; + } + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************** OFFENSIVE TARGETED TALENTS ********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // *************************** RANGED ATTACKS ***************************** + // We use a bow when we are not in melee, or only 1 enemy with PBS. + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if (!nInMelee) oTarget = ai_GetNearestPhysicalTarget (oCreature); + else oTarget = ai_GetNearestPhysicalTarget (oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + if(ai_TryRangedTalents(oCreature, oTarget, nInMelee)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ***************************** MELEE ATTACKS *************************** + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat (oCreature, nInMelee); + if (oTarget != OBJECT_INVALID) + { + if (ai_TryTaunt (oCreature, oTarget)) return; + if (ai_TryMeleeTalents (oCreature, oTarget)) return; + ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + } + else ai_SearchForHiddenCreature(oCreature, TRUE); +} diff --git a/_module/nss/ai_wizard.nss b/_module/nss/ai_wizard.nss new file mode 100644 index 0000000..082cde4 --- /dev/null +++ b/_module/nss/ai_wizard.nss @@ -0,0 +1,63 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: ai_wizard +//////////////////////////////////////////////////////////////////////////////// + ai script for creatures using the class Wizard. + OBJECT_SELF is the creature running the ai. +//////////////////////////////////////////////////////////////////////////////// + Programmer: Philos +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" +void main() +{ + object oCreature = OBJECT_SELF; + // Get the number of enemies that we are in melee combat with. + int nInMelee = ai_GetNumOfEnemiesInRange(oCreature); + //*************************** HEALING & CURES **************************** + if(ai_TryHealingTalent(oCreature, nInMelee)) return; + if(ai_TryCureConditionTalent(oCreature, nInMelee)) return; + if(nInMelee && ai_MoralCheck(oCreature)) return; + int nMaxLevel = ai_GetMonsterTalentMaxLevel(oCreature); + //******************* OFFENSIVE AREA OF EFFECT TALENTS ******************* + // Check the battlefield for a group of enemies to shoot a big talent at! + // We are checking here since these opportunities are rare and we need + // to take advantage of them as often as possible. + if(ai_UseCreatureTalent(oCreature, AI_TALENT_INDISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_DISCRIMINANT_AOE, nInMelee, nMaxLevel)) return; + // ************************** CLASS FEATURES **************************** + if(GetLocalInt(GetModule(), AI_RULE_SUMMON_COMPANIONS) && ai_TrySummonFamiliarTalent(oCreature)) return; + //************************** DEFENSIVE TALENTS *************************** + int nRound = ai_GetCurrentRound(oCreature); + if(ai_TryDefensiveTalents(oCreature, nInMelee, nMaxLevel, nRound)) return; + //********************* OFFENSIVE TARGETED TALENTS *********************** + // Look for a touch attack since we are in melee. + if(nInMelee > 0 && ai_UseCreatureTalent(oCreature, AI_TALENT_TOUCH, nInMelee, nMaxLevel)) return; + if(ai_UseCreatureTalent(oCreature, AI_TALENT_RANGED, nInMelee, nMaxLevel)) return; + // PHYSICAL ATTACKS - Either we don't have talents or we are saving them. + // ************************** RANGED ATTACKS ***************************** + object oTarget; + if(ai_CanIUseRangedWeapon(oCreature, nInMelee)) + { + if(ai_HasRangedWeaponWithAmmo(oCreature)) + { + if(!nInMelee) oTarget = ai_GetNearestPhysicalTarget(oCreature); + else oTarget = ai_GetNearestPhysicalTarget(oCreature, AI_RANGE_MELEE); + if(oTarget != OBJECT_INVALID) + { + ai_ActionAttack(oCreature, AI_LAST_ACTION_RANGED_ATK, oTarget, nInMelee, TRUE); + return; + } + else + { + ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); + return; + } + } + else if(ai_InCombatEquipBestRangedWeapon(oCreature)) return; + } + // ************************* MELEE ATTACKS ******************************* + if(ai_InCombatEquipBestMeleeWeapon(oCreature)) return; + oTarget = ai_GetNearestTargetForMeleeCombat(oCreature, nInMelee, TRUE); + // I have a target now lets see if we want to move in! + if(oTarget != OBJECT_INVALID) ai_ActionAttack(oCreature, AI_LAST_ACTION_MELEE_ATK, oTarget); + else ai_SearchForHiddenCreature(oCreature, TRUE, OBJECT_INVALID, AI_RANGE_CLOSE); +} diff --git a/_module/nss/mm_prc_spells.nss b/_module/nss/mm_prc_spells.nss new file mode 100644 index 0000000..9b542bc --- /dev/null +++ b/_module/nss/mm_prc_spells.nss @@ -0,0 +1,161 @@ +#include "0i_menus" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +json ai_CheckToReplaceSpell(json jSpellList, int nClass, int nLevel, int nSlot) +{ + if(d100() > 49) return jSpellList; + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + int nRoll = d10() + 1 + nLevel * 10; + int nSpell = StringToInt(Get2DAString("prc_add_spells", sSpellTableColumn, nRoll)); + if(nSpell > 0) + { + //WriteTimestampedLogEntry("mm_prc_spells, 13 nSpell: " + IntToString(nSpell) + + // " nLevel: " + IntToString(nLevel) + " nSlot: " + IntToString(nSlot)); + json jSpellArray = JsonArrayGet(jSpellList, nSlot); + json jSpell = JsonObjectGet(jSpellArray, "Spell"); + jSpell = JsonObjectSet(jSpell, "value", JsonInt(nSpell)); + jSpellArray = JsonObjectSet(jSpellArray, "Spell", jSpell); + return JsonArraySet(jSpellList, nSlot, jSpellArray); + } + return jSpellList; +} +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + int bChanged, bCreatureChanged, nPosition, nClass, nLevel, nSlot, nMaxSlots; + json jClass, jMemorizedList, jKnownList; + object oModule = GetModule(); + json jCreature = GetLocalJson(oModule, AI_MONSTER_JSON); + object oCreature = GetLocalObject(oModule, AI_MONSTER_OBJECT); + json jClassList = GffGetList(jCreature, "ClassList"); + while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER) + { + nClass = GetClassByPosition(nPosition, oCreature); + if(Get2DAString("classes", "SpellCaster", nClass) == "1") + { + //WriteTimestampedLogEntry("mm_prc_spells, 39 " + GetName(oCreature) + JsonDump(jClassList, 4)); + jClass = JsonArrayGet(jClassList, nPosition - 1); + if(Get2DAString("classes", "MemorizesSpells", nClass) == "1") + { + nLevel = 1; + while(nLevel < 9) + { + jMemorizedList = GffGetList(jClass, "MemorizedList" + IntToString(nLevel)); + if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL) + { + nSlot = 0; + nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel); + while(nSlot < nMaxSlots) + { + jMemorizedList = ai_CheckToReplaceSpell(jMemorizedList, nClass, nLevel, nSlot); + nSlot++; + } + //WriteTimestampedLogEntry("nClass: " + IntToString(nClass) + " nLevel: " + IntToString(nLevel) + + // " nSlot: " + IntToString(nSlot) + " jMemorizedList " + JsonDump(jMemorizedList, 4)); + jClass = GffReplaceList(jClass, "MemorizedList" + IntToString(nLevel), jMemorizedList); + bChanged = TRUE; + } + nLevel++; + } + } + else + { + nLevel = 1; + while(nLevel < 9) + { + jKnownList = GffGetList(jClass, "KnownList" + IntToString(nLevel)); + if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL) + { + nSlot = 0; + nMaxSlots = GetKnownSpellCount(oCreature, nClass, nLevel); + while(nSlot < nMaxSlots) + { + jKnownList = ai_CheckToReplaceSpell(jKnownList, nClass, nLevel, nSlot); + nSlot++; + } + jClass = GffReplaceList(jClass, "KnownList" + IntToString(nLevel), jKnownList); + bChanged = TRUE; + } + nLevel++; + } + } + if(bChanged) + { + //WriteTimestampedLogEntry("0i_module, 87 " + GetName(oCreature) + " jClass: " + JsonDump(jClass, 4)); + jClassList = JsonArraySet(jClassList, nPosition - 1, jClass); + //if(AI_DEBUG) ai_Debug("0i_module, 89 " + GetName(oCreature) + " jClassList: " + JsonDump(jClassList, 4)); + jCreature = GffReplaceList(jCreature, "ClassList", jClassList); + bCreatureChanged = TRUE; + bChanged = FALSE; + } + } + nPosition++; + } + if(bCreatureChanged) + { + //WriteTimestampedLogEntry("mm_prc_spells, 99 " + GetName(oCreature) + " jClassList: " + JsonDump(jClassList, 4)); + SetLocalJson(oModule, AI_MONSTER_JSON, jCreature); + SetLocalInt(oModule, AI_MONSTER_CHANGED, TRUE); + } +} +int PRCSpellsSetup(object oPC) +{ + // Check to make sure prc_add_spells.2da is loaded. + if(ResManGetAliasFor("prc_add_spells", RESTYPE_2DA) == "") + { + SendMessageToPC(oPC, "prc_add_spells.2da is not loaded! Make sure it is in the override or development folder."); + return FALSE; + } + // Check to make sure PRC is loaded. + if(!GetLocalInt(GetModule(), AI_USING_PRC)) + { + SendMessageToPC(oPC, "PRC is not being used. PRC must be active for this mod to work."); + return FALSE; + } + return TRUE; +} +void SetMonsterModJson(object oPC) +{ + object oModule = GetModule(); + json jMonsterMods = GetLocalJson(oModule, AI_MONSTER_MOD_JSON); + if(JsonGetType(jMonsterMods) == JSON_TYPE_NULL) jMonsterMods = JsonArray(); + int nIndex; + string sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, nIndex)); + while(sMonsterMod != "") + { + if(sMonsterMod == "mm_prc_spells") return; + sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, ++nIndex)); + } + jMonsterMods = JsonArrayInsert(jMonsterMods, JsonString("mm_prc_spells")); + SetLocalJson(oModule, AI_MONSTER_MOD_JSON, jMonsterMods); + ai_SendMessages("mm_prc_spells loaded! Monsters will be using PRC spells.", AI_COLOR_YELLOW, oPC); +} +int StartingUp(object oPC) +{ + if(!PRCSpellsSetup(oPC)) + { + SendMessageToPC(oPC, "mm_prc_spells monster mod has failed to load due to an error."); + // Return -1 in AI_PLUGIN_SET to tell PEPS that we failed to load. + SetLocalInt(oPC, AI_PLUGIN_SET, -1); + return TRUE; + } + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("mm_prc_spells")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(3)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Monsters will use PRC spells!")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + SetMonsterModJson(oPC); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + SetMonsterModJson(oPC); + return TRUE; +} + diff --git a/_module/nss/nw_c2_default1.nss b/_module/nss/nw_c2_default1.nss index 62ac86b..fc8f361 100644 --- a/_module/nss/nw_c2_default1.nss +++ b/_module/nss/nw_c2_default1.nss @@ -1,108 +1,85 @@ -//::////////////////////////////////////////////////// -//:: NW_C2_DEFAULT1 -/* - Default OnHeartbeat script for NPCs. - - This script causes NPCs to perform default animations - while not otherwise engaged. - - This script duplicates the behavior of the default - script and just cleans up the code and removes - redundant conditional checks. - - */ -//::////////////////////////////////////////////////// -//:: Copyright (c) 2002 Floodgate Entertainment -//:: Created By: Naomi Novik -//:: Created On: 12/22/2002 -//::////////////////////////////////////////////////// - -#include "nw_i0_generic" -#include "prc_inc_spells" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default1 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnHeartbeat script; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" void main() { - - // * if not runnning normal or better Ai then exit for performance reasons - if (GetAILevel() == AI_LEVEL_VERY_LOW) return; - - ExecuteScript("prc_npc_hb", OBJECT_SELF); - - // Buff ourselves up right away if we should - if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY)) - { - // This will return TRUE if an enemy was within 40.0 m - // and we buffed ourselves up instantly to respond -- - // simulates a spellcaster with protections enabled - // already. - if(TalentAdvancedBuff(40.0)) - { - // This is a one-shot deal - SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE); - - // This return means we skip sending the user-defined - // heartbeat signal in this one case. - return; - } - } - - - if(PRCGetHasEffect(EFFECT_TYPE_SLEEP)) + // If not runnning normal or better AI then exit for performance reasons + if (GetAILevel(OBJECT_SELF) == AI_LEVEL_VERY_LOW) return; + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_hb", oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default1", "16", GetName(oCreature) + " Heartbeat." + + " OnSpawn: " + IntToString(GetLocalInt(oCreature, AI_ONSPAWN_EVENT))); + // We run our OnSpawn in the heartbeat so the creator can use the original + // OnSpawn for their own use. If we have to recreate the creature then we + // skip the rest of the heartbeat since this version is being destroyed! + if(ai_OnMonsterSpawn(oCreature)) return; + if(AI_DEBUG) ai_Debug("nw_c2_default1", "16", GetName(oCreature) + " Heartbeat." + + " Searching: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(ai_GetHasEffectType(oCreature, EFFECT_TYPE_SLEEP)) { // If we're asleep and this is the result of sleeping // at night, apply the floating 'z's visual effect // every so often - if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT)) { effect eVis = EffectVisualEffect(VFX_IMP_SLEEP); if(d10() > 6) { - ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCreature); } } } - - // If we have the 'constant' waypoints flag set, walk to the next - // waypoint. - else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) ) - { - WalkWayPoints(); - } - - // Check to see if we should be playing default animations - // - make sure we don't have any current targets - else if ( !GetIsObjectValid(GetAttemptedAttackTarget()) - && !GetIsObjectValid(GetAttemptedSpellTarget()) - // && !GetIsPostOrWalking()) - && !GetIsObjectValid(GetNearestSeenEnemy())) - { - if (GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) || GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE) || - GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) - { - // This handles special attacking/fleeing behavior - // for omnivores & herbivores. - DetermineSpecialBehavior(); - } - else if (!IsInConversation(OBJECT_SELF)) - { - if (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) - || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) - || GetIsEncounterCreature()) - { - PlayMobileAmbientAnimations(); - } - else if (GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)) - { - PlayImmobileAmbientAnimations(); - } - } - } - - // Send the user-defined event signal if specified + // Send the user-defined event signal if specified here so it doesn't get skipped. + //SendMessageToPC(GetFirstPC(), "HB_EVENT: " + IntToString(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))); if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)) { - SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_HEARTBEAT)); + SignalEvent(oCreature, EventUserDefined(EVENT_HEARTBEAT)); } + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature) || + GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + if(ai_GetIsInCombat(oCreature)) + { + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE)) + { + object oTarget = ai_GetNearestEnemy(oCreature, 1, 7, 7, -1, -1, TRUE); + if(GetDistanceBetween(oCreature, oTarget) <= 6.0) + { + if(GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0 && GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0) + { + SetLocalString(oCreature, AI_COMBAT_SCRIPT, "ai_coward"); + ActionMoveAwayFromObject(oTarget, TRUE, AI_RANGE_LONG); + return; + } + } + } + ai_DoMonsterCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, TRUE)) return; + // If we have not set up our talents then we need to check to see if we should. + if(!GetLocalInt(oCreature, AI_TALENTS_SET)) + { + // We setup our talents when a PC gets withing Battlefield range 40.0 meters. + object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oCreature, 1, CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); + if(oPC != OBJECT_INVALID && GetDistanceBetween(oCreature, oPC) <= AI_RANGE_BATTLEFIELD) + { + if(AI_DEBUG) ai_Debug("nw_c2_default1", "72", GetName(oCreature) + " is " + + FloatToString(GetDistanceBetween(oCreature, oPC), 0, 2) + " from " + GetName(oPC)); + if(AI_DEBUG) ai_Debug("nw_c2_default1", "74", GetName(oCreature) + " is Setting Creature Talents and buffing!"); + ai_SetupMonsterBuffTargets(oCreature); + // To save steps and time we set the talents while we buff! + ai_SetCreatureTalents(oCreature, TRUE); + ai_ClearBuffTargets(oCreature, "AI_ALLY_TARGET_"); + } + } + if(ai_TryHealing(oCreature, oCreature)) return; + // This is where PEPS passes control to either the Bioware Waypoint system and + // AmbientAnimation scripts. A Persistent World can write there own scripts in 0e_animations. + ExecuteScript("0e_animations", oCreature); } diff --git a/_module/nss/nw_c2_default2.nss b/_module/nss/nw_c2_default2.nss index 34499fd..fa6f5f8 100644 --- a/_module/nss/nw_c2_default2.nss +++ b/_module/nss/nw_c2_default2.nss @@ -1,166 +1,138 @@ -//::////////////////////////////////////////////////// -//:: NW_C2_DEFAULT2 -/* - Default OnPerception event handler for NPCs. - - Handles behavior when perceiving a creature for the - first time. - */ -//::////////////////////////////////////////////////// - -#include "nw_i0_generic" -#include "prc_inc_spells" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default2 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnPerception script when not in combat; + There are 4 types of perception - Heard, Inaudible, Seen, Vanished. + Only one type will ever be true in an event trigger. + The order of trigger is Heard/Seen and Inaudible/Vanished. + There are two states of percepion Heard and Seen. + These states can be set at the same time thus a heard event can see the creature. + Fires when ever one of these states changes from TRUE to FALSE or FALSE to TRUE. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" void main() { - // * if not runnning normal or better Ai then exit for performance reasons - if (GetAILevel() == AI_LEVEL_VERY_LOW) return; - - ExecuteScript("prc_npc_percep", OBJECT_SELF); - - object oPercep = GetLastPerceived(); + // * if not runnning normal or better AI then exit for performance reasons + //if (GetAILevel() == AI_LEVEL_VERY_LOW) return; + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_percep", oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default2", "19", "AI_ONSPAWN_EVENT: " + IntToString(GetLocalInt(oCreature, AI_ONSPAWN_EVENT))); + if(!GetLocalInt(oCreature, AI_ONSPAWN_EVENT)) return; + if(GetLastPerceptionSeen()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "22", GetName(oCreature) + " sees " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionHeard()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "28", GetName(oCreature) + " heard " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionVanished ()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "34", GetName(oCreature) + " lost sight of " + + GetName(GetLastPerceived ()) + "."); + } + // We do nothing on Inaudibles so drop out early! + if(GetLastPerceptionInaudible()) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "41", GetName(oCreature) + " lost sound of " + + GetName(GetLastPerceived()) + "."); + return; + } + object oLastPerceived = GetLastPerceived(); + if(AI_DEBUG) ai_Debug("nw_c2_default2", "45", "Dead? " + IntToString(GetIsDead(oLastPerceived)) + + " Enemy? " + IntToString(GetIsEnemy(oLastPerceived, oCreature))); + if(ai_Disabled(oCreature)) return; + if(GetIsDead(oLastPerceived)) return; int bSeen = GetLastPerceptionSeen(); - int bHeard = GetLastPerceptionHeard(); - if (bHeard == FALSE) + // This will cause all NPC's to speak their one-liner conversation + // on perception even if they are already in combat. + if(GetIsPC(oLastPerceived) && bSeen) { - // Has someone vanished in front of me? - bHeard = GetLastPerceptionVanished(); - } - - // This will cause the NPC to speak their one-liner - // conversation on perception even if they are already - // in combat. - if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION) - && GetIsPC(oPercep) - && bSeen) - { - SpeakOneLinerConversation(); - } - - // March 5 2003 Brent - // Had to add this section back in, since modifications were not taking this specific - // example into account -- it made invisibility basically useless. - //If the last perception event was hearing based or if someone vanished then go to search mode - if ((GetLastPerceptionVanished()) && GetIsEnemy(GetLastPerceived())) - { - object oGone = GetLastPerceived(); - if((GetAttemptedAttackTarget() == GetLastPerceived() || - GetAttemptedSpellTarget() == GetLastPerceived() || - GetAttackTarget() == GetLastPerceived()) && GetArea(GetLastPerceived()) != GetArea(OBJECT_SELF)) + if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION)) { - ClearAllActions(); - DetermineCombatRound(); + SpeakOneLinerConversation(); } } - - // This section has been heavily revised while keeping the - // pre-existing behavior: - // - If we're in combat, keep fighting. - // - If not and we've perceived an enemy, start to fight. - // Even if the perception event was a 'vanish', that's - // still what we do anyway, since that will keep us - // fighting any visible targets. - // - If we're not in combat and haven't perceived an enemy, - // see if the perception target is a PC and if we should - // speak our attention-getting one-liner. - if (GetIsInCombat(OBJECT_SELF)) + if(GetIsEnemy(oLastPerceived, oCreature)) { - // don't do anything else, we're busy - //MyPrintString("GetIsFighting: TRUE"); - - } - // * BK FEB 2003 Only fight if you can see them. DO NOT RELY ON HEARING FOR ENEMY DETECTION - else if (GetIsEnemy(oPercep) && bSeen) - { // SpawnScriptDebugger(); - //MyPrintString("GetIsEnemy: TRUE"); - // We spotted an enemy and we're not already fighting - if(!PRCGetHasEffect(EFFECT_TYPE_SLEEP)) { - if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) + // ************************** ENEMY SEEN ******************************* + if(bSeen) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) { - //MyPrintString("DetermineSpecialBehavior"); - DetermineSpecialBehavior(); - } else - { - //MyPrintString("DetermineCombatRound"); - SetFacingPoint(GetPosition(oPercep)); - SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK); - DetermineCombatRound(); + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); } + ai_MonsterEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); } + // ************************** ENEMY HEARD ****************************** + else if(GetLastPerceptionHeard()) + { + ai_MonsterEvaluateNewThreat(oCreature, oLastPerceived, AI_I_HEARD_AN_ENEMY); + } + // ************************** ENEMY VANISHED *************************** + else if(GetLastPerceptionVanished()) + { + // Lets keep a mental note of the invisible creature. + SetLocalObject(oCreature, AI_IS_INVISIBLE, oLastPerceived); + if(AI_DEBUG) ai_Debug("0e_c2_2_percept", "82", " We saw " + GetName(oLastPerceived) + " disappear!"); + if(ai_GetIsBusy(oCreature)) return; + // If in combat check to see if our target disappeared. + // If they have and we are not in melee with them then reevaluate combat + // since we lost our target. + if(ai_GetIsInCombat(oCreature)) + { + if(AI_DEBUG) ai_Debug("nw_c2_default2", "89", "Is this our target? " + + IntToString(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived)); + if(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived) + { + ai_DoMonsterCombatRound(oCreature); + } + } + // We are not in combat so lets move to that location and check it out. + else ActionMoveToLocation(GetLocation(oLastPerceived), TRUE); + // we use to move to the object but thats a bit creepy! + //else ActionMoveToObject(oLastPerceived, TRUE, AI_RANGE_CLOSE); + } + // ************************ ENEMY INAUDIBLE***************************** + // Not used. } else { - if (bSeen) + // ************************ NON_ENEMY SEEN ***************************** + if(bSeen) { - //MyPrintString("GetLastPerceptionSeen: TRUE"); - if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) { - DetermineSpecialBehavior(); - } else if (GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION) - && GetIsPC(oPercep)) + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); + else if(GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION) && GetIsPC(oLastPerceived)) { - // The NPC will speak their one-liner conversation - // This should probably be: - // SpeakOneLinerConversation(oPercep); - // instead, but leaving it as is for now. - ActionStartConversation(OBJECT_SELF); + ActionStartConversation(oCreature); } } - else - // * July 14 2003: Some minor reactions based on invisible creatures being nearby - if (bHeard && GetIsEnemy(oPercep)) - { - // SpeakString("vanished"); - // * don't want creatures wandering too far after noises - if (GetDistanceToObject(oPercep) <= 7.0) - { -// if (GetHasSpell(SPELL_TRUE_SEEING) == TRUE) - if (GetHasSpell(SPELL_TRUE_SEEING)) - { - ActionCastSpellAtObject(SPELL_TRUE_SEEING, OBJECT_SELF); - } - else -// if (GetHasSpell(SPELL_SEE_INVISIBILITY) == TRUE) - if (GetHasSpell(SPELL_SEE_INVISIBILITY)) - { - ActionCastSpellAtObject(SPELL_SEE_INVISIBILITY, OBJECT_SELF); - } - else -// if (GetHasSpell(SPELL_INVISIBILITY_PURGE) == TRUE) - if (GetHasSpell(SPELL_INVISIBILITY_PURGE)) - { - ActionCastSpellAtObject(SPELL_INVISIBILITY_PURGE, OBJECT_SELF); - } - else - { - ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT, 0.5); - ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_RIGHT, 0.5); - ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD, 0.5); - } - } - } - - // activate ambient animations or walk waypoints if appropriate - if (!IsInConversation(OBJECT_SELF)) { - if (GetIsPostOrWalking()) { - WalkWayPoints(); - } else if (GetIsPC(oPercep) && - (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) - || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) - || GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) - || GetIsEncounterCreature())) - { - SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE); - } - } } - + if(!IsInConversation(oCreature)) + { + if(GetIsPostOrWalking()) + { + WalkWayPoints(); + } + else if(GetIsPC(oLastPerceived) && + (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || + GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) || + GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) || + GetIsEncounterCreature())) + { + SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE); + } + } // Send the user-defined event if appropriate - if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT) && GetLastPerceptionSeen()) + if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT) && bSeen) { SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_PERCEIVE)); } } - - - - diff --git a/_module/nss/nw_c2_default3.nss b/_module/nss/nw_c2_default3.nss index 572e123..d95a483 100644 --- a/_module/nss/nw_c2_default3.nss +++ b/_module/nss/nw_c2_default3.nss @@ -1,56 +1,68 @@ -//:://///////////////////////////////////////////// -//:: Default: End of Combat Round -//:: NW_C2_DEFAULT3 -//:: Copyright (c) 2008 Bioware Corp. -//::////////////////////////////////////////////// -/* - Calls the end of combat script every round -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Oct 16, 2001 -//::////////////////////////////////////////////// -//::////////////////////////////////////////////// -//:: Modified By: Deva Winblood -//:: Modified On: Feb 16th, 2008 -//:: Added Support for Mounted Combat Feat Support -//::////////////////////////////////////////////// - -#include "NW_I0_GENERIC" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default3 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnCombatRoundEnd event script; + Fires at the end of each combat round (6 seconds). + This will fire as long as oCreature is in combat (GetIsInCombat()). + This event starts counting once a combat action is started. + Every time a spell is cast it will queue another end combat round so haste with + two spells cast will fire this twice in one round. + It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc. + Action modes are also cleared prior to this event executing! + GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event. + This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" void main() { - ExecuteScript("prc_npc_combat", OBJECT_SELF); - - if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT")) - { // set variables on target for mounted combat - DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL"); - DeleteLocalInt(OBJECT_SELF,"nX3_HP_BEFORE"); - DeleteLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT"); - if (GetHasFeat(FEAT_MOUNTED_COMBAT,OBJECT_SELF)) - { // check for AC increase - int nRoll=d20()+GetSkillRank(SKILL_RIDE); - nRoll=nRoll-10; - if (nRoll>4) - { // ac increase - nRoll=nRoll/5; - ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectACIncrease(nRoll),OBJECT_SELF,8.5); - } // ac increase - } // check for AC increase - } // set variables on target for mounted combat - - if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) - { - DetermineSpecialBehavior(); - } - else if(!GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) - { - DetermineCombatRound(); - } + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_combat", oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default3", "20", GetName(oCreature) + " ends combat round." + + " Current action: " + IntToString(GetCurrentAction(oCreature))); if(GetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT)) { - SignalEvent(OBJECT_SELF, EventUserDefined(1003)); + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_END_COMBAT_ROUND)); } + if(ai_Disabled(oCreature)) return; + // Action modes get cleared prior to each OnCombatRoundEnd! + // We do this to keep the action mode going. + int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + if(nActionMode > 0) + { + SetActionMode(oCreature, nActionMode, TRUE); + // We don't want to use up all of the Dwarven Defenders uses! + if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE); + } + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default3", "37", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_MOVETOPOINT : + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("nw_c2_default3", "49", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We always want to interupt an attack action at the end of a round. + //case ACTION_ATTACKOBJECT : + } + if(ai_GetIsInCombat(oCreature)) + { + ai_DoMonsterCombatRound (oCreature); + return; + } + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); } diff --git a/_module/nss/nw_c2_default4.nss b/_module/nss/nw_c2_default4.nss index de90459..c7df7e2 100644 --- a/_module/nss/nw_c2_default4.nss +++ b/_module/nss/nw_c2_default4.nss @@ -1,93 +1,71 @@ -//::////////////////////////////////////////////////// -//:: NW_C2_DEFAULT4 -/* - Default OnConversation event handler for NPCs. - - */ -//::////////////////////////////////////////////////// -//:: Copyright (c) 2002 Floodgate Entertainment -//:: Created By: Naomi Novik -//:: Created On: 12/22/2002 -//::////////////////////////////////////////////////// - -#include "nw_i0_generic" -#include "prc_inc_spells" - +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_c2_4_convers + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnConversation; + Fires when oCreature has been clicked on for conversation. + Fires when oCreature hears a shout from another creature. + If SetListening is FALSE then oCreature will not "hear" anything. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void ai_MonsterCommands(object oCreature, object oSpeaker, int nMatch); void main() { - // * if petrified, jump out - if (PRCGetHasEffect(EFFECT_TYPE_PETRIFY, OBJECT_SELF) == TRUE) + object oCreature = OBJECT_SELF; + object oLastSpeaker = GetLastSpeaker(); + ExecuteScript("prc_npc_conv", oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default4", "15", GetName(oCreature) + " listens " + + IntToString(GetListenPatternNumber()) + " to " + GetName(GetLastSpeaker()) + "." + + " AI_AM_I_SEARCHING: " + IntToString(GetLocalInt(oCreature, AI_AM_I_SEARCHING))); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature) || GetLocalInt(oCreature, AI_AM_I_SEARCHING)) return; + if(ai_GetIsInCombat(oCreature)) { + ai_DoMonsterCombatRound(oCreature); return; } - - // * If dead, exit directly. - if (GetIsDead(OBJECT_SELF) == TRUE) - { - return; - } - - ExecuteScript("prc_npc_conv", OBJECT_SELF); - - // See if what we just 'heard' matches any of our - // predefined patterns + //object oLastSpeaker = GetLastSpeaker(); int nMatch = GetListenPatternNumber(); - object oShouter = GetLastSpeaker(); - - if (nMatch == -1) + if(nMatch != -1) { - // Not a match -- start an ordinary conversation - if (GetCommandable(OBJECT_SELF)) - { - ClearActions(CLEAR_NW_C2_DEFAULT4_29); - BeginConversation(); - } - else - // * July 31 2004 - // * If only charmed then allow conversation - // * so you can have a better chance of convincing - // * people of lowering prices - if (PRCGetHasEffect(EFFECT_TYPE_CHARMED) == TRUE) - { - ClearActions(CLEAR_NW_C2_DEFAULT4_29); - BeginConversation(); - } + if(GetFactionEqual(oLastSpeaker, oCreature)) ai_MonsterCommands(oCreature, oLastSpeaker, nMatch); } - // Respond to shouts from friendly non-PCs only - else if (GetIsObjectValid(oShouter) - && !GetIsPC(oShouter) - && GetIsFriend(oShouter)) + else { - object oIntruder = OBJECT_INVALID; - // Determine the intruder if any - if(nMatch == 4) - { - oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER"); - } - else if (nMatch == 5) - { - oIntruder = GetLastHostileActor(oShouter); - if(!GetIsObjectValid(oIntruder)) - { - oIntruder = GetAttemptedAttackTarget(); - if(!GetIsObjectValid(oIntruder)) - { - oIntruder = GetAttemptedSpellTarget(); - if(!GetIsObjectValid(oIntruder)) - { - oIntruder = OBJECT_INVALID; - } - } - } - } - - // Actually respond to the shout - RespondToShout(oShouter, nMatch, oIntruder); + ai_ClearCreatureActions(); + BeginConversation(); } - // Send the user-defined event if appropriate if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE)); } } +void ai_MonsterCommands(object oCreature, object oSpeaker, int nMatch) +{ + object oTarget = GetLocalObject(oSpeaker, AI_MY_TARGET); + if(nMatch == AI_ALLY_SEES_AN_ENEMY || nMatch == AI_ALLY_HEARD_AN_ENEMY) + { + if(AI_DEBUG) ai_Debug("nw_c2_default4", "46", GetName(oCreature) + " heard " + + GetName(oSpeaker) + " has seen an enemy!"); + if(ai_CanIAttack(oCreature)) ai_FindTheEnemy(oCreature, oSpeaker, oTarget, TRUE); + } + else if(nMatch == AI_ALLY_ATKED_BY_WEAPON || + nMatch == AI_ALLY_ATKED_BY_SPELL) + { + if(AI_DEBUG) ai_Debug("nw_c2_default4", "53", GetName(oCreature) + " heard " + + GetName(oSpeaker) + " has been attacked by " + + GetName(GetLocalObject(oSpeaker, AI_MY_TARGET)) + "!"); + if(ai_CanIAttack(oCreature)) ai_FindTheEnemy(oCreature, oSpeaker, oTarget, TRUE); + } + else if(nMatch == AI_ALLY_IS_WOUNDED) + { + if(AI_DEBUG) ai_Debug("nw_c2_default4", "60", GetName(oCreature) + " heard " + + GetName(oSpeaker) + " is wounded!"); + if(ai_GetIsInCombat(oCreature)) ai_TryHealingTalent(oCreature, ai_GetNumOfEnemiesInRange(oCreature), oSpeaker); + else ai_TryHealing(oCreature, oSpeaker); + } + /*else if(nMatch == AI_ALLY_IS_DEAD) + { + } */ +} + diff --git a/_module/nss/nw_c2_default5.nss b/_module/nss/nw_c2_default5.nss index d6e2e63..c2e663d 100644 --- a/_module/nss/nw_c2_default5.nss +++ b/_module/nss/nw_c2_default5.nss @@ -1,71 +1,37 @@ -//:://///////////////////////////////////////////// -//:: Default On Attacked -//:: NW_C2_DEFAULT5 -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - If already fighting then ignore, else determine - combat round -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Oct 16, 2001 -//::////////////////////////////////////////////// -//::////////////////////////////////////////////// -//:: Modified By: Deva Winblood -//:: Modified On: Jan 4th, 2008 -//:: Added Support for Mounted Combat Feat Support -//::////////////////////////////////////////////// - -#include "nw_i0_generic" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default5 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnPhysicalAttacked event script; + Fires for all physical attacks, claws, weapons, fists, bow, etc. + Fires for taunt skill, animal empathy skill. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" void main() { - ExecuteScript("prc_npc_physatt", OBJECT_SELF); - - if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT")) - { // set variables on target for mounted combat - SetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL",TRUE); - SetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE",GetCurrentHitPoints(OBJECT_SELF)); - } // set variables on target for mounted combat - - if(GetFleeToExit()) { - // Run away! - ActivateFleeToExit(); - } else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) { - // We give an attacker one warning before we attack - // This is not fully implemented yet - SetSpawnInCondition(NW_FLAG_SET_WARNINGS, FALSE); - - //Put a check in to see if this attacker was the last attacker - //Possibly change the GetNPCWarning function to make the check - } else { - object oAttacker = GetLastAttacker(); - if (!GetIsObjectValid(oAttacker)) { - // Don't do anything, invalid attacker - - } else if (!GetIsFighting(OBJECT_SELF)) { - // We're not fighting anyone else, so - // start fighting the attacker - if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) { - SetSummonHelpIfAttacked(); - DetermineSpecialBehavior(oAttacker); - } else if (GetArea(oAttacker) == GetArea(OBJECT_SELF)) { - SetSummonHelpIfAttacked(); - DetermineCombatRound(oAttacker); - } - - //Shout Attack my target, only works with the On Spawn In setup - SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); - - //Shout that I was attacked - SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK); - } + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_physatt", oCreature); + object oAttacker = GetLastAttacker(oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default5", "14", GetName(oCreature) + " was attacked by " + + GetName(oAttacker) + "."); + SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oCreature); + // Run away! + if(ai_GetFleeToExit(oCreature)) + { + ai_ActivateFleeToExit(oCreature); + return; } - - if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT)) { - SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_ATTACKED)); + SignalEvent(oCreature, EventUserDefined(EVENT_ATTACKED)); } + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(ai_GetIsInCombat(oCreature)) return; + // We only inform others if attacked when not busy, not disabled & not in combat. + if(AI_DEBUG) ai_Debug("nw_c2_default5", "30", "Tell my allies I've been attacked!"); + SetLocalObject (oCreature, AI_MY_TARGET, oAttacker); + SpeakString(AI_ATKED_BY_WEAPON, TALKVOLUME_SILENT_TALK); + // Now move towards the attack in the hopes we can see them. + if(GetDistanceBetween(oCreature, oAttacker) < AI_RANGE_CLOSE) ai_DoMonsterCombatRound(oCreature); + else ActionMoveToObject(oAttacker, TRUE, AI_RANGE_CLOSE); } diff --git a/_module/nss/nw_c2_default6.nss b/_module/nss/nw_c2_default6.nss index d362ecf..60aef49 100644 --- a/_module/nss/nw_c2_default6.nss +++ b/_module/nss/nw_c2_default6.nss @@ -1,109 +1,34 @@ -//::////////////////////////////////////////////////// -//:: NW_C2_DEFAULT6 -//:: Default OnDamaged handler -/* - If already fighting then ignore, else determine - combat round - */ -//::////////////////////////////////////////////////// -//:: Copyright (c) 2002 Floodgate Entertainment -//:: Created By: Naomi Novik -//:: Created On: 12/22/2002 -//::////////////////////////////////////////////////// -//::////////////////////////////////////////////////// -//:: Modified By: Deva Winblood -//:: Modified On: Jan 17th, 2008 -//:: Added Support for Mounted Combat Feat Support -//::////////////////////////////////////////////////// - -#include "nw_i0_generic" -#include "x3_inc_horse" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default6 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnDamaged event script; + Does not fire if the creature dies from the damage. + Does not fire for plot creatures as they take no damage. + May fire before or after OnPhysicalAttacked event. + Fires when EffectDamage is applied to oCreature even if 0 damage. + Fires when a weapon damages a oCreature, but not if resisted. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" void main() { - ExecuteScript("prc_npc_damaged", OBJECT_SELF); - - object oDamager = GetLastDamager(); - object oMe=OBJECT_SELF; - int nHPBefore; - if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT")) - if (GetHasFeat(FEAT_MOUNTED_COMBAT)&&HorseGetIsMounted(OBJECT_SELF)) - { // see if can negate some damage - if (GetLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL")) - { // last attack was physical - nHPBefore=GetLocalInt(OBJECT_SELF,"nX3_HP_BEFORE"); - if (!GetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT")) - { // haven't already had a chance to use this for the round - SetLocalInt(OBJECT_SELF,"bX3_ALREADY_MOUNTED_COMBAT",TRUE); - int nAttackRoll=GetBaseAttackBonus(oDamager)+d20(); - int nRideCheck=GetSkillRank(SKILL_RIDE,OBJECT_SELF)+d20(); - if (nRideCheck>=nAttackRoll&&!GetIsDead(OBJECT_SELF)) - { // averted attack - if (GetIsPC(oDamager)) SendMessageToPC(oDamager,GetName(OBJECT_SELF)+GetStringByStrRef(111991)); - //if (GetIsPC(OBJECT_SELF)) SendMessageToPCByStrRef(OBJECT_SELF,111992"); - if (GetCurrentHitPoints(OBJECT_SELF) (GetMaxHitPoints(OBJECT_SELF) / 4) - || (GetHitDice(oDamager) - 2) > GetHitDice(oTarget) - ) - ) - ) - { - // Switch targets - DetermineCombatRound(oDamager); - } - } - } - + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_damaged", oCreature); // Send the user-defined event signal if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT)) { - SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DAMAGED)); + SignalEvent(oCreature, EventUserDefined(EVENT_DAMAGED)); + return; } + if(ai_Disabled(oCreature)) return; + // Make sure to clear wounded shout limit if we take damage. See ai_TryHealing. + DeleteLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT"); + object oDamager = GetLastDamager(oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default6", "23", GetName(oCreature) + " has been damaged by " + GetName(oDamager)); + if(ai_GetFleeToExit(oCreature)) return; + if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature) || ai_GetIsInCombat(oCreature)) return; + if(GetDistanceBetween(oCreature, oDamager) < AI_RANGE_CLOSE) ai_DoMonsterCombatRound(oCreature); + else ActionMoveToObject(oDamager, TRUE, AI_RANGE_CLOSE - 1.0); } diff --git a/_module/nss/nw_c2_default8.nss b/_module/nss/nw_c2_default8.nss index 731908d..ef07c73 100644 --- a/_module/nss/nw_c2_default8.nss +++ b/_module/nss/nw_c2_default8.nss @@ -1,30 +1,26 @@ -//::////////////////////////////////////////////////// -//:: NW_C2_DEFAULT8 -/* - Default OnDisturbed event handler for NPCs. - */ -//::////////////////////////////////////////////////// -//:: Copyright (c) 2002 Floodgate Entertainment -//:: Created By: Naomi Novik -//:: Created On: 12/22/2002 -//::////////////////////////////////////////////////// - -#include "nw_i0_generic" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_default8 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnDisturbed event script; + Fires when the inventory of oCreature is changed i.e. added or removed. + Creatures can't have items added or removed from its inventory (it's not a + container), then the only way this fires for creatures if something is stolen. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_actions" void main() { - ExecuteScript("prc_npc_disturb", OBJECT_SELF); - - object oTarget = GetLastDisturbed(); - - // If we've been disturbed and are not already fighting, - // attack our disturber. - if (GetIsObjectValid(oTarget) && !GetIsFighting(OBJECT_SELF)) { - DetermineCombatRound(oTarget); - } - + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_disturb", oCreature); + if(AI_DEBUG) ai_Debug("nw_c2_default8", "13", GetName(oCreature) + " is been disturbed!"); + // We do nothing at the moment... lets not mess up our factions ok? + // This should be defined by the server admins and is commented out. + //if(ai_GetIsBusy(OBJECT_SELF, FALSE) || ai_Disabled()) return; + //object oTarget = GetLastDisturbed(); + //if (oTarget != OBJECT_INVALID) ai_DoMonsterCombatRound (); // Send the disturbed flag if appropriate. - if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) { - SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DISTURBED)); + if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) + { + SignalEvent(oCreature, EventUserDefined(EVENT_DISTURBED)); } } diff --git a/_module/nss/nw_c2_defaultb.nss b/_module/nss/nw_c2_defaultb.nss index 1338544..050a3ea 100644 --- a/_module/nss/nw_c2_defaultb.nss +++ b/_module/nss/nw_c2_defaultb.nss @@ -1,159 +1,42 @@ -//:://///////////////////////////////////////////// -//:: Default: On Spell Cast At -//:: NW_C2_DEFAULTB -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - This determines if the spell just cast at the - target is harmful or not. - - GZ 2003-Oct-02 : - New AoE Behavior AI. Will use - Dispel Magic against AOES - - Flying Creatures will ignore - Grease - -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Dec 6, 2001 -//:: Last Modified On: 2003-Oct-13 -//::////////////////////////////////////////////// -//::////////////////////////////////////////////// -//:: Modified By: Deva Winblood -//:: Modified On: Jan 4th, 2008 -//:: Added Support for Mounted Combat Feat Support -//::////////////////////////////////////////////// - -#include "nw_i0_generic" -#include "x2_i0_spells" - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_defaultb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monster OnSpellCastAt event script; + Fires when oCreature becomes the target of a spell via SignalEvent. + Fires when a healing kit is used on a creature. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" void main() { - ExecuteScript("prc_npc_spellat", OBJECT_SELF); - + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_spellat", oCreature); object oCaster = GetLastSpellCaster(); - - - if(GetLastSpellHarmful()) - { - SetCommandable(TRUE); - - if (!GetLocalInt(GetModule(),"X3_NO_MOUNTED_COMBAT_FEAT")) - { // set variables on target for mounted combat - DeleteLocalInt(OBJECT_SELF,"bX3_LAST_ATTACK_PHYSICAL"); - } // set variables on target for mounted combat - - // ------------------------------------------------------------------ - // If I was hurt by someone in my own faction - // Then clear any hostile feelings I have against them - // After all, we're all just trying to do our job here - // if we singe some eyebrow hair, oh well. - // ------------------------------------------------------------------ - if (GetFactionEqual(oCaster, OBJECT_SELF) == TRUE) - { - ClearPersonalReputation(oCaster, OBJECT_SELF); - ClearAllActions(TRUE); - DelayCommand(1.2, ActionDoCommand(DetermineCombatRound(OBJECT_INVALID))); - // Send the user-defined event as appropriate - if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT)) - { - SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT)); - } - return; - } - - int bAttack = TRUE; - // ------------------------------------------------------------------ - // GZ, 2003-Oct-02 - // Try to do something smart if we are subject to an AoE Spell. - // ------------------------------------------------------------------ - if (MatchAreaOfEffectSpell(GetLastSpell()) == TRUE) - { - int nAI = (GetBestAOEBehavior(GetLastSpell())); // from x2_i0_spells - switch (nAI) - { - case X2_SPELL_AOEBEHAVIOR_DISPEL_L: - case X2_SPELL_AOEBEHAVIOR_DISPEL_N: - case X2_SPELL_AOEBEHAVIOR_DISPEL_M: - case X2_SPELL_AOEBEHAVIOR_DISPEL_G: - case X2_SPELL_AOEBEHAVIOR_DISPEL_C: - bAttack = FALSE; - ActionCastSpellAtLocation(nAI, GetLocation(OBJECT_SELF)); - ActionDoCommand(SetCommandable(TRUE)); - SetCommandable(FALSE); - break; - - case X2_SPELL_AOEBEHAVIOR_FLEE: - ClearActions(CLEAR_NW_C2_DEFAULTB_GUSTWIND); - oCaster = GetLastSpellCaster(); - ActionForceMoveToObject(oCaster, TRUE, 2.0); - DelayCommand(1.2, ActionDoCommand(DetermineCombatRound(oCaster))); - bAttack = FALSE; - break; - - case X2_SPELL_AOEBEHAVIOR_IGNORE: - // well ... nothing - break; - - case X2_SPELL_AOEBEHAVIOR_GUST: - ActionCastSpellAtLocation(SPELL_GUST_OF_WIND, GetLocation(OBJECT_SELF)); - ActionDoCommand(SetCommandable(TRUE)); - SetCommandable(FALSE); - bAttack = FALSE; - break; - } - - } - // --------------------------------------------------------------------- - // Not an area of effect spell, but another hostile spell. - // If we're not already fighting someone else, - // attack the caster. - // --------------------------------------------------------------------- - if( !GetIsFighting(OBJECT_SELF) && bAttack) - { - if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) - { - DetermineSpecialBehavior(oCaster); - } - else - { - DetermineCombatRound(oCaster); - } - } - - // We were attacked, so yell for help - SetCommandable(TRUE); - //Shout Attack my target, only works with the On Spawn In setup - SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); - - //Shout that I was attacked - SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK); - } - else - { - // --------------------------------------------------------------------- - // July 14, 2003 BK - // If there is a valid enemy nearby and a NON HARMFUL spell has been - // cast on me I should call DetermineCombatRound - // I may be invisible and casting spells on myself to buff myself up - // --------------------------------------------------------------------- - // Fix: JE - let's only do this if I'm currently in combat. If I'm not - // in combat, and something casts a spell on me, it'll make me search - // out the nearest enemy, no matter where they are on the level, which - // is kinda dumb. - object oEnemy =GetNearestEnemy(); - if ((GetIsObjectValid(oEnemy) == TRUE) && (GetIsInCombat() == TRUE)) - { - // SpeakString("keep me in combat"); - DetermineCombatRound(oEnemy); - } - } - + SetLocalObject(oCaster, AI_ATTACKED_SPELL, oCreature); + if(ai_Disabled(oCreature)) return; + if(!GetLastSpellHarmful()) return; // Send the user-defined event as appropriate if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT)); } - - + // If the spell came from an ally, we don't want to hold it against them. + if(GetFactionEqual(oCaster, oCreature)) ClearPersonalReputation(oCaster, oCreature); + // Lets see what kind of area of effect this is and select an appropriate action. + int nSpell = GetLastSpell(); + if(AI_DEBUG) ai_Debug("nw_c2_defaultb", "26", GetName(oCreature) + " has been hit by a harmful spell(" + + Get2DAString("spells", "Label", nSpell) + ")!"); + if(ai_GetInAOEReaction(oCreature, oCaster, nSpell) && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature)) return; + if(ai_CheckForCombat(oCreature, TRUE)) return; + // We have been attacked out of combat, so let our allies know. + SetLocalObject(oCreature, AI_MY_TARGET, oCaster); + SpeakString(AI_ATKED_BY_SPELL, TALKVOLUME_SILENT_TALK); + if(GetDistanceBetween(oCreature, oCaster) < AI_RANGE_CLOSE) + { + if(ai_GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) ai_DetermineSpecialBehavior(oCreature); + else ai_DoMonsterCombatRound(oCreature); + } + else ActionMoveToObject(oCaster, TRUE, AI_RANGE_CLOSE); } diff --git a/_module/nss/nw_c2_defaulte.nss b/_module/nss/nw_c2_defaulte.nss index 3d8ab2c..98e4364 100644 --- a/_module/nss/nw_c2_defaulte.nss +++ b/_module/nss/nw_c2_defaulte.nss @@ -1,51 +1,54 @@ -//:://///////////////////////////////////////////// -//:: Default On Blocked -//:: NW_C2_DEFAULTE -//:: Copyright (c) 2001 Bioware Corp. -//::////////////////////////////////////////////// -/* - This will cause blocked creatures to open - or smash down doors depending on int and - str. -*/ -//::////////////////////////////////////////////// -//:: Created By: Preston Watamaniuk -//:: Created On: Nov 23, 2001 -//::////////////////////////////////////////////// - +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_c2_defaulte + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Monsters OnBlocked event script; + Can be blocked by a creature or door. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" void main() { - ExecuteScript("prc_npc_blocked", OBJECT_SELF); - - object oDoor = GetBlockingDoor(); - if (GetObjectType(oDoor) == OBJECT_TYPE_CREATURE) + object oCreature = OBJECT_SELF; + ExecuteScript("prc_npc_blocked", oCreature); + // This actually gets either a Creature or Door that is blocking OBJECT_SELF. + object oObject = GetBlockingDoor(); + if(AI_DEBUG) ai_Debug("nw_c2_defaulte", "14", GetName(oCreature) + " is being blocked by " + GetName(oObject)); + int nObjectType = GetObjectType(oObject); + if(nObjectType == OBJECT_TYPE_CREATURE) { - // * Increment number of times blocked - /*SetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED", GetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED") + 1); - if (GetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED") > 3) + if(GetIsEnemy(oObject, oCreature)) { - SpeakString("Blocked by creature"); - SetLocalInt(OBJECT_SELF, "X2_NUMTIMES_BLOCKED",0); - ClearAllActions(); - object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY); - if (GetIsObjectValid(oEnemy) == TRUE) + if(ai_CanIAttack(oCreature) && ai_GetIsInCombat(oCreature)) { - ActionEquipMostDamagingRanged(oEnemy); - ActionAttack(oEnemy); + ai_DoMonsterCombatRound(oCreature); + return; } - return; - } */ + if(ai_CheckForCombat(oCreature, TRUE)) return; + } + } + // Anything below blocking us is a door. + if(nObjectType != OBJECT_TYPE_DOOR) return; + // Only open the door if the player has turned door opening on. + if(!GetLocalInt(GetModule(), AI_RULE_OPEN_DOORS)) return; + //if(GetLockKeyTag(oObject) != "") return; + else if(GetIsDoorActionPossible(oObject, DOOR_ACTION_OPEN) && + GetAbilityScore(oCreature, ABILITY_INTELLIGENCE) >= 5) + { + if(AI_DEBUG) ai_Debug("nw_c2_defaulte", "33", GetName(oCreature) + " is opening " + GetName(oObject)); + DoDoorAction(oObject, DOOR_ACTION_OPEN); return; } - if(GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 5) + // If we are in combat we should ignore doors that do not easily open. + if(GetIsDoorActionPossible(oObject, DOOR_ACTION_BASH) && + ai_GetWeaponDamage(oCreature, 3, TRUE) > GetHardness(oObject) && + GetLockKeyTag(oObject) == "") { - if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_OPEN) && GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 7 ) - { - DoDoorAction(oDoor, DOOR_ACTION_OPEN); - } - else if(GetIsDoorActionPossible(oDoor, DOOR_ACTION_BASH)) - { - DoDoorAction(oDoor, DOOR_ACTION_BASH); - } + ActionWait(1.0); + ActionAttack(oObject); + // Give them 3 rounds to break through a door. + DelayCommand(18.0, ai_ClearCreatureActions(TRUE)); + return; } } + + diff --git a/_module/nss/nw_ch_ac1.nss b/_module/nss/nw_ch_ac1.nss new file mode 100644 index 0000000..5bae2be --- /dev/null +++ b/_module/nss/nw_ch_ac1.nss @@ -0,0 +1,160 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac1 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiar, Companion) OnHeart beat script when out of combat; + This will usually fire every 6 seconds (1 game round). +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_module" +#include "0i_menus" +void ai_ActionFollow(object oCreature, object oTarget) +{ + if(GetLocalInt(OBJECT_SELF, AI_CURRENT_ACTION_MODE) == AI_LAST_ACTION_MOVE) + { + float fDistance = GetDistanceBetween(oCreature, oTarget); + float fFollowDistance = ai_GetFollowDistance(oCreature); + if(fDistance > fFollowDistance) + { + if(fDistance > fFollowDistance * 5.0 && + ai_GetIsInCombat(oCreature)) AssignCommand(oCreature, JumpToObject(oTarget)); + else + { + ClearAllActions(); + ActionMoveToObject(oTarget, TRUE, fFollowDistance); + } + } + DelayCommand(1.0, ai_ActionFollow(oCreature, oTarget)); + } +} +void main() +{ + if (GetAILevel(OBJECT_SELF) == AI_LEVEL_VERY_LOW) return; + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Counter_Start(); + // We run our OnSpawn in the heartbeat so the creator can use the original + // OnSpawn for their own use. + ai_OnAssociateSpawn(oCreature); + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, ai_OnAssociateSpawn"); + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "37", GetName(oCreature) + " Heartbeat." + + " MODE_FOLLOW: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_FOLLOW)) + + " Action: " + IntToString(GetCurrentAction(oCreature))); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, ai_GetIsBusy/ai_Disabled"); + // If we are an associate and don't have a master then exit. + object oMaster = GetMaster(oCreature); + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "43", "oMaster: " + GetName(oMaster)); + if(oMaster == OBJECT_INVALID) + { + if(ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + ai_CheckForCombat(oCreature, FALSE); + return; + } + // ***** Code for Henchman data and menus ***** + if(ai_GetIsCharacter(oMaster)) + { + string sAssociateType = ai_GetAssociateType(oMaster, oCreature); + ai_CheckAssociateData(oMaster, oCreature, sAssociateType); + ai_CheckPCStart(oMaster); + // When a henchman dies and is brought back the plot flag can be set to TRUE! + SetPlotFlag(oCreature, FALSE); + if(AI_HENCHMAN_WIDGET) + { + // This keeps widgets from disappearing and reappearing. + int nUiToken = NuiFindWindow(oMaster, sAssociateType + AI_WIDGET_NUI); + if(nUiToken) + { + json jData = NuiGetUserData(oMaster, nUiToken); + object oAssociate = StringToObject(JsonGetString(JsonArrayGet(jData, 0))); + if(oAssociate != oCreature) NuiDestroy(oMaster, nUiToken); + } + else + { + if(!ai_GetWidgetButton(oMaster, BTN_WIDGET_OFF, oCreature, sAssociateType)) + { + ai_CreateWidgetNUI(oMaster, oCreature); + } + } + } + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, Get Associate data/Build widget"); + } + // If follow mode we do not want the NPC doing anything but follow. + if(!ai_GetAIMode(oCreature, AI_MODE_FOLLOW)) + { + if(ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) + { + ai_TryHealing(oCreature, oCreature); + return; + } + if(ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, FALSE)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, ai_CheckForCombat"); + if(IsInConversation(oCreature)) return; + // In command mode we let the player tell us what to do. + if(!ai_GetAIMode(oCreature, AI_MODE_COMMANDED)) + { + if(ai_TryHealing(oCreature, oCreature)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat: TryHealing"); + if(ai_CheckNearbyObjects(oCreature)) return; + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat: CheckNearbyObjects"); + if(ai_GetAIMode(oCreature, AI_MODE_SCOUT_AHEAD)) + { + ai_ScoutAhead(oCreature); + return; + } + } + } + // Finally we check to make sure we are following our master. + if(GetCurrentAction(oCreature) != ACTION_FOLLOW) + { + //ai_Debug("nw_ch_ac1", "66", "Follow master: " + + // " Stealth: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH)) + + // " Search: " + IntToString(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH))); + if(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_STEALTH)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "120", "Going into stealth mode!"); + int nStealth = GetSkillRank(SKILL_HIDE, oCreature); + nStealth += GetSkillRank(SKILL_MOVE_SILENTLY, oCreature); + if(nStealth / 2 >= ai_GetCharacterLevels(oCreature)) + { + SetActionMode(oCreature, ACTION_MODE_STEALTH, TRUE); + SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + } + else + { + SetActionMode(oCreature, ACTION_MODE_STEALTH, FALSE); + if(ai_GetAIMode(oCreature, AI_MODE_AGGRESSIVE_SEARCH)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ac1", "134", "Going into search mode!"); + SetActionMode(oCreature, ACTION_MODE_DETECT, TRUE); + } + else SetActionMode(oCreature, ACTION_MODE_DETECT, FALSE); + } + // Follow master. + if(GetDistanceBetween(oCreature, oMaster) > ai_GetFollowDistance(oCreature)) + { + if(!ai_GetAIMode(oCreature, AI_MODE_COMMANDED)) + { + object oTarget = GetLocalObject(oCreature, AI_FOLLOW_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oMaster; + //ActionForceFollowObject(oTarget, ai_GetFollowDistance(oCreature)); + //ActionMoveToObject(oTarget, TRUE, ai_GetFollowDistance(oCreature)); + SetLocalInt(oCreature, AI_CURRENT_ACTION_MODE, AI_LAST_ACTION_MOVE); + ai_ActionFollow(oCreature, oTarget); + } + } + } + if(AI_DEBUG) ai_Counter_End(GetName(oCreature) + ": Heartbeat, end"); + if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1001)); + } +} diff --git a/_module/nss/nw_ch_ac2.nss b/_module/nss/nw_ch_ac2.nss new file mode 100644 index 0000000..04a56f9 --- /dev/null +++ b/_module/nss/nw_ch_ac2.nss @@ -0,0 +1,107 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac2 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiars, Companions) OnPerception script when not in combat; + There are 4 types of perception - Heard, Inaudible, Seen, Vanished. + Only one type will ever be true in an event trigger. + The order of trigger is Heard/Seen and Inaudible/Vanished. + There are two states of percepion Heard and Seen. + These states can be set at the same time thus a heard event can see the creature. + Fires when ever one of these states changes from TRUE to FALSE or FALSE to TRUE. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oLastPerceived = GetLastPerceived(); + if(AI_DEBUG) + { + if(GetLastPerceptionHeard ()) + { + ai_Debug("nw_ch_ac2", "21", GetName(oCreature) + " heard " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + + " Seen: " + IntToString(GetObjectSeen(oLastPerceived, oCreature)) + "."); + } + if(GetLastPerceptionSeen ()) + { + ai_Debug("nw_ch_ac2", "29", GetName(oCreature) + " sees " + + GetName(GetLastPerceived()) + " Distance: " + + FloatToString(GetDistanceBetween(GetLastPerceived(), oCreature), 0, 2) + "."); + } + if(GetLastPerceptionVanished ()) + { + ai_Debug("nw_ch_ac2", "35", GetName(oCreature) + " lost sight of " + + GetName(GetLastPerceived()) + "."); + } + } + // We do nothing on Inaudibles so drop out early! + if(GetLastPerceptionInaudible()) + { + ai_Debug("nw_ch_ac2", "42", GetName(oCreature) + " lost sound of " + + GetName(GetLastPerceived()) + "."); + return; + } + if(AI_DEBUG) ai_Debug("nw_ch_ac2", "46", "Dead? " + IntToString(GetIsDead(oLastPerceived)) + + " Enemy? " + IntToString(GetIsEnemy(oLastPerceived, oCreature))); + if(ai_Disabled(oCreature)) return; + if(GetIsDead(oLastPerceived) || !GetIsEnemy(oLastPerceived, oCreature)) return; + // All code below assumes the perceived creature is an enemy and is alive! + // **************************** ENEMY HEARD ******************************** + if(GetLastPerceptionHeard()) + { + // Since Heard is run before Seen, but the values are set at the same + // time we can skip heard checks on heard & seen creatures! + if(GetObjectSeen(oLastPerceived, oCreature)) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + } + else ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_HEARD_AN_ENEMY); + return; + } + // **************************** ENEMY SEEN ********************************* + if(GetLastPerceptionSeen()) + { + // If the creature we are perceiving was our invisible creature then + // remove that they are invisible. + if(oLastPerceived == GetLocalObject(oCreature, AI_IS_INVISIBLE)) + { + DeleteLocalObject(oCreature, AI_IS_INVISIBLE); + } + ai_AssociateEvaluateNewThreat(oCreature, oLastPerceived, AI_I_SEE_AN_ENEMY); + return; + } + // **************************** ENEMY VANISHED ***************************** + if(GetLastPerceptionVanished()) + { + // Lets keep a mental note of the invisible creature. + SetLocalObject(oCreature, AI_IS_INVISIBLE, oLastPerceived); + if(AI_DEBUG) ai_Debug("nw_ch_ac2", "86", " We saw " + GetName(oLastPerceived) + " disappear!"); + if(ai_GetIsBusy(oCreature)) return; + // If in combat check to see if our target disappeared. + // If they have and we are not in melee with them then reevaluate combat + // since we lost our target. + if(ai_GetIsInCombat(oCreature)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ac2", "93", "Is this our target? " + + IntToString(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived)); + if(ai_GetAttackedTarget(oCreature, TRUE, TRUE) == oLastPerceived) + { + ai_DoAssociateCombatRound(oCreature); + } + return; + } + // If they are not invisible then that means they left our perception + // range and we need follow them. + if(ai_CanIAttack(oCreature)) ActionMoveToObject(oLastPerceived, TRUE, AI_RANGE_CLOSE); + } + // **************************** ENEMY INAUDIBLE***************************** + // Not used. +} diff --git a/_module/nss/nw_ch_ac3.nss b/_module/nss/nw_ch_ac3.nss new file mode 100644 index 0000000..2141565 --- /dev/null +++ b/_module/nss/nw_ch_ac3.nss @@ -0,0 +1,64 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac3 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate (Summons, Familiars, Companions) OnCombatRoundEnd event script; + Fires at the end of each combat round (6 seconds). + This will fire as long as oCreature is in combat (GetIsInCombat()). + This event starts counting once a combat action is started. + Every time a spell is cast it will queue another end combat round so haste with + two spells cast will fire this twice in one round. + It will also fire at the end of a hostile effect that stops actions i.e Stunned, Knockdown etc. + Action modes are also cleared prior to this event executing! + GetAttemptedAttackTarget() & GetAttemptedSpellTarget() also get cleared prior to this event. + This event can be canceled with ClearAllActions(TRUE) and SurrenderToEnemies. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(AI_DEBUG) ai_Debug("nw_ch_ac3", "20", GetName(oCreature) + " ends combat round."); + if(ai_Disabled(oCreature)) return; + // Action modes get cleared prior to each OnCombatRoundEnd! + // We do this to keep the action mode going. + int nActionMode = GetLocalInt(oCreature, AI_CURRENT_ACTION_MODE); + if(nActionMode > 0) + { + SetActionMode(oCreature, nActionMode, TRUE); + // We don't want to use up all of the Dwarven Defenders uses! + if(nActionMode == 12) IncrementRemainingFeatUses(oCreature, FEAT_DWARVEN_DEFENDER_DEFENSIVE_STANCE); + } + int nAction = GetCurrentAction(oCreature); + if(AI_DEBUG) ai_Debug("nw_ch_ac3", "32", "nAction: " + IntToString(nAction)); + switch(nAction) + { + // These actions are uninteruptable. + case ACTION_MOVETOPOINT : + case ACTION_CASTSPELL : + case ACTION_ITEMCASTSPELL : + case ACTION_COUNTERSPELL : return; + case ACTION_ATTACKOBJECT : + { + if(!ai_GetIsInCombat(oCreature)) + { + ai_ClearCreatureActions(); + return; + } + } + // Might be doing a special action that is not a defined action. + case ACTION_INVALID : + { + int nCombatWait = GetLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + if(AI_DEBUG) ai_Debug("nw_ch_ac3", "44", "nCombatWait: " + IntToString(nCombatWait)); + if(nCombatWait) + { + if(ai_IsInCombatRound(oCreature, nCombatWait)) return; + DeleteLocalInt(oCreature, AI_COMBAT_WAIT_IN_SECONDS); + } + } + // We always want to interupt an attack action at the end of a round. + //case ACTION_ATTACKOBJECT : + } + if(ai_GetIsInCombat(oCreature)) ai_DoAssociateCombatRound (oCreature); +} + diff --git a/_module/nss/nw_ch_ac4.nss b/_module/nss/nw_ch_ac4.nss new file mode 100644 index 0000000..f6c290d --- /dev/null +++ b/_module/nss/nw_ch_ac4.nss @@ -0,0 +1,45 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac4 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate(Summons, Familiar, Companion) OnDialoge event script; + Fires when oCreature has been clicked on for conversation. + Fires when oCreature hears a shout from another creature. + If SetListening is FALSE then oCreature will not "hear" anything. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +#include "nw_inc_gff" +void main() +{ + object oCreature = OBJECT_SELF; + int nMatch = GetListenPatternNumber(); + if(AI_DEBUG) ai_Debug("nw_ch_ac4", "16", GetName(oCreature) + " listens " + + IntToString(nMatch) + " to " + GetName(GetLastSpeaker()) + "."); + // Skip ASSOCIATE_COMMAND_MASTERUNDERATTACK(11) since it fires for + // every physical attack made on our master. This fires alot! + if(nMatch == ASSOCIATE_COMMAND_MASTERUNDERATTACK) return; + // If we are disabled then we can't listen or talk, Busy is checked in ai_SelectAssociateCommand(). + if(ai_Disabled(oCreature)) return; + object oLastSpeaker = GetLastSpeaker(); + // Some commands override being busy so we check in ai_SelectAssociateCommand. + if(nMatch != -1) + { + if(GetFactionEqual(oLastSpeaker, oCreature)) ai_SelectAssociateCommand(oCreature, oLastSpeaker, nMatch); + } + else + { + if (!ai_GetIsBusy(oCreature)) + { + ai_ClearCreatureActions(); + if(GetAssociateType(oCreature) == ASSOCIATE_TYPE_HENCHMAN) BeginConversation("oc_ai_henchmen", oLastSpeaker); + else + { + json jHenchman = ObjectToJson(oCreature); + string sConversation = JsonGetString(GffGetResRef(jHenchman, "Conversation")); + if(sConversation == "") BeginConversation("oc_ai_henchmen", oLastSpeaker); + BeginConversation(); + } + } + } +} + diff --git a/_module/nss/nw_ch_ac5.nss b/_module/nss/nw_ch_ac5.nss new file mode 100644 index 0000000..78f9321 --- /dev/null +++ b/_module/nss/nw_ch_ac5.nss @@ -0,0 +1,51 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac5 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates (Summons, Familiars, Companions) OnPhysicalAttacked event script; + Fires for all physical attacks, claws, weapons, fists, bow, etc. + Fires for taunt skill, animal empathy skill. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oAttacker = GetLastAttacker(); + if(AI_DEBUG) ai_Debug("nw_ch_ac5", "14", GetName(oCreature) + " was attacked by " + + GetName(oAttacker) + "."); + SetLocalObject(oAttacker, AI_ATTACKED_PHYSICAL, oCreature); + if(ai_GetIsBusy(oCreature) || ai_Disabled(oCreature)) return; + if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1005)); + } + if(ai_GetIsInCombat(oCreature)) return; + // We only inform others if attacked when not busy, not disabled, & not in combat. + SetLocalObject(oCreature, AI_MY_TARGET, oAttacker); + SpeakString(AI_ATKED_BY_WEAPON, TALKVOLUME_SILENT_TALK); + // If they are using a melee weapon then make sure we are using our perception range. + // Don't go running towards them just yet, but if its a ranged weapon then react. + if(ai_GetIsMeleeWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oAttacker))) + { + float fDistance = GetDistanceBetween(oCreature, oAttacker); + float fPerceptionDistance = GetLocalFloat(oCreature, AI_ASSOC_PERCEPTION_DISTANCE); + if(fDistance > fPerceptionDistance) return; + } + int nAction = GetCurrentAction(oCreature); + float fDistance = GetDistanceBetween(oCreature, oAttacker); + if(!ai_CanIAttack(oCreature)) + { + // We should defend ourselves if we are in Hold mode. + if(!ai_GetAIMode(oCreature, AI_MODE_STAND_GROUND)) return; + // Only defend against melee attacks. + if(fDistance > AI_RANGE_MELEE) return; + } + // The only way to get here is to not be in combat. + if(fDistance < AI_RANGE_CLOSE) + { + ai_StartAssociateCombat(oCreature); + } + else ActionMoveToObject(oAttacker, TRUE, AI_RANGE_CLOSE - 1.0); +} + + diff --git a/_module/nss/nw_ch_ac6.nss b/_module/nss/nw_ch_ac6.nss new file mode 100644 index 0000000..f51e937 --- /dev/null +++ b/_module/nss/nw_ch_ac6.nss @@ -0,0 +1,32 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_6_damaged + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Player OnDamaged script for PC AI; + Does not fire if the creature dies from the damage. + Does not fire for plot creatures as they take no damage. + May fire before or after OnPhysicalAttacked event. + Fires when EffectDamage is applied to oCreature even if 0 damage. + Fires when a weapon damages a oCreature, but not if resisted. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + if(ai_Disabled(oCreature)) return; + // Make sure to clear wounded shout limit if we take damage. See ai_TryHealing. + DeleteLocalInt(oCreature, "AI_WOUNDED_SHOUT_LIMIT"); + object oDamager = GetLastDamager(oCreature); + if(AI_DEBUG) ai_Debug("nw_ch_ac6", "18", GetName(oCreature) + " has been damaged by " + GetName(oDamager)); + if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1006)); + } + if(GetObjectType(oDamager) == OBJECT_TYPE_AREA_OF_EFFECT && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature) || ai_GetIsInCombat(oCreature)) return; + if(!ai_CanIAttack(oCreature)) return; + if(GetDistanceBetween(oCreature, oDamager) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oDamager, TRUE, AI_RANGE_CLOSE - 1.0); +} + diff --git a/_module/nss/nw_ch_ac8.nss b/_module/nss/nw_ch_ac8.nss new file mode 100644 index 0000000..05b7f85 --- /dev/null +++ b/_module/nss/nw_ch_ac8.nss @@ -0,0 +1,25 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_ac8 + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates (Summons, Familiars, Companions) OnDisturbed event script. + Fires when the inventory of oCreature is changed i.e. added or removed. + Creatures can't have items added or removed from its inventory (it's not a + container), then the only way this fires for creatures if something is stolen. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + if(AI_DEBUG) ai_Debug("nw_ch_ac8", "13", GetName(OBJECT_SELF) + " is been disturbed!"); + if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(1008)); + } + // We do nothing at the moment... lets not mess up our factions ok? + // This should be defined by the server admins and is commented out. + //if(ai_GetIsBusy(OBJECT_SELF, FALSE) || ai_Disabled()) return; + //object oTarget = GetLastDisturbed(); + //if (oTarget != OBJECT_INVALID) ai_DoMonsterCombatRound (); +} + + diff --git a/_module/nss/nw_ch_aca.nss b/_module/nss/nw_ch_aca.nss new file mode 100644 index 0000000..99b6d5f --- /dev/null +++ b/_module/nss/nw_ch_aca.nss @@ -0,0 +1,46 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_aca + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associate OnRested event script; + Fires when the creature attempts to rest via ActionRest or a PC rests. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_menus" +void ai_UpdateAssociateWidget(object oMaster, object oAssociate, int nUIToken) +{ + if(nUIToken) NuiDestroy(oMaster, nUIToken); + ai_CreateWidgetNUI(oMaster, oAssociate); + if(oMaster != oAssociate) + { + nUIToken = NuiFindWindow(oMaster, "pc" + AI_WIDGET_NUI); + if(nUIToken) + { + NuiDestroy(oMaster, nUIToken); + ai_CreateWidgetNUI(oMaster, oMaster); + } + } +} +void main() +{ + object oAssociate = OBJECT_SELF; + ai_ClearCreatureActions(); + ai_OnRested(oAssociate); + object oMaster = GetMaster(oAssociate); + if(ai_GetIsCharacter(oMaster) && AI_HENCHMAN_WIDGET) + { + int nLevel = ai_GetCharacterLevels(oAssociate); + float fDelay = StringToFloat(Get2DAString("restduration", "DURATION", nLevel)); + fDelay = (fDelay / 1000.0f) + 6.0f; + // Update widget for spell widget. + string sAssociateType = ai_GetAssociateType(oMaster, oAssociate); + int nUIToken = NuiFindWindow(oMaster, sAssociateType + AI_WIDGET_NUI); + if(nUIToken) DelayCommand(fDelay, ai_UpdateAssociateWidget(oMaster, oAssociate, nUIToken)); + else + { + if(!ai_GetWidgetButton(oMaster, BTN_WIDGET_OFF, oAssociate, sAssociateType)) + { + DelayCommand(fDelay, ai_UpdateAssociateWidget(oMaster, oAssociate, 0)); + } + } + } +} diff --git a/_module/nss/nw_ch_acb.nss b/_module/nss/nw_ch_acb.nss new file mode 100644 index 0000000..9030505 --- /dev/null +++ b/_module/nss/nw_ch_acb.nss @@ -0,0 +1,45 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: nw_ch_acb + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates (Summons, Familiars, Companions) OnSpellCastAt event script; + Fires when oCreature becomes the target of a spell via SignalEvent. + Fires when a healing kit is used on a creature. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + object oCaster = GetLastSpellCaster(); + SetLocalObject(oCaster, AI_ATTACKED_SPELL, oCreature); + if(ai_Disabled(oCreature)) return; + if(!GetLastSpellHarmful()) return; + // If the spell came from an ally, we don't want to hold it against them. + if(GetFactionEqual(oCaster, oCreature)) + { + ClearPersonalReputation(oCaster, oCreature); + if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT)) + { + SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_SPELL_CAST_AT)); + } + } + // Lets see what kind of area of effect this is and select an appropriate action. + int nSpell = GetLastSpell(); + if(AI_DEBUG) ai_Debug("nw_ch_acb", "21", GetName(OBJECT_SELF) + " has been hit by a harmful spell(" + + Get2DAString("spells", "Label", nSpell) + ")!"); + object oMaster = GetMaster(oCreature); + if((!GetLocalInt(oMaster, AI_TARGET_MODE_ON) || + GetLocalObject(oMaster, AI_TARGET_MODE_ASSOCIATE) != oCreature) && + ai_GetInAOEReaction(oCreature, oCaster, nSpell) && + ai_IsInADangerousAOE(oCreature, AI_RANGE_BATTLEFIELD, TRUE)) return; + if(ai_GetIsBusy(oCreature)) return; + if(ai_CheckForCombat(oCreature, FALSE)) return; + // We were attacked by an enemy out of combat, so let our allies know. + SetLocalObject(oCreature, AI_MY_TARGET, oCaster); + SpeakString(AI_ATKED_BY_SPELL, TALKVOLUME_SILENT_TALK); + if(!ai_CanIAttack(oCreature)) return; + if(GetDistanceBetween(oCreature, oCaster) < AI_RANGE_CLOSE) ai_DoAssociateCombatRound(oCreature); + else ActionMoveToObject(oCaster, TRUE, AI_RANGE_CLOSE - 1.0); +} + + diff --git a/_module/nss/nw_ch_ace.nss b/_module/nss/nw_ch_ace.nss new file mode 100644 index 0000000..688ab90 --- /dev/null +++ b/_module/nss/nw_ch_ace.nss @@ -0,0 +1,60 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: 0e_ch_e_blocked + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Associates OnBlocked event script; + Can be blocked by a creature or door. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_associates" +void main() +{ + object oCreature = OBJECT_SELF; + // This actually gets either a Creature or Door that is blocking OBJECT_SELF. + object oObject = GetBlockingDoor(); + if(AI_DEBUG) ai_Debug("nw_ch_ace", "14", GetName(oCreature) + " is being blocked by " + GetName(oObject)); + int nObjectType = GetObjectType(oObject); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(GetIsEnemy(oObject, oCreature)) + { + if(ai_CanIAttack(oCreature) && ai_GetIsInCombat(oCreature)) + { + ai_DoAssociateCombatRound(oCreature); + return; + } + if(ai_CheckForCombat(oCreature, FALSE)) return; + } + } + // Anything below blocking us is a door. + if(nObjectType != OBJECT_TYPE_DOOR) return; + if(!ai_GetAIMode(oCreature, AI_MODE_OPEN_DOORS)) return; + //if(GetLockKeyTag(oObject) != "") return; + else if(GetIsDoorActionPossible(oObject, DOOR_ACTION_OPEN) && + GetAbilityScore(oCreature, ABILITY_INTELLIGENCE) >= 5) + { + DoDoorAction(oObject, DOOR_ACTION_OPEN); + return; + } + // Anything below is ignored in combat. + if(ai_GetIsInCombat(oCreature)) return; + if(GetIsDoorActionPossible(oObject, DOOR_ACTION_BASH) && + ai_GetWeaponDamage(oCreature, 3, TRUE) > GetHardness(oObject) && + GetLockKeyTag(oObject) == "") + { + ActionWait(1.0); + ActionAttack(oObject); + // Give them 3 rounds to break through a door. + DelayCommand(18.0, ai_ClearCreatureActions(TRUE)); + return; + } + else if(GetLocked(oObject)) + { + if(AI_DEBUG) ai_Debug("nw_ch_ace", "49", GetName(oObject) + " is locked!"); + ai_AttemptToByPassLock(oCreature, oObject); + } + // Clear our action so we can move on to something else unless the door is open. + else if(!GetIsOpen(oObject)) + { + ai_ClearCreatureActions(); + } +} diff --git a/_module/nss/nw_ch_summon_9.nss b/_module/nss/nw_ch_summon_9.nss new file mode 100644 index 0000000..ca5a87c --- /dev/null +++ b/_module/nss/nw_ch_summon_9.nss @@ -0,0 +1,40 @@ +//:://///////////////////////////////////////////// +//:: Associate: On Spawn In +//:: nw_ch_summon_9 +//:: Copyright (c) 2001 Bioware Corp. +//::////////////////////////////////////////////// +/* + +This must support the OC henchmen and all summoned/companion +creatures. + +*/ +//::////////////////////////////////////////////// +//:: Created By: Preston Watamaniuk +//:: Created On: Nov 19, 2001 +//::////////////////////////////////////////////// +//:: Updated By: Georg Zoeller, 2003-08-20: Added variable check for spawn in animation +#include "X0_INC_HENAI" +#include "x2_inc_switches" +void main() +{ + //Sets up the special henchmen listening patterns + SetAssociateListenPatterns(); + + // Set additional henchman listening patterns + //bkSetListeningPatterns(); + // * If Incorporeal, apply changes + if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) == TRUE) + { + effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL); + eConceal = ExtraordinaryEffect(eConceal); + effect eGhost = EffectCutsceneGhost(); + eGhost = ExtraordinaryEffect(eGhost); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, OBJECT_SELF); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF); + } + // Set starting location + SetAssociateStartLocation(); +} + + diff --git a/_module/nss/pc_savebuffs.nss b/_module/nss/pc_savebuffs.nss new file mode 100644 index 0000000..00e6401 --- /dev/null +++ b/_module/nss/pc_savebuffs.nss @@ -0,0 +1,193 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pc_savebuffs +//////////////////////////////////////////////////////////////////////////////// + Used with pi_buffing to run the buffing plugin for + Philos Single Player Enhancements. + +Note: If a spell saves incorrectly check the spell script to see if the correct +spell is being passed through the SignalEvent correctly. +Known error in Shield of Faith spell as the below code in the shield of faith +script sends Camoflage instead! +"SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, 421, FALSE));" +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag = ""); +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag = ""); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetBuffDatabaseJson(object oPlayer, string sDataField, json jData, string sTag = ""); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag = ""); +// Returns the level if this spell has a domain spell on nLevel, or 0. +int GetHasDomainSpell(object oCaster, int nClass, int nLevel, int nSpell); + +void main() +{ + object oTarget = OBJECT_SELF; + object oCaster = GetLastSpellCaster(); + // When setting up the save spells button we saved the PC to itself. + // Here we get the PC from either our henchmen or ourselves. + // We do this to make sure that this PC and henchmen are the ones saving spells. + object oPC = GetLocalObject(ai_GetPlayerMaster(oCaster), "AI_BUFF_PC"); + // If this is a harmful spell or we couldn't find oPC then we need to fix + // the targets scripts back and run the correct OnSpellCastAt script. + if(GetLastSpellHarmful() || oPC == OBJECT_INVALID) + { + DeleteLocalObject(oPC, "AI_BUFF_PC"); + string sScript = GetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + // Cleanup your followers to allow spells to be reacted to as normal. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + NuiSetBind(oPC, NuiFindWindow(oPC, "widgetbuffwin"), "btn_save", JsonBool(FALSE)); + ai_SendMessages("Saving spells to the list has been turned off.", AI_COLOR_YELLOW, oPC); + ExecuteScript(sScript, oTarget); + return; + } + // This blocks one spell from saving multiple times due to being an AOE. + if(GetLocalInt(oPC, "AI_ONLY_ONE")) return; + SetLocalInt(oPC, "AI_ONLY_ONE", TRUE); + // We delay this for just less than half a round due to haste. + DelayCommand(2.5, DeleteLocalInt(oPC, "AI_ONLY_ONE")); + // If the oTarget != oCaster then we are casting a spell on one of our + // associates. Some functions expect OBJECT_SELF to be the caster. + // We get around that by doing some ExecuteScriptChunk shenanigans. + int nClass, nLevel, nMetaMagic; + if(oTarget != oCaster) + { + // These functions need the caster to be OBJECT_SELF so lets do a HACK! + ExecuteScriptChunk("SetLocalInt(OBJECT_SELF, \"AI_BUFF_CASTCLASS\", GetLastSpellCastClass());", oCaster); + ExecuteScriptChunk("SetLocalInt(OBJECT_SELF, \"AI_BUFF_SPELLLEVEL\", GetLastSpellLevel());", oCaster); + ExecuteScriptChunk("SetLocalInt(OBJECT_SELF, \"AI_BUFF_METAMAGIC\", GetMetaMagicFeat());", oCaster); + nClass = GetLocalInt(oCaster, "AI_BUFF_CASTCLASS"); + nLevel = GetLocalInt(oCaster, "AI_BUFF_SPELLLEVEL"); + nMetaMagic = GetLocalInt(oCaster, "AI_METAMAGIC"); + DeleteLocalInt(oCaster, "AI_BUFF_CASTCLASS"); + DeleteLocalInt(oCaster, "AI_BUFF_SPELLLEVEL"); + DeleteLocalInt(oCaster, "AI_BUFF_METAMAGIC"); + } + else + { + nClass = GetLastSpellCastClass(); + nLevel = GetLastSpellLevel(); + nMetaMagic = GetMetaMagicFeat(); + } + int nSpell = GetLastSpell(); + int nDomain = GetHasDomainSpell(oCaster, nClass, nLevel, nSpell); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(nDomain) sName += " [Domain]"; + if(nMetaMagic > 0 && StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + // We must add the level of the metamagic to the spells level to get the spells correct level. + if(nMetaMagic == METAMAGIC_EMPOWER) { sName += " (Empowered)"; nLevel += 2; } + else if(nMetaMagic == METAMAGIC_EXTEND) { sName += " (Extended)"; nLevel += 1; } + else if(nMetaMagic == METAMAGIC_MAXIMIZE) { sName += " (Maximized)"; nLevel += 3; } + else if(nMetaMagic == METAMAGIC_QUICKEN) { sName += " (Quickened)"; nLevel += 4; } + else if(nMetaMagic == METAMAGIC_SILENT) { sName += " (Silent)"; nLevel += 1; } + else if(nMetaMagic == METAMAGIC_STILL) { sName += " (Still)"; nLevel += 1; } + } + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + string sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + json jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + json jSpell = JsonArray(); + jSpell = JsonArrayInsert(jSpell, JsonInt(nSpell)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nClass)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nLevel)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nMetaMagic)); + jSpell = JsonArrayInsert(jSpell, JsonInt(nDomain)); + string sCasterName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oCaster))); + jSpell = JsonArrayInsert(jSpell, JsonString(sCasterName)); + string sTargetName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oTarget))); + jSpell = JsonArrayInsert(jSpell, JsonString(sTargetName)); + jSpells = JsonArrayInsert(jSpells, jSpell); + SetBuffDatabaseJson(oPC, "spells", jSpells, sList); + SendMessageToPC(oPC, sCasterName + " has cast " + sName + " to be saved for fast buffing on " + sTargetName + "."); + ExecuteScript("pi_buffing", oPC); +} +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if (SqlStep (sql)) return SqlGetString (sql, 0); + else return ""; +} +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep (sql); +} +void SetBuffDatabaseJson (object oPlayer, string sDataField, json jData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson (sql, "@data", jData); + SqlBindString (sql, "@name", sName); + SqlBindString (sql, "@tag", sTag); + SqlStep (sql); +} +json GetBuffDatabaseJson (object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString (sql, "@name", sName); + SqlBindString (sql, "@tag", sTag); + if (SqlStep (sql)) return SqlGetJson (sql, 0); + else return JsonArray (); +} +int GetHasDomainSpell(object oCaster, int nClass, int nLevel, int nSpell) +{ + int nIndex, nMaxIndex, nMSpell, nMmSpell, bDomain, nSubRadSpell, nSubSpell; + string sSubRadSpell; + if(StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + nMaxIndex = GetMemorizedSpellCountByLevel(oCaster, nClass, nLevel); + while(nIndex < nMaxIndex) + { + nMSpell = GetMemorizedSpellId(oCaster, nClass, nLevel, nIndex); + if(nSpell == nMSpell) + { + if(GetMemorizedSpellIsDomainSpell(oCaster, nClass, nLevel, nIndex)) return nLevel; + } + nIndex ++; + } + } + return 0; +} diff --git a/_module/nss/pe_buffing.nss b/_module/nss/pe_buffing.nss new file mode 100644 index 0000000..8f3262e --- /dev/null +++ b/_module/nss/pe_buffing.nss @@ -0,0 +1,563 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pe_buffing +//////////////////////////////////////////////////////////////////////////////// + Used with pi_buffing to run the buffing plugin for + Philos Single Player Enhancements. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" + +const int BUFF_MAX_SPELLS = 50; +const string FB_NO_MONSTER_CHECK = "FB_NO_MONSTER_CHECK"; + +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetBuffDatabaseJson(object oPlayer, string sDataField, json jData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag); +// Casts all buff spells saved to the widget button. +void CastSavedBuffSpells(object oPC); +// Will check and make sure the spell is memorized and/or ready. +// Returns TRUE if memorized and ready, FALSE if memorized but not ready, +// and -1 if not memorized for classes that memorize. +// nSpell is the spell to find. +// nClass that cast the spell. +// nLevel the level of the spell. +// nMetamagic is if it has metamagic on it. +// nDomain is if it is a domain spell. +int GetSpellReady(object oCaster, int nSpell, int nClass, int nLevel, int nMetamagic, int nDomain); +// Creates the Buffing widget. +void PopupWidgetBuffGUIPanel(object oPC); +void main() +{ + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + string sWndId = NuiGetWindowId (oPC, nToken); + //************************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt (oPC, AI_NO_NUI_SAVE)) return; + // Get the height, width, x, and y of the window. + json jGeom = NuiGetBind(oPC, nToken, "window_geometry"); + // Save on the player using the sWndId. + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + if(sWndId == "plbuffwin") + { + jMenuData = JsonArraySet(jMenuData, 1, JsonObjectGet(jGeom, "x")); + jMenuData = JsonArraySet(jMenuData, 2, JsonObjectGet(jGeom, "y")); + } + else if(sWndId == "widgetbuffwin") + { + jMenuData = JsonArraySet(jMenuData, 5, JsonObjectGet(jGeom, "x")); + jMenuData = JsonArraySet(jMenuData, 6, JsonObjectGet(jGeom, "y")); + } + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + return; + } + //************************************************************************** + // Spell Buffing. + if(sWndId == "plbuffwin") + { + if(sEvent == "click") + { + string sList; + if(GetStringLeft(sElem, 10) == "btn_spell_") + { + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + json jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + int nIndex = StringToInt(GetStringRight(sElem, GetStringLength(sElem) - 10)); + int nSpell = JsonGetInt(JsonArrayGet(JsonArrayGet(jSpells, nIndex), 0)); + string sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + jSpells = JsonArrayDel(jSpells, nIndex); + SetBuffDatabaseJson(oPC, "spells", jSpells, sList); + ai_SendMessages(sName + " has been removed from the list.", AI_COLOR_YELLOW, oPC); + ExecuteScript("pi_buffing", oPC); + } + else if(sElem == "btn_save") + { + string sScript; + object oCreature; + if(JsonGetInt(NuiGetBind (oPC, nToken, "btn_save"))) + { + sScript = GetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalObject(oPC, "AI_BUFF_PC", oPC); + SetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT", sScript); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "pc_savebuffs"); + // Setup your followers to allow spells to be saved on them as well. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + SetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT", sScript); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "pc_savebuffs"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + SetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT", sScript); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "pc_savebuffs"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + ai_SendMessages("Cast spells on yourself or an associate to save them to the widget.", AI_COLOR_YELLOW, oPC); + } + else + { + DeleteLocalObject(oPC, "AI_BUFF_PC"); + sScript = GetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + // Cleanup your followers to allow spells to be reacted to as normal. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + NuiSetBind(oPC, nToken, "btn_save", JsonBool(FALSE)); + ai_SendMessages("Saving spells to the list has been turned off.", AI_COLOR_YELLOW, oPC); + } + } + else if(sElem == "btn_clear") + { + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + SetBuffDatabaseJson(oPC, "spells", JsonArray(), sList); + ExecuteScript("pi_buffing", oPC); + } + else if(sElem == "btn_buff") CastSavedBuffSpells(oPC); + // Runs all the List 1-4 buttons. + if(GetStringLeft(sElem, 8) == "btn_list") + { + sList = "list" + GetStringRight(sElem, 1); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + jMenuData = JsonArraySet(jMenuData, 0, JsonString(sList)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + ExecuteScript("pi_buffing", oPC); + } + } + else if(sEvent == "watch") + { + if(GetLocalInt (oPC, AI_NO_NUI_SAVE)) return; + if(sElem == "buff_widget_check") + { + int bBuffWidget = JsonGetInt(NuiGetBind(oPC, nToken, "buff_widget_check")); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + jMenuData = JsonArraySet(jMenuData, 3, JsonBool(bBuffWidget)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + if(bBuffWidget) PopupWidgetBuffGUIPanel(oPC); + else NuiDestroy(oPC, NuiFindWindow(oPC, "widgetbuffwin")); + } + else if(sElem == "lock_buff_widget_check") + { + int bBuffLockWidget = JsonGetInt(NuiGetBind(oPC, nToken, "lock_buff_widget_check")); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + if(bBuffLockWidget) jMenuData = JsonArraySet(jMenuData, 3, JsonBool(TRUE)); + jMenuData = JsonArraySet(jMenuData, 4, JsonBool(bBuffLockWidget)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + NuiSetBind(oPC, nToken, "buff_widget_check", JsonBool(TRUE)); + PopupWidgetBuffGUIPanel(oPC); + } + else if(sElem == "chbx_no_monster_check_check") + { + int bNoCheckMonsters = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetLocalInt(oPC, FB_NO_MONSTER_CHECK, bNoCheckMonsters); + } + else if(sElem == "txt_spell_delay") + { + string sDelay = JsonGetString(NuiGetBind(oPC, nToken, "txt_spell_delay")); + float fDelay = StringToFloat(sDelay); + if(fDelay < 0.1f) fDelay = 0.1f; + if(fDelay > 6.0f) fDelay = 6.0f; + sDelay = FloatToString(fDelay, 0, 1); + SetBuffDatabaseString(oPC, "spells", sDelay, "Delay"); + } + } + } + //************************************************************************** + // Spell Buffing. + else if(sWndId == "widgetbuffwin") + { + if(sEvent == "click") + { + string sList; + if(sElem == "btn_one") sList = "list1"; + if(sElem == "btn_two") sList = "list2"; + if(sElem == "btn_three") sList = "list3"; + if(sElem == "btn_four") sList = "list4"; + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + jMenuData = JsonArraySet(jMenuData, 0, JsonString(sList)); + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + CastSavedBuffSpells(oPC); + } + } +} +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep (sql); +} +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if (SqlStep (sql)) return SqlGetString (sql, 0); + else return ""; +} +void SetBuffDatabaseJson (object oPlayer, string sDataField, json jData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson (sql, "@data", jData); + SqlBindString (sql, "@name", sName); + SqlBindString (sql, "@tag", sTag); + SqlStep (sql); +} +json GetBuffDatabaseJson (object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(SqlStep(sql)) return SqlGetJson(sql, 0); + else return JsonArray(); +} +void CastBuffSpell(object oPC, object oCaster, object oTarget, int nSpell, int nClass, int nMetamagic, int nDomain, string sList, string sName, int bInstantSpell) +{ + string sCasterName = GetName(oCaster); + string sTargetName = GetName(oTarget); + ai_SendMessages(sCasterName + " is quick buffing " + sName + " on " + sTargetName, AI_COLOR_GREEN, oPC); + AssignCommand(oCaster, ActionCastSpellAtObject(nSpell, oTarget, nMetamagic, FALSE, nDomain, 0, bInstantSpell, nClass)); +} +void CastSavedBuffSpells(object oPC) +{ + // Lets make sure the save button is off! + if(GetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT) == "pc_savebuffs") + { + string sScript = GetLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oPC, "AI_BUFF_CAST_AT_SCRIPT"); + // Cleanup your followers to allow spells to be reacted to as normal. + int nAssociateType = 2; + object oAssociate = GetAssociate(nAssociateType, oPC); + while(nAssociateType < 5) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(++nAssociateType, oPC); + } + int nIndex = 1; + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex <= AI_MAX_HENCHMAN) + { + if(oAssociate != OBJECT_INVALID) + { + sScript = GetLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + SetEventScript(oAssociate, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + DeleteLocalString(oAssociate, "AI_BUFF_CAST_AT_SCRIPT"); + } + oAssociate = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + int nMainWindow = NuiFindWindow(oPC, "plbuffwin"); + if(nMainWindow) NuiSetBind(oPC, nMainWindow, "btn_save", JsonBool(FALSE)); + ai_SendMessages("Saving spells to the list has been turned off.", AI_COLOR_YELLOW, oPC); + } + float fDistance; + if(!GetLocalInt(oPC, FB_NO_MONSTER_CHECK)) + { + // Check for monsters! We cannot let them buff if they are close to the enemy! + object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oPC); + fDistance = GetDistanceBetween(oPC, oEnemy); + } + if(fDistance > 30.0f || fDistance == 0.0) + { + string sName; + float fDelay; + float fDelayIncrement = StringToFloat(GetBuffDatabaseString(oPC, "spells", "Delay"));; + int bInstantSpell; + if(fDelayIncrement < 3.0f) bInstantSpell = TRUE; + int nSpell, nClass, nLevel, nMetamagic, nDomain, nSpellReady, nIndex = 0; + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + string sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + json jSpell, jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + while(nIndex <= BUFF_MAX_SPELLS) + { + jSpell = JsonArrayGet(jSpells, nIndex); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetamagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sName = GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + location lLocation = GetLocation(oPC); + // Saved the Caster's name so we can find them to cast the spell. + string sCasterName = JsonGetString(JsonArrayGet(jSpell, 5)); + object oCaster; + if(sCasterName == "" || sCasterName == ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPC)))) oCaster = oPC; + else + { + oCaster = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, lLocation, TRUE); + while(oCaster != OBJECT_INVALID) + { + if(sCasterName == ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oCaster)))) break; + oCaster = GetNextObjectInShape(SHAPE_SPHERE, 20.0, lLocation, TRUE); + } + } + if(oCaster == OBJECT_INVALID) + { + DelayCommand(fDelay, ai_SendMessages("Cannot quick cast " + sName + " because the " + sCasterName + " is not here!", AI_COLOR_RED, oPC)); + } + else + { + // Saved the target's name so we can find them to cast the spell on. + string sTargetName = JsonGetString(JsonArrayGet(jSpell, 6)); + object oTarget; + if(sTargetName == "" || sTargetName == ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPC)))) oTarget = oPC; + else + { + oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 20.0, lLocation, TRUE); + while(oTarget != OBJECT_INVALID) + { + if(sTargetName == ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oTarget)))) break; + oTarget = GetNextObjectInShape(SHAPE_SPHERE, 20.0, lLocation, TRUE); + } + } + if(oTarget == OBJECT_INVALID) + { + DelayCommand(fDelay, ai_SendMessages("Cannot quick cast " + sName + " because the " + sTargetName + " is not here!", AI_COLOR_RED, oPC)); + } + else + { + if(nMetamagic > 0) + { + if(nMetamagic == METAMAGIC_EMPOWER) sName += " (Empowered)"; + else if(nMetamagic == METAMAGIC_EXTEND) sName += " (Extended)"; + else if(nMetamagic == METAMAGIC_MAXIMIZE) sName += " (Maximized)"; + else if(nMetamagic == METAMAGIC_QUICKEN) sName += " (Quickened)"; + else if(nMetamagic == METAMAGIC_SILENT) sName += " (Silent)"; + else if(nMetamagic == METAMAGIC_STILL) sName += " (Still)"; + } + nSpellReady = GetSpellReady(oCaster, nSpell, nClass, nLevel, nMetamagic, nDomain); + if(nSpellReady == TRUE) + { + DelayCommand(fDelay, CastBuffSpell(oPC, oCaster, oTarget, nSpell, nClass, nMetamagic, nDomain, sList, sName, bInstantSpell)); + } + else if(nSpellReady == -1) + { + DelayCommand(fDelay, ai_SendMessages(sCasterName + " cannot quick cast " + sName + " because it is not ready to cast!", AI_COLOR_RED, oPC)); + } + else if(nSpellReady == -2) + { + DelayCommand (fDelay, ai_SendMessages(sCasterName + " cannot quick cast " + sName + " because it is not memorized!", AI_COLOR_RED, oPC)); + } + else if(nSpellReady == -3) + { + DelayCommand (fDelay, ai_SendMessages(sCasterName + " cannot quick cast " + sName + " because there are no spell slots of that level left!", AI_COLOR_RED, oPC)); + } + else if(nSpellReady == -4) + { + DelayCommand (fDelay, ai_SendMessages(sCasterName + "cannot quick cast " + sName + " because that spell is not known.", AI_COLOR_RED, oPC)); + } + fDelay += fDelayIncrement; + } + } + } + else break; + nIndex ++; + } + if(nIndex == 0 && !NuiFindWindow(oPC, "plbuffwin")) ExecuteScript("pi_buffing", oPC); + } + else ai_SendMessages("Enemies are too close for you to cast all your buff spells!", AI_COLOR_RED, oPC); +} +int GetSpellReady(object oCaster, int nSpell, int nClass, int nLevel, int nMetamagic, int nDomain) +{ + int nIndex, nMaxIndex, nMSpell, nMmSpell, nDSpell, nSubRadSpell, nSubSpell; + string sSubRadSpell; + if(StringToInt(Get2DAString("classes", "MemorizesSpells", nClass))) + { + int nSpellMemorized; + nMaxIndex = GetMemorizedSpellCountByLevel(oCaster, nClass, nLevel); + while(nIndex < nMaxIndex) + { + nMSpell = GetMemorizedSpellId(oCaster, nClass, nLevel, nIndex); + if(nSpell == nMSpell) + { + nMmSpell = GetMemorizedSpellMetaMagic(oCaster, nClass, nLevel, nIndex); + nDSpell = GetMemorizedSpellIsDomainSpell(oCaster, nClass, nLevel, nIndex); + //SendMessageToPC(oCaster, "pe_buffing, 308, nSpell: " + IntToString(nSpell) + + // " nMSpell: " + IntToString(nMSpell) + + // " nMmSpell: " + IntToString(nMmSpell) + + // " nMetamagic: " + IntToString(nMetamagic) + + // " nDomain: " + IntToString(nDomain) + + // " nDSpell: " + IntToString(nDSpell)); + if(nMmSpell == nMetamagic) + { + nSpellMemorized = TRUE; + if(GetMemorizedSpellReady(oCaster, nClass, nLevel, nIndex)) + { + if((nDomain && nDSpell) || (!nDomain && !nDSpell)) return TRUE; + } + } + } + for(nSubRadSpell = 1; nSubRadSpell < 5; nSubRadSpell++) + { + sSubRadSpell = "SubRadSpell" + IntToString(nSubRadSpell); + if(nSpell == StringToInt(Get2DAString("spells", sSubRadSpell, nMSpell))) + { + nMmSpell = GetMemorizedSpellMetaMagic(oCaster, nClass, nLevel, nIndex); + nDSpell = GetMemorizedSpellIsDomainSpell(oCaster, nClass, nLevel, nIndex); + //SendMessageToPC(oCaster, "pe_buffing, 433, nMmSpell: " + IntToString(nMmSpell) + + // " nMetamagic: " + IntToString(nMetamagic) + + // " nDomain: " + IntToString(nDomain) + + // " nDSpell: " + IntToString(nDSpell)); + if(nMmSpell == nMetamagic) + { + nSpellMemorized = TRUE; + if(GetMemorizedSpellReady(oCaster, nClass, nLevel, nIndex)) + { + if((nDomain && nDSpell) || (!nDomain && !nDSpell)) return TRUE; + } + } + } + } + nIndex ++; + } + if(nSpellMemorized) return -1; + return -2; + } + else + { + int nSpellKnown; + nMaxIndex = GetKnownSpellCount(oCaster, nClass, nLevel); + while(nIndex < nMaxIndex) + { + nMSpell = GetKnownSpellId(oCaster, nClass, nLevel, nIndex); + if(nSpell == nMSpell) + { + nSpellKnown = TRUE; + if(GetSpellUsesLeft(oCaster, nClass, nSpell)) return TRUE; + } + for(nSubRadSpell = 1; nSubRadSpell < 5; nSubRadSpell++) + { + sSubRadSpell = "SubRadSpell" + IntToString(nSubRadSpell); + if(nSpell == StringToInt(Get2DAString("spells", sSubRadSpell, nMSpell))) + { + nSpellKnown = TRUE; + if(GetSpellUsesLeft(oCaster, nClass, nSpell)) return TRUE; + } + } + nIndex ++; + } + if(nSpellKnown) return -3; + return -4; + } + return -2; +} +void PopupWidgetBuffGUIPanel(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 (buttons)********************************************************** + json jRow = CreateButtonImage(JsonArray(), "ir_level1", "btn_one", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level2", "btn_two", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level3", "btn_three", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level4", "btn_four", 35.0f, 35.0f, 0.0); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + int bAIBuffWidgetLock = JsonGetInt(JsonArrayGet(jMenuData, 4)); + // Get the window location to restore it from the database. + float fX = JsonGetFloat(JsonArrayGet(jMenuData, 5)); + float fY = JsonGetFloat(JsonArrayGet(jMenuData, 6)); + if(fX == 0.0f && fY == 0.0f) + { + fX = 10.0f; + fY = 10.0f; + } + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + if(bAIBuffWidgetLock) + { + fX += 4.0f; + // GUI scales are a mess, I just figured them out per scale to keep the widget from moving. + if(fGUI_Scale == 1.0) fY += 37.0; + else if(fGUI_Scale == 1.1) fY += 38.0; + else if(fGUI_Scale == 1.2) fY += 40.0; + else if(fGUI_Scale == 1.3) fY += 42.0; + else if(fGUI_Scale == 1.4) fY += 43.0; + else if(fGUI_Scale == 1.5) fY += 45.0; + else if(fGUI_Scale == 1.6) fY += 47.0; + else if(fGUI_Scale == 1.7) fY += 48.0; + else if(fGUI_Scale == 1.8) fY += 50.0; + else if(fGUI_Scale == 1.9) fY += 52.0; + else if(fGUI_Scale == 2.0) fY += 54.0; + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken; + if(bAIBuffWidgetLock) nToken = SetWindow (oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_buffing"); + else nToken = SetWindow (oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_buffing"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + //NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_one_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four_event", JsonBool (TRUE)); +} + diff --git a/_module/nss/pe_crafting.nss b/_module/nss/pe_crafting.nss new file mode 100644 index 0000000..51d76e7 --- /dev/null +++ b/_module/nss/pe_crafting.nss @@ -0,0 +1,2884 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pe_crafting +//////////////////////////////////////////////////////////////////////////////// + Used with pi_crafting to run the crafting plugin events for + Philos Single Player Enhancements. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "nw_inc_gff" +#include "0i_main" +#include "0i_items" +// Banned list of BaseItemTypes use rows from baseitemtype.2da. +// Place each one between a : . Example ":21:28:" will not change belts and clubs. +// Best used for visual effect items like helms. +const string CRAFT_BANNED_BASEITEMTYPES = ":23:"; +//const string CRAFT_BANNED_BASEITEMTYPES = "::"; +// Maximum model number for all items except weapons. +const int CRAFT_MAX_MODEL_NUMBER = 999; + +struct stWeaponAppearance +{ + object oItem; + int nModel; + int nColor; + string sPart; +}; +// Maximum model number for weapons. Note this will be the 100s and 10s places. +// The color number uses the ones place. Thus 25 is actually 250. +const int ALLOW_CRAFT_NAMES = TRUE; +const int CRAFT_MAX_WEAPON_MODEL_NUMBER = 99; +const string CRAFT_JSON = "CRAFT_JSON"; +const string CRAFT_ORIGINAL_ITEM = "CRAFT_ORIGINAL_ITEM"; +const string CRAFT_COOL_DOWN = "CRAFT_COOL_DOWN"; +const string CRAFT_ITEM_SELECTION = "CRAFT_ITEM_SELECTION"; +const string CRAFT_MATERIAL_SELECTION = "CRAFT_MATERIAL_SELECTION"; +const string CRAFT_MODEL_SELECTION = "CRAFT_MODEL_SELECTION"; +const string CRAFT_MODEL_SPECIAL = "CRAFT_MODEL_SPECIAL"; +const string CRAFT_ITEM_TYPE = "CRAFT_ITEM_TYPE"; +const string CRAFT_WEAPON_MOD_TOP = "CRAFT_WEAPON_MOD_TOP"; +const string CRAFT_WEAPON_MOD_MID = "CRAFT_WEAPON_MOD_MID"; +const string CRAFT_WEAPON_MOD_BOT = "CRAFT_WEAPON_MOD_BOT"; +const string CRAFT_WEAPON_COL_TOP = "CRAFT_WEAPON_COL_TOP"; +const string CRAFT_WEAPON_COL_MID = "CRAFT_WEAPON_COL_MID"; +const string CRAFT_WEAPON_COL_BOT = "CRAFT_WEAPON_COL_BOT"; +const string CRAFT_COPY_ITEM = "CRAFT_COPY_ITEM"; +const string CRAFT_COPY_ITEM_TYPE = "CRAFT_COPY_ITEM_TYPE"; +const string CRAFT_COPY_MODEL = "CRAFT_COPY_MODEL"; +const string CRAFT_COPY_COLOR = "CRAFT_COPY_COLOR"; +const string CRAFT_COPY_PART_COLOR = "CRAFT_COPY_PART_COLOR"; +const string CRAFT_ARMOR_AC = "CRAFT_ARMOR_AC"; +const string CRAFT_COLOR_PALLET = "CRAFT_COLOR_PALLET"; +const string CRAFT_LEFT_PART_COLOR = "CRAFT_LEFT_PART_COLOR"; +const string CRAFT_ALL_COLOR = "CRAFT_ALL_COLOR"; +const string CRAFT_RIGHT_PART_COLOR = "CRAFT_RIGHT_PART_COLOR"; +const string CRAFT_TARGET = "CRAFT_TARGET"; +const string CRAFT_ITEM = "CRAFT_ITEM"; +// Tag used in lighting effects. +const string CRAFT_HIGHLIGHT = "CRAFT_HIGHLIGHT"; +const string CRAFT_ULTRALIGHT = "CRAFT_ULTRALIGHT"; +// The tags for containers used to do some crafting. +const string CRAFT_TEMPLATE = "x3_plc_basket"; +const string CRAFT_CONTAINER = "CRAFT_CONTAINER"; +// Used in the crafting GUI to copy an item to be pasted to another item later. +void CopyCraftingItem(object oPC, object oItem); +// Used in the crafting GUI to paste a copy of an item to another item. +object PasteCraftingItem(object oPC, object oTarget, object oItem); +int GetItemSelectedEquipSlot(int nItemSelected); +int GetArmorModelSelected(object oPC); +object ChangeItemsAppearance(object oPC, object oTarget, int nToken, object oItem, int nDirection, string sPart); +// Checks to see if the item can be crafted. +// bPasteCheck is a special check when an item is being pasted. +int CanCraftItem(object oPC, object oItem, int nToken, int bPasteCheck = FALSE); +object RandomizeItemsCraftAppearance(object oPlayer, object oTarget, int nToken, object oItem); +// Returns the correct item based on the crafting menu selected item. +object GetSelectedItem(object oTarget, int nItemSelected); +// Cancels the crafted item for the player and restoring the original. +void CancelCraftedItem(object oPlayer, object oTarget); +// Gets the colorId from a image of the color pallet. +// Thanks Zunath for the base code. +int GetColorPalletId(object oPC, int nToken); +// Sets the pointer based on current Item, Part, and Material selected. +void SetColorPalletPointer(object oPC, int nToken, object oItem); +// Locks/Unlocks specific buttons when an item has been changed. +void LockItemInCraftingWindow(object oPC, object oItem, object oTarget, int nToken); +// Locks/Unlocks specific buttons when an item has been cleared. +void ClearItemInCraftingWindow(object oPC, object oItem, int nToken); +// Saves the crafted item for the player removing the original. +void SaveCraftedItem(object oPC, object oTarget, int nToken); +// Remove Effect of type specified from oCreature; +// sEffectTag is the tag of the effect to remove. +// Feat, Class, Racial. +void RemoveTagedEffects(object oCreature, string sEffectTag); +// Returns TRUE/FALSE if item has temporary item property. +int CheckForTemporaryItemProperty(object oItem); +// Updates the model number text in the NUI menu. +void SetModelNumberText(object oPC, object oTarget, int nToken); +// Sets the material buttons for use. +// nMaterial 0,1 Cloth 2,3 Leather 4,5 Metal -1 None. +void SetMaterialButtons(object oPC, int nToken, int nMaterial); +// Creates the item editing menu. +void CreateItemGUIPanel(object oPC, object oTarget); +// Events for ItemGUIPanel +void CraftItemInfoEvents(object oPC, int nToken); +// Creates the save/load menu for items. +//void CreateDresserGUIPanel(object oPC, object oTarget); +json CreateItemCombo(object oPC, json jRow, string sComboBind); +json CreateModelCombo(object oPC, object oTarget, json jRow, string sComboBind); +void CreateCreatureCraftingGUIPanel(object oPC, object oTarget); +// See above for constant that can have base item types added to the list. +int IfOnBannedBaseItemTypeList(object oPC, object oItem); + +int GetColorIDChange(object oItem, int nType, int nIndex, int nChange) +{ + int nColorId = GetItemAppearance(oItem, nType, nIndex) + nChange; + if(nColorId > 175) return 0; + if(nColorId < 0) return 175; + return nColorId; +} +void main() +{ + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + //vector vTarget = GetTargetingModeSelectedPosition(); + //location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + //object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT"); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget))// && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "SELECT_TARGET") + { + int nObjectType = GetObjectType(oTarget); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + if(oPC == oTarget || GetMaster(oTarget) == oPC || + ai_GetIsDungeonMaster(oPC)) + { + SetLocalObject(oPC, CRAFT_TARGET, oTarget); + AttachCamera(oPC, oTarget); + SetLocalObject(oPC, CRAFT_TARGET, oTarget); + CreateCreatureCraftingGUIPanel(oPC, oTarget); + } + else + { + ai_SendMessages(GetName(oTarget) + " is not the player or a henchmen! Other associates cannot use item crafting.", AI_COLOR_RED, oPC); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + ai_SendMessages("Select your character, a henchman or an item possessed by one.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM , + MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + return; + } + } + else if(nObjectType == OBJECT_TYPE_ITEM) + { + if(!GetIdentified(oTarget) && !ai_GetIsDungeonMaster(oPC)) + { + ai_SendMessages("The item must be Identified!", AI_COLOR_RED, oPC); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + ai_SendMessages("Select your character, a henchman or an item possessed by one of them.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM , + MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + return; + } + object oCreature = GetItemPossessor(oTarget, TRUE); + if(oCreature == oPC || GetMaster(oCreature) == oPC || ai_GetIsDungeonMaster(oPC)) + { + SetLocalObject(oPC, "CRAFT_INFO_ITEM", oTarget); + CreateItemGUIPanel(oPC, oTarget); + } + else + { + ai_SendMessages("Items must be possessed by the player or a henchmen!", AI_COLOR_RED, oPC); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + ai_SendMessages("Select your character, a henchman or an item possessed by one of them.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM , + MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + return; + } + } + } + DeleteLocalString(oPC, AI_TARGET_MODE); + } + else + { + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sWndId = NuiGetWindowId (oPC, nToken); + if(sWndId == "craft_item_nui") + { + CraftItemInfoEvents(oPC, nToken); + return; + } + string sEvent = NuiGetEventType(); + // We don't use and it causes error windows to go off! Return early! + if(sEvent == "mouseup") return; + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + //SendMessageToPC(oPC, "0e_crafting, 144, sElem: " + sElem + " sEvent: " + sEvent); + //************************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(!GetLocalInt (oPC, AI_NO_NUI_SAVE)) + { + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + if(JsonGetType(jCraft) == JSON_TYPE_NULL) jCraft = JsonObject(); + // Get the height, width, x, and y of the window. + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + jCraft = JsonObjectSet(jCraft, "CRAFT_MENU", jGeometry); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + return; + } + //************************************************************************** + object oTarget = GetLocalObject(oPC, CRAFT_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oPC; + // Get the item we are crafting. + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItemSelected); + object oOriginalItem = GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + if(oItem == OBJECT_INVALID) + { + if(sElem != "btn_cancel") + { + ai_SendMessages("The item we are adjusting is not equiped!", AI_COLOR_RED, oPC); + return; + } + } + else if(oOriginalItem != OBJECT_INVALID && GetTag(oItem) != GetTag(oOriginalItem)) + { + ai_SendMessages(GetName(oItem) + " is not the item you have been adjusting!", AI_COLOR_RED, oPC); + return; + } + // Changing the name needs to be before the cooldown. + if(sElem == "txt_item_name" && sEvent == "watch") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_name")); + SetName(oItem, sName); + int nToken2 = NuiFindWindow(oPC, "craft_item_nui"); + if(nToken2) NuiSetBind(oPC, nToken2, "txt_item_name", JsonString(sName)); + return; + } + // Delay crafting so it has time to equip and unequip as well as remove. + if(GetLocalInt(oPC, CRAFT_COOL_DOWN)) return; + SetLocalInt(oPC, CRAFT_COOL_DOWN, TRUE); + DelayCommand(0.25f, DeleteLocalInt(oPC, CRAFT_COOL_DOWN)); + // They have selected a color. + if(sElem == "color_pallet") + { + int nColorId, nChange; + object oNewItem; + if(sEvent == "mousedown") + { + // Get the color they selected from the color pallet cell. + nColorId = GetColorPalletId(oPC, nToken); + } + else if(sEvent == "mousescroll") + { + float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y")); + nChange = FloatToInt(nMouseScroll); + } + else return; + if(!CanCraftItem(oPC, oItem, nToken)) return; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nBaseItemType = GetBaseItemType(oItem); + int nAllColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR)); + if(!nAllColor && nBaseItemType == BASE_ITEM_ARMOR) + { + int nIndex; + int nModelSelected = GetArmorModelSelected(oPC); + int nLeftColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR)); + int nRightColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oItem); + } + else + { + if(nRightColor) + { + // Color Right side. + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oItem); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE)); + if(nLeftColor) + { + // If we are doing the left side then add one to get the left side. + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1; + else nModelSelected = nModelSelected + 1; + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oNewItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oItem = CopyItemAndModify(oNewItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oNewItem); + oNewItem = oItem; + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(TRUE)); + } + } + else if(nLeftColor) + { + // If we are doing the left side then add one to get the left side. + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1; + else nModelSelected = nModelSelected + 1; + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE); + DestroyObject(oItem); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(TRUE)); + } + } + } + else + { + if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected, nChange); + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected, nColorId, TRUE); + DestroyObject(oItem); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Equip new item. + if(nBaseItemType == BASE_ITEM_CLOAK) AssignCommand (oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CLOAK)); + else if(nBaseItemType == BASE_ITEM_HELMET) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_HEAD)); + else if(nBaseItemType == BASE_ITEM_ARMOR) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + } + else if(sEvent == "watch") + { + // The player is changing the item they are crafting. + if(sElem == "item_combo_selected") + { + int nSelected = JsonGetInt(NuiGetBind (oPC, nToken, sElem)); + oItem = GetSelectedItem(oTarget, nSelected); + if(oItem == OBJECT_INVALID) + { + ai_SendMessages("There is not an item to modify!", AI_COLOR_RED, oPC); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + NuiSetBind(oPC, nToken, "item_combo_selected", JsonInt(nItem)); + return; + } + jCraft = JsonObjectSet(jCraft, CRAFT_ITEM_SELECTION, JsonInt(nSelected)); + // Set button for cloak and helms. + if(nSelected == 1 || nSelected == 2) + { + int nHidden = GetHiddenWhenEquipped(oItem); + if(nHidden) jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(1)); + else jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(0)); + } + else jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(0)); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + NuiDestroy(oPC, nToken); + CreateCreatureCraftingGUIPanel(oPC, GetLocalObject(oPC, CRAFT_TARGET)); + } + // They have selected a part to change. + else if(sElem == "model_combo_selected") + { + int nSelected = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(nSelected)); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + SetModelNumberText(oPC, oTarget, nToken); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + if(nItem == 1) // Cloak + { + if(!CanCraftItem(oPC, oItem, nToken)) return; + object oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); + if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE); + else SetHiddenWhenEquipped(oItem, FALSE); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + else if(nItem == 2) // Headgear + { + if(!CanCraftItem(oPC, oItem, nToken)) return; + object oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); + if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE); + else SetHiddenWhenEquipped(oItem, FALSE); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + else if(nItem == 4 && ai_GetIsShield(oItem)) + { + if(!CanCraftItem(oPC, oItem, nToken)) return; + object oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE); + else SetHiddenWhenEquipped(oItem, FALSE); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + if(ai_GetIsWeapon(oItem)) + { + // Clearing sets the module to 0 triggering an extra call. + if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(!CanCraftItem(oPC, oItem, nToken)) return; + int nVisual; + itemproperty ipProperty = GetFirstItemProperty(oItem); + while(GetIsItemPropertyValid(ipProperty)) + { + if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_VISUALEFFECT) + { + RemoveItemProperty(oItem, ipProperty); + } + ipProperty = GetNextItemProperty(oItem); + } + if(nSelected == 1) nVisual = ITEM_VISUAL_ACID; + else if(nSelected == 2) nVisual = ITEM_VISUAL_COLD; + else if(nSelected == 3) nVisual = ITEM_VISUAL_ELECTRICAL; + else if(nSelected == 4) nVisual = ITEM_VISUAL_EVIL; + else if(nSelected == 5) nVisual = ITEM_VISUAL_FIRE; + else if(nSelected == 6) nVisual = ITEM_VISUAL_HOLY; + else if(nSelected == 7) nVisual = ITEM_VISUAL_SONIC; + if(nVisual) + { + ipProperty = ItemPropertyVisualEffect(nVisual); + AddItemProperty(DURATION_TYPE_PERMANENT, ipProperty, oItem); + } + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + } + else if(sEvent == "click") + { + if(sElem == "btn_info") + { + SetLocalObject(oPC, "CRAFT_INFO_ITEM", oItem); + CreateItemGUIPanel(oPC, oItem); + } + //else if(sElem == "btn_wardrobe") CreateDresserGUIPanel(oPC, oTarget); + // Random button to change items looks randomly. + else if(sElem == "btn_randomize") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + oItem = RandomizeItemsCraftAppearance(oPC, oTarget, nToken, oItem); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + // Save any changes made to the selected item. + else if(sElem == "btn_save") + { + SaveCraftedItem(oPC, oTarget, nToken); + } + // Selecte target to change clothing on. + else if(sElem == "btn_select_target") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select your charcter, a henchman or an item possessed by one.", AI_COLOR_YELLOW, oPC); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + DeleteLocalObject(oPC, CRAFT_TARGET); + DeleteLocalObject(oPC, "CRAFT_INFO_ITEM"); + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + } + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + } + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM , + MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + // Cancel any changes made to the selected item. + else if(sElem == "btn_cancel") + { + // If the button is on cancel then clear the item. + if(JsonGetString(NuiGetBind(oPC, nToken, "btn_cancel_label")) == "Cancel") + { + CancelCraftedItem(oPC, oTarget); + ClearItemInCraftingWindow(oPC, oItem, nToken); + DelayCommand(0.5, NuiDestroy(oPC, nToken)); + DelayCommand(0.5, CreateCreatureCraftingGUIPanel(oPC, GetLocalObject(oPC, CRAFT_TARGET))); + } + // If the button is on Exit not Cancel then exit. + else + { + AssignCommand(oPC, RestoreCameraFacing()); + AttachCamera(oPC, oPC); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + DeleteLocalObject(oPC, CRAFT_TARGET); + DeleteLocalObject(oPC, "CRAFT_INFO_ITEM"); + NuiDestroy(oPC, nToken); + nToken = NuiFindWindow(oPC, "craft_item_nui"); + if(nToken) NuiDestroy(oPC, nToken); + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + } + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + } + } + } + // Get the previous model of the selected item. + else if(GetStringLeft(sElem, 9) == "btn_prev_") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + oItem = ChangeItemsAppearance(oPC, oTarget, nToken, oItem, -1, GetStringRight(sElem, 1)); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + // Get the next model of the selected item. + else if(GetStringLeft(sElem, 9) == "btn_next_") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + oItem = ChangeItemsAppearance(oPC, oTarget, nToken, oItem, 1, GetStringRight(sElem, 1)); + LockItemInCraftingWindow(oPC, oItem, oTarget, nToken); + } + } + else if(sElem == "btn_highlight") + { + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(FALSE)); + } + else + { + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + } + SetLocalInt(oPC, CRAFT_HIGHLIGHT, TRUE); + effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20); + eLight = TagEffect(eLight, CRAFT_HIGHLIGHT); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTarget); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(TRUE)); + } + } + else if(sElem == "btn_left_part_color") + { + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + SetColorPalletPointer(oPC, nToken, oItem); + } + else if(sElem == "btn_all_color") + { + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + SetColorPalletPointer(oPC, nToken, oItem); + } + else if(sElem == "btn_right_part_color") + { + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(TRUE)); + SetColorPalletPointer(oPC, nToken, oItem); + } + else if(sElem == "btn_right_part_reset") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + int nIndex; + int nModelSelected = GetArmorModelSelected(oPC); + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + object oNewItem; + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE); + DestroyObject(oItem); + } + else + { + nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE); + DestroyObject(oItem); + } + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + int nLeft = JsonGetInt(NuiGetBind(oPC, nToken, "btn_left_part_color")); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(!nLeft)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(!nLeft)); + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + nLeft = JsonGetInt(NuiGetBind(oPC, nToken, "btn_left_part_reset_event")); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nLeft)); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + } + else if(sElem == "btn_all_reset") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + int nIndex, nColor; + json jItem = ObjectToJson(oItem, TRUE); + string sColor, sPartName; + for(nIndex = 0;nIndex < 19;nIndex++) + { + sPartName = "APart_" + IntToString(nIndex) + "_Col_"; + for(nColor = 0;nColor < 6;nColor++) + { + sColor = IntToString(nColor); + if(JsonGetType(GffGetByte(jItem, sPartName + sColor)) != JSON_TYPE_NULL) + { + jItem = GffRemoveByte(jItem, sPartName + sColor); + } + } + } + object oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + DestroyObject(oItem); + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + } + else if(sElem == "btn_left_part_reset") + { + if(CanCraftItem(oPC, oItem, nToken)) + { + int nModelSelected = GetArmorModelSelected(oPC); + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1; + else nModelSelected = nModelSelected + 1; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + object oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE); + DestroyObject(oItem); + // Lock the new item so they can't change it on the character. + LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + // Fix buttons. + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE)); + int nRight = JsonGetInt(NuiGetBind(oPC, nToken, "btn_right_part_color")); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(!nRight)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(!nRight)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + nRight = JsonGetInt(NuiGetBind(oPC, nToken, "btn_right_part_reset_event")); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nRight)); + SetColorPalletPointer(oPC, nToken, oNewItem); + } + } + // They have changed the material (color item) for the item. + else if(GetStringLeft(sElem, 13) == "btn_material_") + { + int nSelected = StringToInt(GetStringRight(sElem, 1)); + SetMaterialButtons(oPC, nToken, nSelected); + jCraft = JsonObjectSet(jCraft, CRAFT_MATERIAL_SELECTION, JsonInt(nSelected)); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + // Change the pallet for the correct material. + string sColorPallet; + if(nSelected < 4) + { + sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "armor_block_1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "armor_block_2", JsonBool(FALSE)); + } + else + { + sColorPallet = "armor_pallet"; + if(ResManGetAliasFor(sColorPallet, RESTYPE_TGA) == "") + { + sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "armor_block_1", JsonBool(TRUE)); + } + } + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString (sColorPallet)); + SetLocalString(oPC, CRAFT_COLOR_PALLET, sColorPallet); + SetColorPalletPointer(oPC, nToken, oItem); + } + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + else if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + AssignCommand(oPC, PlaySound("gui_button")); + if(sElem == "btn_highlight") + { + if(GetLocalInt(oPC, CRAFT_ULTRALIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT); + DeleteLocalInt(oPC, CRAFT_ULTRALIGHT); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(FALSE)); + } + else + { + if(GetLocalInt(oPC, CRAFT_HIGHLIGHT)) + { + RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT); + DeleteLocalInt(oPC, CRAFT_HIGHLIGHT); + } + SetLocalInt(oPC, CRAFT_ULTRALIGHT, TRUE); + effect eLight = EffectVisualEffect(VFX_DUR_ULTRAVISION); + eLight = TagEffect(eLight, CRAFT_ULTRALIGHT); + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTarget); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(TRUE)); + } + } + } + } + } +} +/*void CopyCraftingItem(object oPC, object oItem) +{ + //ai_Debug("pe_crafting", "295", JsonDump(ObjectToJson(oItem), 2)); + json jItem = ObjectToJson(oItem); + + SetLocalInt(oPC, CRAFT_COPY_ITEM, TRUE); + int nSelected = GetLocalInt(oPC, CRAFT_ITEM_SELECTION); + if (ai_GetIsWeapon(oItem)) + { + // Copy the base item type; + SetLocalInt(oPC, CRAFT_COPY_ITEM_TYPE, GetBaseItemType(oItem)); + // Copy each model/color & save to variables. + int nIndex = 1; + string sIndex; + while(nIndex <= 3) + { + sIndex = IntToString(nIndex); + SetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex, JsonGetInt(GffGetByte(jItem, "ModelPart" + sIndex))); + nIndex++; + } + } + else if (nSelected == 0) + { + // Copy the armors AC so we can check it. + SetLocalInt(oPC, CRAFT_ARMOR_AC, ai_GetArmorBonus(oItem)); + // Copy an per part colors if they exist. + int nPart, nColor, nPartColor; + string sPart, sColor; + while(nPart <= 18) + { + sPart = IntToString(nPart); + nColor = 0; + while(nColor <= 5) + { + sColor = IntToString(nColor); + if(GffGetFieldExists(jItem, "APart_" + sPart + "_Col_" + sColor, GFF_FIELD_TYPE_BYTE)) + { + // Shift the number up by 1 so we can save as a variable and not use 0! + nPartColor = JsonGetInt(GffGetByte(jItem, "APart_" + sPart + "_Col_" + sColor)) + 1; + SetLocalInt(oPC, CRAFT_COPY_PART_COLOR + sPart + sColor, nPartColor); + } + nColor++; + } + nPart++; + } + // Copy each model & save to variables. + SetLocalInt(oPC, "CRAFT_COPY_MODEL0", JsonGetInt(GffGetByte(jItem, "ArmorPart_Belt"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL1", JsonGetInt(GffGetByte(jItem, "ArmorPart_LBicep"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL2", JsonGetInt(GffGetByte(jItem, "ArmorPart_LFArm"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL3", JsonGetInt(GffGetByte(jItem, "ArmorPart_LFoot"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL4", JsonGetInt(GffGetByte(jItem, "ArmorPart_LHand"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL5", JsonGetInt(GffGetByte(jItem, "ArmorPart_LShin"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL6", JsonGetInt(GffGetByte(jItem, "ArmorPart_LShoul"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL7", JsonGetInt(GffGetByte(jItem, "ArmorPart_LThigh"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL8", JsonGetInt(GffGetByte(jItem, "ArmorPart_Neck"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL9", JsonGetInt(GffGetByte(jItem, "ArmorPart_Pelvis"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL10", JsonGetInt(GffGetByte(jItem, "ArmorPart_RBicep"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL11", JsonGetInt(GffGetByte(jItem, "ArmorPart_RFArm"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL12", JsonGetInt(GffGetByte(jItem, "ArmorPart_RFoot"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL13", JsonGetInt(GffGetByte(jItem, "ArmorPart_RHand"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL14", JsonGetInt(GffGetByte(jItem, "ArmorPart_RShin"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL15", JsonGetInt(GffGetByte(jItem, "ArmorPart_RShoul"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL16", JsonGetInt(GffGetByte(jItem, "ArmorPart_RThigh"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL17", JsonGetInt(GffGetByte(jItem, "ArmorPart_Robe"))); + SetLocalInt(oPC, "CRAFT_COPY_MODEL18", JsonGetInt(GffGetByte(jItem, "ArmorPart_Torso"))); + // Copy each color and save to variables. + SetLocalInt(oPC, "CRAFT_COPY_COLOR0", JsonGetInt(GffGetByte(jItem, "Cloth1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR1", JsonGetInt(GffGetByte(jItem, "Cloth2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR2", JsonGetInt(GffGetByte(jItem, "Leather1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR3", JsonGetInt(GffGetByte(jItem, "Leather2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR4", JsonGetInt(GffGetByte(jItem, "Metal1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR5", JsonGetInt(GffGetByte(jItem, "Metal2Color"))); + } +else + { + // Copy the base item type; + SetLocalInt(oPC, CRAFT_COPY_ITEM_TYPE, GetBaseItemType(oItem)); + // Copy the base item type; + SetLocalInt(oPC, "CRAFT_COPY_MODEL0", JsonGetInt(GffGetByte(jItem, "ModelPart1"))); + // Copy each color and save to variables. + SetLocalInt(oPC, "CRAFT_COPY_COLOR0", JsonGetInt(GffGetByte(jItem, "Cloth1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR1", JsonGetInt(GffGetByte(jItem, "Cloth2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR2", JsonGetInt(GffGetByte(jItem, "Leather1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR3", JsonGetInt(GffGetByte(jItem, "Leather2Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR4", JsonGetInt(GffGetByte(jItem, "Metal1Color"))); + SetLocalInt(oPC, "CRAFT_COPY_COLOR5", JsonGetInt(GffGetByte(jItem, "Metal2Color"))); + } + // Send message that it has been copied. + ai_SendMessages(GetName (oItem) + " appearance has been copied!", AI_COLOR_GREEN, oPC); +} + +// Used in the crafting GUI to paste a copy of an item to another item. +object PasteCraftingItem (object oPC, object oTarget, object oItem) +{ + int nModelPartNum; + object oChestItem; + int nSelected = GetLocalInt(oPC, CRAFT_ITEM_SELECTION); + object oBuildContainer = GetObjectByTag(CRAFT_CONTAINER); + // Move the item to the building container. + oChestItem = CopyItem(oItem, oBuildContainer, TRUE); + DestroyObject(oItem); + json jItem = ObjectToJson(oChestItem, TRUE); + if (ai_GetIsWeapon(oChestItem)) + { + // Copy each model & save to variables. + int nIndex = 1; + string sIndex; + while(nIndex <= 3) + { + sIndex = IntToString(nIndex); + jItem = GffReplaceByte(jItem,"ModelPart" + sIndex, GetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex)); + jItem = GffReplaceWord(jItem,"xModelPart" + sIndex, GetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex)); + DeleteLocalInt(oPC, CRAFT_COPY_MODEL + sIndex); + nIndex++; + } + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_RIGHTHAND)); + } + // Armor. + else if (nSelected == 0) + { + // Paste per part colors if they exist. + int nPart, nColor, nPartColor; + string sPart, sColor; + while(nPart <= 18) + { + sPart = IntToString(nPart); + nColor = 0; + while(nColor <= 5) + { + sColor = IntToString(nColor); + nPartColor = GetLocalInt(oPC, CRAFT_COPY_PART_COLOR + sPart + sColor); + if(nPartColor > 0) + { + // Shift the number down by 1 since we can not use 0 in the variable! + nPartColor = nPartColor - 1; + if(GffGetFieldExists(jItem, "APart_" + sPart + "_Col_" + sColor, GFF_FIELD_TYPE_BYTE)) + { + jItem = GffReplaceByte(jItem, "APart_" + sPart + "_Col_" + sColor, nPartColor); + } + else jItem = GffAddByte(jItem, "APart_" + sPart + "_Col_" + sColor, nPartColor); + DeleteLocalInt(oPC, "CRAFT_COPY_PART_COLOR" + sPart + sColor); + } + nColor++; + } + nPart++; + } + jItem = GffReplaceByte(jItem,"ArmorPart_Belt", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceByte(jItem,"ArmorPart_LBicep", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + jItem = GffReplaceByte(jItem,"ArmorPart_LFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL2")); + jItem = GffReplaceByte(jItem,"ArmorPart_LFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL3")); + jItem = GffReplaceByte(jItem,"ArmorPart_LHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL4")); + jItem = GffReplaceByte(jItem,"ArmorPart_LShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL5")); + jItem = GffReplaceByte(jItem,"ArmorPart_LShoul", GetLocalInt(oPC, "CRAFT_COPY_MODEL6")); + jItem = GffReplaceByte(jItem,"ArmorPart_LThigh", GetLocalInt(oPC, "CRAFT_COPY_MODEL7")); + jItem = GffReplaceByte(jItem,"ArmorPart_Neck", GetLocalInt(oPC, "CRAFT_COPY_MODEL8")); + jItem = GffReplaceByte(jItem,"ArmorPart_Pelvis", GetLocalInt(oPC, "CRAFT_COPY_MODEL9")); + jItem = GffReplaceByte(jItem,"ArmorPart_RBicep", GetLocalInt(oPC, "CRAFT_COPY_MODEL10")); + jItem = GffReplaceByte(jItem,"ArmorPart_RFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL11")); + jItem = GffReplaceByte(jItem,"ArmorPart_RFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL12")); + jItem = GffReplaceByte(jItem,"ArmorPart_RHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL13")); + jItem = GffReplaceByte(jItem,"ArmorPart_RShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL14")); + jItem = GffReplaceByte(jItem,"ArmorPart_RShoul", GetLocalInt(oPC, "CRAFT_COPY_MODEL15")); + jItem = GffReplaceByte(jItem,"ArmorPart_RThigh", GetLocalInt(oPC, "CRAFT_COPY_MODEL16")); + jItem = GffReplaceByte(jItem,"ArmorPart_Robe", GetLocalInt(oPC, "CRAFT_COPY_MODEL17")); + jItem = GffReplaceByte(jItem,"ArmorPart_Torso", GetLocalInt(oPC, "CRAFT_COPY_MODEL18")); + jItem = GffReplaceWord(jItem,"xArmorPart_Belt", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceWord(jItem,"xArmorPart_LBice", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + jItem = GffReplaceWord(jItem,"xArmorPart_LFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL2")); + jItem = GffReplaceWord(jItem,"xArmorPart_LFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL3")); + jItem = GffReplaceWord(jItem,"xArmorPart_LHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL4")); + jItem = GffReplaceWord(jItem,"xArmorPart_LShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL5")); + jItem = GffReplaceWord(jItem,"xArmorPart_LShou", GetLocalInt(oPC, "CRAFT_COPY_MODEL6")); + jItem = GffReplaceWord(jItem,"xArmorPart_LThig", GetLocalInt(oPC, "CRAFT_COPY_MODEL7")); + jItem = GffReplaceWord(jItem,"xArmorPart_Neck", GetLocalInt(oPC, "CRAFT_COPY_MODEL8")); + jItem = GffReplaceWord(jItem,"xArmorPart_Pelvi", GetLocalInt(oPC, "CRAFT_COPY_MODEL9")); + jItem = GffReplaceWord(jItem,"xArmorPart_RBice", GetLocalInt(oPC, "CRAFT_COPY_MODEL10")); + jItem = GffReplaceWord(jItem,"xArmorPart_RFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL11")); + jItem = GffReplaceWord(jItem,"xArmorPart_RFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL12")); + jItem = GffReplaceWord(jItem,"xArmorPart_RHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL13")); + jItem = GffReplaceWord(jItem,"xArmorPart_RShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL14")); + jItem = GffReplaceWord(jItem,"xArmorPart_RShou", GetLocalInt(oPC, "CRAFT_COPY_MODEL15")); + jItem = GffReplaceWord(jItem,"xArmorPart_RThig", GetLocalInt(oPC, "CRAFT_COPY_MODEL16")); + jItem = GffReplaceWord(jItem,"xArmorPart_Robe", GetLocalInt(oPC, "CRAFT_COPY_MODEL17")); + jItem = GffReplaceWord(jItem,"xArmorPart_Torso", GetLocalInt(oPC, "CRAFT_COPY_MODEL18")); + jItem = GffReplaceByte(jItem,"Cloth1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR0")); + jItem = GffReplaceByte(jItem,"Cloth2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR1")); + jItem = GffReplaceByte(jItem,"Leather1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR2")); + jItem = GffReplaceByte(jItem,"Leather2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR3")); + jItem = GffReplaceByte(jItem,"Metal1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR4")); + jItem = GffReplaceByte(jItem,"Metal2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR5")); + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + int nIndex; + for(nIndex = 0; nIndex <= 18; nIndex++) + { + DeleteLocalInt(oPC, CRAFT_COPY_MODEL + IntToString(nIndex)); + } + for(nIndex = 0; nIndex <= 5; nIndex++) + { + DeleteLocalInt(oPC, CRAFT_COPY_COLOR + IntToString(nIndex)); + } + // Equip new item. + AssignCommand (oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_CHEST)); + } + else if(ai_GetIsShield(oChestItem)) + { + jItem = GffReplaceByte(jItem,"ModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + jItem = GffReplaceWord(jItem,"xModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL1")); + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + // Equip new item. + AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_LEFTHAND)); + } + else + { + //ai_Debug("pe_crafting", "389", JsonDump(ObjectToJson(oChestItem), 2)); + jItem = GffReplaceByte(jItem,"ModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceWord(jItem,"xModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL0")); + jItem = GffReplaceByte(jItem,"Cloth1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR0")); + jItem = GffReplaceByte(jItem,"Cloth2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR1")); + jItem = GffReplaceByte(jItem,"Leather1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR2")); + jItem = GffReplaceByte(jItem,"Leather2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR3")); + jItem = GffReplaceByte(jItem,"Metal1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR4")); + jItem = GffReplaceByte(jItem,"Metal2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR5")); + oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + DeleteLocalInt(oPC, "CRAFT_COPY_MODEL0"); + int nIndex; + for(nIndex = 0; nIndex <= 5; nIndex++) + { + DeleteLocalInt(oPC, CRAFT_COPY_COLOR + IntToString(nIndex)); + } + // Equip new item. + int nItemType = GetBaseItemType(oChestItem); + if(nItemType == BASE_ITEM_CLOAK) AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_CLOAK)); + else if(nItemType == BASE_ITEM_HELMET) AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_HEAD)); + } + // Send message that it has been copied. + AssignCommand(oPC, ai_SendMessages (GetName (oItem) + " appearance has been changed!", AI_COLOR_GREEN, oPC)); + DestroyObject(oChestItem); + return oItem; +} */ +int GetItemSelectedEquipSlot (int nItemSelected) +{ + if (nItemSelected == 0) return INVENTORY_SLOT_CHEST; + if (nItemSelected == 1) return INVENTORY_SLOT_CLOAK; + if (nItemSelected == 2) return INVENTORY_SLOT_HEAD; + if (nItemSelected == 3) return INVENTORY_SLOT_RIGHTHAND; + if (nItemSelected == 4) return INVENTORY_SLOT_LEFTHAND; + return INVENTORY_SLOT_CHEST; +} +int GetArmorModelSelected (object oPC) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nModelSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + if(nModelSelected == 0) return ITEM_APPR_ARMOR_MODEL_NECK; + if(nModelSelected == 1) return ITEM_APPR_ARMOR_MODEL_RSHOULDER; + if(nModelSelected == 2) return ITEM_APPR_ARMOR_MODEL_RBICEP; + if(nModelSelected == 3) return ITEM_APPR_ARMOR_MODEL_RFOREARM; + if(nModelSelected == 4) return ITEM_APPR_ARMOR_MODEL_RHAND; + if(nModelSelected == 5) return ITEM_APPR_ARMOR_MODEL_TORSO; + if(nModelSelected == 6) return ITEM_APPR_ARMOR_MODEL_BELT; + if(nModelSelected == 7) return ITEM_APPR_ARMOR_MODEL_PELVIS; + if(nModelSelected == 8) return ITEM_APPR_ARMOR_MODEL_RTHIGH; + if(nModelSelected == 9) return ITEM_APPR_ARMOR_MODEL_RSHIN; + if(nModelSelected == 10) return ITEM_APPR_ARMOR_MODEL_RFOOT; + return ITEM_APPR_ARMOR_MODEL_ROBE; +} +int GetMaxSimpleItemNumber(object oItem, int nBaseItemType) +{ + int nResType, nMaxNumber, nModelNumber; + string sModelNumber, sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_"; + //ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + while(nModelNumber < 999) + { + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + if(nBaseItemType == BASE_ITEM_CLOAK) nResType = RESTYPE_PLT; + else nResType = RESTYPE_MDL; + if(ResManGetAliasFor(sModelName + sModelNumber, nResType) != "") nMaxNumber++; + nModelNumber++; + //ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + } + return nMaxNumber; +} +int GetSimpleItemNumber(object oItem, int nModelNumber, int nBaseItemType) +{ + int nResType, nIndex, nCounter; + string sModelNumber, sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_"; + //ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + while(nIndex <= 999) + { + if(nIndex < 10) sModelNumber = "00" + IntToString(nIndex); + else if(nIndex < 100) sModelNumber = "0" + IntToString(nIndex); + else sModelNumber = IntToString(nIndex); + if(nBaseItemType == BASE_ITEM_CLOAK) nResType = RESTYPE_PLT; + else nResType = RESTYPE_MDL; + if(ResManGetAliasFor(sModelName + sModelNumber, nResType) != "") nCounter++; + if(nCounter == nModelNumber) return nIndex; + nIndex++; + //ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + } + return nIndex; +} +int GetMaxWeaponModuleNumber(struct stWeaponAppearance stWA) +{ + int nBaseItemType = GetBaseItemType(stWA.oItem); + stWA.nColor = 1; + stWA.nModel = 99; + stWA.sPart = "t"; + string sModelNumber; + string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_" + stWA.sPart + "_"; + int nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 780, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "") + { + stWA.nModel += -1; + // Create the model name. + nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 789, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + } + return stWA.nModel; +} +struct stWeaponAppearance GetNextWeaponAppearance(struct stWeaponAppearance stWA, int nDirection) +{ + int nBaseItemType = GetBaseItemType(stWA.oItem); + string sModelNumber; + string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_" + stWA.sPart + "_"; + // Get next/previous color/model. + stWA.nColor += nDirection; + if(stWA.nColor > 9) + { + stWA.nColor = 1; + stWA.nModel += nDirection; + if(stWA.nModel > CRAFT_MAX_WEAPON_MODEL_NUMBER) stWA.nModel = 1; + } + else if(stWA.nColor < 1) + { + stWA.nColor = 9; + stWA.nModel += nDirection; + if(stWA.nModel < 1) stWA.nModel = CRAFT_MAX_WEAPON_MODEL_NUMBER; + } + int nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 778, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "") + { + // Get next/previous color/model. + stWA.nColor += nDirection; + if(stWA.nColor > 9) + { + stWA.nColor = 1; + stWA.nModel += nDirection; + if(stWA.nModel > CRAFT_MAX_WEAPON_MODEL_NUMBER) stWA.nModel = 1; + } + else if(stWA.nColor < 1) + { + stWA.nColor = 9; + stWA.nModel += nDirection; + if(stWA.nModel < 1) stWA.nModel = CRAFT_MAX_WEAPON_MODEL_NUMBER; + } + // Create the model name. + nModelNumber = (stWA.nModel * 10) + stWA.nColor; + if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(GetFirstPC(), "pe_crafting, 800, sModel: " + sModelName + sModelNumber + + // " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor)); + } + return stWA; +} +object ChangeItemsAppearance(object oPC, object oTarget, int nToken, object oItem, int nDirection, string sPart) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + // Get the item we are changing. + int nModelSelected; + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + string sModelName, sModelNumber; + object oNewItem; + // Weapons. + if(ai_GetIsWeapon(oItem)) + { + // Freeze animations - vfx 352? + if(sPart == "t") nModelSelected = 2; + else if(sPart == "m") nModelSelected = 1; + else if(sPart == "b") nModelSelected = 0; + sModelName = Get2DAString("baseitems", "ItemClass", GetBaseItemType(oItem)) + "_" + sPart + "_"; + struct stWeaponAppearance stWA; + stWA.oItem = oItem; + stWA.sPart = sPart; + stWA.nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, nModelSelected); + stWA.nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, nModelSelected); + stWA = GetNextWeaponAppearance(stWA, nDirection); + json jItem = ObjectToJson(oItem, TRUE); + int nModelNumber = stWA.nModel * 10 + stWA.nColor; + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(nModelSelected + 1), nModelNumber); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(nModelSelected + 1), nModelNumber); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ClearAllActions(TRUE)); + DestroyObject(oItem); + // Item selected 3 is the right hand, 4 is the left hand. + //SendMessageToPC(oPC, "nItemSelected: " + IntToString(nItemSelected)); + if(nItemSelected == 3) + { + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_RIGHTHAND)); + } + else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_LEFTHAND)); + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + // Armor. + else if(nItemSelected == 0) + { + // Create the model name. + // Get the ModelType. + int nAppearance = GetAppearanceType(oTarget); + string sModelName = Get2DAString("appearance", "MODELTYPE", nAppearance); + // Get gender. + if(GetGender(oTarget) == GENDER_MALE) sModelName += "m"; + else sModelName += "f"; + // Get race. + sModelName += Get2DAString("appearance", "RACE", nAppearance); + // Get Phenotype. + sModelName += IntToString(GetPhenoType(oTarget)) + "_"; + // Get the selected model. + nModelSelected = GetArmorModelSelected(oPC); + //ai_Debug("pe_crafting", "646", "nModelSide: " + IntToString(nModelSide)); + // If we are doing the left side (bottom menu options) then add one to + // get the left side. + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if(sPart == "b") + { + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + } + int nModelNumber = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_model_number_" + sPart))); + //int nModelNumber = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected); + //SendMessageToPC(oPC, "pe_crafting, 826, nModelNumber: " + IntToString(nModelNumber) + + // " sPart: " + sPart + " nModelSelected: " + IntToString(nModelSelected)); + int nBaseModelNumber = nModelNumber; + nModelNumber += nDirection; + if(nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if(nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + string sModelNumber; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + // Check for changes to the torso (base part of the armor linked to AC). + if(nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO) + { + string sCurrentACBonus = Get2DAString("parts_chest", "ACBONUS", nBaseModelNumber); + string sACBonus = Get2DAString ("parts_chest", "ACBONUS", nModelNumber); + sModelName += Get2DAString ("capart", "MDLNAME", nModelSelected); + //SendMessageToPC(oPC, "pe_crafting, 842, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " sCurrentACBonus: " + sCurrentACBonus + + // " sACBonus: " + sACBonus + " nModelSelected: " + IntToString(nModelSelected)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "" || + sACBonus != sCurrentACBonus) + { + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + sACBonus = Get2DAString ("parts_chest", "ACBONUS", nModelNumber); + //SendMessageToPC(oPC, "pe_crafting, 854, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " sACBonus: " + sACBonus + + // " nModelSelected: " + IntToString(nModelSelected)); + } + // Change the model. + //WriteTimestampedLogEntry("pe_crafting, 1241, " + GetName(oItem) + " nModelSelected: " + + // IntToString(nModelSelected) + " nModelNumber: " + IntToString(nModelNumber)); + oNewItem = CopyItemAndModify (oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE); + DestroyObject (oItem); + AssignCommand (oTarget, ActionEquipItem (oNewItem, INVENTORY_SLOT_CHEST)); + } + // Change all other parts of armor. + else + { + sModelName += Get2DAString("capart", "MDLNAME", nModelSelected); + //SendMessageToPC(oPC, "pe_crafting, 866, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " nModelSelected: " + IntToString(nModelSelected)); + while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "") + { + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //SendMessageToPC(oPC, "pe_crafting, 705, sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber) + " nModelSelected: " + IntToString(nModelSelected)); + } + oNewItem = CopyItemAndModify (oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE); + DestroyObject (oItem); + // If using the linked menu option then change the left side too. + if(sPart == "m" && (nModelSelected != ITEM_APPR_ARMOR_MODEL_NECK && + nModelSelected != ITEM_APPR_ARMOR_MODEL_BELT && + nModelSelected != ITEM_APPR_ARMOR_MODEL_PELVIS && + nModelSelected != ITEM_APPR_ARMOR_MODEL_ROBE)) + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + //WriteTimestampedLogEntry("pe_crafting, 1275, " + GetName(oItem) + " nModelSelected: " + + // IntToString(nModelSelected) + " nModelNumber: " + IntToString(nModelNumber)); + oItem = CopyItemAndModify(oNewItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE); + DestroyObject(oNewItem); + AssignCommand(oTarget, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST)); + } + else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + } + string sModelSelected; + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + else + { + if(sPart == "m") + { + // Using labels for Mobile. + //NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(IntToString(nModelNumber))); + //NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(IntToString(nModelNumber))); + //NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(IntToString(nModelNumber))); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(IntToString(nModelNumber))); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(IntToString(nModelNumber))); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(IntToString(nModelNumber))); + } + else + { + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + } + } + // All other items. + else + { + int nSlot, nResType, nBaseItemType = GetBaseItemType(oItem); + string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_"; + if(nBaseItemType == BASE_ITEM_CLOAK) + { + nSlot = INVENTORY_SLOT_CLOAK; + nResType = RESTYPE_PLT; + } + else if(nBaseItemType == BASE_ITEM_HELMET) + { + nSlot = INVENTORY_SLOT_HEAD; + nResType = RESTYPE_MDL; + } + else if(nBaseItemType == BASE_ITEM_LARGESHIELD || + nBaseItemType == BASE_ITEM_SMALLSHIELD || + nBaseItemType == BASE_ITEM_TOWERSHIELD) + { + nSlot = INVENTORY_SLOT_LEFTHAND; + nResType = RESTYPE_MDL; + } + int nModelNumber = GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0); + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + while(ResManGetAliasFor(sModelName + sModelNumber, nResType) == "") + { + nModelNumber += nDirection; + if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0; + else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER; + if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber); + else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber); + else sModelNumber = IntToString(nModelNumber); + //ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber + + // " nModelNumber: " + IntToString(nModelNumber)); + } + oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nModelNumber, TRUE); + DestroyObject(oItem); + AssignCommand(oTarget, ActionEquipItem (oNewItem, nSlot)); + NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber))); + } + return oNewItem; +} +object RandomizeItemsCraftAppearance(object oPC, object oTarget, int nToken, object oItem) +{ + // Get the item we are changing. + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + int nBaseItemType = GetBaseItemType(oItem); + object oNewItem; + if(ai_GetIsWeapon(oItem)) + { + int nRollTop, nRollMid, nRollBottom; + int nColorTop, nColorMid, nColorBottom; + struct stWeaponAppearance stWA; + stWA.oItem = oItem; + int nMaxModuleNumber = GetMaxWeaponModuleNumber(stWA); + nRollTop = Random(nMaxModuleNumber) + 1; + // Check bows as they must randomize to the same top, middle, and bottom otherwise they look bad. + if(nBaseItemType == BASE_ITEM_LONGBOW || nBaseItemType == BASE_ITEM_SHORTBOW) + { + nRollMid = nRollTop; + nRollBottom = nRollTop; + } + // Randomize each item individualy for other weapons. + else + { + nRollMid = Random(nMaxModuleNumber) + 1; + nRollBottom = Random(nMaxModuleNumber) + 1; + } + nColorTop = Random(9) + 1; + nColorMid = Random(9) + 1; + nColorBottom = Random(9) + 1; + // Change weapons model. + stWA.sPart = "t"; + stWA.nModel = nRollTop; + stWA.nColor = nColorTop; + stWA = GetNextWeaponAppearance(stWA, -1); + json jItem = ObjectToJson(oItem, TRUE); + //ai_Debug("pe_crafting", "614", "ModelPart" + IntToString(nModelSelected + 1) + + // " nModelNumber: " + IntToString(nModelNumber)); + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(3), stWA.nModel * 10 + stWA.nColor); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(3), stWA.nModel * 10 + stWA.nColor); + NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor))); + stWA.sPart = "m"; + stWA.nModel = nRollMid; + stWA.nColor = nColorMid; + stWA = GetNextWeaponAppearance(stWA, -1); + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(2), stWA.nModel * 10 + stWA.nColor); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(2), stWA.nModel * 10 + stWA.nColor); + NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor))); + stWA.sPart = "b"; + stWA.nModel = nRollBottom; + stWA.nColor = nColorBottom; + stWA = GetNextWeaponAppearance(stWA, -1); + jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(1), stWA.nModel * 10 + stWA.nColor); + jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(1), stWA.nModel * 10 + stWA.nColor); + NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor))); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ClearAllActions(TRUE)); + DestroyObject(oItem); + // Item selected 3 is the right hand, 4 is the left hand. + if (nItemSelected == 3) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_RIGHTHAND)); + else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_LEFTHAND)); + } + // Armor. + else if(nItemSelected == 0) + { + int nRoll, nRoll2; + json jItem = ObjectToJson(oItem, TRUE); + // Randomize the models. + // Randomize Torso + //jItem = GffReplaceByte(jItem, "ArmorPart_Torso", ); + //jItem = GffReplaceWord(jItem, "xArmorPart_Torso", ); + // Randomize the colors. + nRoll = Random(175) + 1; + if(d100() < 50) nRoll2 = nRoll + Random(5) - 3; + else nRoll2 = Random(175) + 1; + jItem = GffReplaceByte(jItem, "Cloth1Color", nRoll); + jItem = GffReplaceByte(jItem, "Cloth2Color", nRoll2); + if(d100() < 50) nRoll = nRoll + Random(5) - 3; + else nRoll = Random(175) + 1; + if(d100() < 50) nRoll2 = nRoll + Random(5) - 3; + else nRoll2 = Random(175) + 1; + jItem = GffReplaceByte(jItem, "Leather1Color", nRoll); + jItem = GffReplaceByte(jItem, "Leather2Color", nRoll2); + if(d100() < 50) nRoll = nRoll + Random(5) - 3; + else nRoll = Random(175) + 1; + if(d100() < 50) nRoll2 = nRoll + Random(5) - 3; + else nRoll2 = Random(175) + 1; + jItem = GffReplaceByte(jItem, "Metal1Color", nRoll); + jItem = GffReplaceByte(jItem, "Metal2Color", nRoll2); + DestroyObject(oItem); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST)); + } + // All other items. + else + { + int nSlot; + // Get max models and inventory slot. + int nMaxModel = GetMaxSimpleItemNumber(oItem, nBaseItemType); + if(nBaseItemType == BASE_ITEM_CLOAK) nSlot = INVENTORY_SLOT_CLOAK; + else if(nBaseItemType == BASE_ITEM_HELMET) nSlot = INVENTORY_SLOT_HEAD; + else if(nBaseItemType == BASE_ITEM_LARGESHIELD || nBaseItemType == BASE_ITEM_SMALLSHIELD || + nBaseItemType == BASE_ITEM_TOWERSHIELD) nSlot = INVENTORY_SLOT_LEFTHAND; + int nRoll = Random(nMaxModel) + 1; + int nModel = GetSimpleItemNumber(oItem, nRoll, nBaseItemType); + json jItem = ObjectToJson(oItem, TRUE); + jItem = GffReplaceByte(jItem, "ModelPart1", nModel); + jItem = GffReplaceWord(jItem, "xModelPart1", nModel); + if (nBaseItemType == BASE_ITEM_CLOAK || nBaseItemType == BASE_ITEM_HELMET) + { + jItem = GffReplaceByte(jItem, "Cloth1Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Cloth2Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Leather1Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Leather2Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Metal1Color", Random(175) + 1); + jItem = GffReplaceByte(jItem, "Metal2Color", Random(175) + 1); + } + DestroyObject(oItem); + oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE); + AssignCommand(oTarget, ActionEquipItem(oNewItem, nSlot)); + } + return oNewItem; +} +object GetSelectedItem(object oTarget, int nItemSelected) +{ + if(nItemSelected == 0) return GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget); + else if(nItemSelected == 1) return GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget); + else if(nItemSelected == 2) return GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget); + else if(nItemSelected == 3) return GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget); + else if(nItemSelected == 4) return GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget); + return OBJECT_INVALID; +} +void CancelCraftedItem(object oPC, object oTarget) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetLocalObject(oPC, CRAFT_ITEM); + object oOriginalItem = GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + if(oOriginalItem != OBJECT_INVALID) + { + int nSlot = GetItemSelectedEquipSlot(nItemSelected); + // Give item Backup to Player + oOriginalItem = CopyItem(oOriginalItem, oTarget, TRUE); + DelayCommand(0.2f, AssignCommand (oTarget, ActionEquipItem(oOriginalItem, nSlot))); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); + } + DestroyObject(oItem); + DeleteLocalObject(oPC, CRAFT_ITEM); +} +// Gets the colorId from a image of the color pallet. +// Thanks Zunath for the base code. +int GetColorPalletId(object oPC, int nToken) +{ + float fScale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0f; + json jPayload = NuiGetEventPayload(); + json jMousePosition = JsonObjectGet(jPayload, "mouse_pos"); + json jX = JsonObjectGet(jMousePosition, "x"); + json jY = JsonObjectGet(jMousePosition, "y"); + float fX = StringToFloat(JsonDump (jX)); + float fY = StringToFloat(JsonDump (jY)); + float fCellSize = 20.0f * fScale; + int nCellX = FloatToInt(fX / fCellSize); + int nCellY = FloatToInt(fY / fCellSize); + if(nCellX < 0) nCellX = 0; + else if (nCellX > 16) nCellX = 16; + if(nCellY < 0) nCellY = 0; + else if(nCellY > 11) nCellY = 11; + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(IntToFloat(nCellX * 20), IntToFloat(nCellY * 20), 20.0, 20.0)); + return nCellX + nCellY * 16; +} +void SetColorPalletPointer(object oPC, int nToken, object oItem) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nColor; + if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_all_color"))) + { + int nModelSelected = GetArmorModelSelected(oPC); + if(!JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR))) + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + } + int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex); + } + else nColor = 255; + if(nColor == 255) nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected); + float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20); + float fPointY = IntToFloat((nColor / 16) * 20); + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0)); +} +void LockItemInCraftingWindow(object oPC, object oItem, object oTarget, int nToken) +{ + NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Cancel")); + NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Revert back to the original items appearance")); + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(FALSE)); + // Make sure the item information window is closed. + nToken = NuiFindWindow(oPC, "craft_item_nui"); + if(nToken) NuiDestroy(oPC, nToken); + SetLocalObject(oPC, CRAFT_ITEM, oItem); +} +void ClearItemInCraftingWindow(object oPC, object oItem, int nToken) +{ + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Exit")); + NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Exit the crafting menu")); + if(ai_GetIsWeapon(oItem)) + { + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + NuiSetBind(oPC, nToken, "model_combo_selected", JsonInt(0)); + DelayCommand(1.0, DeleteLocalInt(oPC, AI_NO_NUI_SAVE)); + } +} +void SaveCraftedItem(object oPC, object oTarget, int nToken) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItemSelected); + ClearItemInCraftingWindow(oPC, oItem, nToken); + DestroyObject(GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM)); + DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM); +} +int CanCraftItem(object oPC, object oItem, int nToken, int bPasteCheck = FALSE) +{ + if(IfOnBannedBaseItemTypeList(oPC, oItem)) return FALSE; + // Plot items cannot be changed. + if(GetPlotFlag(oItem)) + { + ai_SendMessages(GetName(oItem) + "is a plot item and its appearance cannot be changed!", AI_COLOR_RED, oPC); + return FALSE; + } + // Cannot change temorary enchanted items. + if(CheckForTemporaryItemProperty(oItem)) + { + ai_SendMessages(GetName(oItem) + " cannot be altered while it has a temporary enchantment.", AI_COLOR_RED, oPC); + return FALSE; + } + // Do special paste checks. + if (bPasteCheck) + { + int nOldItemType = GetLocalInt (oPC, CRAFT_COPY_ITEM_TYPE); + int nNewItemType = GetBaseItemType(oItem); + if(nNewItemType == BASE_ITEM_ARMOR) + { + if(GetLocalInt (oPC, CRAFT_ARMOR_AC) != ai_GetArmorBonus(oItem)) + { + ai_SendMessages("The armor you are trying to paste to is not the same type as the copy!", AI_COLOR_RED, oPC); + return FALSE; + } + } + else if(nOldItemType != nNewItemType) + { + string sOldBaseItem = GetStringByStrRef(StringToInt(Get2DAString ("baseitems", "Name", nOldItemType))); + string sNewBaseItem = GetStringByStrRef(StringToInt(Get2DAString ("baseitems", "Name", nNewItemType))); + ai_SendMessages("You copied a " + sOldBaseItem + " and are trying to paste to a " + sNewBaseItem + "!", AI_COLOR_RED, oPC); + return FALSE; + } + } + if(GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM) == OBJECT_INVALID) + { + object oBuildContainer = GetObjectByTag(CRAFT_CONTAINER); + if(!GetIsObjectValid(oBuildContainer)) + { + vector vPosition = GetPositionFromLocation(GetLocation(oPC)); + vPosition.z = vPosition.z -2.0; + location lLocation = Location(GetArea(oPC), vPosition, 0.0); + oBuildContainer = CreateObject(OBJECT_TYPE_PLACEABLE, CRAFT_TEMPLATE, lLocation, FALSE, CRAFT_CONTAINER); + //SetObjectVisualTransform(oBuildContainer, OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z, -5.0); + } + object oBackup = CopyItem(oItem, oBuildContainer, TRUE); + // Save the original item to the PC. + SetLocalObject(oPC, CRAFT_ORIGINAL_ITEM, oBackup); + } + return TRUE; +} +void RemoveTagedEffects(object oCreature, string sEffectTag) +{ + //Search for the effect. + //Debug ("0i_effects", "578", "RemoveTagedEffects: " + sEffectTag); + effect eEffect = GetFirstEffect(oCreature); + while (GetIsEffectValid(eEffect)) + { + //Debug ("0i_effects", "582", "Effect Tag: " + GetEffectTag (eEffect)); + if (GetEffectTag(eEffect) == sEffectTag) RemoveEffect(oCreature, eEffect); + eEffect = GetNextEffect(oCreature); + } +} +int CheckForTemporaryItemProperty (object oItem) +{ + itemproperty ipProperty; + ipProperty = GetFirstItemProperty (oItem); + while (GetIsItemPropertyValid (ipProperty)) + { + // Check to see if the item is temporary enchanted. + if (GetItemPropertyDurationType (ipProperty) == DURATION_TYPE_TEMPORARY) return TRUE; + ipProperty = GetNextItemProperty (oItem); + } + return FALSE; +} +int GetHasPartColor(object oItem, int nPart, string sSide) +{ + json jItem = ObjectToJson(oItem); + string sPartName = "APart_"; + if(sSide == "Left") + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH) nPart--; + else nPart++; + } + sPartName += IntToString(nPart) + "_Col_"; + int nPartColor = JsonGetInt(GffGetByte(jItem, sPartName + "0")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "1")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "2")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "3")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "4")); + nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "5")); + //SendMessageToPC(GetFirstPC(), "sPartName: " + sPartName + " nPartColor: " + IntToString(nPartColor)); + return nPartColor; +} +void SetModelNumberText(object oPC, object oTarget, int nToken) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItem); + int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + string sModelTop, sModelMiddle, sModelBottom; + // Model Group + if (ai_GetIsWeapon (oItem)) + { + int nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 0); + int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 0); + int nModelNumber = (nModel * 10) + nColor; + sModelTop = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 1); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 1); + nModelNumber = (nModel * 10) + nColor; + sModelMiddle = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 2); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 2); + nModelNumber = (nModel * 10) + nColor; + sModelBottom = IntToString(nModelNumber); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Top")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_enable", JsonBool(TRUE)); + //NuiSetBindWatch(oPC, nToken, "txt_model_number_t", TRUE); + NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Middle")); + //NuiSetBind(oPC, nToken, "txt_model_number_m_enable", JsonBool(TRUE)); + //NuiSetBindWatch(oPC, nToken, "txt_model_number_m", TRUE); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Bottom")); + //NuiSetBind(oPC, nToken, "txt_model_number_b_enable", JsonBool(TRUE)); + //NuiSetBindWatch(oPC, nToken, "txt_model_number_b", TRUE); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + } + // Armor and clothing + if(nItem == 0) + { + nSelected = GetArmorModelSelected(oPC); + // These models only have one side so make sure we are not linked. + if (nSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + } + else + { + sModelTop = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + if(nSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nSelected--; + else nSelected++; + sModelBottom = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Right")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Right & Left")); + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Left")); + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + } + } + // Cloaks and Helmets. + else + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0)); + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + } + // Color Group + if(ai_GetIsWeapon(oItem) || ai_GetIsShield(oItem)) + { + // Need to disable the color widgets. + // Row 511 + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString("gui_pal_tattoo")); + NuiSetBind(oPC, nToken, "color_pallet_image_event", JsonBool(FALSE)); + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 515 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 + NuiSetBind(oPC, nToken, "btn_material_0", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_2", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_4", JsonBool(FALSE)); + // Row 518 + NuiSetBind(oPC, nToken, "btn_material_1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_3", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_5", JsonBool(FALSE)); + SetMaterialButtons(oPC, nToken, -1); + } + // Armor and clothing + else if(nItem == 0) + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + NuiSetBindWatch(oPC, nToken, "txt_color_l", TRUE); + int nSelectedRight, nSelectedAll, nSelectedLeft; + int nModelSelected = GetArmorModelSelected(oPC); + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + string sColorAll = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected)); + // These models only have one side so make sure we are not linked. + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + // Row 512 - Label Part to Color + // Row 5l3 + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + nSelectedAll = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR)); + if(!nSelectedRight && !nSelectedAll) + { + nSelectedAll = TRUE; + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(TRUE)); + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonBool(FALSE)); + } + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedAll = nSelectedRight; + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + } + else + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + // Row 512 - Label Part to Color + // Row 5l3 + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + nSelectedAll = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR)); + nSelectedLeft = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR)); + if(!nSelectedRight && !nSelectedAll && !nSelectedLeft) + { + nSelectedAll = TRUE; + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(TRUE)); + } + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(nSelectedLeft)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(TRUE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedLeft = GetHasPartColor(oItem, nModelSelected, "Left"); + nSelectedAll = nSelectedRight || nSelectedLeft; + //SendMessageToPC(oPC, "nSelectedRight: " + IntToString(nSelectedRight) + + // " nSelectedLeft: " + IntToString(nSelectedLeft)); + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(nSelectedLeft)); + // Row 516 - Label Material to Color + // Row 517 & 518 + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + } + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + // Cloaks and Helmets. + else + { + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + //NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 & 518 + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + } +} +void SetMaterialButtons(object oPC, int nToken, int nMaterial) +{ + int nIndex, bBool, bUseable; + string sIndex; + if(nMaterial > -1) bUseable = TRUE; + for(nIndex = 0;nIndex < 6;nIndex++) + { + if(nIndex == nMaterial) bBool = TRUE; + else bBool = FALSE; + sIndex = IntToString(nIndex); + NuiSetBind(oPC, nToken, "btn_material_" + sIndex + "_event", JsonBool(bUseable)); + NuiSetBind(oPC, nToken, "btn_material_" + sIndex, JsonBool(bBool)); + } +} +void CreateItemGUIPanel(object oPC, object oItem) +{ + // Row 1 (Name)************************************************************* 73 + json jRow = CreateLabel(JsonArray(), "Name:", "lbl_name_title", 50.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox (jRow, "name_placeholder", "txt_item_name", 60, FALSE, 325.0f, 20.0f); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + float fHeight = 113.0; + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC)) + { + // Row 2 (Tag)************************************************************** 101 + jRow = CreateLabel(JsonArray(), "Tag:", "lbl_tag_title", 50.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_item_tag", 60, FALSE, 325.0f, 20.0f); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 2 (ResRef)*********************************************************** 129 + jRow = CreateLabel(JsonArray(), "ResRef:", "lbl_resref_title", 50.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_item_resref", 60, FALSE, 325.0f, 20.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 56.0; + } + // Row 3 (Base Item/Weight)************************************************* 157 + jRow = CreateLabel(JsonArray(), "Base Item: ", "lbl_baseitem_title", 67.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_baseitem", 120.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "Weight: ", "lbl_weight_title", 48.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_weight", 30.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateButton(jRow, "Select Target", "btn_select_target", 100.0f, 20.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 28.0; + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC)) + { + // Row 4 (Gold Value)******************************************************* 185 + jRow = CreateLabel(JsonArray(), "Gold Value: ", "lbl_gold_title", 85.0f, 25.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_gold_value", 135.0f, 25.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "Minimum Level: ", "lbl_min_lvl_title", 110.0f, 25.0f, NUI_HALIGN_LEFT); + jRow = CreateLabel(jRow, "", "lbl_min_lvl", 20.0f, 25.0f, NUI_HALIGN_LEFT); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (Plot/Stolen)****************************************************** 213 + jRow = CreateCheckBox(JsonArray(), " Plot", "chbx_plot", 110.0, 25.0f, "chbx_plot_tooltip"); + jRow = CreateCheckBox(jRow, " Stolen", "chbx_stolen", 110.0, 25.0f, "chbx_stolen_tooltip"); + jRow = CreateCheckBox(jRow, " Cursed", "chbx_cursed", 110.0, 25.0f, "chbx_cursed_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 6 (Identified/Droppable)********************************************* 269 + jRow = CreateCheckBox(JsonArray(), " Identified", "chbx_identified", 110.0, 25.0f, "chbx_identified_tooltip"); + jRow = CreateCheckBox(jRow, " Droppable", "chbx_droppable", 110.0, 25.0f, "chbx_droppable_tooltip"); + jRow = CreateButton(jRow, "Save as UTI", "btn_save_uti", 110.0, 25.0, -1.0, "btn_save_uti_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 9 (Stack/Variables/Destroy/Charges)********************************** 307 + jRow = CreateTextEditBox(JsonArray(), "name_placeholder", "txt_stack", 4, FALSE, 35.0f, 25.0f); + jRow = CreateLabel(jRow, " Stack", "lbl_stack_title", 72.0f, 20.0f, NUI_HALIGN_LEFT); + jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_charges", 4, FALSE, 40.0f, 25.0f); + jRow = CreateLabel(jRow, " Charges", "lbl_charges_title", 68.0f, 25.0f, NUI_HALIGN_LEFT); + jRow = CreateButtonSelect(jRow, "Destroy", "btn_destroy", 110.0, 25.0, "btn_destroy_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 132.0; + } + // Row 11 (Description)***************************************************** 558 + jRow = CreateTextEditBox(JsonArray(), "desc_placeholder", "txt_desc", 1000, TRUE, 375.0, 243.0, "txt_desc_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 251.0; + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC) || ALLOW_CRAFT_NAMES) + { + // Row 12 (Description Save Button)***************************************** 558 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Save Description", "btn_save_desc", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } fHeight += 28.0; + // Row 13 (Item Base Description)* ***************************************** 158 + int nBaseItemType = GetBaseItemType(oItem); + float fWeight; + string sBaseItemDesc; + if(nBaseItemType == BASE_ITEM_ARMOR) + { + int nArmorAC = ai_GetArmorBonus(oItem); + sBaseItemDesc = GetStringByStrRef(StringToInt(Get2DAString("armor", "BASEITEMSTATREF", nArmorAC))); + fWeight = StringToFloat(Get2DAString("armor", "WEIGHT", nArmorAC)); + } + else + { + sBaseItemDesc = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "BaseItemStatRef", nBaseItemType))); + fWeight = StringToFloat(Get2DAString("baseitems", "TenthLBS", nBaseItemType)); + } + if(sBaseItemDesc == "Bad Strref") sBaseItemDesc = ""; + if(sBaseItemDesc != "") + { + jRow = CreateTextBox(JsonArray(), "txt_base_desc", 375.0, 150.0, FALSE, NUI_SCROLLBARS_NONE, "txt_base_desc_tooltip"); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + fHeight += 158.0; + } + // Set the layout of the window. + json jLayout = NuiCol (jCol); + object oOwner = GetItemPossessor(oItem); + string sName = ai_StripColorCodes (GetName(oOwner)); + int nToken = SetWindow (oPC, jLayout, "craft_item_nui", sName + "'s item menu", + -1.0, -1.0, 400.0, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_crafting"); + // Set the buttons to show events to 0e_window. + NuiSetBind(oPC, nToken, "txt_item_name", JsonString(GetName(oItem))); + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC) || ALLOW_CRAFT_NAMES) + { + NuiSetBind(oPC, nToken, "txt_item_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_item_name", TRUE); + } + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC)) + { + NuiSetBind(oPC, nToken, "txt_item_tag_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_item_tag", JsonString(GetTag(oItem))); + NuiSetBindWatch(oPC, nToken, "txt_item_tag", TRUE); + NuiSetBind(oPC, nToken, "txt_item_resref_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_item_resref", JsonString(GetResRef(oItem))); + NuiSetBindWatch(oPC, nToken, "txt_item_resref", TRUE); + } + string sValue = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", nBaseItemType))); + NuiSetBind(oPC, nToken, "lbl_baseitem_label", JsonString(sValue)); + sValue = FloatToString(fWeight * 0.1f, 0, 1); + NuiSetBind(oPC, nToken, "lbl_weight_label", JsonString(sValue)); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_select_target_tooltip", JsonString(" Select another Item")); + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC)) + { + int nValue = GetGoldPieceValue(oItem); + NuiSetBind (oPC, nToken, "lbl_gold_value_label", JsonString(IntToString(nValue))); + sValue = IntToString (ai_GetMinimumEquipLevel(oItem)); + NuiSetBind(oPC, nToken, "lbl_min_lvl_label", JsonString (sValue)); + nValue = GetPlotFlag (oItem); + NuiSetBind(oPC, nToken, "chbx_plot_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_plot_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_plot_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_plot_tooltip", JsonString (" Plot items cannot be sold or destroyed.")); + nValue = GetStolenFlag(oItem); + NuiSetBind(oPC, nToken, "chbx_stolen_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_stolen_check", JsonBool(nValue)); + NuiSetBindWatch (oPC, nToken, "chbx_stolen_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_stolen_tooltip", JsonString (" Stolen items cannot be sold to some stores.")); + nValue = GetItemCursedFlag(oItem); + NuiSetBind(oPC, nToken, "chbx_cursed_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_cursed_check", JsonBool(nValue)); + NuiSetBindWatch (oPC, nToken, "chbx_cursed_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_cursed_tooltip", JsonString (" Cursed items cannot be dropped or sold.")); + nValue = GetIdentified (oItem); + NuiSetBind(oPC, nToken, "chbx_identified_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_identified_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_identified_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_identified_tooltip", JsonString (" Close inventory and open again to refresh identified state.")); + nValue = GetDroppableFlag(oItem); + NuiSetBind(oPC, nToken, "chbx_droppable_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "chbx_droppable_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_droppable_check", TRUE); + NuiSetBind(oPC, nToken, "chbx_droppable_tooltip", JsonString (" Droppable items only work on death of an NPC.")); + NuiSetBind(oPC, nToken, "btn_save_uti_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_save_uti_tooltip", JsonString (" Saves item to a UTI file. Update will be used in the game.")); + nValue = GetItemStackSize (oItem); + NuiSetBind(oPC, nToken, "txt_stack_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "txt_stack", JsonString(IntToString (nValue))); + NuiSetBindWatch (oPC, nToken, "txt_stack", TRUE); + nValue = GetItemCharges (oItem); + NuiSetBind(oPC, nToken, "txt_charges_event", JsonBool(TRUE)); + NuiSetBind (oPC, nToken, "txt_charges", JsonString(IntToString (nValue))); + NuiSetBindWatch (oPC, nToken, "txt_charges", TRUE); + NuiSetBind(oPC, nToken, "btn_destroy_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_destroy_tooltip", JsonString(" Destroys the item permanently! Must click twice to destroy the item.")); + } + // Description + NuiSetBind(oPC, nToken, "txt_desc", JsonString(GetDescription(oItem))); + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC) || ALLOW_CRAFT_NAMES) + { + NuiSetBind(oPC, nToken, "txt_desc_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_desc", TRUE); + NuiSetBind(oPC, nToken, "txt_desc_tooltip", JsonString (" Color codes can be used!")); + NuiSetBind(oPC, nToken, "btn_save_desc_event", JsonBool(TRUE)); + } + // Base Item Description + NuiSetBind(oPC, nToken, "txt_base_desc_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "txt_desc_tooltip", JsonString ("Color codes can be used!")); + if(sBaseItemDesc != "") NuiSetBind(oPC, nToken, "txt_base_desc", JsonString(sBaseItemDesc)); +} +void CraftItemInfoEvents(object oPC, int nToken) +{ + string sEvent = NuiGetEventType(); + // We don't use and it causes error windows to go off! Return early! + if(sEvent == "mouseup") return; + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + //SendMessageToPC(oPC, "0e_crafting, 1961, sElem: " + sElem + " sEvent: " + sEvent); + object oTarget = GetLocalObject(oPC, CRAFT_TARGET); + if(oTarget == OBJECT_INVALID) oTarget = oPC; + // Get the item we are crafting. + int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetLocalObject(oPC, "CRAFT_INFO_ITEM"); + if(sEvent == "click") + { + if(sElem == "btn_select_target") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select your charcter, a henchman or an item possessed by one.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM , + MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + if(sElem == "btn_destroy") + { + if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_destroy"))) + { + if(!GetPlotFlag(oItem)) + { + DestroyObject(oItem); + ai_SendMessages(GetName(oItem) + " has been permanently destroyed!", AI_COLOR_RED, oPC); + NuiDestroy(oPC, nToken); + } + else + { + ai_SendMessages("The plot flag must be removed before you can destroy " + GetName(oItem) + "!", AI_COLOR_YELLOW, oPC); + } + } + else + { + ai_SendMessages("Click Destroy button again to destroy " + GetName(oItem) + "!", AI_COLOR_RED, oPC); + } + } + // Allows saving the item as a UTI! + else if(sElem == "btn_save_uti") + { + json jItem = ObjectToJson(oItem); + string sResRef = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_resref")); + sResRef = ai_RemoveIllegalCharacters(sResRef); + if(sResRef == "") ai_SendMessages(GetName(oItem) + " has not been saved! ResRef does not have a value.", AI_COLOR_RED, oPC); + else + { + JsonToTemplate(jItem, sResRef, RESTYPE_UTI); + ai_SendMessages(GetName(oItem) + " has been saved as " + sResRef + ".uti in your Neverwinter Nights Temp directory.", AI_COLOR_GREEN, oPC); + ai_SendMessages("This temp directory will be removed when the game is left.", AI_COLOR_GREEN, oPC); + } + } + if(sElem == "btn_save_desc") + { + string sDescription = JsonGetString(NuiGetBind(oPC, nToken, "txt_desc")); + SetDescription(oItem, sDescription); + } + } + if(sEvent == "watch") + { + // Changing the name needs to be before the cooldown. + if(sElem == "txt_item_name") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_name")); + SetName(oItem, sName); + int nToken2 = NuiFindWindow(oPC, "crafting_nui"); + if(nToken2) NuiSetBind(oPC, nToken2, "txt_item_name", JsonString(sName)); + } + else if(sElem == "txt_item_tag") + { + string sTag = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_tag")); + SetTag(oItem, sTag); + } + else if(sElem == "txt_stack") + { + int nSize = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_stack"))); + int nBaseItemType = GetBaseItemType(oItem); + string sMaxSize = Get2DAString("baseitems", "Stacking", nBaseItemType); + if(nSize > StringToInt(sMaxSize)) + { + ai_SendMessages("The maximum stack for this item type is " + sMaxSize + ".", AI_COLOR_RED, oPC); + NuiSetBind(oPC, nToken, "txt_stack", JsonString(sMaxSize)); + } + if(nSize != 0) SetItemStackSize(oItem, nSize); + } + else if(sElem == "txt_charges") + { + int nCharges = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_charges"))); + if(nCharges > 250) + { + ai_SendMessages("The maximum charges for this item type is 250.", AI_COLOR_RED, oPC); + NuiSetBind(oPC, nToken, "txt_charges", JsonString("250")); + } + if(nCharges != 0) SetItemCharges(oItem, nCharges); + } + else if(sElem == "chbx_plot_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetPlotFlag(oItem, nValue); + } + else if(sElem == "chbx_stolen_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetStolenFlag(oItem, nValue); + } + else if(sElem == "chbx_cursed_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetItemCursedFlag(oItem, nValue); + } + else if(sElem == "chbx_identified_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetIdentified(oItem, nValue); + } + else if(sElem == "chbx_droppable_check") + { + int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem)); + SetDroppableFlag(oItem, nValue); + } + } +} +/*void CreateDresserGUIPanel(object oPC, object oTarget) +{ +} */ +json CreateItemCombo(object oPC, json jRow, string sComboBind) +{ + int nCnt; + // Create the list. + json jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Armor", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Cloak", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Headgear", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Right hand", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Left hand", 4)); + return CreateCombo(jRow, jCombo, sComboBind, 128.0, 40.0); +} +json CreateModelCombo(object oPC, object oTarget, json jRow, string sComboBind) +{ + float fFacing = GetFacing(oTarget); + json jCombo, jCraft = GetLocalJson(oPC, CRAFT_JSON); + int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + // Create the list. + // Armor. + if(nSelected == 0) + { + fFacing += 180.0f; + if (fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 4.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Neck", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Shoulder", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Bicep", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Forearm", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Hand", 4)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Torso", 5)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Belt", 6)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Pelvis", 7)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Thigh", 8)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Shin", 9)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Foot", 10)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Robe", 11)); + } + // Cloak. + else if(nSelected == 1) + { + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand (oPC, SetCameraFacing(fFacing, 4.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Cloak", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Invisible", 1)); + } + // Headgear. + else if (nSelected == 2) + { + fFacing += 180.0f; + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 2.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Headgear", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Invisible", 1)); + } + // Weapon. + else if (nSelected == 3) + { + // If they are changing a bow then face the opposite side. + object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); + int nBaseItemType = GetBaseItemType(oItem); + if(nBaseItemType == BASE_ITEM_LONGBOW || nBaseItemType == BASE_ITEM_SHORTBOW) fFacing -= 90.00; + // This will make the camera face a melee weapon. + else fFacing += 90.0; + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 3.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Weapon", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Acidic", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Frost", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Electric", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Unholy", 4)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Flaming", 5)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Holy", 6)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Sonic", 7)); +} + // Weapon/Shield. + else if(nSelected == 4) + { + fFacing += 270.0f; + if(fFacing > 359.0) fFacing -=359.0; + AssignCommand(oPC, SetCameraFacing(fFacing, 3.5f, 75.0, CAMERA_TRANSITION_TYPE_VERY_FAST)); + object oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); + if(ai_GetIsShield(oItem)) + { + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Shield", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Invisible", 1)); + } + else + { + jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("Weapon", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Acidic", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Frost", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Electric", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Unholy", 4)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Flaming", 5)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Holy", 6)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("Sonic", 7)); + } + } + return CreateCombo(jRow, jCombo, sComboBind, 128.0, 40.0); +} +void CreateCreatureCraftingGUIPanel(object oPC, object oTarget) +{ + json jCraft = GetLocalJson(oPC, CRAFT_JSON); + if(JsonGetType(jCraft) == JSON_TYPE_NULL) jCraft = JsonObject(); + // Row 1 (Object Name)****************************************************** 508 / 83 + json jRow = CreateTextEditBox(JsonArray(), "plc_hold_bind", "txt_item_name", 50, FALSE, 486.0f, 30.0f); // 419 + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Object Name)****************************************************** 508 / 121 + jRow = JsonArray(); + jRow = CreateButton(jRow, "Information", "btn_info", 160.0f, 30.0f, -1.0, "btn_info_tooltip"); + jRow = CreateButton(jRow, "Wardrobe", "btn_wardrobe", 158.0f, 30.0f, -1.0, "btn_wardrobe_tooltip"); + jRow = CreateButtonSelect(jRow, "Add Light", "btn_highlight", 160.0f, 30.0f, "btn_highlight_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Object Name)****************************************************** 508 / 159 + jRow = CreateButton(JsonArray(), "Save", "btn_save", 160.0f, 30.0f, -1.0, "btn_save_tooltip"); + jRow = CreateButton(jRow, "Select Target", "btn_select_target", 158.0f, 30.0f, -1.0, "btn_select_target_tooltip"); + jRow = CreateButton(jRow, "", "btn_cancel", 160.0f, 30.0f, -1.0, "btn_cancel_tooltip"); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (labels)*********************************************************** 508 / 177 + jRow = CreateLabel(JsonArray(), "Model", "module_title", 143.0f, 10.0f); + jRow = CreateLabel(jRow, "Color", "color_title", 339.0f, 10.0f); + jRow = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 5 (groups) + // Row 51 (title)*********************************************************** 508 / 195 / 18 + json jGroupRow = CreateLabel(JsonArray(), "Item", "item__cmb_title", 128.0f, 10.0f); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + // Row 52 (combo)*********************************************************** 508 / 233 / 56 + jGroupRow = CreateItemCombo(oPC, JsonArray(), "item_combo"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 53 (title)*********************************************************** 508 / 251 / 74 + jGroupRow = CreateLabel(JsonArray(), "Model", "model_cmb_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 54 (combo)*********************************************************** 508 / 289 / 112 + jGroupRow = CreateModelCombo(oPC, oTarget, JsonArray(), "model_combo"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 55 (title)*********************************************************** 508 / 307 / 120 + jGroupRow = CreateLabel(JsonArray(), "", "top_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 56 (top)************************************************************* 508 / 355 / 168 + jGroupRow = CreateButtonImage(JsonArray(), "nui_shld_left", "btn_prev_t", 40.0f, 40.0f); + // Removed TextEditBox for mobile + jGroupRow = CreateTextEditBox(jGroupRow, "place_holder", "txt_model_number_t", 3, FALSE, 40.0, 40.0); + //CreateLabel(jGroupRow, "", "txt_model_number_t", 40.0, 40.0); + jGroupRow = CreateButtonImage(jGroupRow, "nui_shld_right", "btn_next_t", 40.0f, 40.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 57 (title)*********************************************************** 508 / 373 / 186 + jGroupRow = CreateLabel(JsonArray(), "", "middle_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 58 (middle)********************************************************** 508 / 421 /234 + jGroupRow = CreateButtonImage(JsonArray(), "nui_shld_left", "btn_prev_m", 40.0f, 40.0f); + // Removed TextEditBox for mobile + jGroupRow = CreateTextEditBox(jGroupRow, "place_holder", "txt_model_number_m", 3, FALSE, 40.0, 40.0); + //CreateLabel(jGroupRow, "", "txt_model_number_m", 40.0, 40.0); + jGroupRow = CreateButtonImage(jGroupRow, "nui_shld_right", "btn_next_m", 40.0f, 40.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 59 (title)*********************************************************** 508 / 439 / 252 + jGroupRow = CreateLabel(JsonArray(), "", "bottom_title",128.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 510 (bottom)********************************************************* 508 / 487 /300 + jGroupRow = CreateButtonImage(JsonArray(), "nui_shld_left", "btn_prev_b", 40.0f, 40.0f); + // Removed TextEditBox for mobile + jGroupRow = CreateTextEditBox(jGroupRow, "place_holder", "txt_model_number_b", 3, FALSE, 40.0, 40.0); + //CreateLabel(jGroupRow, "", "txt_model_number_b", 40.0, 40.0); + jGroupRow = CreateButtonImage(jGroupRow, "nui_shld_right", "btn_next_b", 40.0f, 40.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 511 (blank spacer) + jGroupRow = CreateLabel(JsonArray(), "", "blank_space",128.0f, 20.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 512 (light)********************************************************** 508 / 487 /300 + jGroupRow = CreateButtonSelect(JsonArray(), "Randomize", "btn_randomize", 128.0f, 30.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupCol = JsonArrayInsert(jGroupCol, NuiSpacer()); + jRow = JsonArrayInsert(JsonArray(), NuiHeight(NuiWidth(NuiGroup(NuiCol(jGroupCol)), 143.0), 442.0)); + // Make the Color Group. + // Row 550 (groups)********************************************************* 508 / 361 / 184 + json jImage = NuiEnabled(NuiId(NuiImage(NuiBind("color_pallet_image"), JsonInt(0), JsonInt(0), JsonInt(1)), "color_pallet"), NuiBind("color_pallet_event")); + jImage = NuiWidth(jImage, 320.0); // 256 + 64 + jImage = NuiHeight(jImage, 220.0); // 176 + 44 + jImage = NuiTooltip(jImage, NuiBind("color_pallet_tooltip")); + json jIndicator = JsonArrayInsert(JsonArray(), NuiDrawListRect(JsonBool(TRUE), NuiColor(255,0,0), JsonBool(FALSE), JsonFloat(2.0), NuiBind("color_pallet_pointer"))); + jImage = NuiDrawList(jImage, JsonBool(FALSE), jIndicator); + jGroupRow = JsonArrayInsert(JsonArray(), jImage); + jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + // Row 551 (groups)********************************************************* 508 / 379 /202 + jGroupRow = CreateLabel(JsonArray(), "Part To Color", "lbl_color_parts", 320.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 552 (groups)********************************************************* 508 / 417 /240 + jGroupRow = CreateButtonSelect(JsonArray(), "Right", "btn_right_part_color", 98.0, 30.0, "btn_right_part_color_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "All", "btn_all_color", 98.0, 30.0, "btn_all_color_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Left", "btn_left_part_color", 98.0, 30.0, "btn_left_part_color_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 553 (groups)********************************************************* 508 / 435 / 258 + jGroupRow = CreateLabel(JsonArray(), "Part Color To Reset", "lbl_reset_parts", 320.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 554 (groups)********************************************************* 508 / 473 /296 + jGroupRow = CreateButton(JsonArray(), "Right", "btn_right_part_reset", 98.0, 30.0, -1.0, "btn_right_part_reset_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "All", "btn_all_reset", 50.0, 30.0, -1.0, "btn_all_reset_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "Left", "btn_left_part_reset", 98.0, 30.0, -1.0, "btn_left_part_reset_tooltip"); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 555 (groups)********************************************************* 508 / 491 / 314 + jGroupRow = CreateLabel(JsonArray(), "Material to Color", "lbl_material_color", 320.0f, 10.0f); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 556 (groups)********************************************************* 508 / 529 /352 + jGroupRow = CreateButtonSelect(JsonArray(), "Leather 1", "btn_material_0", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Cloth 1", "btn_material_2", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Metal 1", "btn_material_4", 98.0, 30.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Row 557 (groups)********************************************************* 508 / 567 / 390 + jGroupRow = CreateButtonSelect(JsonArray(), "Leather 2", "btn_material_1", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Cloth 2", "btn_material_3", 98.0, 30.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButtonSelect(jGroupRow, "Metal 2", "btn_material_5", 98.0, 30.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupCol = JsonArrayInsert(jGroupCol, NuiSpacer()); + jRow = JsonArrayInsert(jRow, NuiHeight(NuiWidth(NuiGroup(NuiCol(jGroupCol)), 339.0), 442.0)); // 275 398 + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + json jLayout = NuiCol(jCol); + // Get the window location to restore it from the database. + json jGeometry = JsonObjectGet(jCraft, "CRAFT_MENU"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + string sPCWindow; + int nToken = SetWindow(oPC, jLayout, "crafting_nui", "Crafting", + fX, fY, 508.0, 700.0, FALSE, FALSE, FALSE, FALSE, TRUE, "pe_crafting"); // 444 645 + // Set all binds, events, and watches. + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION)); + object oItem = GetSelectedItem(oTarget, nItem); + // Row 1 + NuiSetBind(oPC, nToken, "txt_item_name", JsonString(GetName(oItem))); + if(!ai_GetIsServer() || ai_GetIsDungeonMaster(oPC) || ALLOW_CRAFT_NAMES) + { + NuiSetBind(oPC, nToken, "txt_item_name_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_item_name", TRUE); + } + // Row 2 + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_info_tooltip", JsonString(" Look at and change item information")); + NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_wardrobe_tooltip", JsonString(" Use your wardrobe to save/load item appearances")); + int nLight = GetLocalInt(oPC, CRAFT_HIGHLIGHT) + GetLocalInt(oPC, CRAFT_ULTRALIGHT); + NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(nLight)); + NuiSetBind(oPC, nToken, "btn_highlight_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_highlight_tooltip", JsonString(" Left click for White light, Right click for Ultravision")); + // Row 3 + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_save_tooltip", JsonString(" Save current changes")); + NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_select_target_tooltip", JsonString(" Select another party member or Item")); + NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Exit")); + NuiSetBind(oPC, nToken, "btn_cancel_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Exit the crafting menu")); + // Row 4 Labels. + // Row 5 Groups. + // Row 51 title. + // Row 52 + NuiSetBind(oPC, nToken, "item_combo_selected", JsonInt(nItem)); + NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "item_combo_selected", TRUE); + // Row 53 title. + // Row 54 + int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + if(nItem == 1 || nItem == 2 || nItem == 4) + { + if(GetHiddenWhenEquipped(oItem)) nSelected = 1; + else nSelected = 0; + } + NuiSetBind(oPC, nToken, "model_combo_selected", JsonInt (nSelected)); + NuiSetBind(oPC, nToken, "model_combo_event", JsonBool (TRUE)); + NuiSetBindWatch(oPC, nToken, "model_combo_selected", TRUE); + // Row 55, 56, 57 titles + // Row 58 top, 59 middle, 510 bottom + string sModelTop, sModelMiddle, sModelBottom; + // Model Group + if(ai_GetIsWeapon(oItem)) + { + int nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 0); + int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 0); + int nModelNumber = (nModel * 10) + nColor; + sModelTop = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 1); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 1); + nModelNumber = (nModel * 10) + nColor; + sModelMiddle = IntToString(nModelNumber); + nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 2); + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 2); + nModelNumber = (nModel * 10) + nColor; + sModelBottom = IntToString(nModelNumber); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Top")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Middle")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Bottom")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + // Row 511 + NuiSetBind(oPC, nToken, "btn_randomize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_randomize_tooltip", JsonString(" Randomize the selected weapon")); + } + // Armor and clothing + else if(nItem == 0) + { + nSelected = GetArmorModelSelected(oPC); + // These models only have one side so make sure we are not linked. + if (nSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + } + else + { + sModelTop = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + if(nSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nSelected--; + else nSelected++; + sModelBottom = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected)); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("Right")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Right & Left")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelTop)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Left")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom)); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE)); + } + // Row 511 + NuiSetBind(oPC, nToken, "btn_randomize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_randomize_tooltip", JsonString(" Randomize the selected armor")); + } + // Shields, Cloaks, and Helmets. + else + { + sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0)); + // Row 55 + NuiSetBind(oPC, nToken, "top_title_label", JsonString("")); + // Row 56 + //NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE)); + // Row 57 + NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model")); + // Row 58 + //NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle)); + NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE)); + // Row 59 + NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("")); + // Row 510 + //NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString("")); + NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE)); + // Row 511 + NuiSetBind(oPC, nToken, "btn_randomize_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_randomize_tooltip", JsonString(" Randomize the selected item")); + } + // Color Group + if(ai_GetIsWeapon(oItem) || ai_GetIsShield(oItem)) + { + // Need to disable the color widgets. + // Row 511 + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString("gui_pal_tattoo")); + NuiSetBind(oPC, nToken, "color_pallet_image_event", JsonBool(FALSE)); + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 515 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 + NuiSetBind(oPC, nToken, "btn_material_0", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_2", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_4", JsonBool(FALSE)); + // Row 518 + NuiSetBind(oPC, nToken, "btn_material_1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_3", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_material_5", JsonBool(FALSE)); + SetMaterialButtons(oPC, nToken, -1); + } + // Armor and clothing + else if(nItem == 0) + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nModelSelected = GetArmorModelSelected(oPC); + // Row 511 + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + int nSelectedRight, nSelectedAll, nSelectedLeft; + string sColorAll = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected)); + // These models only have one side so make sure we are not linked. + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK || + nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO || + nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT || + nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS || + nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE) + { + // Row 512 - Label Part to Color + // Row 5l3 + int nPartColor = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + if(!nSelectedRight && nPartColor) + { + nSelectedRight = TRUE; + nSelectedLeft = FALSE; + } + nSelectedAll = !nSelectedRight; + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(nSelectedAll)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedAll = nSelectedRight; + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + } + else + { + // Row 512 - Label Part to Color + // Row 5l3 + int nPartColor = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)); + if(!nSelectedRight && nPartColor) + { + nSelectedRight = TRUE; + nSelectedLeft = FALSE; + } + else + { + nPartColor = GetHasPartColor(oItem, nModelSelected, "Left"); + nSelectedLeft = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR)); + if(!nSelectedLeft && nPartColor) + { + nSelectedLeft = TRUE; + nSelectedRight = FALSE; + } + } + nSelectedAll = !nSelectedRight && !nSelectedLeft; + jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonBool(nSelectedLeft)); + jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(nSelectedAll)); + jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(nSelectedLeft)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(TRUE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right"); + nSelectedLeft = GetHasPartColor(oItem, nModelSelected, "Left"); + nSelectedAll = nSelectedRight || nSelectedLeft; + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight)); + NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(nSelectedLeft)); + } + int nColor; + if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_all_color"))) + { + int nModelSelected = GetArmorModelSelected(oPC); + if(!JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR))) + { + // Note: Right Thigh and Left Thigh are backwards so this fixes that! + if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--; + else nModelSelected++; + } + int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected; + nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex); + } + else nColor = 255; + if(nColor == 255) nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected); + float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20); + float fPointY = IntToFloat((nColor / 16) * 20); + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0)); + // Row 516 - Label Material to Color + // Row 517 & 518 + NuiSetBind(oPC, nToken, "btn_right_part_color_tooltip", JsonString(" Select the right part to be uniquely colored")); + NuiSetBind(oPC, nToken, "btn_all_color_tooltip", JsonString(" Select all parts to be colored")); + NuiSetBind(oPC, nToken, "btn_left_part_color_tooltip", JsonString(" Select the left part to be uniquely colored")); + NuiSetBind(oPC, nToken, "btn_right_part_reset_tooltip", JsonString(" Clears the right part's unique color")); + NuiSetBind(oPC, nToken, "btn_all_reset_tooltip", JsonString(" Clears all parts unique colors")); + NuiSetBind(oPC, nToken, "btn_left_part_reset_tooltip", JsonString(" Clears the left part's unique color")); + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + SetLocalJson(oPC, CRAFT_JSON, jCraft); + } + // Cloaks and Helmets. + else + { + // Row 511 + string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET); + if(sColorPallet == "") sColorPallet = "gui_pal_tattoo"; + int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + int nModelSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION)); + int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected); + float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20); + float fPointY = IntToFloat((nColor / 16) * 20); + NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0)); + NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet)); + NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel")); + // Row 512 - Label Part to Color + // Row 5l3 + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE)); + // Row 514 - Label Part Color to Reset + // Row 5l5 + NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE)); + //NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE)); + // Row 516 - Label Material to Color + // Row 517 & 518 + nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION)); + SetMaterialButtons(oPC, nToken, nSelected); + } + // Lets make sure we clean up any cool down variables. + //DeleteLocalInt(oPC, CRAFT_COOL_DOWN); +} +int IfOnBannedBaseItemTypeList(object oPC, object oItem) +{ + int nIndex, nBaseItemType = GetBaseItemType(oItem); + int nBannedBaseItemType = StringToInt(ai_GetStringArray(CRAFT_BANNED_BASEITEMTYPES, nIndex)); + while(nBannedBaseItemType) + { + if(nBaseItemType == nBannedBaseItemType) + { + ai_SendMessages(GetName(oItem) + " cannot have it's appearance changed!", AI_COLOR_RED, oPC); + return TRUE; + } + nBannedBaseItemType = StringToInt(ai_GetStringArray(CRAFT_BANNED_BASEITEMTYPES, ++nIndex)); + } + return FALSE; +} diff --git a/_module/nss/pe_debug.nss b/_module/nss/pe_debug.nss new file mode 100644 index 0000000..dcc254c --- /dev/null +++ b/_module/nss/pe_debug.nss @@ -0,0 +1,902 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script Name: pe_debug + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + PEPS Plugin to allow use of special Debug scripts +/*////////////////////////////////////////////////////////////////////////////// +#include "0i_main" +#include "0i_module" +#include "0i_menus" +//#include "prc_inc_eventhk" +// Gets a variable from oTarget, if oTarget is OBJECT_INVALID then +// it will get the variable from the Module and Area. +void debug_GetObjectVariable(object oPC, object oTarget, string sDesc = ""); +// Lists the variables from oTarget to the screen. +void debug_ListObjectVariables(object oPC, object oTarget); +// Force event script change to default for oCreature. +void ai_ForceAssociateEventScriptsToDefault(object oPC, object oCreature); +// Reverts event script change from default for oCreature. +void ai_RevertAssociateEventScriptsToDefault(object oPC, object oCreature); +void main() +{ + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT"); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "DEBUG_CREATURE") + { + object oModule = GetModule(); + string sDebugName = GetName(oTarget); + SetLocalString(oModule, AI_RULE_DEBUG_CREATURE, sDebugName); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_DEBUG_CREATURE, JsonString(sDebugName)); + ai_SetCampaignDbJson("rules", jRules); + SetLocalObject(oPC, "AI_RULE_DEBUG_CREATURE_OBJECT", oTarget); + ExecuteScript("pi_debug", oPC); + } + else if(sTargetMode == "CLEAR_REPUTATION") + { + int nReputation = GetFactionAverageReputation(oTarget, oPC); + object oPCMember = GetFirstFactionMember(oPC, FALSE); + while(GetIsObjectValid(oPCMember)) + { + ClearPersonalReputation(oPCMember, oTarget); + oPCMember = GetNextFactionMember(oPC, FALSE); + } + ai_SendMessages("Your reputation with " + GetName(oTarget) + " has been set to neutral.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "CLEAR_COMMANDABLE") + { + SetCommandable(TRUE, oTarget); + ai_SendMessages(GetName(oTarget) + " has been set to be commandable.", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_INFO") + { + ai_SendMessages("Information for " + GetName(oTarget), AI_COLOR_WHITE, oPC); + ai_SendMessages("ResRef: " + GetResRef(oTarget), AI_COLOR_GREEN, oPC); + ai_SendMessages("Tag: " + GetTag(oTarget), AI_COLOR_ORANGE, oPC); + ai_SendMessages("UUID: " + GetObjectUUID(oTarget), AI_COLOR_LIGHT_MAGENTA, oPC); + ai_SendMessages("Faction Commoner: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oTarget)), AI_COLOR_GREEN, oPC); + ai_SendMessages("Faction Defender: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oTarget)), AI_COLOR_GREEN, oPC); + ai_SendMessages("Faction Merchant: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oTarget)), AI_COLOR_GREEN, oPC); + ai_SendMessages("Faction Hostile: " + IntToString(GetStandardFactionReputation(STANDARD_FACTION_HOSTILE, oTarget)), AI_COLOR_RED, oPC); + int nObjectType = GetObjectType(oTarget); + if(nObjectType == OBJECT_TYPE_CREATURE) + { + string sText = "Yes"; + if(!GetCommandable(oTarget)) sText = "No"; + ai_SendMessages("Commandable: " + sText, AI_COLOR_WHITE, oPC); + json jObject = ObjectToJson(oTarget); + string sConversation = JsonGetString(GffGetResRef(jObject, "Conversation")); + ai_SendMessages("Conversation: " + sConversation, AI_COLOR_CYAN, oPC); + int nCurrentAction = GetCurrentAction(oTarget); + ai_SendMessages("Current Action: " + IntToString(nCurrentAction), AI_COLOR_RED, oPC); + SendMessageToPC(oPC, "Creature Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_NOTICE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_NOTICE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_END_COMBATROUND SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DIALOGUE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MELEE_ATTACKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DAMAGED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SCRIPT: " + sScript); + sScript = GetLocalString(oTarget, "AI_ON_DEATH"); + if(sScript != "") + { + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SECOND SCRIPT: " + sScript); + } + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISTURBED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPAWN_IN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_RESTED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_RESTED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPELLCASTAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_BLOCKED_BY_DOOR SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + else if(nObjectType == OBJECT_TYPE_DOOR) + { + SendMessageToPC(oPC, "Door Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_CLICKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLICKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_CLOSE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLOSED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DAMAGE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DAMAGE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DIALOGUE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DIALOGUE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_DISARM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISARM SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_FAIL_TO_OPEN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_FAIL_TO_OPEN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_LOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_MELEE_ATTACKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MELEE_ATTACKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_OPEN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OPEN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_SPELLCASTAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPELLCASTAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_TRAPTRIGGERED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_TRAPTRIGGERED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_UNLOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_UNLOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_DOOR_ON_USERDEFINED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USERDEFINED SCRIPT: " + sScript); + } + else if(nObjectType == OBJECT_TYPE_PLACEABLE) + { + SendMessageToPC(oPC, "Placeable Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_CLOSED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLOSED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DAMAGED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DAMAGED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DEATH SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DIALOGUE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DIALOGUE SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DISARM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISARM SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_INVENTORYDISTURBED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_INVENTORYDISTURBED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_LEFT_CLICK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LEFT_CLICK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_LOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_MELEEATTACKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MELEEATTACKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_OPEN); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OPEN SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_SPELLCASTAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_SPELLCASTAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_TRAPTRIGGERED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_TRAPTRIGGERED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_UNLOCK); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_UNLOCK SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_USED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + else if(nObjectType == OBJECT_TYPE_TRIGGER) + { + SendMessageToPC(oPC, "Trigger Event Scripts:"); + string sScript = GetEventScript(oTarget, EVENT_SCRIPT_TRIGGER_ON_CLICKED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLICKED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_DISARM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_DISARM SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_TRIGGER_ON_OBJECT_ENTER); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OBJECT_ENTER SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_TRIGGER_ON_OBJECT_EXIT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_OBJECT_EXIT SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_PLACEABLE_ON_TRAPTRIGGERED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_TRAPTRIGGERED SCRIPT: " + sScript); + sScript = GetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + else + { + // Area event scripts. + object oArea = GetArea(oPC); + SendMessageToPC(oPC, "Area Event Scripts:"); + string sScript = GetEventScript(oArea, EVENT_SCRIPT_AREA_ON_ENTER); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_ENTER SCRIPT: " + sScript); + sScript = GetEventScript(oArea, EVENT_SCRIPT_AREA_ON_EXIT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_EXIT SCRIPT: " + sScript); + sScript = GetEventScript(oArea, EVENT_SCRIPT_PLACEABLE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oArea, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + // Module event scripts. + object oModule = GetModule(); + SendMessageToPC(oPC, GetModuleName() + " Module Event Scripts."); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_ACQUIRE_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_ACQUIRE_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_ACTIVATE_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_ACTIVATE_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_CLIENT_ENTER); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLIENT_ENTER SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_CLIENT_EXIT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_CLIENT_EXIT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_EQUIP_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_HEARTBEAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_HEARTBEAT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_LOSE_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LOSE_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_MODULE_LOAD); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MODULE_LOAD SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_MODULE_START); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_MODULE_START SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_NUI_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_NUI_EVENT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_CANCEL_CUTSCENE); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_CANCEL_CUTSCENE SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_CHAT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_CHAT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_DEATH); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_DEATH SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_DYING); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_DYING SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_GUIEVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_GUIEVENT SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_LEVEL_UP); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_LEVEL_UP SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_REST); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_REST SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TARGET); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_TARGET SCRIPT: " + sScript); + sScript = GetLocalString(oModule, AI_MODULE_TARGET_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + if(sScript != "") + { + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_TARGET SECOND SCRIPT: " + sScript); + } + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_PLAYER_TILE_ACTION); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_PLAYER_TILE_ACTION SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_RESPAWN_BUTTON_PRESSED); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_RESPAWN_BUTTON_PRESSED SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_MODULE_ON_UNEQUIP_ITEM); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_UNEQUIP_ITEM SCRIPT: " + sScript); + sScript = GetEventScript(oModule, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT); + sScript += " [" + ResManGetAliasFor(sScript, RESTYPE_NCS) + "]"; + SendMessageToPC(oPC, "ON_USER_DEFINED_EVENT SCRIPT: " + sScript); + } + /* Checks PRC virtual events. See prc_inc_eventhk + int nIndex = 1; + string sEvent = GetFirstEventScript(oTarget, EVENT_VIRTUAL_ONHEARTBEAT, FALSE); + if(sEvent != "") + { + SendMessageToPC(oPC, "HB event script " + IntToString(nIndex) + ": " + sEvent); + for(nIndex = 2; nIndex < 20; nIndex++) + { + sEvent = GetNextEventScript(oTarget, EVENT_VIRTUAL_ONHEARTBEAT, FALSE); + if(sEvent == "") break; + SendMessageToPC(oPC, "HB event script " + IntToString(nIndex) + ": " + sEvent); + } + }*/ + } + else if(sTargetMode == "SET_NPC_SCRIPTS") + { + if(GetLocalString(oTarget, "AI_ON_HEARTBEAT") == "") + { + ai_ForceAssociateEventScriptsToDefault(oPC, oTarget); + } + else ai_RevertAssociateEventScriptsToDefault(oPC, oTarget); + } + else if(sTargetMode == "CLEAR_CREATURE_EVENTS") + { + ai_SendMessages("Set event scripts for " + GetName(oTarget) + " to default.", AI_COLOR_YELLOW, oPC); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_NOTICE, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DEATH, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_RESTED, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "default"); + SetEventScript(oTarget, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, "default"); + DeleteLocalInt(oTarget, "AI_I_AM_BEING_HEALED"); + DeleteLocalString(oTarget, "AIScript"); + ai_ClearCreatureActions(); + } + else if(sTargetMode == "DEBUG_JSON_DUMP") + { + json jObject = ObjectToJson(oTarget, TRUE); + WriteTimestampedLogEntry(GetName(oTarget) + " JsonDump: " + JsonDump(jObject, 1)); + ai_SendMessages(GetName(oTarget) + " has been dumped to the log file!", AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_LIST_VAR") + { + debug_ListObjectVariables(oPC, oTarget); + } + else if(sTargetMode == "DEBUG_SET_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + int nVarType = GetLocalInt(oPC, "Debug_Var_Type"); + if(nVarType == 0) // Int + { + string sVarValue = GetLocalString(oPC, "Debug_Var_Value"); + int nVarValue = StringToInt(sVarValue); + SetLocalInt(oTarget, sVarName, nVarValue); + ai_SendMessages(sVarName + " [Int] has been set to " + IntToString(nVarValue) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 1) // Float + { + string sVarValue = GetLocalString(oPC, "Debug_Var_Value"); + DeleteLocalString(oPC, "Debug_Var_Name"); + float fVarValue = StringToFloat(sVarValue); + SetLocalFloat(oTarget, sVarName, fVarValue); + ai_SendMessages(sVarName + " [Float] has been set to " + FloatToString(fVarValue, 0, 2) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 2) // String + { + string sVarValue = GetLocalString(oPC, "Debug_Var_Value"); + SetLocalString(oTarget, sVarName, sVarValue); + ai_SendMessages(sVarName + " [String] has been set to " + sVarValue + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 3) // Object + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, "AI_TARGET_OBJECT", oTarget); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_OBJECT_VARIABLE"); + ai_SendMessages("Select an object to save to " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | + OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(nVarType == 4) // Location + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, "AI_TARGET_OBJECT", oTarget); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_LOCATION_VARIABLE"); + ai_SendMessages("Select a location to save to " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + DeleteLocalString(oPC, "Debug_Var_Name"); + DeleteLocalInt(oPC, "Debug_Var_Type"); + DeleteLocalString(oPC, "Debug_Var_Value"); + } + else if(sTargetMode == "DEBUG_SET_OBJECT_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + SetLocalObject(oObject, sVarName, oTarget); + DeleteLocalObject(oPC, "AI_TARGET_OBJECT"); + DeleteLocalString(oPC, "Debug_Var_Name"); + ai_SendMessages(sVarName + " [Object] has been set to " + GetName(oObject) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_SET_LOCATION_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + SetLocalLocation(oObject, sVarName, lLocation); + DeleteLocalObject(oPC, "AI_TARGET_OBJECT"); + DeleteLocalString(oPC, "Debug_Var_Name"); + ai_SendMessages(sVarName + " [Location] has been set to " + LocationToString(lLocation) + " for " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + } + else if(sTargetMode == "DEBUG_DELETE_VARIABLE") + { + string sVarName = GetLocalString(oPC, "Debug_Var_Name"); + int nVarType = GetLocalInt(oPC, "Debug_Var_Type"); + if(nVarType == 0) DeleteLocalInt(oTarget, sVarName); + else if(nVarType == 1) DeleteLocalFloat(oTarget, sVarName); + else if(nVarType == 2) DeleteLocalString(oTarget, sVarName); + else if(nVarType == 4) DeleteLocalObject(oTarget, sVarName); + else if(nVarType == 5) DeleteLocalLocation(oTarget, sVarName); + ai_SendMessages(sVarName + " has been deleted from " + GetName(oTarget), AI_COLOR_YELLOW, oPC); + DeleteLocalString(oPC, "Debug_Var_Name"); + DeleteLocalInt(oPC, "Debug_Var_Type"); + } + else if(sTargetMode == "DEBUG_GET_VARIABLE") + { + debug_GetObjectVariable(oPC, oTarget); + } + } + // Run all non-targeting code here, usually NUI events. + else + { + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + //string sWndId = NuiGetWindowId(oPC, nToken); + //********************************************************************** + //if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return; + if(sEvent == "click") + { + if(sElem == "btn_npc_scripts") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SET_NPC_SCRIPTS"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an npc to change scripts for.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); + } + else if(sElem == "btn_set_commandable") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "CLEAR_COMMANDABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to set commandable.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_clear_reputation") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "CLEAR_REPUTATION"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to clear your PC's reputation with that creature's faction.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_info") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_INFO"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an object to send it's information to the players screen.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_obj_json") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_JSON_DUMP"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an object to dump it's json values to the log.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | + OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_obj_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_LIST_VAR"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select an object to list it's variables to the player screen.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_debug_creature") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_CREATURE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to start sending debug information to the log for.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_clear_events") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalObject(oPC, AI_TARGET_ASSOCIATE, OBJECT_SELF); + SetLocalString(oPC, AI_TARGET_MODE, "CLEAR_CREATURE_EVENTS"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select a creature to set event scripts to default.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_clear_debug") + { + object oModule = GetModule(); + SetLocalString(oModule, AI_RULE_DEBUG_CREATURE, ""); + json jRules = ai_GetCampaignDbJson("rules"); + jRules = JsonObjectSet(jRules, AI_RULE_DEBUG_CREATURE, JsonString("")); + ai_SetCampaignDbJson("rules", jRules); + DeleteLocalObject(oPC, "AI_RULE_DEBUG_CREATURE_OBJECT"); + ai_SendMessages("Creature Debug mode has been cleared.", AI_COLOR_YELLOW, oPC); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_debug", oPC); + } + else if(sElem == "btn_delete_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalString(oPC, "Debug_Var_Value", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_DELETE_VARIABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select Object to delete (" + sVarName + ") variable from.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_get_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalString(oPC, "Debug_Var_Value", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_GET_VARIABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select Object to get (" + sVarName + ") variable from.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(sElem == "btn_set_var") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalString(oPC, "Debug_Var_Value", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_VARIABLE"); + NuiDestroy(oPC, nToken); + ai_SendMessages("Select Object to set (" + sVarName + ") variable to.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + } + if(sEvent == "watch") + { + if(sElem == "txt_var_name" || sElem == "txt_var_value" || + sElem == "cmb_var_type_selected") + { + if(JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")) != "") + { + NuiSetBind(oPC, nToken, "btn_get_var_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_delete_var_event", JsonBool(TRUE)); + if(JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")) == 3 || // Objects + JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")) == 4 || // Locations + JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value")) != "") + { + NuiSetBind(oPC, nToken, "btn_set_var_event", JsonBool(TRUE)); + return; + } + } + else + { + NuiSetBind(oPC, nToken, "btn_get_var_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_delete_var_event", JsonBool(FALSE)); + } + NuiSetBind(oPC, nToken, "btn_set_var_event", JsonBool(FALSE)); + } + } + if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(sElem == "btn_delete_var") + { + object oModule = GetModule(); + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + int nVarType = JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")); + if(nVarType == 0) DeleteLocalInt(oModule, sVarName); + else if(nVarType == 1) DeleteLocalFloat(oModule, sVarName); + else if(nVarType == 2) DeleteLocalString(oModule, sVarName); + else if(nVarType == 4) DeleteLocalObject(oModule, sVarName); + else if(nVarType == 5) DeleteLocalLocation(oModule, sVarName); + ai_SendMessages(sVarName + " has been deleted from the Module", AI_COLOR_YELLOW, oPC); + } + else if(sElem == "btn_get_var") + { + // Set Targeting variables. + SetLocalString(oPC, "Debug_Var_Name", JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name"))); + SetLocalInt(oPC, "Debug_Var_Type", JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected"))); + debug_GetObjectVariable(oPC, GetModule(), "(Module)"); + } + else if(sElem == "btn_set_var") + { + // Set Targeting variables. + string sVarName = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_name")); + string sVarValue = JsonGetString(NuiGetBind(oPC, nToken, "txt_var_value")); + int nVarType = JsonGetInt(NuiGetBind (oPC, nToken, "cmb_var_type_selected")); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_VARIABLE"); + if(nVarType == 0) // Int + { + int nVarValue = StringToInt(sVarValue); + SetLocalInt(GetModule(), sVarName, nVarValue); + ai_SendMessages(sVarName + " [Int] has been set to " + IntToString(nVarValue) + " on the Module.", AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 1) // Float + { + float fVarValue = StringToFloat(sVarValue); + SetLocalFloat(GetModule(), sVarName, fVarValue); + ai_SendMessages(sVarName + " [Float] has been set to " + FloatToString(fVarValue, 0, 2) + " on the Module.", AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 2) // String + { + SetLocalString(GetModule(), sVarName, sVarValue); + ai_SendMessages(sVarName + " [String] has been set to " + sVarValue + " on the Module.", AI_COLOR_YELLOW, oPC); + } + else if(nVarType == 3) // Object + { + object oModule = GetModule(); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalObject(oPC, "AI_TARGET_OBJECT", oModule); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_OBJECT_VARIABLE"); + ai_SendMessages("Select an object to save to " + GetName(oModule), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | + OBJECT_TYPE_ITEM | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_TRIGGER, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + else if(nVarType == 4) // Location + { + object oModule = GetModule(); + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_debug"); + // Set Targeting variables. + SetLocalString(oPC, "Debug_Var_Name", sVarName); + SetLocalObject(oPC, "AI_TARGET_OBJECT", oModule); + SetLocalString(oPC, AI_TARGET_MODE, "DEBUG_SET_LOCATION_VARIABLE"); + ai_SendMessages("Select a location to save to " + GetName(oModule), AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_TILE, MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + } + } + } + } + } +} +void debug_GetObjectVariable(object oPC, object oTarget, string sDesc = "") +{ + string sVar, sVarName = GetLocalString(oPC, "Debug_Var_Name"); + int nVarType = GetLocalInt(oPC, "Debug_Var_Type"); + if(nVarType == 0) sVar = IntToString(GetLocalInt(oTarget, sVarName)); + else if(nVarType == 1) sVar = FloatToString(GetLocalFloat(oTarget, sVarName), 0, 2); + else if(nVarType == 2) sVar = GetLocalString(oTarget, sVarName); + else if(nVarType == 4) sVar = GetName(GetLocalObject(oTarget, sVarName)); + else if(nVarType == 5) sVar = LocationToString(GetLocalLocation(oTarget, sVarName)); + ai_SendMessages(sVarName + " on " + GetName(oTarget) + sDesc + " is set to " + sVar, AI_COLOR_YELLOW, oPC); +} +void debug_ListObjectVariables(object oPC, object oTarget) +{ + string sName = GetName(oTarget); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + ai_SendMessages(sName + " variables:", AI_COLOR_GREEN, oPC); + json jObject = ObjectToJson(oTarget, TRUE); + json jVarTable = GffGetList(jObject, "VarTable"); + string sVariable; + int nIndex, nVarType; + json jVar = JsonArrayGet(jVarTable, nIndex); + while(JsonGetType(jVar) != JSON_TYPE_NULL) + { + sVariable = JsonGetString(GffGetString(jVar, "Name")); + nVarType = JsonGetInt(GffGetDword(jVar, "Type")); + if(nVarType == 1) + { + sVariable += " [int] "; + sVariable += IntToString(JsonGetInt(GffGetInt(jVar, "Value"))); + } + else if(nVarType == 2) + { + sVariable += " [float] "; + sVariable += FloatToString(JsonGetFloat(GffGetFloat(jVar, "Value")), 0, 2); + } + else if(nVarType == 3) + { + sVariable += " [string] "; + sVariable += JsonGetString(GffGetString(jVar, "Value")); + } + else if(nVarType == 4) + { + sName = GetName(GetLocalObject(oTarget, sVariable)); + sVariable += " [object] " + sName; + } + else if(nVarType == 5) + { + sName = LocationToString(GetLocalLocation(oTarget, sVariable)); + sVariable += " [location] " + sName; + } + else if(nVarType == 7) + { + sVariable += " [struct] "; + sVariable += JsonDump(GffGetStruct(jVar, "Value")); + } + sVariable += JsonGetString(JsonObjectGet(jVar, "Value")); + ai_SendMessages(sVariable, AI_COLOR_YELLOW, oPC); + jVar = JsonArrayGet(jVarTable, ++nIndex); + } + if(!nIndex) ai_SendMessages("No variables to list!", AI_COLOR_YELLOW, oPC); +} +void ai_ForceAssociateEventScriptsToDefault(object oPC, object oCreature) +{ + ai_SendMessages("Changing " + GetName(oCreature) + "'s event scripts to default event scripts!", AI_COLOR_YELLOW, oPC); + ai_SendMessages("Use this tool on them again to revert this creatures event scripts back!", AI_COLOR_YELLOW, oPC); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "0e_id_events" || sScript == "0e_prc_id_events") + { + ai_SendMessages("You cannot use this on creatures in Infinite Dungeons!"); + return; + } + SetLocalString(oCreature, "AI_ON_HEARTBEAT", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_ch_ac1"); + //********** On Perception ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE); + SetLocalString(oCreature, "AI_ON_NOTICE", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_ch_ac2"); + //********** On End Combat Round ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND); + SetLocalString(oCreature, "AI_ON_END_COMBATROUND", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_ch_ac3"); + //********** On Dialogue ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE); + SetLocalString(oCreature, "AI_ON_DIALOGUE", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_ch_ac4"); + //********** On Melee Attacked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED); + SetLocalString(oCreature, "AI_ON_MELEE_ATTACKED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_ch_ac5"); + //********** On Damaged ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED); + SetLocalString(oCreature, "AI_ON_DAMAGED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_ch_ac6"); + //********** On Disturbed ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED); + SetLocalString(oCreature, "AI_ON_DISTURBED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_ch_ac8"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED); + SetLocalString(oCreature, "AI_ON_RESTED", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_ch_aca"); + //********** On Spell Cast At ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT); + SetLocalString(oCreature, "AI_ON_SPELLCASTAT", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_ch_acb"); + //********** On Blocked ********** + sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR); + SetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR", sScript); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_ch_acb"); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); +} +void ai_RevertAssociateEventScriptsToDefault(object oPC, object oCreature) +{ + ai_SendMessages("Changing " + GetName(oCreature) + "'s event scripts back to original!", AI_COLOR_YELLOW, oPC); + //********** On Heartbeat ********** + string sScript = GetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "0e_id_events" || sScript == "0e_prc_id_events") + { + ai_SendMessages("You cannot use this on creatures in Infinite Dungeons!", AI_COLOR_RED, oPC); + return; + } + sScript = GetLocalString(oCreature, "AI_ON_HEARTBEAT"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, sScript); + //********** On Perception ********** + sScript = GetLocalString(oCreature, "AI_ON_NOTICE"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_NOTICE, sScript); + //********** On End Combat Round ********** + sScript = GetLocalString(oCreature, "AI_ON_END_COMBATROUND"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, sScript); + //********** On Dialogue ********** + sScript = GetLocalString(oCreature, "AI_ON_DIALOGUE"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, sScript); + //********** On Melee Attacked ********** + sScript = GetLocalString(oCreature, "AI_ON_MELEE_ATTACKED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, sScript); + //********** On Damaged ********** + sScript = GetLocalString(oCreature, "AI_ON_DAMAGED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DAMAGED, sScript); + //********** On Disturbed ********** + sScript = GetLocalString(oCreature, "AI_ON_DISTURBED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_DISTURBED, sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, ""); + //********** On Rested ********** + sScript = GetLocalString(oCreature, "AI_ON_RESTED"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_RESTED, sScript); + //********** On Spell Cast At ********** + sScript = GetLocalString(oCreature, "AI_ON_SPELLCASTAT"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, sScript); + //********** On Blocked ********** + sScript = GetLocalString(oCreature, "AI_ON_BLOCKED_BY_DOOR"); + SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, sScript); + //SetEventScript(oCreature, EVENT_SCRIPT_CREATURE_ON_USER_DEFINED_EVENT, ""); + if(!GetCommandable(oCreature)) SetCommandable(TRUE, oCreature); +} + diff --git a/_module/nss/pe_henchmen.nss b/_module/nss/pe_henchmen.nss new file mode 100644 index 0000000..6d4412e --- /dev/null +++ b/_module/nss/pe_henchmen.nss @@ -0,0 +1,591 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pe_henchmen +//////////////////////////////////////////////////////////////////////////////// + Used with pe_henchmen to run the npc plugin for + Philos Single Player Enhancements. +*/////////////////////////////////////////////////////////////////////////////// +#include "pinc_henchmen" +#include "x0_i0_henchman" +#include "0i_module" +// Creates the Henchman widget. +void PopupWidgetHenchmanGUIPanel(object oPC); +void ResetHenchmanWindows(object oPC, int nToken, object oHenchman) +{ + DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "henchman_nui"))); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.2, CreateCharacterEditGUIPanel(oPC, oHenchman)); +} +void main() +{ + //************************************************************************** + //********************** Henchmen Targeting Execution ********************** + //************************************************************************** + // Get the last player to use targeting mode + object oPC = GetLastPlayerToSelectTarget(); + if(GetLocalInt (oPC, "0_No_Win_Save")) return; + string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE); + if(oPC == OBJECT_SELF && sTargetMode != "") + { + // Get the targeting mode data + object oTarget = GetTargetingModeSelectedObject(); + vector vTarget = GetTargetingModeSelectedPosition(); + location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC)); + object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT"); + DeleteLocalString(oPC, AI_TARGET_MODE); + // If the user manually exited targeting mode without selecting a target, return + if(!GetIsObjectValid(oTarget) && vTarget == Vector()) + { + return; + } + // Targeting code here. + if(sTargetMode == "MAKE_NPC_HENCHMAN") + { + if(GetAssociateType(oTarget) == ASSOCIATE_TYPE_HENCHMAN) + { + ai_SendMessages(GetName(oTarget) + " is already a henchman!", AI_COLOR_RED, oPC); + return; + } + oTarget = CopyObject(oTarget, GetLocation(oPC), OBJECT_INVALID, "", TRUE); + ai_ClearCombatState(oTarget); + ChangeToStandardFaction(oTarget, STANDARD_FACTION_DEFENDER); + DeleteLocalInt(oTarget, AI_ONSPAWN_EVENT); + ai_ChangeEventScriptsForAssociate(oTarget); + AddHenchman(oPC, oTarget); + // Special check for Infinite Dungeon plot givers to be changed into henchman. + if(GetStringLeft(GetLocalString(oTarget, "sConversation"), 8) == "id1_plot") + { + DeleteLocalString(oTarget, "sConversation"); + } + // Remove this variable so they may get a unique tag associate widget. + DeleteLocalString(oTarget, AI_TAG); + ai_SendMessages(GetName(oTarget) + " has been copied and is now in your party as a henchman.", AI_COLOR_GREEN, oPC); + //ExecuteScript("pi_henchmen", oPC); + } + } + //************************************************************************** + //*********************** Henchmen Elements Execution ********************** + //************************************************************************** + else + { + // Let the inspector handle what it wants. + //HandleWindowInspectorEvent (); + object oPC = NuiGetEventPlayer(); + int nToken = NuiGetEventWindow(); + string sEvent = NuiGetEventType(); + string sElem = NuiGetEventElement(); + int nIndex = NuiGetEventArrayIndex(); + string sWndId = NuiGetWindowId (oPC, nToken); + //SendMessageToPC(oPC, "pe_henchmen , 26 sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem + + // " nToken: " + IntToString(nToken) + " nIndex: " + IntToString(nIndex) + + // " oPC: " + GetName(oPC)); + //********************************************************************** + // Watch to see if the window moves and save. + if(sElem == "window_geometry" && sEvent == "watch") + { + if(GetLocalInt(oPC, "AI_NO_NUI_SAVE")) return; + json jGeometry = NuiGetBind(oPC, nToken, "window_geometry"); + json jData = GetHenchmanDbJson(oPC, "henchman", "0"); + if(JsonGetType(jData) == JSON_TYPE_NULL) jData = JsonObject(); + jData = JsonObjectSet(jData, sWndId, jGeometry); + SetHenchmanDbJson(oPC, "henchman", jData, "0"); + } + else if(sWndId == "henchman_nui") + { + //********************************************************************** + // Henchman menu. + if(sEvent == "click") + { + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + // Change to a different saved party #. + if(GetStringLeft(sElem, 9) == "btn_party") + { + sParty = GetStringRight(sElem, 1); + SetHenchmanDbString(oPC, "henchname", sParty, "0"); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + } + // Add an NPC in the game as a henchman. + else if(sElem == "btn_npc_henchman") + { + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_henchmen"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "MAKE_NPC_HENCHMAN"); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + ai_SendMessages("Select an NPC to copy and make your henchman.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_ALL , MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE); + } + // ******************* Saved Character buttons ********************* + // Show saved party member. + else if(sElem == "btn_saved_char") + { + string sIndex = IntToString(nIndex); + SetHenchmanDbString(oPC, "henchname", sIndex, sParty); + AddSavedCharacterInfo(oPC, nToken, sParty); + } + // Have any saved henchman not in the party join. + else if(sElem == "btn_join_party") + { + SavedPartyJoin(oPC, nToken, sParty); + } + else if(sElem == "btn_saved_join") + { + SavedCharacterJoin(oPC, nToken, sParty); + } + else if(sElem == "btn_saved_remove") + { + string sIndex = GetHenchmanDbString(oPC, "henchname", sParty); + RemoveHenchmanDb(oPC, sParty + sIndex); + if(GetHenchmanDbString(oPC, "henchname", sParty + "0") == "") + { + SetHenchmanDbString(oPC, "henchname", "", sParty); + } + else SetHenchmanDbString(oPC, "henchname", "0", sParty); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + } + else if(sElem == "btn_clear_party") + { + SavedPartyCleared(oPC, nToken, sParty); + } + // ******************* Current Character buttons ********************* + // Show current party member. + else if(sElem == "btn_cur_char") + { + string sIndex = IntToString(nIndex); + SetHenchmanDbString(oPC, "image", sIndex, sParty); + AddCurrentCharacterInfo(oPC, nToken, sParty); + } + // The edit button, for now we are using it to level up! + else if(sElem == "btn_cur_edit") + { + object oHenchman = GetSelectedHenchman(oPC, sParty); + SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman); + CreateCharacterEditGUIPanel(oPC, oHenchman); + } + else if(sElem == "btn_cur_remove") + { + RemoveYourHenchman(oPC, nToken, sParty); + } + else if(sElem == "btn_remove_party") + { + RemoveWholeParty(oPC, nToken, sParty); + } + else if(sElem == "btn_cur_save") + { + SaveYourHenchman(oPC, nToken, sParty); + SetHenchmanDbString(oPC, "henchname", "0", sParty); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC)); + } + else if(sElem == "btn_save_party") + { + SaveWholeParty(oPC, nToken, sParty); + } + } + /*else if(sEvent == "watch") + { + if(sElem == "henchman_widget_check") + { + int bWidget = JsonGetInt(NuiGetBind(oPC, nToken, "henchman_widget_check")); + SetLocalInt(oPC, "AI_WIDGET_HENCHMAN", bWidget); + if(bWidget) PopupWidgetHenchmanGUIPanel(oPC); + else DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "widgethenchmanwin"))); + } + if(sElem == "lock_henchman_widget_check") + { + int bBuffLockWidget = JsonGetInt(NuiGetBind(oPC, nToken, "lock_henchman_widget_check")); + SetLocalInt(oPC, "AI_WIDGET_HENCHMAN_LOCK", bBuffLockWidget); + SetLocalInt(oPC, "AI_WIDGET_HENCHMAN", TRUE); + NuiSetBind(oPC, nToken, "henchman_widget_check", JsonBool(TRUE)); + PopupWidgetHenchmanGUIPanel(oPC); + } + } + //************************************************************************** + // Spell Buffing. + else if (sWndId == "widget_henchman") + { + if (sEvent == "click") + { + string sParty; + if (sElem == "btn_one") sParty = "1"; + if (sElem == "btn_two") sParty = "2"; + if (sElem == "btn_three") sParty = "3"; + if (sElem == "btn_four") sParty = "4"; + SetHenchmanDbString (oPC, "henchname", sParty, "0"); + PopupWidgetHenchmanGUIPanel(oPC); + } + } */ + } + else if(sWndId == "henchman_edit_nui") + { + int nChange = 0; + int nID; + string sResRef, sID, sPlot; + object oHenchman = GetLocalObject(oPC, HENCHMAN_TO_EDIT); + if(sEvent == "watch") + { + if(sElem == "char_name") + { + string sName = JsonGetString(NuiGetBind(oPC, nToken, "char_name")); + SetName(oHenchman, sName); + } + if(sElem == "port_name") + { + if(GetLocalInt(oPC, "AI_PORTRAIT_ID_SET")) + { + DeleteLocalInt(oPC, "AI_PORTRAIT_ID_SET"); + //nID = JsonGetInt(NuiGetUserData(oPC, nToken)); + //SetPortraitId(oHenchman, nID); + } + else NuiSetUserData(oPC, nToken, JsonInt(-1)); + sResRef = JsonGetString (NuiGetBind(oPC, nToken, "port_name")); + if(ResManGetAliasFor(sResRef + "l", RESTYPE_TGA) == "" && + ResManGetAliasFor(sResRef + "l", RESTYPE_DDS) == "") + { + if(GetGender(oHenchman)) sResRef = "po_hu_f_99_"; + else sResRef = "po_hu_m_99_"; + } + NuiSetBind (oPC, nToken, "port_resref_image", JsonString (sResRef + "l")); + } + else if(sElem == "cmb_class_selected") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_class_selected")); + int nClass = GetClassBySelection2DA(nSelection); + SetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition), nClass); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, CreateCharacterEditGUIPanel(oPC, oHenchman)); + } + else if(sElem == "cmb_package_selected") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + string sClass = IntToString(GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition))); + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_package_selected")); + int nPackage = GetPackageBySelection2DA(sClass, nSelection); + SetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition), nPackage); + } + else if(sElem == "cmb_soundset_selected") + { + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_soundset_selected")); + int nSoundSet = GetSoundSetBySelection2DA(oHenchman, nSelection); + SetSoundset(oHenchman, nSoundSet); + string sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nSoundSet)); + if(GetStringLeft(sResRef, 4) == "vs_f") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 11, ":1:2:3:22:34:35:41:42:44:45:46:")); + } + else if(GetStringLeft(sResRef, 4) == "vs_n") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 10, ":1:2:3:34:35:36:40:42:44:45:")); + } + else + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 7, ":1:2:3:11:12:13:33:")); + } + } + } + if(sEvent == "click") + { + if (sElem == "btn_desc_save") + { + string sDescription = JsonGetString(NuiGetBind(oPC, nToken, "desc_value")); + SetDescription(oHenchman, sDescription); + return; + } + else if(sElem == "btn_level_up") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetClassByPosition(nPosition, oHenchman); + if(nClass == CLASS_TYPE_INVALID) + { + nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)); + int nIndex = 1; + while(nIndex < 5) + { + if(nClass == GetClassByPosition(nIndex, oHenchman)) + { + ai_SendMessages(GetName(oHenchman) + " already has this class in a different slot! You can only level up this class in its original slot.", AI_COLOR_RED, oPC); + return; + } + nIndex++; + } + } + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition)); + if(nPackage == 0) nPackage = GetPackageBySelection2DA(IntToString(nClass), 0); + else if(nPackage == -1) + { + ai_SendMessages("There is not a valid package for this class!", AI_COLOR_RED, oPC); + return; + } + string sLevel = IntToString(GetLevelByClass(nClass, oHenchman) + 1); + json jHenchman = ObjectToJson(oHenchman, TRUE); + //WriteTimestampedLogEntry("pe_henchmen, 318, jHenchman: " + JsonDump(jHenchman, 4)); + // Check to see if this character has a LvlStatList that is required to level. + json jLvlStatList = JsonObjectGet(jHenchman, "LvlStatList"); + //WriteTimestampedLogEntry("pe_henchmen, 321, jLvlStatList: " + JsonDump(jLvlStatList, 4)); + if(JsonGetType(jLvlStatList) == JSON_TYPE_NULL) + { + RemoveHenchman(oPC, oHenchman); + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); + // Make sure to get a clean faction version of the henchman here. + jHenchman = ObjectToJson(oHenchman, TRUE); + jHenchman = CreateLevelStatList(jHenchman, oHenchman, oPC); + location lLocation = GetLocation(oHenchman); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHenchman); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oHenchman); + oHenchman = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion); + SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman); + // We need to move party button list index to the last one since + // the henchman will move to the last henchman slot. + int nIndex = 1; + object oHench = GetHenchman(oPC, nIndex); + while(oHench != OBJECT_INVALID) + { + oHench = GetHenchman(oPC, ++nIndex); + //SendMessageToPC(oPC, "oHench: " + GetName(oHench) + " nIndex: " + IntToString(nIndex)); + } + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + SetHenchmanDbString(oPC, "image", IntToString(nIndex - 1), sParty); + } + int nLeveled = LevelUpHenchman(oHenchman, nClass, TRUE, nPackage); + //SendMessageToPC(oPC, "pe_henchmen, 282, nClass: " + IntToString(nClass) + + // " nPackage: " + IntToString(nPackage) + " nPosition: " + IntToString(nPosition) + + // " nLeveled: " + IntToString(nLeveled)); + string sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + if(!nLeveled) + { + //WriteTimestampedLogEntry("pe_henchmen, 306, jLvlStatList: " + JsonDump(jLvlStatList, 1)); + ai_SendMessages(GetName(oHenchman) + " could not level " + sClass + " to level " + sLevel + "!", AI_COLOR_RED, oPC); + } + else + { + ai_SendMessages(GetName(oHenchman) + " has leveled " + sClass + " to " + sLevel + " level!", AI_COLOR_GREEN, oPC); + ResetHenchmanWindows(oPC, nToken, oHenchman); + } + return; + } + else if(sElem == "btn_reset") + { + oHenchman = ResetCharacter(oPC, oHenchman); + SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman); + ai_SendMessages(GetName(oHenchman) + " has been reset to level 1!", AI_COLOR_GREEN, oPC); + // We need to move party button list index to the last one since + // the henchman will move to the last henchman slot. + int nIndex = 1; + object oHench = GetHenchman(oPC, nIndex); + while(oHench != OBJECT_INVALID) + { + oHench = GetHenchman(oPC, ++nIndex); + } + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + SetHenchmanDbString(oPC, "image", IntToString(nIndex - 1), sParty); + ResetHenchmanWindows(oPC, nToken, oHenchman); + } + else if(sElem == "btn_portrait_next") + { + nID = JsonGetInt(NuiGetUserData(oPC, nToken)) + 1; + nChange = 1; + } + else if(sElem == "btn_portrait_prev") + { + nID = JsonGetInt(NuiGetUserData(oPC, nToken)) - 1; + nChange = -1; + } + else if(sElem == "btn_portrait_ok") + { + nID = JsonGetInt(NuiGetUserData(oPC, nToken)); + if(nID != -1) SetPortraitId(oHenchman, nID); + else + { + sResRef = JsonGetString (NuiGetBind (oPC, nToken, "port_name")); + if(ResManGetAliasFor(sResRef + "l", RESTYPE_TGA) == "" && + ResManGetAliasFor(sResRef + "l", RESTYPE_DDS) == "") + { + if(GetGender(oHenchman)) sResRef = "po_hu_f_99_"; + else sResRef = "po_hu_m_99_"; + SetPortraitResRef(oHenchman, sResRef); + } + } + int nHenchToken = NuiFindWindow(oPC, "henchman_nui"); + if(nHenchToken) + { + string sImage = GetPortraitResRef(oHenchman); + NuiSetBind(oPC, nHenchToken, "img_cur_portrait_image", JsonString(sImage + "l")); + } + } + if (nChange != 0) + { + int nPRace, nPGender; + int nMax2DARow = Get2DARowCount("portraits") - 1; + if(nID > 5000) nID = 1; + if(nID < 0) nID = 5000; + int nGender = GetGender(oHenchman); + int nRace = GetRacialType(oHenchman); + string sPRace = Get2DAString("portraits", "Race", nID); + if(sPRace != "") nPRace = StringToInt(sPRace); + else nPRace = -1; + string sResRef, sPGender = Get2DAString("portraits", "Sex", nID); + if(sPGender != "") nPGender = StringToInt(sPGender); + else nPGender = -1; + //WriteTimestampedLogEntry("pe_henchmen, 367, nGender: " + IntToString(nGender) + + // " nPGender: " + IntToString(nPGender) + + // " nRace: " + IntToString(nRace) + " nPRace: " + IntToString(nPRace) + + // " nID: " + IntToString(nID)); + while((nRace != nPRace && + (nRace != RACIAL_TYPE_HALFELF || + (nPRace != RACIAL_TYPE_ELF || nPRace != RACIAL_TYPE_HUMAN))) || + nGender != nPGender && nPGender != 4) + { + nID += nChange; + //WriteTimestampedLogEntry("pe_henchmen, 382, nCounter: " + IntToString(nCounter) + + // " nMax2DARow: " + IntToString(nMax2DARow)); + if (nID > 5000) nID = 1; + if (nID < 1) nID = 5000; + sPRace = Get2DAString("portraits", "Race", nID); + if(sPRace != "") nPRace = StringToInt(sPRace); + else nPRace = -1; + sPGender = Get2DAString("portraits", "Sex", nID); + if(sPGender != "") nPGender = StringToInt(sPGender); + else nPGender = -1; + //WriteTimestampedLogEntry("pe_henchmen, 385, nGender: " + IntToString(nGender) + + // " nPGender: " + IntToString(nPGender) + " sPGender: " + sPGender + + // " nRace: " + IntToString(nRace) + " nPRace: " + IntToString(nPRace) + + // " sPRace: " + sPRace + " nID: " + IntToString(nID)); + sResRef = "po_" + Get2DAString("portraits", "BaseResRef", nID) + "l"; + if(ResManGetAliasFor(sResRef, RESTYPE_TGA) == "" && + ResManGetAliasFor(sResRef, RESTYPE_DDS) == "") nPRace = 99; + } + sResRef = "po_" + Get2DAString("portraits", "BaseResRef", nID); + NuiSetUserData(oPC, nToken, JsonInt (nID)); + // This is passed to the portrait name txt that actually sets + // the portrait information and tells it we picked an ID. + SetLocalInt(oPC, "AI_PORTRAIT_ID_SET", TRUE); + NuiSetBind(oPC, nToken, "port_name", JsonString (sResRef)); + } + } + if(sEvent == "mousedown") + { + int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn")); + if (sElem == "opt_classes" && nMouseButton == NUI_MOUSE_BUTTON_LEFT) + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")); + SetLocalInt(oHenchman, "CLASS_OPTION_POSITION", nPosition); + DelayCommand(0.0, NuiDestroy(oPC, nToken)); + DelayCommand(0.1, CreateCharacterEditGUIPanel(oPC, oHenchman)); + return; + } + if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT) + { + if(sElem == "cmb_class") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)); + string sName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sDescription = GetStringByStrRef(StringToInt(Get2DAString("classes", "Description", nClass))); + string sIcon = Get2DAString("classes", "Icon", nClass); + CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription); + } + else if(sElem == "cmb_package") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)); + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition)); + string sName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nPackage))); + string sDescription = GetStringByStrRef(StringToInt(Get2DAString("packages", "Description", nPackage))); + string sIcon = Get2DAString("classes", "Icon", nClass); + CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription); + } + else if(sElem == "cmb_soundset") + { + int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_soundset_selected")); + int nSoundSet = GetSoundSetBySelection2DA(oHenchman, nSelection); + string sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nSoundSet)); + if(GetStringLeft(sResRef, 4) == "vs_f") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 11, ":1:2:3:22:34:35:41:42:44:45:46:")); + } + else if(GetStringLeft(sResRef, 4) == "vs_n") + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 10, ":1:2:3:34:35:36:40:42:44:45:")); + } + else + { + DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 7, ":1:2:3:11:12:13:33:")); + } + } + else if(sElem == "opt_classes") + { + int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1; + int nClass = GetClassByPosition(nPosition, oHenchman); + if(nClass != CLASS_TYPE_INVALID) + { + string sName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + string sDescription = GetStringByStrRef(StringToInt(Get2DAString("classes", "Description", nClass))); + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition)); + string sPackageName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nPackage))); + sDescription += "\n\nPACKAGE: \n" + sPackageName + "\n"; + sDescription += GetStringByStrRef(StringToInt(Get2DAString("packages", "Description", nPackage))); + string sIcon = Get2DAString("classes", "Icon", nClass); + CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription); + } + } + } + } + } + else if(sWndId == "char_description_nui") + { + if(sEvent == "click" && sElem == "btn_ok") DelayCommand(0.0, NuiDestroy(oPC, nToken)); + } + } +} +void PopupWidgetHenchmanGUIPanel(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt (oPC, "AI_NO_NUI_SAVE", TRUE); + DelayCommand (0.5f, DeleteLocalInt (oPC, "AI_NO_NUI_SAVE")); + // Row 1 (buttons)********************************************************** + json jRow = CreateButtonImage(JsonArray(), "ir_level1", "btn_one", 30.0f, 30.0f); + jRow = CreateButtonImage(jRow, "ir_level2", "btn_two", 30.0f, 30.0f); + jRow = CreateButtonImage(jRow, "ir_level3", "btn_three", 30.0f, 30.0f); + jRow = CreateButtonImage(jRow, "ir_level4", "btn_four", 30.0f, 30.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + int bAINPCWidgetLock = GetLocalInt(oPC, "AI_WIDGET_HENCHMAN_LOCK"); + // Get the window location to restore it from the database. + float fX = GetLocalFloat(oPC, "widget_henchman_X"); + float fY = GetLocalFloat(oPC, "widget_henchman_Y"); + if(fX == 0.0f && fY == 0.0f) + { + fX = 10.0f; + fY = 10.0f; + } + if(bAINPCWidgetLock) + { + fX = fX + 4.0f; + fY = fY + 45.0f; + } + // Set the layout of the window. + json jLayout = NuiCol (jCol); + int nToken; + if(bAINPCWidgetLock) nToken = SetWindow (oPC, jLayout, "widget_henchman", "Henchman Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_npc"); + else nToken = SetWindow (oPC, jLayout, "widget_henchman", "Henchman Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_npc"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch (oPC, nToken, "collapsed", TRUE); + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + //NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_one_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four_event", JsonBool (TRUE)); +} diff --git a/_module/nss/pi_buffing.nss b/_module/nss/pi_buffing.nss new file mode 100644 index 0000000..18e40a3 --- /dev/null +++ b/_module/nss/pi_buffing.nss @@ -0,0 +1,374 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pi_buffing +//////////////////////////////////////////////////////////////////////////////// + Executable plug in script for Philos Module Extentions. + + Database structure: + Name(string) Tag(String) Spells(Json) + Tag: Widget - 0 = x position, 1 = y position, 2 = On/Off, 3 = Locked + Tag: List (string) set to the list number selected 1,2,3, or 4. + Tag: List# is the list of spells for List number 1,2,3, or 4. + + UI to save a players buff spells to be cast after resting. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +const int BUFF_MAX_SPELLS = 50; +const string FB_NO_MONSTER_CHECK = "FB_NO_MONSTER_CHECK"; + +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +// Creates the table and initializes if it needs to. +void CheckBuffDataAndInitialize(object oPlayer, string sTag); +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetBuffDatabaseJson(object oPlayer, string sDataField, json jData, string sTag); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag); +// Creates the widget for buffing. +void PopupWidgetBuffGUIPanel(object oPC); + +void main() +{ + object oPC = OBJECT_SELF; + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt(oPC, AI_NO_NUI_SAVE)); + // Check to make sure the database is setup before we do anything. + CheckBuffDataAndInitialize(oPC, "menudata"); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + if(JsonGetType(JsonArrayGet(jMenuData, 0)) == JSON_TYPE_NULL) + { + jMenuData = JsonArrayInsert(JsonArray(), JsonString("list1")); // 0 Spell List # + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(0.0)); // 1 Main menu X pos. + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(GetGUIHeightMiddle(oPC, 257.0))); // 2 Main menu Y pos. + jMenuData = JsonArrayInsert(jMenuData, JsonBool(FALSE)); // 3 Widget on/off + jMenuData = JsonArrayInsert(jMenuData, JsonBool(FALSE)); // 4 Widget Locked + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(10.0)); // 5 Widget X pos. + jMenuData = JsonArrayInsert(jMenuData, JsonFloat(10.0)); // 6 Widget Y pos. + SetBuffDatabaseJson(oPC, "spells", jMenuData, "menudata"); + } + if(StartingUp(oPC)) return; + // Row 1 (Buttons) ********************************************************* 83 + json jRow = CreateButtonSelect(JsonArray(), "Save", "btn_save", 60.0f, 30.0f, "btn_save_tooltip"); + jRow = CreateButton(jRow, "Clear", "btn_clear", 60.0f, 30.0f, -1.0, "btn_clear_tooltip"); + jRow = CreateButton(jRow, "Buff", "btn_buff", 60.0f, 30.0f, -1.0, "btn_buff_tooltip"); + jRow = CreateButtonSelect(jRow, "List 1", "btn_list1", 60.0f, 30.0f); + jRow = CreateButtonSelect(jRow, "List 2", "btn_list2", 60.0f, 30.0f); + jRow = CreateButtonSelect(jRow, "List 3", "btn_list3", 60.0f, 30.0f); + jRow = CreateButtonSelect(jRow, "List 4", "btn_list4", 60.0f, 30.0f); + jRow = CreateTextEditBox(jRow, "", "txt_spell_delay", 3, FALSE, 40.0f, 30.0f, "txt_spell_delay_tooltip"); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Buttons) ********************************************************* 121 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateCheckBox(jRow, "Buff Widget", "buff_widget", 110.0, 30.0f, "buff_widget_tooltip"); + jRow = CreateCheckBox(jRow, "Lock Widget", "lock_buff_widget", 110.0, 30.0f, "lock_buff_widget_tooltip"); + if(!ai_GetIsServer()) + { + jRow = CreateCheckBox(jRow, "Don't Check for Monsters", "chbx_no_monster_check", 200.0, 30.0f, "chbx_no_monster_check_tooltip"); + } + else + { + if(ai_GetIsDungeonMaster(oPC)) + { + jRow = CreateCheckBox(jRow, "Don't Check for Monsters", "chbx_no_monster_check", 200.0, 30.0f, "chbx_no_monster_check_tooltip"); + } + } + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (List of Spells) ************************************************** 164 + // Create the button template for the List. + jRow = JsonArray(); + string sList = JsonGetString(JsonArrayGet(jMenuData, 0)); + int nCntr, nIndex; + string sCntr, sIndex; + json jSpell; + CheckBuffDataAndInitialize(oPC, sList); + json jSpells = GetBuffDatabaseJson(oPC, "spells", sList); + while(nCntr <= BUFF_MAX_SPELLS) + { + jSpell = JsonArrayGet(jSpells, nCntr); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + sIndex = IntToString(nIndex++); + jRow = CreateButtonImage(jRow, "", "btn_spell_" + sIndex, 35.0, 35.0, 0.0, "btn_spell_" + sIndex + "_tooltip"); + } + nCntr++; + } + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Get the window location to restore it from the database. + float fWidth = IntToFloat(nIndex) * 39; + if(fWidth < 530.0) fWidth = 530.0; + float fX = JsonGetFloat(JsonArrayGet(jMenuData, 1)); + float fY = JsonGetFloat(JsonArrayGet(jMenuData, 2)); + if(fX == 0.0f && fY == 0.0f) + { + fX = 0.0f; + fY = GetGUIHeightMiddle(oPC, 257.0); + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, "plbuffwin", "Fast Buffing Spells", + fX, fY, fWidth, 164.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_buffing"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + // Set the elements to show events. + int nSelected = GetEventScript(oPC, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT) == "pc_savebuffs"; + NuiSetBind(oPC, nToken, "btn_save", JsonBool(nSelected)); + NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_save_tooltip", JsonString(" Saves any spells cast on you or your associates.")); + NuiSetBind(oPC, nToken, "btn_clear", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_tooltip", JsonString(" Clears the current list of all saved spells.")); + NuiSetBind(oPC, nToken, "btn_buff", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_buff_tooltip", JsonString(" Casts the current list of saved spells.")); + if(sList == "list1") NuiSetBind (oPC, nToken, "btn_list1", JsonBool (TRUE)); + else NuiSetBind(oPC, nToken, "btn_list1", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list1_event", JsonBool(TRUE)); + if(sList == "list2") NuiSetBind (oPC, nToken, "btn_list2", JsonBool (TRUE)); + else NuiSetBind(oPC, nToken, "btn_list2", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list2_event", JsonBool(TRUE)); + if(sList == "list3") NuiSetBind (oPC, nToken, "btn_list3", JsonBool (TRUE)); + else NuiSetBind(oPC, nToken, "btn_list3", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list3_event", JsonBool(TRUE)); + if(sList == "list4") NuiSetBind (oPC, nToken, "btn_list4", JsonBool (TRUE)); + else NuiSetBind (oPC, nToken, "btn_list4", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_list4_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "txt_spell_delay", TRUE); + string sText = " Allows you to adjust the speed that spells are cast in [0.1 seconds to 6.0 seconds]"; + NuiSetBind(oPC, nToken, "txt_spell_delay_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "txt_spell_delay_tooltip", JsonString(sText)); + CheckBuffDataAndInitialize(oPC, "Delay"); + sText = GetBuffDatabaseString(oPC, "spells", "Delay"); + float fDelay = StringToFloat(sText); + if(fDelay < 0.1f) fDelay = 0.1f; + else if(fDelay > 6.0f) fDelay = 6.0f; + sText = FloatToString(fDelay, 0, 1); + NuiSetBind(oPC, nToken, "txt_spell_delay", JsonString(sText)); + int nValue = JsonGetInt(JsonArrayGet(jMenuData, 3)); + NuiSetBind(oPC, nToken, "buff_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "buff_widget_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "buff_widget_check", TRUE); + sText = " Creates a set of 4 buttons on the screen for quick buffing."; + NuiSetBind(oPC, nToken, "buff_widget_tooltip", JsonString(sText)); + nValue = JsonGetInt(JsonArrayGet(jMenuData, 4)); + NuiSetBind(oPC, nToken, "lock_buff_widget_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "lock_buff_widget_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "lock_buff_widget_check", TRUE); + sText = " Locks the buffing widget in place reducing its size."; + NuiSetBind(oPC, nToken, "lock_buff_widget_tooltip", JsonString(sText)); + if(!ai_GetIsServer()) + { + NuiSetBind(oPC, nToken, "chbx_no_monster_check_event", JsonBool(TRUE)); + nValue = GetLocalInt(oPC, FB_NO_MONSTER_CHECK); + NuiSetBind(oPC, nToken, "chbx_no_monster_check_check", JsonBool(nValue)); + NuiSetBindWatch(oPC, nToken, "chbx_no_monster_check_check", TRUE); + sText = " Turns on/off checks for nearby monsters."; + NuiSetBind(oPC, nToken, "chbx_no_monster_check_tooltip", JsonString(sText)); + } + // Create buttons with spells listed. + int nSpell, nClass, nLevel, nMetamagic, nDomain; + string sName, sTargetName, sCasterName, sResRef; + nCntr = 0; + nIndex = 0; + while(nCntr <= BUFF_MAX_SPELLS) + { + jSpell = JsonArrayGet(jSpells, nCntr); + if(JsonGetType(jSpell) != JSON_TYPE_NULL) + { + nSpell = JsonGetInt(JsonArrayGet(jSpell, 0)); + nClass = JsonGetInt(JsonArrayGet(jSpell, 1)); + nLevel = JsonGetInt(JsonArrayGet(jSpell, 2)); + nMetamagic = JsonGetInt(JsonArrayGet(jSpell, 3)); + nDomain = JsonGetInt(JsonArrayGet(jSpell, 4)); + sCasterName = JsonGetString(JsonArrayGet(jSpell, 5)); + sTargetName = JsonGetString(JsonArrayGet(jSpell, 6)); + sResRef = Get2DAString("spells", "IconResRef", nSpell); + sName = " " + sCasterName + " ("; + sName += GetStringByStrRef(StringToInt(Get2DAString("classes", "Short", nClass))); + sName += " / " + IntToString (nLevel) + ") casting "; + sName += GetStringByStrRef(StringToInt(Get2DAString("spells", "Name", nSpell))); + if(nMetamagic > 0) + { + if(nMetamagic == METAMAGIC_EMPOWER) sName += " / Empowered"; + else if(nMetamagic == METAMAGIC_EXTEND) sName += " / Extended"; + else if(nMetamagic == METAMAGIC_MAXIMIZE) sName += " / Maximized"; + else if(nMetamagic == METAMAGIC_QUICKEN) sName += " / Quickened"; + else if(nMetamagic == METAMAGIC_SILENT) sName += " / Silent"; + else if(nMetamagic == METAMAGIC_STILL) sName += " / Still"; + } + if(nDomain > 0) sName += " / Domain"; + sName += " on " + sTargetName; + sIndex = IntToString(nIndex++); + NuiSetBind(oPC, nToken, "btn_spell_" + sIndex + "_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_spell_" + sIndex + "_image", JsonString(sResRef)); + NuiSetBind(oPC, nToken, "btn_spell_" + sIndex + "_tooltip", JsonString(sName)); + } + nCntr++; + } +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_buffing")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Quick Buff")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_appear")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + int bWidgetOn = JsonGetInt(JsonArrayGet(jMenuData, 3)); + if(bWidgetOn) + { + PopupWidgetBuffGUIPanel(oPC); + ai_SendMessages("Buffing widget has been created.", AI_COLOR_YELLOW, oPC); + } + return TRUE; +} +void CreateBuffDataTable(object oPlayer) +{ + sqlquery sql = SqlPrepareQueryObject(oPlayer, + "CREATE TABLE IF NOT EXISTS BUFF_TABLE (" + + "name TEXT, " + + "tag TEXT, " + + "spells TEXT, " + + "PRIMARY KEY(name, tag));"); + SqlStep(sql); +} +void CheckBuffDataAndInitialize(object oPlayer, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' AND name=@tableName;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString (sql, "@tableName", "BUFF_TABLE"); + if(!SqlStep (sql)) CreateBuffDataTable(oPlayer); + sQuery = "SELECT name FROM BUFF_TABLE Where name = @name AND tag = @tag;"; + sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(!SqlStep(sql)) + { + sQuery = "INSERT INTO BUFF_TABLE(name, tag, spells) " + + "VALUES (@name, @tag, @spells);"; + sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlBindJson(sql, "@spells", JsonArray()); + SqlStep(sql); + } +} +void SetBuffDatabaseString(object oPlayer, string sDataField, string sData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep(sql); +} +string GetBuffDatabaseString(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(SqlStep(sql)) return SqlGetString(sql, 0); + else return ""; +} +void SetBuffDatabaseJson (object oPlayer, string sDataField, json jData, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "UPDATE BUFF_TABLE SET " + sDataField + " = @data WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindJson(sql, "@data", jData); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + SqlStep(sql); +} +json GetBuffDatabaseJson(object oPlayer, string sDataField, string sTag) +{ + string sName = ai_RemoveIllegalCharacters(ai_StripColorCodes(GetName(oPlayer, TRUE))); + string sQuery = "SELECT " + sDataField + " FROM BUFF_TABLE WHERE name = @name AND tag = @tag;"; + sqlquery sql = SqlPrepareQueryObject(oPlayer, sQuery); + SqlBindString(sql, "@name", sName); + SqlBindString(sql, "@tag", sTag); + if(SqlStep(sql)) return SqlGetJson(sql, 0); + else return JsonArray(); +} +void PopupWidgetBuffGUIPanel(object oPC) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + // Row 1 (buttons)********************************************************** + json jRow = CreateButtonImage(JsonArray(), "ir_level1", "btn_one", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level2", "btn_two", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level3", "btn_three", 35.0f, 35.0f, 0.0); + jRow = CreateButtonImage(jRow, "ir_level4", "btn_four", 35.0f, 35.0f, 0.0); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + json jMenuData = GetBuffDatabaseJson(oPC, "spells", "menudata"); + int bAIBuffWidgetLock = JsonGetInt(JsonArrayGet(jMenuData, 4)); + // Get the window location to restore it from the database. + float fX = JsonGetFloat(JsonArrayGet(jMenuData, 5)); + float fY = JsonGetFloat(JsonArrayGet(jMenuData, 6)); + if(fX == 0.0f && fY == 0.0f) + { + fX = 10.0f; + fY = 10.0f; + } + float fGUI_Scale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0; + if(bAIBuffWidgetLock) + { + fX += 4.0f; + // GUI scales are a mess, I just figured them out per scale to keep the widget from moving. + if(fGUI_Scale == 1.0) fY += 37.0; + else if(fGUI_Scale == 1.1) fY += 38.0; + else if(fGUI_Scale == 1.2) fY += 40.0; + else if(fGUI_Scale == 1.3) fY += 42.0; + else if(fGUI_Scale == 1.4) fY += 43.0; + else if(fGUI_Scale == 1.5) fY += 45.0; + else if(fGUI_Scale == 1.6) fY += 47.0; + else if(fGUI_Scale == 1.7) fY += 48.0; + else if(fGUI_Scale == 1.8) fY += 50.0; + else if(fGUI_Scale == 1.9) fY += 52.0; + else if(fGUI_Scale == 2.0) fY += 54.0; + } + // Set the layout of the window. + json jLayout = NuiCol(jCol); + int nToken; + if(bAIBuffWidgetLock) nToken = SetWindow (oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_buffing"); + else nToken = SetWindow (oPC, jLayout, "widgetbuffwin", "Fast Buff Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_buffing"); + // Set event watches for window inspector and save window location. + NuiSetBindWatch (oPC, nToken, "collapsed", TRUE); + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the buttons to show events. + //NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_one_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_two_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_three_event", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four", JsonBool (TRUE)); + NuiSetBind (oPC, nToken, "btn_four_event", JsonBool (TRUE)); +} + diff --git a/_module/nss/pi_crafting.nss b/_module/nss/pi_crafting.nss new file mode 100644 index 0000000..7df0bec --- /dev/null +++ b/_module/nss/pi_crafting.nss @@ -0,0 +1,44 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pi_crafting +//////////////////////////////////////////////////////////////////////////////// + Executable plug in script for Philos Module Extentions + + Crafting UI for players items. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_items" +#include "nw_inc_gff" + +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + // Set this variable on the player so PEPS can run the targeting script for this plugin. + SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting"); + // Set Targeting variables. + SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET"); + ai_SendMessages("Select your charcter, a henchman or an item possessed by one.", AI_COLOR_YELLOW, oPC); + EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE | OBJECT_TYPE_ITEM , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE); + +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_crafting")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Item Crafting")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("isk_x2cweap")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/_module/nss/pi_debug.nss b/_module/nss/pi_debug.nss new file mode 100644 index 0000000..506b6e7 --- /dev/null +++ b/_module/nss/pi_debug.nss @@ -0,0 +1,206 @@ +/*////////////////////////////////////////////////////////////////////////////// + Script: pi_debug + Programmer: Philos +//////////////////////////////////////////////////////////////////////////////// + Plugin for debugging. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "0i_player_target" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + // Set window to not save until it has been created. + //SetLocalInt (oPC, AI_NO_NUI_SAVE, TRUE); + //DelayCommand (0.5f, DeleteLocalInt (oPC, AI_NO_NUI_SAVE)); + string sText = " [Single player]"; + if(ai_GetIsServer()) sText = " [Server]"; + // ************************************************************************* Width / Height + // Row 1 ******************************************************************* 500 / 73 + json jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, PHILOS_VERSION + sText, "lbl_version", 470.0f, 20.0f, NUI_HALIGN_CENTER); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 129 + sText = "Module: " + GetModuleName() + " [" + GetTag(GetModule()) + "]"; + jRow = CreateLabel(JsonArray(), sText, "lbl_module_name", 470.0f, 20.0f, NUI_HALIGN_CENTER); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 ******************************************************************* 500 / 101 + sText = ResManGetAliasFor("nw_c2_default1", RESTYPE_NCS); + if(sText != "") + { + jRow = CreateLabel(JsonArray(), "Monster AI (nw_c2_default1): " + sText, "monster_1_ai", 470.0f, 20.0f); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + // Row 4 ******************************************************************* 500 / 157 + sText = ResManGetAliasFor("j_ai_onheartbeat", RESTYPE_NCS); + if(sText != "") + { + jRow = CreateLabel(JsonArray(), "Monster AI (j_ai_onheartbeat): " + sText, "monster_2_ai", 470.0f, 20.0f); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + // Row 5 ******************************************************************* 500 / 213 + sText = ResManGetAliasFor("nw_ch_ac1", RESTYPE_NCS); + if(sText != "") + { + jRow = CreateLabel(JsonArray(), "Associate AI (nw_ch_ac1): " + sText, "henchman_ai", 470.0f, 20.0f); + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + } + // Row 6 ******************************************************************* 500 / 241 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Set NPC's scripts", "btn_npc_scripts", 150.0f, 20.0f, -1.0, "btn_npc_scripts_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Set Commandable", "btn_set_commandable", 150.0f, 20.0f, -1.0, "btn_set_commandable_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Clear Party Rep.", "btn_clear_reputation", 150.0f, 20.0f, -1.0, "btn_clear_reputation_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 7 ******************************************************************* 500 / 269 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "Display Target Info", "btn_info", 150.0f, 20.0f, -1.0, "btn_info_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Dump Object to Json", "btn_obj_json", 150.0f, 20.0f, -1.0, "btn_obj_json_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "List Object Variables", "btn_obj_var", 150.0f, 20.0f, -1.0, "btn_obj_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 8 ******************************************************************* 500 / 297 jRow = JsonArray(); + jRow = CreateButton(JsonArray(), "Delete Variable", "btn_delete_var", 115.0f, 25.0f, -1.0, "btn_delete_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Set Variable", "btn_set_var", 115.0f, 25.0f, -1.0, "btn_set_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Get Variable", "btn_get_var", 115.0f, 25.0f, -1.0, "btn_get_var_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + json jCombo = JsonArrayInsert(JsonArray(), NuiComboEntry("int", 0)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("float", 1)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("string", 2)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("object", 3)); + jCombo = JsonArrayInsert(jCombo, NuiComboEntry("location", 4)); + jRow = CreateCombo(jRow, jCombo, "cmb_var_type", 115.0, 25.0); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 9 ******************************************************************* 500 / 329 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Name:", "lbl_name", 40.0f, 20.0f); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_var_name", 40, FALSE, 425.0f, 20.0f, "txt_var_name_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 10 ******************************************************************* 500 / 357 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateLabel(jRow, "Value:", "lbl_value", 40.0f, 20.0f); + jRow = CreateTextEditBox(jRow, "sPlaceHolder", "txt_var_value", 40, FALSE, 425.0f, 20.0f, "txt_var_value_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 11 ******************************************************************* 500 / 385 + // Make the debug creature group. + // Group Row 1 ******************************************************************* 500 / 385 + json jGroupRow = CreateButton(JsonArray(), "Debug Creature", "btn_debug_creature", 120.0f, 20.0f, -1.0, "btn_debug_creature_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "Clear Event Scripts", "btn_clear_events", 150.0f, 20.0f, -1.0, "btn_clear_events_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupRow = CreateButton(jGroupRow, "Clear Debug", "btn_clear_debug", 120.0f, 20.0f, -1.0, "btn_clear_debug_tooltip"); + // Add group row to the group column. + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + float fHeight = 431.0; + // Group Row 2 ******************************************************************* 500 / --- + object oDebugCreature = GetLocalObject(oPC, "AI_RULE_DEBUG_CREATURE_OBJECT"); + if(GetIsObjectValid(oDebugCreature)) + { + string sScript = GetEventScript(oDebugCreature, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT); + if(sScript == "nw_c2_default1") sText = GetName(oDebugCreature) + " is using monster AI scripts (" + sScript + ")."; + else if(sScript == "nw_ch_ac1") sText = GetName(oDebugCreature) + " is using associate AI scripts (" + sScript + ")."; + else if(sScript == "xx_pc_1_hb") sText = GetName(oDebugCreature) + " is using player AI scripts (" + sScript + ")."; + else if(sScript == "0e_id_events") sText = GetName(oDebugCreature) + " is using Infinite Dungeons AI scripts (" + sScript + ")."; + else if(sScript == "0e_prc_id_events") sText = GetName(oDebugCreature) + " is using PRC Infinite Dungeons AI scripts (" + sScript + ")."; + else sText = GetName(oDebugCreature) + " is using unknown AI scripts (" + sScript + ")."; + jGroupRow = CreateLabel(JsonArray(), sText, "debug_info", 455.0f, 20.0f, NUI_HALIGN_CENTER); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight = fHeight + 28; + } + // Group Row 3 ******************************************************************* 500 / --- + sText = GetLocalString(GetModule(), AI_RULE_DEBUG_CREATURE); + if(sText != "") sText = sText + " is sending AI debug to the log file."; + else sText = "Nothing is sending AI debug to the log file."; + jGroupRow = CreateLabel(JsonArray(), sText, "debug_log", 455.0f, 20.0f, NUI_HALIGN_CENTER); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + fHeight = fHeight + 28; + // Add group to the row. + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + string sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow(oPC, jLayout, "pi_debug_nui", sName + " PEPS Debug Menu", + -1.0, -1.0, 500.0f, fHeight + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_debug"); + // Set all binds, events, and watches. + // Row 1 - Version label. + // Row 2 Module Name. + // Row 3 - 5 Script locations. + // Row 6 + NuiSetBind(oPC, nToken, "btn_npc_scripts_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_npc_scripts_tooltip", JsonString(" Forces NPC to use Philos AI scripts!")); + NuiSetBind(oPC, nToken, "btn_set_commandable_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_set_commandable_tooltip", JsonString(" Sets a creatures to commandable.")); + NuiSetBind(oPC, nToken, "btn_clear_reputation_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_reputation_tooltip", JsonString(" Clears the party's reputation with creature's faction.")); + // Row 7 + NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_info_tooltip", JsonString(" Displays a target object's information to the log screen.")); + NuiSetBind(oPC, nToken, "btn_obj_json_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_obj_json_tooltip", JsonString(" Sends a Json Dump to the log file for the targeted object.")); + NuiSetBind(oPC, nToken, "btn_obj_var_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_obj_var_tooltip", JsonString(" Sends a list of variables for the targeted object.")); + // Row 8 + NuiSetBind(oPC, nToken, "btn_delete_var_tooltip", JsonString(" Delete the variable for the targeted object or Right click for the Module.")); + NuiSetBind(oPC, nToken, "btn_set_var_tooltip", JsonString(" Set the variable for the targeted object or Right click for the Module.")); + NuiSetBind(oPC, nToken, "btn_get_var_tooltip", JsonString(" Get the variable for the targeted object or Right click for the Module.")); + NuiSetBind(oPC, nToken, "cmb_var_type_event", JsonBool(TRUE)); + NuiSetBindWatch(oPC, nToken, "cmb_var_type_selected", TRUE); + // Row 9 + NuiSetBind(oPC, nToken, "txt_var_name_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "txt_var_name", TRUE); + NuiSetBind(oPC, nToken, "txt_var_name_tooltip", JsonString(" Name of the variable we are setting.")); + // Row 10 + NuiSetBind(oPC, nToken, "txt_var_value_event", JsonBool(TRUE)); + NuiSetBindWatch (oPC, nToken, "txt_var_value", TRUE); + NuiSetBind(oPC, nToken, "txt_var_value_tooltip", JsonString(" The value to set on the variable, Objects/Locations will need to be selected.")); + // Row 11 + NuiSetBind(oPC, nToken, "btn_debug_creature_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_debug_creature_tooltip", JsonString(" Sets target creature to send AI debug to the log file.")); + NuiSetBind(oPC, nToken, "btn_clear_events_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_events_tooltip", JsonString(" Sets a creature's event scripts to default.")); + NuiSetBind(oPC, nToken, "btn_clear_debug_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_debug_tooltip", JsonString(" Clears a creature from sending AI debug to the log file.")); +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_debug")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Debug Menu")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_tagsearch")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/_module/nss/pi_henchmen.nss b/_module/nss/pi_henchmen.nss new file mode 100644 index 0000000..5119039 --- /dev/null +++ b/_module/nss/pi_henchmen.nss @@ -0,0 +1,209 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pi_henchmen +//////////////////////////////////////////////////////////////////////////////// + Executable plug in script for Philos Module Extentions. + + UI to save a players as Henchmen. +*/////////////////////////////////////////////////////////////////////////////// +#include "pinc_henchmen" +// Does startup check if the game has just been loaded. +int StartingUp(object oPC); +// Inserts base classes to an array for a combo box. +json JArrayInsertBaseClasses(); +void main() +{ + object oPC = OBJECT_SELF; + if(StartingUp(oPC)) return; + // Set window to not save until it has been created. + SetLocalInt (oPC, "AI_NO_NUI_SAVE", TRUE); + DelayCommand (0.5f, DeleteLocalInt (oPC, "AI_NO_NUI_SAVE")); + // Row 1 (Buttons) ********************************************************* 775 / 73 + json jRow = CreateButtonSelect(JsonArray(), "Party 1", "btn_party1", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 2", "btn_party2", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 3", "btn_party3", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 4", "btn_party4", 90.0f, 20.0f); + jRow = CreateButtonSelect(jRow, "Party 5", "btn_party5", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 6", "btn_party6", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 7", "btn_party7", 90.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Party 8", "btn_party8", 90.0f, 20.0f); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 (Options)********************************************************** 775 / 101 + jRow = CreateButton(JsonArray(), "Clear Party", "btn_clear_party", 120.0f, 20.0f, -1.0, "btn_clear_party_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Party Join", "btn_join_party", 120.0f, 20.0f, -1.0, "btn_join_party_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButtonSelect(jRow, "Create NPC Henchman", "btn_npc_henchman", 200.0f, 20.0f, "btn_npc_henchman_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Save Party", "btn_save_party", 120.0f, 20.0f, -1.0, "btn_save_party_tooltip"); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + jRow = CreateButton(jRow, "Remove Party", "btn_remove_party", 120.0f, 20.0f, -1.0, "btn_remove_party_tooltip"); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 3 (Names and List titles) ******************************************* 775 / 124 + jRow = CreateLabel(JsonArray(), "", "lbl_save_char", 150.0, 15.0, 0, 0); + jRow = CreateLabel(jRow, "", "lbl_save_list", 200.0, 15.0, 0, 0); + jRow = CreateLabel(jRow, "In game party", "lbl_game_list", 200.0, 15.0, 0, 0); + jRow = CreateLabel(jRow, "", "lbl_game_char", 150.0, 15.0, 0, 0); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Row 4 (List Characters) ************************************************* 775 / 488 (364) + // Saved Characters for Party # + // ***** Adding character saved group next to the button list ************** + json jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateImage(jGroupRow, "", "img_saved_portrait", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 128.0, 200.0, 0.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_saved_stats", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_saved_classes", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateButton(JsonArray(), "", "btn_saved_join", 75.0, 20.0); + jGroupRow = CreateButton(jGroupRow, "Remove", "btn_saved_remove", 75.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + //jGroupRow = JsonArray(); + //CreateButton(jGroupRow, "Edit", "btn_saved_edit", 150.0, 20.0); + //jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Create the button template for the List. + json jButton = NuiId(NuiButton(NuiBind ("btns_saved_char")), "btn_saved_char"); + json jList = JsonArrayInsert(JsonArray (), NuiListTemplateCell(jButton, 170.0, TRUE)); + // Create the list with the template. + jRow = CreateList(jRow, jList, "btns_saved_char", 25.0, 200.0, 325.0); + // Current Characters. + // Create the button template for the List. + jButton = NuiId(NuiButton(NuiBind ("btns_cur_char")), "btn_cur_char"); + jList = JsonArrayInsert(JsonArray (), NuiListTemplateCell(jButton, 170.0, TRUE)); + // Create the list with the template. + jRow = CreateList(jRow, jList, "btns_cur_char", 25.0, 200.0, 325.0); + // ***** Adding character current group next to the button list ************ + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateImage(jGroupRow, "", "img_cur_portrait", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 128.0, 200.0, 0.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_cur_stats", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateLabel(JsonArray(), "", "lbl_cur_classes", 150.0, 15.0, 0, 0, 0.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateButton(JsonArray(), "", "btn_cur_save", 75.0, 20.0); + jGroupRow = CreateButton(jGroupRow, "Remove", "btn_cur_remove", 75.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jGroupRow = CreateButton(JsonArray(), "Edit", "btn_cur_edit", 150.0, 20.0); + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jRow = JsonArrayInsert(jRow, NuiGroup(NuiCol(jGroupCol))); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the layout of the window. + json jLayout = NuiCol(jCol); + // Get the window location to restore it from the database. + CheckHenchmanDataAndInitialize(oPC, "0"); + json jData = GetHenchmanDbJson(oPC, "henchman", "0"); + json jGeometry = JsonObjectGet(jData, "henchman_nui"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + if(fX == 0.0 && fY == 0.0) + { + fX = -1.0; + fY = -1.0; + } + string sName = GetName(oPC); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow (oPC, jLayout, "henchman_nui", sName + " party", + fX, fY, 775.0, 488.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen"); + // Lets set MaxHenchman here. + if(GetMaxHenchmen() < 6) SetMaxHenchmen(6); + // Setup watch for saving location. + NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE); + // Set the elements to show events. + NuiSetBind(oPC, nToken, "btn_save_pc_event", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_current_party_event", JsonBool (TRUE)); + string sParty = GetHenchmanDbString(oPC, "henchname", "0"); + if(sParty == "") + { + SetHenchmanDbString(oPC, "henchname", "1", "0"); + sParty = "1"; + } + // Set the party # buttons. + int nIndex; + string sIndex; + for(nIndex = 1; nIndex < 9; nIndex++) + { + sIndex = IntToString(nIndex); + if(sParty == sIndex) NuiSetBind(oPC, nToken, "btn_party" + sIndex, JsonBool(TRUE)); + else NuiSetBind(oPC, nToken, "btn_party" + sIndex, JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_party" + sIndex + "_event", JsonBool (TRUE)); + } + NuiSetBind(oPC, nToken, "btn_npc_henchman_event", JsonBool(TRUE)); + string sText = " Select a creature to copy and have them join you."; + NuiSetBind(oPC, nToken, "btn_npc_henchman_tooltip", JsonString(sText)); + // ********** Saved Henchman in party # ********* + nIndex = 0; + int nSlot, nMaxHenchman = AI_MAX_HENCHMAN + 1; + json jButtons = JsonArray(); + string sFirstHenchman, sButtonText; + json jNPCs, jNPC; + // Add saved party members from sParty to the button list. + while(nIndex < nMaxHenchman) + { + sIndex = IntToString(nIndex); + sButtonText = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + if(sButtonText != "") + { + jButtons = JsonArrayInsert(jButtons, JsonString(sButtonText)); + SetHenchmanDbString(oPC, "slot", sParty + IntToString(nSlot++), sParty + sIndex); + } + nIndex++; + } + // Add the buttons to the list. + NuiSetBind(oPC, nToken, "btns_saved_char", jButtons); + // Set up button lables for henchman. + NuiSetBind(oPC, nToken, "lbl_save_list_label", JsonString("Party Save " + sParty)); + AddSavedCharacterInfo(oPC, nToken, sParty); + // ********** Current Party ********* + NuiSetBind(oPC, nToken, "btn_current_party", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_clear_party", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "lbl_save_char", JsonBool(TRUE)); + // Set up button labels for henchman. + NuiSetBind(oPC, nToken, "btn_join_save_label", JsonString("Save")); + nIndex = 0; + jButtons = JsonArray(); + object oPartyMember, oCharacter = OBJECT_INVALID; + // Add current party members to the button list. + while(nIndex < AI_MAX_HENCHMAN) + { + if(nIndex == 0) oPartyMember = oPC; + else oPartyMember = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oPartyMember != OBJECT_INVALID) jButtons = JsonArrayInsert(jButtons, JsonString(GetName(oPartyMember))); + else break; + nIndex++; + } + // Add the buttons to the list. + NuiSetBind(oPC, nToken, "btns_cur_char", jButtons); + AddCurrentCharacterInfo(oPC, nToken, sParty); +} +int StartingUp(object oPC) +{ + if(GetLocalInt(oPC, AI_ADD_PLUGIN)) + { + json jPlugin = JsonArray(); + jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_henchmen")); + jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE)); + jPlugin = JsonArrayInsert(jPlugin, JsonString("Henchmen Menu")); + jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_creator")); + json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS); + jPlugins = JsonArrayInsert(jPlugins, jPlugin); + SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin); + SetLocalInt(oPC, AI_PLUGIN_SET, TRUE); + return TRUE; + } + if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE; + return TRUE; +} + diff --git a/_module/nss/pinc_henchmen.nss b/_module/nss/pinc_henchmen.nss new file mode 100644 index 0000000..d5f72de --- /dev/null +++ b/_module/nss/pinc_henchmen.nss @@ -0,0 +1,1573 @@ +/*////////////////////////////////////////////////////////////////////////////// +// Script Name: pinc_henchmen +//////////////////////////////////////////////////////////////////////////////// + Include file for Henchmen plug in scripts for Philos Module Extentions. + +Database Info: +Slot 0 - henchname = the save slot 1 - 8. +Slots 1 - 8 define the selections: + henchname = Saved character selected. + image = Current character selected. +*/////////////////////////////////////////////////////////////////////////////// +#include "0i_nui" +#include "nw_inc_gff" + +const string HENCHMAN_DATABASE = "philos_henchman_db"; +const string HENCHMAN_TABLE = "HENCHMAN_TABLE"; +const string HENCHMAN_TO_EDIT = "HENCHMAN_TO_EDIT"; + +// Creates the table and initializes if it needs to. +void CheckHenchmanDataAndInitialize(object oPC, string sSlot); +// Removes a henchan from the current slot. +void RemoveHenchmanDb(object oPC, string sSlot); +// sDataField should be one of the data fields for that table. +// sData is the string data to be saved. +void SetHenchmanDbString(object oPC, string sDataField, string sData, string sSlot); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +string GetHenchmanDbString(object oPC, string sDataField, string sSlot); +// sDataField should be one of the data fields for that table. +// jData is the json data to be saved. +void SetHenchmanDbJson(object oPC, string sDataField, json jData, string sSlot); +// sDataField should be one of the data fields for the table. +// Returns a string of the data stored. +json GetHenchmanDbJson(object oPC, string sDataField, string sSlot); +// sSlot is the slot to define this object in the database for this Slot## (# Party button and #1-6). +// oHenchman is the PC/Henchman to be saved. +void SetHenchmanDbObject(object oPC, object oHenchman, string sSlot); +// sSlot is the slot to define this object in the database for this Slot## (# Party button and #1-6). +// lLocationToSpawn will spawn the object at that location. +object GetHenchmanDbObject(object oPC, location lLocationToSpawn, string sSlot); +// Returns TRUE if the henchman with sName can join. +int GetJoinButtonActive(object oPC, string sName); +// Returns a two letter alignment string. +string GetAlignText(object oHenchman); +// Populates the Saved character group. +void AddSavedCharacterInfo(object oPC, int nToken, string sParty); +// Populates the Current character group. +void AddCurrentCharacterInfo(object oPC, int nToken, string sParty); +// Removes a henchman from your party. +void RemoveYourHenchman(object oPC, int nToken, string sParty); +// Removes all henchman from the party. +void RemoveWholeParty(object oPC, int nToken, string sParty); +// Saves a henchman in your party to the saved party #. +void SaveYourHenchman(object oPC, int nToken, string sParty); +// Saves the whole party to the saved party #. +void SaveWholeParty(object oPC, int nToken, string sParty); +// Saves the players current party to party #. +void SavedPartyJoin(object oPC, int nToken, string sParty); +// Saves a character in the players party to party #. +void SavedCharacterJoin(object oPC, int nToken, string sParty); +// Clears the players saved party #. +void SavedPartyCleared(object oPC, int nToken, string sParty); +// Sets oHenchmans scripts to the current AI. +void SetHenchmanScripts(object oHenchman); +// If a henchman does not have a LvlStatList this will create one for them. +// nLevels allows the creation of x levels for LvlStatList using the 1st class. +// 0 on nLevels makes the function build it based on current levels. +json CreateLevelStatList(json jHenchman, object oHenchman, object oPC, int nLevels = 0); +// Resets the character to level one in the first class. +object ResetCharacter(object oPC, object oHenchman); +// Creates a menu to edit a characters information. +void CreateCharacterEditGUIPanel(object oPC, object oAssociate); +// Creates a character description menu. +void CreateCharacterDescriptionNUI(object oPC, string sName, string sIcon, string sDescription); + +void CreateHenchmanDataTable () +{ + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, + "CREATE TABLE IF NOT EXISTS " + HENCHMAN_TABLE + " (" + + "name TEXT, " + + "slot TEXT, " + + "henchname TEXT, " + + "image TEXT, " + + "stats TEXT, " + + "classes TEXT, " + + "henchman TEXT, " + + "PRIMARY KEY(slot));"); + SqlStep (sql); +} +void CheckHenchmanDataAndInitialize(object oPC, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT name FROM sqlite_master WHERE type ='table' AND name=@tableName;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@tableName", HENCHMAN_TABLE); + if(!SqlStep (sql)) CreateHenchmanDataTable(); + sQuery = "SELECT slot FROM " + HENCHMAN_TABLE + " Where name = @name AND slot = @slot;"; + sql = SqlPrepareQueryCampaign("philos_henchman_db", sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + if(!SqlStep(sql)) + { + sQuery = "INSERT INTO " + HENCHMAN_TABLE + "(name, slot, henchname, image, stats, classes " + + ", henchman) VALUES (@name, @slot, @henchname, @image, @stats, @classes, @henchman);"; + sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlBindString(sql, "@henchname", ""); + SqlBindString(sql, "@image", ""); + SqlBindString(sql, "@stats", ""); + SqlBindString(sql, "@classes", ""); + SqlBindJson(sql, "@henchman", JsonObject()); + SqlStep(sql); + } +} +void RemoveHenchmanDb(object oPC, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "DELETE FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlStep(sql); +} +void SetHenchmanDbString(object oPC, string sDataField, string sData, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "UPDATE " + HENCHMAN_TABLE + " SET " + sDataField + " = @data WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@data", sData); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlStep(sql); +} +string GetHenchmanDbString(object oPC, string sDataField, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT " + sDataField + " FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + if(SqlStep (sql)) return SqlGetString(sql, 0); + else return ""; +} +void SetHenchmanDbJson(object oPC, string sDataField, json jData, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "UPDATE " + HENCHMAN_TABLE + " SET " + sDataField + + " = @data WHERE name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindJson (sql, "@data", jData); + SqlBindString(sql, "@name", sPCName); + SqlBindString (sql, "@slot", sSlot); + SqlStep (sql); +} +json GetHenchmanDbJson(object oPC, string sDataField, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT " + sDataField + " FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString (sql, "@slot", sSlot); + if (SqlStep (sql)) return SqlGetJson (sql, 0); + else return JsonArray (); +} +void SetHenchmanDbObject(object oPC, object oHenchman, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "UPDATE " + HENCHMAN_TABLE + " SET henchman = @henchman WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindObject(sql, "@henchman", oHenchman); + SqlBindString(sql, "@name", sPCName); + SqlBindString(sql, "@slot", sSlot); + SqlStep(sql); +} +object GetHenchmanDbObject(object oPC, location lLocationToSpawn, string sSlot) +{ + string sPCName = ai_RemoveIllegalCharacters(GetPCPlayerName(oPC)); + string sQuery = "SELECT henchman FROM " + HENCHMAN_TABLE + " WHERE " + + "name = @name AND slot = @slot;"; + sqlquery sql = SqlPrepareQueryCampaign(HENCHMAN_DATABASE, sQuery); + SqlBindString(sql, "@name", sPCName); + SqlBindString (sql, "@slot", sSlot); + if (SqlStep (sql)) + { + json jHenchman = SqlGetJson(sql, 0); + string sTag = JsonGetString(GffGetString(jHenchman, "Tag")); + if(sTag == "") jHenchman = GffReplaceString(jHenchman, "Tag", "Hench_" + IntToString(Random(100))); + return JsonToObject(jHenchman, lLocationToSpawn, OBJECT_INVALID, TRUE); + } + return OBJECT_INVALID; +} +int GetJoinButtonActive(object oPC, string sName) +{ + if(sName == GetName(oPC)) return FALSE; + // Look for a free henchman slot, and if this henchman is already joined! + int nIndex = 1; + object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(oHenchman != OBJECT_INVALID) + { + if(GetName(oHenchman) == sName) return FALSE; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + return TRUE; +} +string GetAlignText(object oHenchman) +{ + string sAlign1, sAlign2; + switch (GetAlignmentLawChaos(oHenchman)) + { + case ALIGNMENT_LAWFUL : sAlign1 = "L"; break; + case ALIGNMENT_NEUTRAL : sAlign1 = "N"; break; + case ALIGNMENT_CHAOTIC : sAlign1 = "C"; break; + } + switch (GetAlignmentGoodEvil(oHenchman)) + { + case ALIGNMENT_GOOD : sAlign2 = "G"; break; + case ALIGNMENT_NEUTRAL : sAlign2 = "N"; break; + case ALIGNMENT_EVIL : sAlign2 = "E"; break; + } + string sAlign = sAlign1 + sAlign2; + if (sAlign == "NN") sAlign = "TN"; + return sAlign; +} +void AddSavedCharacterInfo(object oPC, int nToken, string sParty) +{ + string sHenchman = GetHenchmanDbString(oPC, "henchname", sParty); + // Add Henchman information. + if(sHenchman != "") + { + NuiSetBind (oPC, nToken, "btn_clear_party_event", JsonBool (TRUE)); + string sText = " Clears all characters from party " + sParty + "'s list!"; + NuiSetBind(oPC, nToken, "btn_clear_party_tooltip", JsonString(sText)); + NuiSetBind(oPC, nToken, "btn_join_party", JsonBool (TRUE)); + NuiSetBind(oPC, nToken, "btn_join_party_event", JsonBool (TRUE)); + sText = " Saved characters from party " + sParty + " enter the game and join you."; + NuiSetBind(oPC, nToken, "btn_join_party_tooltip", JsonString(sText)); + // Setup the henchman window. + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sHenchman); + string sImage = GetHenchmanDbString(oPC, "image", sParty + sHenchman); + string sStats = GetHenchmanDbString(oPC, "stats", sParty + sHenchman); + string sClasses = GetHenchmanDbString(oPC, "classes", sParty + sHenchman); + NuiSetBind(oPC, nToken, "lbl_save_char_label", JsonString(sName)); + NuiSetBind(oPC, nToken, "img_saved_portrait_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "img_saved_portrait_image", JsonString(sImage + "l")); + NuiSetBind(oPC, nToken, "lbl_saved_stats_label", JsonString(sStats)); + NuiSetBind(oPC, nToken, "lbl_saved_classes_label", JsonString(sClasses)); + NuiSetBind(oPC, nToken, "btn_saved_join_label", JsonString("Join")); + NuiSetBind(oPC, nToken, "btn_saved_join_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_saved_remove_event", JsonBool(TRUE)); + //NuiSetBind(oPC, nToken, "btn_saved_edit_event", JsonBool(TRUE)); + } + else + { + NuiSetBind(oPC, nToken, "lbl_save_char_label", JsonString("Empty Party")); + NuiSetBind (oPC, nToken, "btn_clear_party_event", JsonBool (FALSE)); + NuiSetBind (oPC, nToken, "btn_join_party", JsonBool (FALSE)); + NuiSetBind (oPC, nToken, "btn_join_party_event", JsonBool (FALSE)); + // Setup the henchman window. + NuiSetBind(oPC, nToken, "img_saved_portrait_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "img_saved_portrait_image", JsonString("po_hu_m_99_l")); + NuiSetBind(oPC, nToken, "lbl_saved_stats_label", JsonString("")); + NuiSetBind(oPC, nToken, "lbl_saved_classes_label", JsonString("")); + NuiSetBind(oPC, nToken, "btn_saved_join_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_saved_join_label", JsonString("Join")); + NuiSetBind(oPC, nToken, "btn_saved_remove_event", JsonBool(FALSE)); + NuiSetBind(oPC, nToken, "btn_saved_edit_event", JsonBool(FALSE)); + } +} +void AddCurrentCharacterInfo(object oPC, int nToken, string sParty) +{ + string sHenchman = GetHenchmanDbString(oPC, "image", sParty); + if(sHenchman == "") + { + CheckHenchmanDataAndInitialize(oPC, sParty); + SetHenchmanDbString(oPC, "image", "0", sParty); + } + int nHenchman = StringToInt(sHenchman); + int nIndex = 0; + object oCharacter; + while(nIndex < AI_MAX_HENCHMAN) + { + if(nIndex == 0) oCharacter = oPC; + else oCharacter = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oCharacter == OBJECT_INVALID) + { + nIndex = 0; + oCharacter = oPC; + break; + } + else if(nHenchman == nIndex) break; + nIndex++; + } + // Adjust the party buttons. + int bParty = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, 1) != OBJECT_INVALID; + //NuiSetBind(oPC, nToken, "btn_save_party", JsonBool (bParty)); + NuiSetBind(oPC, nToken, "btn_save_party_event", JsonBool (bParty)); + //NuiSetBind(oPC, nToken, "btn_remove_party", JsonBool (bParty)); + NuiSetBind(oPC, nToken, "btn_remove_party_event", JsonBool (bParty)); + if(bParty) + { + string sText = " Saves all henchman from your current party to party " + sParty + "."; + NuiSetBind(oPC, nToken, "btn_save_party_tooltip", JsonString(sText)); + sText = " Removes all henchman from your current party!"; + NuiSetBind(oPC, nToken, "btn_remove_party_tooltip", JsonString(sText)); + } + // Setup the henchman window. + string sName = GetName(oCharacter); + string sImage = GetPortraitResRef(oCharacter); + string sStats = GetAlignText(oCharacter) + " "; + if(GetGender(oCharacter) == GENDER_MALE) sStats += "Male "; + else sStats += "Female "; + int nPosition = 1; + sStats += GetStringByStrRef (StringToInt (Get2DAString ("racialtypes", "Name", GetRacialType (oCharacter)))); + string sClasses = GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", GetClassByPosition (nPosition, oCharacter)))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oCharacter)); + int nClass = GetClassByPosition(++nPosition, oCharacter); + while(nClass != CLASS_TYPE_INVALID) + { + sClasses += ", " + GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", nClass))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oCharacter)); + nClass = GetClassByPosition(++nPosition, oCharacter); + } + NuiSetBind(oPC, nToken, "lbl_game_char_label", JsonString(sName)); + NuiSetBind(oPC, nToken, "img_cur_portrait_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "img_cur_portrait_image", JsonString(sImage + "l")); + NuiSetBind(oPC, nToken, "lbl_cur_stats_label", JsonString(sStats)); + NuiSetBind(oPC, nToken, "lbl_cur_classes_label", JsonString(sClasses)); + NuiSetBind(oPC, nToken, "btn_cur_save_label", JsonString("Save")); + NuiSetBind(oPC, nToken, "btn_cur_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cur_edit_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_cur_remove_event", JsonBool(TRUE)); +} +object GetSelectedHenchman(object oPC, string sParty) +{ + string sHenchman = GetHenchmanDbString(oPC, "image", sParty); + if(sHenchman == "") + { + CheckHenchmanDataAndInitialize(oPC, sParty); + SetHenchmanDbString(oPC, "image", "0", sParty); + } + int nHenchman = StringToInt(sHenchman); + int nIndex = 0; + object oCharacter; + while(nIndex < AI_MAX_HENCHMAN) + { + if(nIndex == 0) oCharacter = oPC; + else oCharacter = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oCharacter == OBJECT_INVALID) + { + nIndex = 0; + oCharacter = oPC; + break; + } + else if(nHenchman == nIndex) break; + nIndex++; + } + return oCharacter; +} +void RemoveYourHenchman(object oPC, int nToken, string sParty) +{ + object oHenchman = GetSelectedHenchman(oPC, sParty); + if(oHenchman == oPC) ai_SendMessages("You cannot remove the player from the party!", AI_COLOR_RED, oPC); + else + { + RemoveHenchman(oPC, oHenchman); + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oHenchman) + AI_WIDGET_NUI)); + DestroyObject(oHenchman); + ai_SendMessages(GetName(oHenchman) + " has been removed from the party!", AI_COLOR_GREEN, oPC); + } + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void RemoveWholeParty(object oPC, int nToken, string sParty) +{ + int nIndex = AI_MAX_HENCHMAN; + object oHenchman; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(nIndex > 0) + { + if(oHenchman != OBJECT_INVALID) + { + ai_SendMessages(GetName(oHenchman) + " has been remove from your Party.", AI_COLOR_YELLOW, oPC); + RemoveHenchman(oPC, oHenchman); + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oHenchman) + AI_WIDGET_NUI)); + DestroyObject(oHenchman); + } + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, --nIndex); + } + ai_SendMessages("All of your henchman have been remove from the Party.", AI_COLOR_YELLOW, oPC); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SaveYourHenchman(object oPC, int nToken, string sParty) +{ + int bPC, nIndex, nClass, nPosition, nMaxHenchman = AI_MAX_HENCHMAN + 1; + string sName, sIndex, sSlot, sStats, sClasses; + object oHenchman = GetSelectedHenchman(oPC, sParty); + if(oHenchman == oPC) + { + bPC = TRUE; + oHenchman = CopyObject(oPC, GetLocation(oPC), OBJECT_INVALID, "hench_" + IntToString(Random(100)), TRUE); + SetHenchmanScripts(oHenchman); + } + string sHenchmanName = GetName(oHenchman); + while(nIndex < nMaxHenchman) + { + sIndex = IntToString(nIndex); + sName = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + if(sName == sHenchmanName || sName == "") + { + sSlot = sParty + sIndex; + if(!bPC) RemoveHenchman(oPC, oHenchman); + // Special check for Infinite Dungeon plot givers to be changed into henchman. + if(GetStringLeft(GetLocalString(oHenchman, "sConversation"), 8) == "id1_plot") + { + DeleteLocalString(oHenchman, "sConversation"); + } + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); + json jHenchman = ObjectToJson(oHenchman, TRUE); + if(!bPC) AddHenchman(oPC, oHenchman); + else + { + DestroyObject(oHenchman); + // We need to make sure the henchman is not seen as a PC or DM! + jHenchman = GffReplaceByte(jHenchman, "IsPC", 0); + jHenchman = GffReplaceByte(jHenchman, "IsDM", 0); + // Rename them with a number added to the end, helps tell the + // difference between the PC and the new henchman. + string sNameIndex, sLastName = JsonGetString(GffGetLocString(jHenchman, "LastName")); + int nNameIndex = StringToInt(GetStringRight(sLastName, 1)); + if(nNameIndex > 0) GetStringLeft(sLastName, GetStringLength(sLastName) -1) + IntToString(nNameIndex++); + else sNameIndex = "_1"; + jHenchman = GffReplaceLocString(jHenchman, "LastName", sLastName + "_"); + } + CheckHenchmanDataAndInitialize(oPC, sSlot); + SetHenchmanDbString(oPC, "image", GetPortraitResRef(oHenchman), sSlot); + SetHenchmanDbString(oPC, "henchname", sHenchmanName, sSlot); + sStats = GetAlignText(oHenchman) + " "; + if(GetGender(oHenchman) == GENDER_MALE) sStats += "Male "; + else sStats += "Female "; + nPosition = 1; + sStats += GetStringByStrRef (StringToInt (Get2DAString ("racialtypes", "Name", GetRacialType (oHenchman)))); + sClasses = GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", GetClassByPosition (nPosition, oHenchman)))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oHenchman)); + nClass = GetClassByPosition(++nPosition, oHenchman); + while(nClass != CLASS_TYPE_INVALID) + { + sClasses += ", " + GetStringByStrRef (StringToInt (Get2DAString ("classes", "Short", GetClassByPosition (nPosition, oHenchman)))); + sClasses += " " + IntToString (GetLevelByPosition (nPosition, oHenchman)); + nClass = GetClassByPosition(++nPosition, oHenchman); + } + SetHenchmanDbString(oPC, "stats", sStats, sSlot); + SetHenchmanDbString(oPC, "classes", sClasses, sSlot); + SetHenchmanDbJson(oPC, "henchman", jHenchman, sSlot); + if(sName == "") ai_SendMessages(sHenchmanName + " has been saved to the party " + sParty + ".", AI_COLOR_GREEN, oPC); + else ai_SendMessages(sHenchmanName + " has replaced a copy of themselves in the party " + sParty + ".", AI_COLOR_GREEN, oPC); + break; + } + nIndex++; + } + if(nIndex == nMaxHenchman) ai_SendMessages("This party is full!", AI_COLOR_RED, oPC); +} +void SaveWholeParty(object oPC, int nToken, string sParty) +{ + int nIndex = AI_MAX_HENCHMAN; + object oHenchman; + while(nIndex > 0) + { + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + if(oHenchman != OBJECT_INVALID) + { + SetHenchmanDbString(oPC, "image", IntToString(nIndex), sParty); + SaveYourHenchman(oPC, nToken, sParty); + } + nIndex--; + } + ai_SendMessages("All of your henchman have been saved to Party " + sParty + ".", AI_COLOR_YELLOW, oPC); + SetHenchmanDbString(oPC, "henchname", "0", sParty); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SavedPartyJoin(object oPC, int nToken, string sParty) +{ + int bFound, nIndex, nDBHenchman = 0; + json jHenchman; + object oHenchman, oLoadedHenchman; + string sDBHenchman = IntToString(nDBHenchman); + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sDBHenchman); + while(sName != "") + { + bFound = FALSE; + nIndex = 1; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(oHenchman != OBJECT_INVALID) + { + if(sName == GetName(oPC) || GetName(oHenchman) == sName) + { + bFound = TRUE; + break; + } + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + if(!bFound) + { + ai_SendMessages(sName + " has joined your party.", AI_COLOR_GREEN, oPC); + jHenchman = GetHenchmanDbJson(oPC, "henchman", sParty + sDBHenchman); + oLoadedHenchman = JsonToObject(jHenchman, GetLocation(oPC), OBJECT_INVALID, TRUE); + AddHenchman(oPC, oLoadedHenchman); + } + else ai_SendMessages(sName + " is already in your party!", AI_COLOR_RED, oPC); + sDBHenchman = IntToString(++nDBHenchman); + sName = GetHenchmanDbString(oPC, "henchname", sParty + sDBHenchman); + } + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +void SavedCharacterJoin(object oPC, int nToken, string sParty) +{ + int nIndex, bFound; + object oHenchman, oLoadedHenchman; + string sHenchman = GetHenchmanDbString(oPC, "henchname", sParty); + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sHenchman); + nIndex = 1; + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex); + while(oHenchman != OBJECT_INVALID) + { + if(sName == GetName(oPC) || GetName(oHenchman) == sName) + { + bFound = TRUE; + break; + } + oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, ++nIndex); + } + if(!bFound) + { + ai_SendMessages(sName + " has joined your party!", AI_COLOR_GREEN, oPC); + oLoadedHenchman = GetHenchmanDbObject(oPC, GetLocation(oPC), sParty + sHenchman); + AddHenchman(oPC, oLoadedHenchman); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); + } + else ai_SendMessages(sName + " is already in your party!", AI_COLOR_RED, oPC); +} +void SavedPartyCleared(object oPC, int nToken, string sParty) +{ + int nIndex, nMaxHenchman = AI_MAX_HENCHMAN + 1; + object oHenchman, oLoadedHenchman; + string sIndex = IntToString(nIndex); + string sName = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + while(nIndex < nMaxHenchman) + { + if(sName != "") + { + RemoveHenchmanDb(oPC, sParty + sIndex); + ai_SendMessages(sName + " has been cleared from the saved party " + sParty + ".", AI_COLOR_YELLOW, oPC); + } + sIndex = IntToString(++nIndex); + sName = GetHenchmanDbString(oPC, "henchname", sParty + sIndex); + } + SetHenchmanDbString(oPC, "henchname", "", sParty); + NuiDestroy(oPC, nToken); + ExecuteScript("pi_henchmen", oPC); +} +json CreateOptionsAlignment(object oHenchman, int nAlignType) +{ + json jAlignNameList = JsonArray(); + if(nAlignType == 0) + { + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Lawful")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Neutral")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Chaotic")); + } + else + { + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Good")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Neutral")); + jAlignNameList = JsonArrayInsert(jAlignNameList, JsonString("Evil")); + } + return jAlignNameList; +} +json CreateOptionsClasses(object oHenchman) +{ + int nIndex = 1, nClass; + string sClassName; + json jClassNameList = JsonArray(); + while(nIndex < 5) + { + nClass = GetClassByPosition(nIndex, oHenchman); + if(nClass == CLASS_TYPE_INVALID) sClassName = "Empty"; + else + { + sClassName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass))); + sClassName += " " + IntToString(GetLevelByClass(nClass, oHenchman)); + } + jClassNameList = JsonArrayInsert(jClassNameList, JsonString(sClassName)); + nIndex++; + } + return jClassNameList; +} +json jArrayInsertClasses() +{ + int nIndex, nClass, nMaxClass = Get2DARowCount("classes"); + string sClassName; + json jClassNameCombo = JsonArray(); + while(nIndex < nMaxClass) + { + if(Get2DAString("classes", "PlayerClass", nIndex) == "1") + { + sClassName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nIndex))); + jClassNameCombo = JsonArrayInsert(jClassNameCombo, NuiComboEntry(sClassName, nClass)); + nClass++; + } + nIndex++; + } + return jClassNameCombo; +} +int GetSelectionByClass2DA(int nClass) +{ + int nIndex, nSelection, nMaxClass = Get2DARowCount("classes"); + while(nIndex < nMaxClass) + { + if(Get2DAString("classes", "PlayerClass", nIndex) == "1") + { + if(nClass == nIndex) return nSelection; + nSelection++; + } + nIndex++; + } + return -1; +} +int GetClassBySelection2DA(int nSelection) +{ + int nIndex, nClass, nMaxClass = Get2DARowCount("classes"); + while(nClass < nMaxClass) + { + if(Get2DAString("classes", "PlayerClass", nClass) == "1") + { + if(nSelection == nIndex) return nClass; + nIndex++; + } + nClass++; + } + return -1; +} +json ArrayInsertPackages(string sClass) +{ + int nIndex, nPackage, nMaxPackage = Get2DARowCount("packages"); + string sPackageName; + json jPackageNameCombo = JsonArray(); + while(nIndex < nMaxPackage) + { + if(Get2DAString("packages", "ClassID", nIndex) == sClass) + { + sPackageName = Get2DAString("packages", "Label", nIndex); + //GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nIndex))); + if(sPackageName != "Bad Strref" && sPackageName != "") + { + jPackageNameCombo = JsonArrayInsert(jPackageNameCombo, NuiComboEntry(sPackageName, nPackage)); + nPackage++; + } + } + nIndex++; + } + return jPackageNameCombo; +} +int GetSelectionByPackage2DA(string sClass, int nPackage) +{ + int nIndex, nSelection, nMaxPackage = Get2DARowCount("packages"); + string sPackageName; + while(nIndex < nMaxPackage) + { + if(Get2DAString("packages", "ClassID", nIndex) == sClass) + { + sPackageName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nIndex))); + if(nPackage == nIndex) return nSelection; + nSelection++; + } + nIndex++; + } + return -1; +} +int GetPackageBySelection2DA(string sClass, int nSelection) +{ + int nIndex, nPackage, nMaxPackage = Get2DARowCount("packages"); + while(nPackage < nMaxPackage) + { + if(Get2DAString("packages", "ClassID", nPackage) == sClass) + { + if(nSelection == nIndex) return nPackage; + nIndex++; + } + nPackage++; + } + return -1; +} +json ArrayInsertSoundSets(object oHenchman) +{ + int nIndex, nSoundSet, nSoundSetType, nMaxSets = Get2DARowCount("soundset"); + string sGender = IntToString(GetGender(oHenchman)); + string sSoundSetName, sResRef; + json jSoundSetNameCombo = JsonArray(); + while(nIndex < nMaxSets) + { + if(Get2DAString("soundset", "GENDER", nIndex) == sGender) + { + nSoundSetType = StringToInt(Get2DAString("soundset", "TYPE", nIndex)); + if(nSoundSetType < 5) + { + sSoundSetName = GetStringByStrRef(StringToInt(Get2DAString("soundset", "STRREF", nIndex))); + sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nIndex)); + if(GetStringLeft(sResRef, 4) == "vs_f") sSoundSetName += " (Full)"; + else if(GetStringLeft(sResRef, 4) == "vs_n") sSoundSetName += " (Part)"; + jSoundSetNameCombo = JsonArrayInsert(jSoundSetNameCombo, NuiComboEntry(sSoundSetName, nSoundSet)); + nSoundSet++; + } + } + nIndex++; + } + return jSoundSetNameCombo; +} +int GetSelectionBySoundSet2DA(object oHenchman, int nSoundSet) +{ + int nIndex, nSelection, nSoundSetType, nMaxSoundSet = Get2DARowCount("soundset"); + string sGender = IntToString(GetGender(oHenchman)); + while(nIndex < nMaxSoundSet) + { + if(Get2DAString("soundset", "GENDER", nIndex) == sGender) + { + nSoundSetType = StringToInt(Get2DAString("soundset", "TYPE", nIndex)); + if(nSoundSetType < 5) + { + if(nSoundSet == nIndex) return nSelection; + nSelection++; + } + } + nIndex++; + } + return -1; +} +int GetSoundSetBySelection2DA(object oHenchman, int nSelection) +{ + int nIndex, nSoundSet, nSoundSetType, nMaxSoundSet = Get2DARowCount("soundset"); + string sGender = IntToString(GetGender(oHenchman)); + while(nSoundSet < nMaxSoundSet) + { + if(Get2DAString("soundset", "GENDER", nSoundSet) == sGender) + { + nSoundSetType = StringToInt(Get2DAString("soundset", "TYPE", nSoundSet)); + if(nSoundSetType < 5) + { + if(nSelection == nIndex) return nSoundSet; + nIndex++; + } + } + nSoundSet++; + } + return -1; +} +void SetHenchmanScripts(object oHenchman) +{ + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_HEARTBEAT, "nw_ch_ac1"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_NOTICE, "nw_ch_ac2"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_END_COMBATROUND, "nw_ch_ac3"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DIALOGUE, "nw_ch_ac4"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_MELEE_ATTACKED, "nw_ch_ac5"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DAMAGED, "nw_ch_ac6"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DEATH, "nw_ch_ac7"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_DISTURBED, "nw_ch_ac8"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_SPAWN_IN, "nw_ch_ac9"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_RESTED, "nw_ch_aca"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_SPELLCASTAT, "nw_ch_acb"); + SetEventScript(oHenchman, EVENT_SCRIPT_CREATURE_ON_BLOCKED_BY_DOOR, "nw_ch_ace"); +} +object ai_AddHenchman(object oPC, json jHenchman, location lLocation, int nFamiliar, int nCompanion) +{ + jHenchman = GffReplaceResRef(jHenchman, "ScriptSpawn", ""); + object oHenchman = JsonToObject(jHenchman, lLocation, OBJECT_INVALID, TRUE); + AddHenchman(oPC, oHenchman); + DeleteLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE"); + string sAssociateType = ai_GetAssociateType(oPC, oHenchman); + NuiDestroy(oPC, NuiFindWindow(oPC, sAssociateType + AI_WIDGET_NUI)); + if(nFamiliar) SummonFamiliar(oHenchman); + if(nCompanion) SummonAnimalCompanion(oHenchman); + return oHenchman; +} +json CreateLevelStatList(json jHenchman, object oHenchman, object oPC, int nLevels = 0) +{ + int nClass = GetClassByPosition(1, oHenchman); + int nHitDie = StringToInt(Get2DAString("classes", "HitDie", nClass)); + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + json jSkill = JsonObject(); + jSkill = GffAddByte(jSkill, "Rank", 0); + jSkill = JsonObjectSet(jSkill, "__struct_id", JsonInt(0)); + json jSkillArray = JsonArray(); + int nNumOfSkills; + for(nNumOfSkills = Get2DARowCount("skills"); nNumOfSkills > 0; nNumOfSkills--) + { + jSkillArray = JsonArrayInsert(jSkillArray, jSkill); + } + json jLevel = JsonObject(); + jLevel = GffAddByte(jLevel, "EpicLevel", 0); + jLevel = GffAddList(jLevel, "FeatList", JsonArray()); + jLevel = GffAddByte(jLevel, "LvlStatClass", nClass); + jLevel = GffAddByte(jLevel, "LvlStatHitDie", nHitDie); + jLevel = GffAddList(jLevel, "SkillList", jSkillArray); + jLevel = GffAddWord(jLevel, "SkillPoints", 0); + jLevel = JsonObjectSet(jLevel, "__struct_id", JsonInt(0)); + json jLevelArray = JsonArray(); + if(nLevels == 0) nLevels = GetLevelByPosition(1, oHenchman); + for(nLevels; nLevels > 0; nLevels--) + { + jLevelArray = JsonArrayInsert(jLevelArray, jLevel); + } + //WriteTimestampedLogEntry("pinc_henchmen, 813, Creating LvlStatList for " + GetName(oHenchman)); + return GffAddList(jHenchman, "LvlStatList", jLevelArray); +} +int GetHasJFeat(int nFeat, json jFeatList) +{ + int nIndex, nJFeat, nMaxFeats = JsonGetLength(jFeatList); + json jFeat; + //WriteTimestampedLogEntry("pinc_henchmen, 831, nFeat: " + IntToString(nFeat) + " nMaxFeats: " + IntToString(nMaxFeats) + "."); + while(nIndex < nMaxFeats) + { + jFeat = JsonArrayGet(jFeatList, nIndex); + nJFeat = JsonGetInt(GffGetWord(jFeat, "Feat")); + //WriteTimestampedLogEntry("pinc_henchmen, 831, nJFeat: " + IntToString(nJFeat) + "."); + if(nJFeat == nFeat) return TRUE; + nIndex++; + } + return FALSE; +} +int CanSelectFeat(json jCreature, object oCreature, int nFeat, json jFeats, int nPosition = 1) +{ + // Check if all classes can use. + int n2DAStat = StringToInt(Get2DAString("feat", "ALLCLASSESCANUSE", nFeat)); + if(n2DAStat == 0) + { + int bPass, nClassFeat, nRow, nClass = GetClassByPosition(nPosition, oCreature); + string sClsFeat2DAName = Get2DAString("classes", "FeatsTable", nClass); + int nMaxRow = Get2DARowCount(sClsFeat2DAName); + while(nRow < nMaxRow) + { + nClassFeat = StringToInt(Get2DAString(sClsFeat2DAName, "FeatIndex", nRow)); + if(nClassFeat == nFeat) + { + bPass = TRUE; + break; + } + nRow++; + } + if(!bPass) return FALSE; + } + n2DAStat = StringToInt(Get2DAString("feat", "MINATTACKBONUS", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "BaseAttackBonus")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINSTR", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Str")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINDEX", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Dex")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINCON", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Con")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MININT", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Int")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINWIS", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Wis")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINCHA", nFeat)); + if(JsonGetInt(GffGetByte(jCreature, "Cha")) < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "MINSPELLLVL", nFeat)); + int nSpellLevel = 0, nClass = GetClassByPosition(nPosition, oCreature); + string s2DAName = Get2DAString("classes", "SpellGainTable", nClass); + if(s2DAName != "") + { + int nLevel = GetLevelByPosition(nPosition, oCreature); + nSpellLevel = StringToInt(Get2DAString(s2DAName, "NumSpellLevels", nLevel - 1)) - 1; + if(nSpellLevel < 0) nSpellLevel = 0; + } + if(nSpellLevel < n2DAStat) return FALSE; + n2DAStat = StringToInt(Get2DAString("feat", "PREREQFEAT1", nFeat)); + if(n2DAStat > 0 && GetHasJFeat(n2DAStat, jFeats)) + { + n2DAStat = StringToInt(Get2DAString("feat", "PREREQFEAT2", nFeat)); + if(n2DAStat > 0 && !GetHasJFeat(n2DAStat, jFeats)) return FALSE; + } + int nIndex; + while(nIndex < 5) + { + n2DAStat = StringToInt(Get2DAString("feat", "OrReqFeat" + IntToString(nIndex), nFeat)); + if(nIndex == 0 && n2DAStat == 0) break; + if(n2DAStat > 0) + { + if(GetHasJFeat(n2DAStat, jFeats)) break; + } + else return FALSE; + ++nIndex; + } + string s2DAStat = Get2DAString("feat", "REQSKILL", nFeat); + if(s2DAStat != "") + { + n2DAStat = StringToInt(s2DAStat); + int bCanUse; + if(Get2DAString("skills", "AllClassesCanUse", n2DAStat) == "1") bCanUse = TRUE; + else + { + string sClsSkill2DA = Get2DAString("classes", "SkillsTable", nClass); + int bPass, nClassSkill, nRow, nMaxRow = Get2DARowCount(sClsSkill2DA); + while(nRow < nMaxRow) + { + nClassSkill = StringToInt(Get2DAString(sClsSkill2DA, "SkillIndex", nRow)); + if(nClassSkill == n2DAStat) + { + bCanUse = TRUE; + break; + } + nRow++; + } + } + if(bCanUse) + { + int nSkillReq = StringToInt(Get2DAString("feat", "ReqSkillMinRanks", n2DAStat)); + // ************************** Add code to check jCreatures skills. + if(GetSkillRank(n2DAStat, oCreature, TRUE) < nSkillReq) return FALSE; + } + else return FALSE; + } + s2DAStat = Get2DAString("feat", "REQSKILL2", nFeat); + if(s2DAStat != "") + { + n2DAStat = StringToInt(s2DAStat); + int bCanUse; + if(Get2DAString("skills", "AllClassesCanUse", n2DAStat) == "1") bCanUse = TRUE; + else + { + string sClsSkill2DA = Get2DAString("classes", "SkillsTable", nClass); + int bPass, nClassSkill, nRow, nMaxRow = Get2DARowCount(sClsSkill2DA); + while(nRow < nMaxRow) + { + nClassSkill = StringToInt(Get2DAString(sClsSkill2DA, "SkillIndex", nRow)); + if(nClassSkill == n2DAStat) + { + bCanUse = TRUE; + break; + } + nRow++; + } + } + if(bCanUse) + { + int nSkillReq = StringToInt(Get2DAString("feat", "ReqSkillMinRanks2", n2DAStat)); + if(GetSkillRank(n2DAStat, oCreature, TRUE) < nSkillReq) return FALSE; + } + else return FALSE; + } + n2DAStat = StringToInt(Get2DAString("feat", "MinLevel", nFeat)); + if(n2DAStat > 0) + { + int bPass, nClassPosition, nPositionClass, nPositionLevel; + int nClassRequired = StringToInt(Get2DAString("feat", "MinLevelClass", nFeat)); + while(nClassPosition < AI_MAX_CLASSES_PER_CHARACTER) + { + // ***************************** Rework to check jCreature class list instead. + nPositionClass = GetClassByPosition(nClassPosition, oCreature); + if(nPositionClass == nClassRequired) + { + nPositionLevel = GetLevelByPosition(nClassPosition, oCreature); + if(nPositionLevel < n2DAStat) return FALSE; + else bPass = TRUE; + } + nClassPosition++; + } + if(!bPass) return FALSE; + } + n2DAStat = StringToInt(Get2DAString("feat", "MinFortSave", nFeat)); + if(JsonGetInt(GffGetChar(jCreature, "FortSaveThrow")) < n2DAStat) return FALSE; + s2DAStat = Get2DAString("feat", "PreReqEpic", nFeat); + if(s2DAStat == "1") return FALSE; + return TRUE; +} +json ResetFeats(json jHenchman, object oHenchman) +{ + int nLevel = 0; + // We remake the Feat list if the character doesn't have a level list! + json jFeatList = JsonArray(); + json jFeat; + int nRace = GetRacialType(oHenchman); + string sRace2DAName = Get2DAString("racialtypes", "FeatsTable", nRace); + // Give racial feats. + WriteTimestampedLogEntry("pinc_henchmen, 996, Checking for racial feats."); + int nRaceRow, nRaceFeat; + int nRaceMaxRow = Get2DARowCount(sRace2DAName); + while(nRaceRow < nRaceMaxRow) + { + nRaceFeat = StringToInt(Get2DAString(sRace2DAName, "FeatIndex", nRaceRow)); + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nRaceFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 999, Adding racial feat: " + + Get2DAString("feat", "LABEL", nRaceFeat)); + nRaceRow++; + } + // Give class feats. + WriteTimestampedLogEntry("pinc_henchmen, 1004, Checking for class feats."); + int nClass = GetClassByPosition(1, oHenchman); + string sGranted, sList; + string sClsFeat2DAName = Get2DAString("classes", "FeatsTable", nClass); + int nClassRow, nClassFeat, nClassMaxRow = Get2DARowCount(sClsFeat2DAName); + while(nClassRow < nClassMaxRow) + { + sGranted = Get2DAString(sClsFeat2DAName, "GrantedOnLevel", nClassRow); + if(sGranted == "1") + { + sList = Get2DAString(sClsFeat2DAName, "List", nClassRow); + if(sList == "3") + { + nClassFeat = StringToInt(Get2DAString(sClsFeat2DAName, "FeatIndex", nClassRow)); + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nClassFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 1022, Adding class feat: " + + Get2DAString("feat", "LABEL", nClassFeat)); + } + } + nClassRow++; + } + // Give any bonus feats from package. + int nPackageFeat, nPackageRow; + string sBonusFeat2DAName = Get2DAString("classes", "BonusFeatsTable", nClass); + int nNumOfFeats = StringToInt(Get2DAString(sBonusFeat2DAName, "Bonus", nLevel)); + WriteTimestampedLogEntry("pinc_henchmen, 1032, Select " + IntToString(nNumOfFeats) + " bonus feats."); + string sPackage2DAName = Get2DAString("packages", "FeatPref2DA", nClass); + int nPackageMaxRow = Get2DARowCount(sPackage2DAName); + // Give bonus feats based on the package. + nPackageRow = 0; + if(nNumOfFeats > 0) + { + while(nPackageRow < nPackageMaxRow) + { + nPackageFeat = StringToInt(Get2DAString(sPackage2DAName, "FeatIndex", nPackageRow)); + nClassRow = 0; + while(nClassRow < nClassMaxRow) + { + nClassFeat = StringToInt(Get2DAString(sClsFeat2DAName, "FeatIndex", nClassRow)); + if(nClassFeat == nPackageFeat) + { + sList = Get2DAString(sClsFeat2DAName, "List", nClassRow); + if((sList == "1" || sList == "2") && CanSelectFeat(jHenchman, oHenchman, nClassFeat, jFeatList)) + { + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nClassFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 1055, Adding class bonus feat: " + + Get2DAString("feat", "LABEL", nPackageFeat)); + nNumOfFeats--; + } + } + nClassRow++; + } + if(nNumOfFeats < 1) break; + nPackageRow++; + } + } + // Give picked feats from package. + nNumOfFeats = 1; + if(GetHasFeat(FEAT_QUICK_TO_MASTER, oHenchman)) nNumOfFeats++; + WriteTimestampedLogEntry("pinc_henchmen, 1069, Select " + IntToString(nNumOfFeats) + " feats for character."); + nPackageRow = 0; + while(nPackageRow < nPackageMaxRow) + { + nClassRow = 0; + nPackageFeat = StringToInt(Get2DAString(sPackage2DAName, "FeatIndex", nPackageRow)); + //WriteTimestampedLogEntry("pinc_henchmen, 1075, nPackageFeat: " + Get2DAString("feat", "LABEL", nPackageFeat) + "."); + if(CanSelectFeat(jHenchman, oHenchman, nPackageFeat, jFeatList)) + { + jFeat = JsonObject(); + jFeat = GffAddWord(jFeat, "Feat", nPackageFeat); + jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1)); + jFeatList = JsonArrayInsert(jFeatList, jFeat); + WriteTimestampedLogEntry("pinc_henchmen, 1082, Selecting character feat: " + + Get2DAString("feat", "LABEL", nPackageFeat)); + nNumOfFeats--; + } + if(nNumOfFeats < 1) break; + nPackageRow++; + } + WriteTimestampedLogEntry("pinc_henchmen, 1089, Adding feat list."); + jHenchman = GffReplaceList(jHenchman, "FeatList", jFeatList); + return jHenchman; +} +json ResetSkills(json jHenchman, object oHenchman, int nLevel) +{ + // We remake the Skill List if the character doesn't have a level list! + int nClass = GetClassByPosition(1, oHenchman); + int nSkillPoints, nIntMod = GetAbilityModifier(ABILITY_INTELLIGENCE, oHenchman); + if(nIntMod > 0) nSkillPoints = nIntMod; + if(GetRacialType(oHenchman) == RACIAL_TYPE_HUMAN) nSkillPoints += 1; + nSkillPoints += StringToInt(Get2DAString("classes", "SkillPointBase", nClass)); + nSkillPoints = nSkillPoints * (nLevel + 3); + int nMaxRanks = 3 + nLevel; + json jSkillList = JsonArray(); + json jSkill; + // Setup the Skill List. + WriteTimestampedLogEntry("pinc_henchmen, 1112, Generating skill list."); + int nIndex, nSkillMaxRow = Get2DARowCount("skills"); + for(nIndex = 0; nIndex < nSkillMaxRow; nIndex++) + { + jSkill = JsonObject(); + jSkill = GffAddByte(jSkill, "Rank", 0); + jSkill = JsonObjectSet(jSkill, "__struct_id", JsonInt(0)); + jSkillList = JsonArrayInsert(jSkillList, jSkill); + } + // Give skill points based on the package. + WriteTimestampedLogEntry("pinc_henchmen, 1116, Gets " + IntToString(nSkillPoints) + " skill points."); + int nPackageSkill, nPackageRow, nCurrentRanks, bCrossClass, nClassRow, nNewRanks; + string sPackage2DAName = Get2DAString("packages", "SkillPref2DA", nClass); + int nPackageMaxRow = Get2DARowCount(sPackage2DAName); + string sClass2DAName = Get2DAString("classes", "SkillsTable", nClass); + int nClassMaxRow = Get2DARowCount(sClass2DAName); + nPackageRow = 0; + while(nPackageRow < nPackageMaxRow && nSkillPoints > 0) + { + nPackageSkill = StringToInt(Get2DAString(sPackage2DAName, "SkillIndex", nPackageRow)); + jSkill = JsonArrayGet(jSkillList, nPackageSkill); + nCurrentRanks = JsonGetInt(GffGetByte(jSkill, "Rank")); + nClassRow = 0; + while(nClassRow < nClassMaxRow) + { + if(nPackageSkill == StringToInt(Get2DAString(sClass2DAName, "SkillIndex", nClassRow))) + { + bCrossClass = Get2DAString(sClass2DAName, "ClassSkill", nClassRow) == "0"; + break; + } + nClassRow++; + } + if(bCrossClass) nNewRanks = (nMaxRanks / 2) - nCurrentRanks; + else nNewRanks = nMaxRanks - nCurrentRanks; + if(nNewRanks > nSkillPoints) nNewRanks = nSkillPoints; + if(nNewRanks > 0) + { + jSkill = GffReplaceByte(jSkill, "Rank", nCurrentRanks + nNewRanks); + jSkillList = JsonArraySet(jSkillList, nPackageSkill, jSkill); + WriteTimestampedLogEntry("pinc_henchmen, 1145, Adding " + IntToString(nNewRanks) + + " ranks to " + Get2DAString("skills", "Label", nPackageSkill) + + " CrossClass: " + IntToString(bCrossClass)); + nSkillPoints -= nNewRanks; + } + nPackageRow++; + } + jHenchman = GffReplaceList(jHenchman, "SkillList", jSkillList); + return jHenchman; +} +json ResetSpellsKnown(json jClass, object oHenchman) +{ + WriteTimestampedLogEntry("pinc_henchmen, 1157, Checking for spells known."); + int nClass = GetClassByPosition(1, oHenchman); + WriteTimestampedLogEntry("pinc_henchmen, 1159, SpellCaster: " + Get2DAString("classes", "SpellCaster", nClass)); + if(Get2DAString("classes", "SpellCaster", nClass) == "0") return jClass; + int nLevel = 0; + // We remake the Known spell list if the character doesn't have a level list! + json jKnownList, jMemorizedList; + json jSpell, jSpellsPerDayList; + int bMemorizesSpells = StringToInt(Get2DAString("classes", "MemorizesSpells", nClass)); + int bSpellBookRestricted = StringToInt(Get2DAString("classes", "SpellBookRestricted", nClass)); + string sSpellKnown2DAName = Get2DAString("classes", "SpellKnownTable", nClass); + string sSpellGained2DAName = Get2DAString("classes", "SpellGainTable", nClass); + string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass); + string sSpellPackage2DAName = Get2DAString("packages", "SpellPref2DA", nClass); + int nPackageSpell, nPackageRow; + int nPackageMaxRow = Get2DARowCount(sSpellPackage2DAName); + int nKnownSpellIndex, nSpellsKnown, nAbility, nSpellLevel = 0; + string sKnownListName, sSpellLevel, sPackageSpellLevel, sAbility; + // Cycle through all spell levels and reset. + while(nSpellLevel < 10) + { + sSpellLevel = IntToString(nSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1143, Checking Spell Level: " + sSpellLevel); + // Recreate the 0th and 1st level based on the package. + if(nSpellLevel < 2 && bSpellBookRestricted) + { + // Spellbook restricted that don't have a SpellsKnown2DAName + // get to keep all 0th level spells so we skip them. Example:Wizard + if(nSpellLevel != 0 || sSpellKnown2DAName != "") + { + // Classes that are spell book restricted but don't have a SpellKnownTable + // get 3 spells + Ability Modifier worth of spells like a wizard. + if(sSpellKnown2DAName == "") + { + sAbility = Get2DAString("classes", "SpellCastingAbil", nClass); + if(sAbility == "INT") nAbility = ABILITY_INTELLIGENCE; + else if(sAbility == "WIS") nAbility = ABILITY_WISDOM; + else if(sAbility == "CHA") nAbility = ABILITY_CHARISMA; + nSpellsKnown = 3 + GetAbilityModifier(nAbility, oHenchman); + } + else + { + nSpellsKnown = StringToInt(Get2DAString(sSpellKnown2DAName, "SpellLevel" + sSpellLevel, nLevel)); + } + WriteTimestampedLogEntry("pinc_henchmen, 1201, nSpellsKnown: " + IntToString(nSpellsKnown)); + jKnownList = JsonArray(); + nPackageRow = 0; + while(nPackageRow < nPackageMaxRow && nSpellsKnown > 0) + { + nPackageSpell = StringToInt(Get2DAString(sSpellPackage2DAName, "SpellIndex", nPackageRow)); + sPackageSpellLevel = Get2DAString("spells", sSpellTableColumn, nPackageSpell); + if(sPackageSpellLevel == sSpellLevel) + { + jSpell = JsonObject(); + jSpell = GffAddWord(jSpell, "Spell", nPackageSpell); + jSpell = JsonObjectSet(jSpell, "__struct_id", JsonInt(3)); + jKnownList = JsonArrayInsert(jKnownList, jSpell); + WriteTimestampedLogEntry("pinc_henchmen, 1178, Adding known spell: " + + Get2DAString("spells", "LABEL", nPackageSpell)); + nSpellsKnown--; + } + nPackageRow++; + } + if(JsonGetLength(jKnownList) == 0) + { + jClass = GffRemoveList(jClass, "KnownList" + sSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1223, Removing KnownList" + sSpellLevel); + } + else if(JsonGetType(GffGetList(jClass, "KnownList" + sSpellLevel)) != JSON_TYPE_NULL) + { + jClass = GffReplaceList(jClass, "KnownList" + sSpellLevel, jKnownList); + } + else jClass = GffAddList(jClass, "KnownList" + sSpellLevel, jKnownList); + } + } + // Remove all other known spell levels and memorized levels. + else + { + jKnownList = GffGetList(jClass, "KnownList" + sSpellLevel); + if(JsonGetType(jKnownList) != JSON_TYPE_NULL) + { + jClass = GffRemoveList(jClass, "KnownList" + sSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1239, Removing KnownList" + sSpellLevel); + } + } + if(bMemorizesSpells) + { + jMemorizedList = GffGetList(jClass, "MemorizedList" + sSpellLevel); + if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL) + { + jClass = GffRemoveList(jClass, "MemorizedList" + sSpellLevel); + WriteTimestampedLogEntry("pinc_henchmen, 1248, Removing MemorizedList" + sSpellLevel); + } + } + else + { + jSpellsPerDayList = GffGetList(jClass, "SpellsPerDayList"); + nSpellsKnown = StringToInt(Get2DAString(sSpellGained2DAName, "SpellLevel"+ sSpellLevel, nLevel)); + jSpell = JsonArrayGet(jSpellsPerDayList, nSpellLevel); + jSpell = GffReplaceByte(jSpell, "NumSpellsLeft", nSpellsKnown); + jSpellsPerDayList = JsonArraySet(jSpellsPerDayList, nSpellLevel, jSpell); + jClass = GffReplaceList(jClass, "SpellsPerDayList", jSpellsPerDayList); + WriteTimestampedLogEntry("pinc_henchmen, 1259, Setting SpellsPerDay to " + + IntToString(nSpellsKnown)); + } + nSpellLevel++; + } + return jClass; +} +object ResetCharacter(object oPC, object oHenchman) +{ + SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE); + RemoveHenchman(oPC, oHenchman); + ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER); + json jHenchman = ObjectToJson(oHenchman, TRUE); + json jClassList = GffGetList(jHenchman, "ClassList"); + json jClass = JsonArrayGet(jClassList, 0); + // Set the Class list to the first class only and put at level 1. + int nClass = JsonGetInt(GffGetInt(jClass, "Class")); + jClass = GffReplaceShort(jClass, "ClassLevel", 1); + // Delete extra classes. + int nClassIndex = JsonGetLength(jClassList) - 1; + while(nClassIndex > 0) + { + jClassList = JsonArrayDel(jClassList, nClassIndex--); + } + jHenchman = GffReplaceDword(jHenchman, "Experience", 0); + jHenchman = GffReplaceFloat(jHenchman, "ChallengeRating", 1.0); +// int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_1"); +// if(nPackage) jHenchman = GffReplaceByte(jHenchman, "StartingPackage", nPackage); + string s2DA = Get2DAString("classes", "AttackBonusTable", nClass); + int nAtk = StringToInt(Get2DAString(s2DA, "BAB", 0)); + jHenchman = GffReplaceByte(jHenchman, "BaseAttackBonus", nAtk); + s2DA = Get2DAString("classes", "SavingThrowTable", nClass); + int nSave = StringToInt(Get2DAString(s2DA, "FortSave", 0)); + jHenchman = GffReplaceChar(jHenchman, "FortSaveThrow", nSave); + nSave = StringToInt(Get2DAString(s2DA, "RefSave", 0)); + jHenchman = GffReplaceChar(jHenchman, "RefSaveThrow", nSave); + nSave = StringToInt(Get2DAString(s2DA, "WillSave", 0)); + jHenchman = GffReplaceChar(jHenchman, "WillSaveThrow", nSave); + json jLvlStatList = GffGetList(jHenchman, "LvlStatList"); + if(JsonGetType(jLvlStatList) != JSON_TYPE_NULL) + { + //WriteTimestampedLogEntry("pinc_henchmen 1300, jLvlStatList: " + JsonDump(jLvlStatList, 4)); + int nLevel = 1, nLevelTrack = 1; + int nAbilityStatIncrease, nAbility; + string sAbility; + json jAbility; + json jLevel = JsonArrayGet(jLvlStatList, nLevel); + while(JsonGetType(jLevel) != JSON_TYPE_NULL) + { + WriteTimestampedLogEntry("inc_henchmen, 1308, Checking level " + IntToString(nLevelTrack)); + // Remove all Ability score increases for each level from ability scores. + jAbility = GffGetByte(jLevel, "LvlStatAbility"); + if(JsonGetType(jAbility) != JSON_TYPE_NULL) + { + nAbilityStatIncrease = JsonGetInt(jAbility); + if(nAbilityStatIncrease == ABILITY_STRENGTH) sAbility = "Str"; + if(nAbilityStatIncrease == ABILITY_DEXTERITY) sAbility = "Dex"; + if(nAbilityStatIncrease == ABILITY_CONSTITUTION) sAbility = "Con"; + if(nAbilityStatIncrease == ABILITY_INTELLIGENCE) sAbility = "Int"; + if(nAbilityStatIncrease == ABILITY_WISDOM) sAbility = "Wis"; + if(nAbilityStatIncrease == ABILITY_CHARISMA) sAbility = "Cha"; + nAbility = JsonGetInt(GffGetByte(jHenchman, sAbility)) - 1; + jHenchman = GffReplaceByte(jHenchman, sAbility, nAbility); + WriteTimestampedLogEntry("pinc_henchmen, 1314, Removing " + sAbility + " level bonus ability score point."); + } + jLvlStatList = JsonArrayDel(jLvlStatList, nLevel); + // Note: nLevel is not incremented since we are removing the previous level. + // there for when we get the same level again its the next level! + jLevel = JsonArrayGet(jLvlStatList, nLevel); + //SendMessageToPC(oPC, "jLvlStatList: " + JsonDump(jLvlStatList, 4)); + nLevelTrack++; + } + jHenchman = GffRemoveList(jHenchman, "LvlStatList"); + } + jHenchman = CreateLevelStatList(jHenchman, oHenchman, oPC, 1); + int nHitPoints = StringToInt(Get2DAString("classes", "HitDie", nClass)); + int nConstitution = JsonGetInt(GffGetByte(jHenchman, "Con")); + int nRace = JsonGetInt(GffGetByte(jHenchman, "Race")); + nConstitution += StringToInt(Get2DAString("racialtypes", "ConAdjust", nRace)); + if(nConstitution > 9) nHitPoints += (nConstitution - 10) / 2; + else nHitPoints += (nConstitution - 11) / 2; + jHenchman = GffReplaceShort(jHenchman, "CurrentHitPoints", nHitPoints); + jHenchman = GffReplaceShort(jHenchman, "HitPoints", nHitPoints); + jHenchman = GffReplaceShort(jHenchman, "MaxHitPoints", nHitPoints); + jHenchman = ResetSkills(jHenchman, oHenchman, 1); + jHenchman = ResetFeats(jHenchman, oHenchman); + jClass = ResetSpellsKnown(jClass, oHenchman); + jClassList = JsonArraySet(jClassList, 0, jClass); + jHenchman = GffReplaceList(jHenchman, "ClassList", jClassList); + //WriteTimestampedLogEntry("pinc_henchmen 1348, jHenchman: " + JsonDump(jHenchman, 4)); + location lLocation = GetLocation(oHenchman); + int nFamiliar, nCompanion; + object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman); + if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE; + oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHenchman); + if(oCompanion != OBJECT_INVALID) nCompanion = TRUE; + AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE)); + DestroyObject(oHenchman); + oHenchman = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion); + return oHenchman; +} +// ********* New Henchman windows ********** +void CreateCharacterEditGUIPanel(object oPC, object oHenchman) +{ + // Set window to not save until it has been created. + SetLocalInt(oPC, "0_No_Win_Save", TRUE); + DelayCommand(0.5f, DeleteLocalInt (oPC, "0_No_Win_Save")); + // Group 1 (Portrait)******************************************************* 151 / 73 + // Group 1 Row 1 *********************************************************** 350 / 91 + json jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateTextEditBox (jGroupRow, "name_placeholder", "char_name", 50, FALSE, 140.0, 20.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + // Group 1 Row 1 *********************************************************** 350 / 91 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateTextEditBox (jGroupRow, "port_placeholder", "port_name", 16, FALSE, 140.0, 20.0, "port_tooltip"); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 2 *********************************************************** 350 / 259 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateImage(jGroupRow, "", "port_resref", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 140.0f, 160.0f); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 3 *********************************************************** 350 / 292 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateButton (jGroupRow, "<", "btn_portrait_prev", 42.0f, 25.0f); + jGroupRow = CreateButton (jGroupRow, "Set", "btn_portrait_ok", 44.0f, 25.0f); + jGroupRow = CreateButton (jGroupRow, ">", "btn_portrait_next", 42.0f, 25.0f); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 4 *********************************************************** 350 / 91 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateLabel(jGroupRow, "Sound Set", "lbl_sound_set", 140.0, 10.0f, NUI_HALIGN_CENTER, NUI_VALIGN_BOTTOM); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add the group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 1 Row 5 *********************************************************** 350 / 325 + jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jGroupRow = CreateCombo(jGroupRow, ArrayInsertSoundSets(oHenchman), "cmb_soundset", 140.0, 25.0); + jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + json jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol))); + // Group 2 (Stats)********************************************************** 151 / 73 + // Group 2 Row 1 *********************************************************** 350 / 91 + jGroupRow = CreateLabel(JsonArray(), "", "lbl_stats", 150.0, 15.0, 0, NUI_VALIGN_BOTTOM, 0.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow)); + + // Group 2 Row 2 *********************************************************** 350 / 243 + //json jAlign = CreateOptionsAlignment(oHenchman, 0); + //jGroupRow = CreateOptions(JsonArray(), "opt_lawchaos", NUI_DIRECTION_HORIZONTAL, jAlign, 60.0, 35.0); + // Add group row to the group column. + //jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 3 *********************************************************** 350 / 243 + //jAlign = CreateOptionsAlignment(oHenchman, 1); + //jGroupRow = CreateOptions(JsonArray(), "opt_goodevil", NUI_DIRECTION_HORIZONTAL, jAlign, 60.0, 35.0); + //jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer()); + // Add group row to the group column. + //jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 2 *********************************************************** 350 / 243 + json jClasses = CreateOptionsClasses(oHenchman); + jGroupRow = CreateOptions(JsonArray(), "opt_classes", NUI_DIRECTION_VERTICAL, jClasses, 150.0, 144.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 3 *********************************************************** 350 / 276 + jGroupRow = CreateButton(JsonArray(), "Level Up", "btn_level_up", 150.0f, 25.0f, -1.0, "btn_level_up_tooltip"); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 4 *********************************************************** 350 / 309 + jGroupRow = CreateButton (JsonArray(), "Reset Character", "btn_reset", 150.0f, 25.0f, -1.0, "btn_reset_tooltip"); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 5 *********************************************************** 350 / 342 + jGroupRow = CreateCombo(JsonArray(), jArrayInsertClasses(), "cmb_class", 150.0, 25.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + // Group 2 Row 6 *********************************************************** 350 / 375 + int nClassOption = GetLocalInt(oHenchman, "CLASS_OPTION_POSITION"); + int nClass = GetClassByPosition(nClassOption + 1, oHenchman); + int bNoClass = FALSE; + if(nClass == CLASS_TYPE_INVALID) + { + nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nClassOption + 1)); + bNoClass = TRUE; + } + string sClass = IntToString(nClass); + jGroupRow = CreateCombo(JsonArray(), ArrayInsertPackages(sClass), "cmb_package", 150.0, 25.0); + // Add group row to the group column. + jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow)); + jRow = JsonArrayInsert(jRow, NuiGroup(NuiCol(jGroupCol))); + // Add the row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 5 (text edit box)**************************************************** 350 / 518 + jRow = CreateTextEditBox(JsonArray(), "desc_placeholder", "desc_value", 1000, TRUE, 350.0, 150.0, "desc_tooltip"); + // Add the row to the column. + jCol = JsonArrayInsert(jCol, NuiRow (jRow)); + // Row 6 (button)*********************************************************** 350/ 546 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton (jRow, "Save Description", "btn_desc_save", 150.0f, 20.0f); + jRow = JsonArrayInsert(jRow, NuiSpacer()); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow (jRow)); + // Set the Layout of the window. + json jLayout = NuiCol (jCol); + // Get the window location to restore it from the database. + CheckHenchmanDataAndInitialize(oPC, "0"); + json jData = GetHenchmanDbJson(oPC, "henchman", "0"); + json jGeometry = JsonObjectGet(jData, "henchman_edit_nui"); + float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x")); + float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y")); + if(fX == 0.0 && fY == 0.0) + { + fX = -1.0; + fY = -1.0; + } + string sName = GetName(oHenchman); + if(GetStringRight(sName, 1) == "s") sName = sName + "'"; + else sName = sName + "'s"; + int nToken = SetWindow (oPC, jLayout, "henchman_edit_nui", sName + " Character editor", + fX, fY, 380.0, 588.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen"); + // Set all binds, events, and watches. + int nID = GetPortraitId (oPC); + NuiSetUserData(oPC, nToken, JsonInt(nID)); + string sResRef = GetPortraitResRef(oHenchman); + NuiSetBindWatch(oPC, nToken, "window_geometry", TRUE); + NuiSetBind(oPC, nToken, "char_name", JsonString(GetName(oHenchman))); + NuiSetBindWatch(oPC, nToken, "char_name", TRUE); + NuiSetBind(oPC, nToken, "char_name_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "port_name", JsonString(sResRef)); + NuiSetBindWatch(oPC, nToken, "port_name", TRUE); + NuiSetBind(oPC, nToken, "port_name_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "port_resref_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "port_resref_image", JsonString(sResRef + "l")); + NuiSetBind(oPC, nToken, "port_tooltip", JsonString (" You may also type the portrait file name.")); + // Set buttons active. + NuiSetBind(oPC, nToken, "btn_portrait_prev_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_portrait_next_event", JsonBool(TRUE)); + int nSelection = GetSelectionBySoundSet2DA(oHenchman, GetSoundset(oHenchman)); + NuiSetBind(oPC, nToken, "cmb_soundset_selected", JsonInt(nSelection)); + NuiSetBindWatch(oPC, nToken, "cmb_soundset_selected", TRUE); + NuiSetBind(oPC, nToken, "cmb_soundset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_desc_save_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_portrait_ok_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "desc_tooltip", JsonString(" You can use color codes!")); + string sDescription = GetDescription(oHenchman); + NuiSetBind(oPC, nToken, "desc_value_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "desc_value", JsonString (sDescription)); + // Setup the henchman window. + string sStats = GetAlignText(oHenchman) + " "; + if(GetGender(oHenchman) == GENDER_MALE) sStats += "Male "; + else sStats += "Female "; + sStats += GetStringByStrRef (StringToInt (Get2DAString ("racialtypes", "Name", GetRacialType (oHenchman)))); + NuiSetBind(oPC, nToken, "lbl_stats_label", JsonString(sStats)); + json jHenchman = ObjectToJson(oHenchman); + NuiSetBind(oPC, nToken, "opt_classes_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "opt_classes_value", JsonInt(nClassOption)); + NuiSetBind(oPC, nToken, "btn_level_up_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_level_up_tooltip", JsonString(" Levels the character up by one level in selected class.")); + if(ai_GetIsCharacter(oHenchman)) NuiSetBind(oPC, nToken, "btn_reset_event", JsonBool(FALSE)); + else NuiSetBind(oPC, nToken, "btn_reset_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "btn_reset_tooltip", JsonString(" Resets the character to level 1.")); + nSelection = GetSelectionByClass2DA(nClass); + NuiSetBind(oPC, nToken, "cmb_class_selected", JsonInt(nSelection)); + NuiSetBindWatch(oPC, nToken, "cmb_class_selected", bNoClass); + NuiSetBind(oPC, nToken, "cmb_class_event", JsonBool(bNoClass)); + int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nClassOption + 1)); + //SendMessageToPC(oPC, "nPackage: " + IntToString(nPackage) + " nSelection: " + IntToString(GetSelectionByPackage2DA(sClass, nPackage))); + if(nPackage == 0) + { + nPackage = GetPackageBySelection2DA(sClass, 0); + SetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nClassOption + 1), nPackage); + } + //SendMessageToPC(oPC, "nPackage: " + IntToString(nPackage) + " sClass: " + sClass); + NuiSetBind(oPC, nToken, "cmb_package_selected", JsonInt(GetSelectionByPackage2DA(sClass, nPackage))); + NuiSetBindWatch(oPC, nToken, "cmb_package_selected", bNoClass); + NuiSetBind(oPC, nToken, "cmb_package_event", JsonBool(bNoClass)); +} +void CreateCharacterDescriptionNUI(object oPC, string sName, string sIcon, string sDescription) +{ + // Row 1 ******************************************************************* 500 / 469 + json jRow = CreateImage(JsonArray(), "", "char_icon", NUI_ASPECT_FIT, NUI_HALIGN_CENTER, NUI_VALIGN_MIDDLE, 40.0, 40.0); + jRow = CreateTextBox(jRow, "char_text", 380.0, 400.0); + // Add row to the column. + json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow)); + // Row 2 ******************************************************************* 500 / 522 + jRow = JsonArrayInsert(JsonArray(), NuiSpacer()); + jRow = CreateButton(jRow, "OK", "btn_ok", 150.0f, 45.0f); + // Add row to the column. + jCol = JsonArrayInsert(jCol, NuiRow(jRow)); + // Set the Layout of the window. + json jLayout = NuiCol(jCol); + int nToken = SetWindow(oPC, jLayout, "char_description_nui", sName, + -1.0, -1.0, 460.0f, 537.0 + 12.0f, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen"); + json jData = JsonArrayInsert(JsonArray(), JsonString(ObjectToString(oPC))); + NuiSetUserData(oPC, nToken, jData); + // Row 1 + NuiSetBind(oPC, nToken, "char_icon_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "char_icon_image", JsonString(sIcon)); + NuiSetBind(oPC, nToken, "char_text_event", JsonBool(TRUE)); + NuiSetBind(oPC, nToken, "char_text", JsonString(sDescription)); + // Row 2 + NuiSetBind(oPC, nToken, "btn_ok_event", JsonBool(TRUE)); +} diff --git a/_module/nwn_erf.exe b/_module/nwn_erf.exe index ae3ee49..d071908 100644 Binary files a/_module/nwn_erf.exe and b/_module/nwn_erf.exe differ diff --git a/_module/nwn_gff.exe b/_module/nwn_gff.exe index 7fdf454..bafc985 100644 Binary files a/_module/nwn_gff.exe and b/_module/nwn_gff.exe differ diff --git a/_module/uts/cavedrips001.uts.json b/_module/uts/cavedrips001.uts.json index 18907cb..61fc959 100644 --- a/_module/uts/cavedrips001.uts.json +++ b/_module/uts/cavedrips001.uts.json @@ -53,7 +53,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.300000011920929 + "value": 0.30000001192092896 }, "Positional": { "type": "byte", diff --git a/_module/uts/creaking.uts.json b/_module/uts/creaking.uts.json index cd899dd..040ed70 100644 --- a/_module/uts/creaking.uts.json +++ b/_module/uts/creaking.uts.json @@ -52,7 +52,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", diff --git a/_module/uts/cursedsounds.uts.json b/_module/uts/cursedsounds.uts.json index 57b3c4b..d9e5bf1 100644 --- a/_module/uts/cursedsounds.uts.json +++ b/_module/uts/cursedsounds.uts.json @@ -52,7 +52,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", diff --git a/_module/uts/dungeon.uts.json b/_module/uts/dungeon.uts.json index 7254482..cffd0a1 100644 --- a/_module/uts/dungeon.uts.json +++ b/_module/uts/dungeon.uts.json @@ -52,7 +52,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", diff --git a/_module/uts/spiders.uts.json b/_module/uts/spiders.uts.json index bac5952..b56ce4d 100644 --- a/_module/uts/spiders.uts.json +++ b/_module/uts/spiders.uts.json @@ -52,7 +52,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte", diff --git a/_module/uts/wildernesssounds.uts.json b/_module/uts/wildernesssounds.uts.json index 7370b78..e26e46f 100644 --- a/_module/uts/wildernesssounds.uts.json +++ b/_module/uts/wildernesssounds.uts.json @@ -52,7 +52,7 @@ }, "PitchVariation": { "type": "float", - "value": 0.1000000014901161 + "value": 0.10000000149011612 }, "Positional": { "type": "byte",