summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.appveyor.yml28
-rw-r--r--CHANGELOG.md69
-rw-r--r--Hercules-11.sln10
-rw-r--r--Hercules-12.sln10
-rw-r--r--Hercules-14.sln8
-rw-r--r--Hercules.xcodeproj/project.pbxproj339
-rw-r--r--Hercules.xcodeproj/xcshareddata/xcschemes/mapcache.xcscheme91
-rw-r--r--README.md26
-rw-r--r--conf/clans.conf48
-rw-r--r--conf/map/logs.conf5
-rw-r--r--conf/messages.conf8
-rw-r--r--db/clans.conf141
-rw-r--r--db/constants.conf5
-rw-r--r--db/pre-re/item_db.conf2
-rw-r--r--db/pre-re/map_cache.datbin2147147 -> 0 bytes
-rw-r--r--db/pre-re/skill_db.conf350
-rw-r--r--db/re/item_db.conf2
-rw-r--r--db/re/map_cache.datbin2124369 -> 0 bytes
-rw-r--r--db/re/map_zone_db.conf19
-rw-r--r--db/re/skill_db.conf354
-rw-r--r--db/sc_config.txt3
-rw-r--r--db/skill_reproduce_db.txt204
-rw-r--r--doc/atcommands.txt37
-rw-r--r--doc/item_db.txt11
-rw-r--r--doc/script_commands.txt42
-rw-r--r--maps/pre-re/06guild_01.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_02.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_03.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_04.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_05.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_06.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_07.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_08.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/06guild_r.mcachebin0 -> 465 bytes
-rw-r--r--maps/pre-re/1@cash.mcachebin0 -> 3372 bytes
-rw-r--r--maps/pre-re/1@cata.mcachebin0 -> 2382 bytes
-rw-r--r--maps/pre-re/1@def01.mcachebin0 -> 96 bytes
-rw-r--r--maps/pre-re/1@def02.mcachebin0 -> 159 bytes
-rw-r--r--maps/pre-re/1@def03.mcachebin0 -> 421 bytes
-rw-r--r--maps/pre-re/1@dth1.mcachebin0 -> 1345 bytes
-rw-r--r--maps/pre-re/1@dth2.mcachebin0 -> 1345 bytes
-rw-r--r--maps/pre-re/1@dth3.mcachebin0 -> 185 bytes
-rw-r--r--maps/pre-re/1@ecl.mcachebin0 -> 617 bytes
-rw-r--r--maps/pre-re/1@eom.mcachebin0 -> 1136 bytes
-rw-r--r--maps/pre-re/1@face.mcachebin0 -> 6036 bytes
-rw-r--r--maps/pre-re/1@ge_st.mcachebin0 -> 410 bytes
-rw-r--r--maps/pre-re/1@gef.mcachebin0 -> 2641 bytes
-rw-r--r--maps/pre-re/1@gef_in.mcachebin0 -> 1274 bytes
-rw-r--r--maps/pre-re/1@gl_k.mcachebin0 -> 4038 bytes
-rw-r--r--maps/pre-re/1@jtb.mcachebin0 -> 5189 bytes
-rw-r--r--maps/pre-re/1@lhz.mcachebin0 -> 727 bytes
-rw-r--r--maps/pre-re/1@ma_b.mcachebin0 -> 784 bytes
-rw-r--r--maps/pre-re/1@ma_c.mcachebin0 -> 747 bytes
-rw-r--r--maps/pre-re/1@ma_h.mcachebin0 -> 1136 bytes
-rw-r--r--maps/pre-re/1@mist.mcachebin0 -> 6845 bytes
-rw-r--r--maps/pre-re/1@nyd.mcachebin0 -> 4325 bytes
-rw-r--r--maps/pre-re/1@orcs.mcachebin0 -> 1308 bytes
-rw-r--r--maps/pre-re/1@pump.mcachebin0 -> 878 bytes
-rw-r--r--maps/pre-re/1@rev.mcachebin0 -> 668 bytes
-rw-r--r--maps/pre-re/1@sara.mcachebin0 -> 3928 bytes
-rw-r--r--maps/pre-re/1@spa.mcachebin0 -> 1424 bytes
-rw-r--r--maps/pre-re/1@tnm1.mcachebin0 -> 609 bytes
-rw-r--r--maps/pre-re/1@tnm2.mcachebin0 -> 1284 bytes
-rw-r--r--maps/pre-re/1@tnm3.mcachebin0 -> 699 bytes
-rw-r--r--maps/pre-re/1@tower.mcachebin0 -> 2315 bytes
-rw-r--r--maps/pre-re/1@xm_d.mcachebin0 -> 3337 bytes
-rw-r--r--maps/pre-re/2@cata.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/2@gl_k.mcachebin0 -> 3740 bytes
-rw-r--r--maps/pre-re/2@nyd.mcachebin0 -> 3859 bytes
-rw-r--r--maps/pre-re/2@orcs.mcachebin0 -> 1213 bytes
-rw-r--r--maps/pre-re/2@pump.mcachebin0 -> 1679 bytes
-rw-r--r--maps/pre-re/2@tower.mcachebin0 -> 2315 bytes
-rw-r--r--maps/pre-re/3@tower.mcachebin0 -> 2315 bytes
-rw-r--r--maps/pre-re/4@tower.mcachebin0 -> 2349 bytes
-rw-r--r--maps/pre-re/5@tower.mcachebin0 -> 279 bytes
-rw-r--r--maps/pre-re/6@tower.mcachebin0 -> 595 bytes
-rw-r--r--maps/pre-re/abbey01.mcachebin0 -> 3659 bytes
-rw-r--r--maps/pre-re/abbey02.mcachebin0 -> 2358 bytes
-rw-r--r--maps/pre-re/abbey03.mcachebin0 -> 1399 bytes
-rw-r--r--maps/pre-re/abyss_01.mcachebin0 -> 2714 bytes
-rw-r--r--maps/pre-re/abyss_02.mcachebin0 -> 2912 bytes
-rw-r--r--maps/pre-re/abyss_03.mcachebin0 -> 1969 bytes
-rw-r--r--maps/pre-re/airplane.mcachebin0 -> 1424 bytes
-rw-r--r--maps/pre-re/airplane_01.mcachebin0 -> 1424 bytes
-rw-r--r--maps/pre-re/airport.mcachebin0 -> 632 bytes
-rw-r--r--maps/pre-re/alb2trea.mcachebin0 -> 685 bytes
-rw-r--r--maps/pre-re/alb_ship.mcachebin0 -> 549 bytes
-rw-r--r--maps/pre-re/alberta.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/alberta_in.mcachebin0 -> 1125 bytes
-rw-r--r--maps/pre-re/alde_alche.mcachebin0 -> 683 bytes
-rw-r--r--maps/pre-re/alde_dun01.mcachebin0 -> 2965 bytes
-rw-r--r--maps/pre-re/alde_dun02.mcachebin0 -> 2627 bytes
-rw-r--r--maps/pre-re/alde_dun03.mcachebin0 -> 3772 bytes
-rw-r--r--maps/pre-re/alde_dun04.mcachebin0 -> 2837 bytes
-rw-r--r--maps/pre-re/alde_gld.mcachebin0 -> 2763 bytes
-rw-r--r--maps/pre-re/alde_tt02.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/alde_tt03.mcachebin0 -> 3096 bytes
-rw-r--r--maps/pre-re/aldeba_in.mcachebin0 -> 1489 bytes
-rw-r--r--maps/pre-re/aldebaran.mcachebin0 -> 3559 bytes
-rw-r--r--maps/pre-re/aldeg_cas01.mcachebin0 -> 1558 bytes
-rw-r--r--maps/pre-re/aldeg_cas02.mcachebin0 -> 1396 bytes
-rw-r--r--maps/pre-re/aldeg_cas03.mcachebin0 -> 1372 bytes
-rw-r--r--maps/pre-re/aldeg_cas04.mcachebin0 -> 1265 bytes
-rw-r--r--maps/pre-re/aldeg_cas05.mcachebin0 -> 1288 bytes
-rw-r--r--maps/pre-re/ama_dun01.mcachebin0 -> 1072 bytes
-rw-r--r--maps/pre-re/ama_dun02.mcachebin0 -> 1679 bytes
-rw-r--r--maps/pre-re/ama_dun03.mcachebin0 -> 1344 bytes
-rw-r--r--maps/pre-re/ama_fild01.mcachebin0 -> 4596 bytes
-rw-r--r--maps/pre-re/ama_in01.mcachebin0 -> 787 bytes
-rw-r--r--maps/pre-re/ama_in02.mcachebin0 -> 1271 bytes
-rw-r--r--maps/pre-re/ama_test.mcachebin0 -> 265 bytes
-rw-r--r--maps/pre-re/amatsu.mcachebin0 -> 3458 bytes
-rw-r--r--maps/pre-re/anthell01.mcachebin0 -> 3095 bytes
-rw-r--r--maps/pre-re/anthell02.mcachebin0 -> 3196 bytes
-rw-r--r--maps/pre-re/arena_room.mcachebin0 -> 756 bytes
-rw-r--r--maps/pre-re/aru_gld.mcachebin0 -> 7279 bytes
-rw-r--r--maps/pre-re/arug_cas01.mcachebin0 -> 3015 bytes
-rw-r--r--maps/pre-re/arug_cas02.mcachebin0 -> 3214 bytes
-rw-r--r--maps/pre-re/arug_cas03.mcachebin0 -> 2740 bytes
-rw-r--r--maps/pre-re/arug_cas04.mcachebin0 -> 2740 bytes
-rw-r--r--maps/pre-re/arug_cas05.mcachebin0 -> 2740 bytes
-rw-r--r--maps/pre-re/arug_dun01.mcachebin0 -> 4908 bytes
-rw-r--r--maps/pre-re/arug_que01.mcachebin0 -> 698 bytes
-rw-r--r--maps/pre-re/auction_01.mcachebin0 -> 336 bytes
-rw-r--r--maps/pre-re/auction_02.mcachebin0 -> 404 bytes
-rw-r--r--maps/pre-re/ayo_dun01.mcachebin0 -> 2024 bytes
-rw-r--r--maps/pre-re/ayo_dun02.mcachebin0 -> 2612 bytes
-rw-r--r--maps/pre-re/ayo_fild01.mcachebin0 -> 3463 bytes
-rw-r--r--maps/pre-re/ayo_fild02.mcachebin0 -> 4078 bytes
-rw-r--r--maps/pre-re/ayo_in01.mcachebin0 -> 889 bytes
-rw-r--r--maps/pre-re/ayo_in02.mcachebin0 -> 477 bytes
-rw-r--r--maps/pre-re/ayothaya.mcachebin0 -> 2312 bytes
-rw-r--r--maps/pre-re/bat_a01.mcachebin0 -> 8016 bytes
-rw-r--r--maps/pre-re/bat_a02.mcachebin0 -> 8016 bytes
-rw-r--r--maps/pre-re/bat_b01.mcachebin0 -> 1847 bytes
-rw-r--r--maps/pre-re/bat_b02.mcachebin0 -> 1847 bytes
-rw-r--r--maps/pre-re/bat_c01.mcachebin0 -> 234 bytes
-rw-r--r--maps/pre-re/bat_c02.mcachebin0 -> 234 bytes
-rw-r--r--maps/pre-re/bat_c03.mcachebin0 -> 234 bytes
-rw-r--r--maps/pre-re/bat_room.mcachebin0 -> 575 bytes
-rw-r--r--maps/pre-re/beach_dun.mcachebin0 -> 3442 bytes
-rw-r--r--maps/pre-re/beach_dun2.mcachebin0 -> 3794 bytes
-rw-r--r--maps/pre-re/beach_dun3.mcachebin0 -> 3789 bytes
-rw-r--r--maps/pre-re/bif_fild01.mcachebin0 -> 4323 bytes
-rw-r--r--maps/pre-re/bif_fild02.mcachebin0 -> 4646 bytes
-rw-r--r--maps/pre-re/bossnia_01.mcachebin0 -> 1614 bytes
-rw-r--r--maps/pre-re/bossnia_02.mcachebin0 -> 1614 bytes
-rw-r--r--maps/pre-re/bossnia_03.mcachebin0 -> 1614 bytes
-rw-r--r--maps/pre-re/bossnia_04.mcachebin0 -> 1614 bytes
-rw-r--r--maps/pre-re/bra_dun01.mcachebin0 -> 2451 bytes
-rw-r--r--maps/pre-re/bra_dun02.mcachebin0 -> 4865 bytes
-rw-r--r--maps/pre-re/bra_fild01.mcachebin0 -> 5124 bytes
-rw-r--r--maps/pre-re/bra_in01.mcachebin0 -> 1012 bytes
-rw-r--r--maps/pre-re/brasilis.mcachebin0 -> 5661 bytes
-rw-r--r--maps/pre-re/c_tower1.mcachebin0 -> 5392 bytes
-rw-r--r--maps/pre-re/c_tower2.mcachebin0 -> 2836 bytes
-rw-r--r--maps/pre-re/c_tower2_.mcachebin0 -> 2836 bytes
-rw-r--r--maps/pre-re/c_tower3.mcachebin0 -> 2872 bytes
-rw-r--r--maps/pre-re/c_tower3_.mcachebin0 -> 2872 bytes
-rw-r--r--maps/pre-re/c_tower4.mcachebin0 -> 2466 bytes
-rw-r--r--maps/pre-re/cave.mcachebin0 -> 1206 bytes
-rw-r--r--maps/pre-re/cmd_fild01.mcachebin0 -> 7169 bytes
-rw-r--r--maps/pre-re/cmd_fild02.mcachebin0 -> 5392 bytes
-rw-r--r--maps/pre-re/cmd_fild03.mcachebin0 -> 6989 bytes
-rw-r--r--maps/pre-re/cmd_fild04.mcachebin0 -> 5462 bytes
-rw-r--r--maps/pre-re/cmd_fild05.mcachebin0 -> 6110 bytes
-rw-r--r--maps/pre-re/cmd_fild06.mcachebin0 -> 5540 bytes
-rw-r--r--maps/pre-re/cmd_fild07.mcachebin0 -> 5116 bytes
-rw-r--r--maps/pre-re/cmd_fild08.mcachebin0 -> 7721 bytes
-rw-r--r--maps/pre-re/cmd_fild09.mcachebin0 -> 5115 bytes
-rw-r--r--maps/pre-re/cmd_in01.mcachebin0 -> 888 bytes
-rw-r--r--maps/pre-re/cmd_in02.mcachebin0 -> 1781 bytes
-rw-r--r--maps/pre-re/comodo.mcachebin0 -> 5592 bytes
-rw-r--r--maps/pre-re/dali.mcachebin0 -> 912 bytes
-rw-r--r--maps/pre-re/dali02.mcachebin0 -> 912 bytes
-rw-r--r--maps/pre-re/dew_dun01.mcachebin0 -> 2402 bytes
-rw-r--r--maps/pre-re/dew_dun02.mcachebin0 -> 2934 bytes
-rw-r--r--maps/pre-re/dew_fild01.mcachebin0 -> 5166 bytes
-rw-r--r--maps/pre-re/dew_in01.mcachebin0 -> 127 bytes
-rw-r--r--maps/pre-re/dewata.mcachebin0 -> 4494 bytes
-rw-r--r--maps/pre-re/dic_dun01.mcachebin0 -> 1144 bytes
-rw-r--r--maps/pre-re/dic_dun02.mcachebin0 -> 2840 bytes
-rw-r--r--maps/pre-re/dic_dun03.mcachebin0 -> 2840 bytes
-rw-r--r--maps/pre-re/dic_fild01.mcachebin0 -> 3253 bytes
-rw-r--r--maps/pre-re/dic_fild02.mcachebin0 -> 4676 bytes
-rw-r--r--maps/pre-re/dic_in01.mcachebin0 -> 2688 bytes
-rw-r--r--maps/pre-re/dicastes01.mcachebin0 -> 4081 bytes
-rw-r--r--maps/pre-re/dicastes02.mcachebin0 -> 1268 bytes
-rw-r--r--maps/pre-re/e_tower.mcachebin0 -> 225 bytes
-rw-r--r--maps/pre-re/ecl_fild01.mcachebin0 -> 2172 bytes
-rw-r--r--maps/pre-re/ecl_hub01.mcachebin0 -> 370 bytes
-rw-r--r--maps/pre-re/ecl_in01.mcachebin0 -> 480 bytes
-rw-r--r--maps/pre-re/ecl_in02.mcachebin0 -> 692 bytes
-rw-r--r--maps/pre-re/ecl_in03.mcachebin0 -> 860 bytes
-rw-r--r--maps/pre-re/ecl_in04.mcachebin0 -> 971 bytes
-rw-r--r--maps/pre-re/ecl_tdun01.mcachebin0 -> 619 bytes
-rw-r--r--maps/pre-re/ecl_tdun02.mcachebin0 -> 455 bytes
-rw-r--r--maps/pre-re/ecl_tdun03.mcachebin0 -> 379 bytes
-rw-r--r--maps/pre-re/ecl_tdun04.mcachebin0 -> 146 bytes
-rw-r--r--maps/pre-re/eclage.mcachebin0 -> 3236 bytes
-rw-r--r--maps/pre-re/ein_dun01.mcachebin0 -> 2489 bytes
-rw-r--r--maps/pre-re/ein_dun02.mcachebin0 -> 2796 bytes
-rw-r--r--maps/pre-re/ein_fild01.mcachebin0 -> 3849 bytes
-rw-r--r--maps/pre-re/ein_fild02.mcachebin0 -> 4219 bytes
-rw-r--r--maps/pre-re/ein_fild03.mcachebin0 -> 3585 bytes
-rw-r--r--maps/pre-re/ein_fild04.mcachebin0 -> 5307 bytes
-rw-r--r--maps/pre-re/ein_fild05.mcachebin0 -> 2988 bytes
-rw-r--r--maps/pre-re/ein_fild06.mcachebin0 -> 3134 bytes
-rw-r--r--maps/pre-re/ein_fild07.mcachebin0 -> 4219 bytes
-rw-r--r--maps/pre-re/ein_fild08.mcachebin0 -> 4686 bytes
-rw-r--r--maps/pre-re/ein_fild09.mcachebin0 -> 4268 bytes
-rw-r--r--maps/pre-re/ein_fild10.mcachebin0 -> 2998 bytes
-rw-r--r--maps/pre-re/ein_in01.mcachebin0 -> 2306 bytes
-rw-r--r--maps/pre-re/einbech.mcachebin0 -> 2636 bytes
-rw-r--r--maps/pre-re/einbroch.mcachebin0 -> 3864 bytes
-rw-r--r--maps/pre-re/evt_bomb.mcachebin0 -> 5290 bytes
-rw-r--r--maps/pre-re/evt_mobroom.mcachebin0 -> 793 bytes
-rw-r--r--maps/pre-re/force_1-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/force_1-2.mcachebin0 -> 907 bytes
-rw-r--r--maps/pre-re/force_1-3.mcachebin0 -> 728 bytes
-rw-r--r--maps/pre-re/force_2-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/force_2-2.mcachebin0 -> 907 bytes
-rw-r--r--maps/pre-re/force_2-3.mcachebin0 -> 728 bytes
-rw-r--r--maps/pre-re/force_3-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/force_3-2.mcachebin0 -> 907 bytes
-rw-r--r--maps/pre-re/force_3-3.mcachebin0 -> 728 bytes
-rw-r--r--maps/pre-re/force_4-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/force_5-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/force_map1.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/force_map2.mcachebin0 -> 907 bytes
-rw-r--r--maps/pre-re/force_map3.mcachebin0 -> 728 bytes
-rw-r--r--maps/pre-re/g_room1-1.mcachebin0 -> 1622 bytes
-rw-r--r--maps/pre-re/g_room1-2.mcachebin0 -> 1622 bytes
-rw-r--r--maps/pre-re/g_room1-3.mcachebin0 -> 1622 bytes
-rw-r--r--maps/pre-re/g_room2.mcachebin0 -> 1622 bytes
-rw-r--r--maps/pre-re/gef_dun00.mcachebin0 -> 1219 bytes
-rw-r--r--maps/pre-re/gef_dun01.mcachebin0 -> 2554 bytes
-rw-r--r--maps/pre-re/gef_dun02.mcachebin0 -> 2096 bytes
-rw-r--r--maps/pre-re/gef_dun03.mcachebin0 -> 1614 bytes
-rw-r--r--maps/pre-re/gef_fild00.mcachebin0 -> 4521 bytes
-rw-r--r--maps/pre-re/gef_fild01.mcachebin0 -> 3432 bytes
-rw-r--r--maps/pre-re/gef_fild02.mcachebin0 -> 6359 bytes
-rw-r--r--maps/pre-re/gef_fild03.mcachebin0 -> 5598 bytes
-rw-r--r--maps/pre-re/gef_fild04.mcachebin0 -> 2965 bytes
-rw-r--r--maps/pre-re/gef_fild05.mcachebin0 -> 4186 bytes
-rw-r--r--maps/pre-re/gef_fild06.mcachebin0 -> 4720 bytes
-rw-r--r--maps/pre-re/gef_fild07.mcachebin0 -> 3593 bytes
-rw-r--r--maps/pre-re/gef_fild08.mcachebin0 -> 4114 bytes
-rw-r--r--maps/pre-re/gef_fild09.mcachebin0 -> 3590 bytes
-rw-r--r--maps/pre-re/gef_fild10.mcachebin0 -> 5262 bytes
-rw-r--r--maps/pre-re/gef_fild11.mcachebin0 -> 6463 bytes
-rw-r--r--maps/pre-re/gef_fild12.mcachebin0 -> 4585 bytes
-rw-r--r--maps/pre-re/gef_fild13.mcachebin0 -> 4267 bytes
-rw-r--r--maps/pre-re/gef_fild14.mcachebin0 -> 6090 bytes
-rw-r--r--maps/pre-re/gef_tower.mcachebin0 -> 1287 bytes
-rw-r--r--maps/pre-re/gefenia01.mcachebin0 -> 3033 bytes
-rw-r--r--maps/pre-re/gefenia02.mcachebin0 -> 2640 bytes
-rw-r--r--maps/pre-re/gefenia03.mcachebin0 -> 3098 bytes
-rw-r--r--maps/pre-re/gefenia04.mcachebin0 -> 1756 bytes
-rw-r--r--maps/pre-re/geffen.mcachebin0 -> 2624 bytes
-rw-r--r--maps/pre-re/geffen_in.mcachebin0 -> 1275 bytes
-rw-r--r--maps/pre-re/gefg_cas01.mcachebin0 -> 1174 bytes
-rw-r--r--maps/pre-re/gefg_cas02.mcachebin0 -> 1144 bytes
-rw-r--r--maps/pre-re/gefg_cas03.mcachebin0 -> 2475 bytes
-rw-r--r--maps/pre-re/gefg_cas04.mcachebin0 -> 1298 bytes
-rw-r--r--maps/pre-re/gefg_cas05.mcachebin0 -> 1447 bytes
-rw-r--r--maps/pre-re/gl_cas01.mcachebin0 -> 6126 bytes
-rw-r--r--maps/pre-re/gl_cas02.mcachebin0 -> 2497 bytes
-rw-r--r--maps/pre-re/gl_cas02_.mcachebin0 -> 2497 bytes
-rw-r--r--maps/pre-re/gl_church.mcachebin0 -> 3799 bytes
-rw-r--r--maps/pre-re/gl_chyard.mcachebin0 -> 3516 bytes
-rw-r--r--maps/pre-re/gl_chyard_.mcachebin0 -> 3516 bytes
-rw-r--r--maps/pre-re/gl_dun01.mcachebin0 -> 3208 bytes
-rw-r--r--maps/pre-re/gl_dun02.mcachebin0 -> 3696 bytes
-rw-r--r--maps/pre-re/gl_in01.mcachebin0 -> 1607 bytes
-rw-r--r--maps/pre-re/gl_knt01.mcachebin0 -> 3926 bytes
-rw-r--r--maps/pre-re/gl_knt02.mcachebin0 -> 3127 bytes
-rw-r--r--maps/pre-re/gl_prison.mcachebin0 -> 1958 bytes
-rw-r--r--maps/pre-re/gl_prison1.mcachebin0 -> 1690 bytes
-rw-r--r--maps/pre-re/gl_sew01.mcachebin0 -> 1887 bytes
-rw-r--r--maps/pre-re/gl_sew02.mcachebin0 -> 3261 bytes
-rw-r--r--maps/pre-re/gl_sew03.mcachebin0 -> 2178 bytes
-rw-r--r--maps/pre-re/gl_sew04.mcachebin0 -> 2196 bytes
-rw-r--r--maps/pre-re/gl_step.mcachebin0 -> 2145 bytes
-rw-r--r--maps/pre-re/glast_01.mcachebin0 -> 7074 bytes
-rw-r--r--maps/pre-re/gld2_ald.mcachebin0 -> 3877 bytes
-rw-r--r--maps/pre-re/gld2_gef.mcachebin0 -> 2892 bytes
-rw-r--r--maps/pre-re/gld2_pay.mcachebin0 -> 2761 bytes
-rw-r--r--maps/pre-re/gld2_prt.mcachebin0 -> 3738 bytes
-rw-r--r--maps/pre-re/gld_dun01.mcachebin0 -> 1950 bytes
-rw-r--r--maps/pre-re/gld_dun01_2.mcachebin0 -> 1950 bytes
-rw-r--r--maps/pre-re/gld_dun02.mcachebin0 -> 1570 bytes
-rw-r--r--maps/pre-re/gld_dun02_2.mcachebin0 -> 1570 bytes
-rw-r--r--maps/pre-re/gld_dun03.mcachebin0 -> 2866 bytes
-rw-r--r--maps/pre-re/gld_dun03_2.mcachebin0 -> 2866 bytes
-rw-r--r--maps/pre-re/gld_dun04.mcachebin0 -> 3036 bytes
-rw-r--r--maps/pre-re/gld_dun04_2.mcachebin0 -> 3036 bytes
-rw-r--r--maps/pre-re/gon_dun01.mcachebin0 -> 2314 bytes
-rw-r--r--maps/pre-re/gon_dun02.mcachebin0 -> 2701 bytes
-rw-r--r--maps/pre-re/gon_dun03.mcachebin0 -> 2365 bytes
-rw-r--r--maps/pre-re/gon_fild01.mcachebin0 -> 3587 bytes
-rw-r--r--maps/pre-re/gon_in.mcachebin0 -> 669 bytes
-rw-r--r--maps/pre-re/gon_test.mcachebin0 -> 201 bytes
-rw-r--r--maps/pre-re/gonryun.mcachebin0 -> 3820 bytes
-rw-r--r--maps/pre-re/guild_room.mcachebin0 -> 1622 bytes
-rw-r--r--maps/pre-re/guild_vs1-1.mcachebin0 -> 242 bytes
-rw-r--r--maps/pre-re/guild_vs1-2.mcachebin0 -> 242 bytes
-rw-r--r--maps/pre-re/guild_vs1-3.mcachebin0 -> 242 bytes
-rw-r--r--maps/pre-re/guild_vs1-4.mcachebin0 -> 242 bytes
-rw-r--r--maps/pre-re/guild_vs1.mcachebin0 -> 242 bytes
-rw-r--r--maps/pre-re/guild_vs2-1.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/guild_vs2-2.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/guild_vs2.mcachebin0 -> 213 bytes
-rw-r--r--maps/pre-re/guild_vs3.mcachebin0 -> 227 bytes
-rw-r--r--maps/pre-re/guild_vs4.mcachebin0 -> 254 bytes
-rw-r--r--maps/pre-re/guild_vs5.mcachebin0 -> 358 bytes
-rw-r--r--maps/pre-re/himinn.mcachebin0 -> 186 bytes
-rw-r--r--maps/pre-re/hu_fild01.mcachebin0 -> 3640 bytes
-rw-r--r--maps/pre-re/hu_fild02.mcachebin0 -> 5711 bytes
-rw-r--r--maps/pre-re/hu_fild03.mcachebin0 -> 6052 bytes
-rw-r--r--maps/pre-re/hu_fild04.mcachebin0 -> 6939 bytes
-rw-r--r--maps/pre-re/hu_fild05.mcachebin0 -> 4544 bytes
-rw-r--r--maps/pre-re/hu_fild06.mcachebin0 -> 3245 bytes
-rw-r--r--maps/pre-re/hu_fild07.mcachebin0 -> 4720 bytes
-rw-r--r--maps/pre-re/hu_in01.mcachebin0 -> 2569 bytes
-rw-r--r--maps/pre-re/hugel.mcachebin0 -> 3089 bytes
-rw-r--r--maps/pre-re/hunter_1-1.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/hunter_2-1.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/hunter_3-1.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/ice_dun01.mcachebin0 -> 3551 bytes
-rw-r--r--maps/pre-re/ice_dun02.mcachebin0 -> 3627 bytes
-rw-r--r--maps/pre-re/ice_dun03.mcachebin0 -> 4492 bytes
-rw-r--r--maps/pre-re/ice_dun04.mcachebin0 -> 291 bytes
-rw-r--r--maps/pre-re/in_hunter.mcachebin0 -> 342 bytes
-rw-r--r--maps/pre-re/in_moc_16.mcachebin0 -> 1125 bytes
-rw-r--r--maps/pre-re/in_orcs01.mcachebin0 -> 802 bytes
-rw-r--r--maps/pre-re/in_rogue.mcachebin0 -> 3380 bytes
-rw-r--r--maps/pre-re/in_sphinx1.mcachebin0 -> 3285 bytes
-rw-r--r--maps/pre-re/in_sphinx2.mcachebin0 -> 3247 bytes
-rw-r--r--maps/pre-re/in_sphinx3.mcachebin0 -> 1491 bytes
-rw-r--r--maps/pre-re/in_sphinx4.mcachebin0 -> 1714 bytes
-rw-r--r--maps/pre-re/in_sphinx5.mcachebin0 -> 1355 bytes
-rw-r--r--maps/pre-re/int_land.mcachebin0 -> 636 bytes
-rw-r--r--maps/pre-re/int_land01.mcachebin0 -> 636 bytes
-rw-r--r--maps/pre-re/int_land02.mcachebin0 -> 636 bytes
-rw-r--r--maps/pre-re/int_land03.mcachebin0 -> 636 bytes
-rw-r--r--maps/pre-re/int_land04.mcachebin0 -> 636 bytes
-rw-r--r--maps/pre-re/itemmall.mcachebin0 -> 336 bytes
-rw-r--r--maps/pre-re/iz_ac01.mcachebin0 -> 941 bytes
-rw-r--r--maps/pre-re/iz_ac01_a.mcachebin0 -> 941 bytes
-rw-r--r--maps/pre-re/iz_ac01_b.mcachebin0 -> 941 bytes
-rw-r--r--maps/pre-re/iz_ac01_c.mcachebin0 -> 941 bytes
-rw-r--r--maps/pre-re/iz_ac01_d.mcachebin0 -> 941 bytes
-rw-r--r--maps/pre-re/iz_ac02.mcachebin0 -> 1515 bytes
-rw-r--r--maps/pre-re/iz_ac02_a.mcachebin0 -> 1515 bytes
-rw-r--r--maps/pre-re/iz_ac02_b.mcachebin0 -> 1515 bytes
-rw-r--r--maps/pre-re/iz_ac02_c.mcachebin0 -> 1515 bytes
-rw-r--r--maps/pre-re/iz_ac02_d.mcachebin0 -> 1515 bytes
-rw-r--r--maps/pre-re/iz_dun00.mcachebin0 -> 5376 bytes
-rw-r--r--maps/pre-re/iz_dun01.mcachebin0 -> 4048 bytes
-rw-r--r--maps/pre-re/iz_dun02.mcachebin0 -> 5095 bytes
-rw-r--r--maps/pre-re/iz_dun03.mcachebin0 -> 3181 bytes
-rw-r--r--maps/pre-re/iz_dun04.mcachebin0 -> 2287 bytes
-rw-r--r--maps/pre-re/iz_dun05.mcachebin0 -> 2537 bytes
-rw-r--r--maps/pre-re/iz_int.mcachebin0 -> 405 bytes
-rw-r--r--maps/pre-re/iz_int01.mcachebin0 -> 405 bytes
-rw-r--r--maps/pre-re/iz_int02.mcachebin0 -> 405 bytes
-rw-r--r--maps/pre-re/iz_int03.mcachebin0 -> 405 bytes
-rw-r--r--maps/pre-re/iz_int04.mcachebin0 -> 405 bytes
-rw-r--r--maps/pre-re/iz_ng01.mcachebin0 -> 225 bytes
-rw-r--r--maps/pre-re/izlu2dun.mcachebin0 -> 1237 bytes
-rw-r--r--maps/pre-re/izlude.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/izlude_a.mcachebin0 -> 1680 bytes
-rw-r--r--maps/pre-re/izlude_b.mcachebin0 -> 1680 bytes
-rw-r--r--maps/pre-re/izlude_c.mcachebin0 -> 1680 bytes
-rw-r--r--maps/pre-re/izlude_d.mcachebin0 -> 1680 bytes
-rw-r--r--maps/pre-re/izlude_in.mcachebin0 -> 881 bytes
-rw-r--r--maps/pre-re/jawaii.mcachebin0 -> 2791 bytes
-rw-r--r--maps/pre-re/jawaii_in.mcachebin0 -> 707 bytes
-rw-r--r--maps/pre-re/job3_arch01.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/job3_arch02.mcachebin0 -> 4731 bytes
-rw-r--r--maps/pre-re/job3_arch03.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/job3_gen01.mcachebin0 -> 363 bytes
-rw-r--r--maps/pre-re/job3_guil01.mcachebin0 -> 409 bytes
-rw-r--r--maps/pre-re/job3_guil02.mcachebin0 -> 137 bytes
-rw-r--r--maps/pre-re/job3_guil03.mcachebin0 -> 569 bytes
-rw-r--r--maps/pre-re/job3_rang01.mcachebin0 -> 131 bytes
-rw-r--r--maps/pre-re/job3_rang02.mcachebin0 -> 878 bytes
-rw-r--r--maps/pre-re/job3_rune01.mcachebin0 -> 385 bytes
-rw-r--r--maps/pre-re/job3_rune02.mcachebin0 -> 97 bytes
-rw-r--r--maps/pre-re/job3_rune03.mcachebin0 -> 97 bytes
-rw-r--r--maps/pre-re/job3_sha01.mcachebin0 -> 300 bytes
-rw-r--r--maps/pre-re/job3_war01.mcachebin0 -> 141 bytes
-rw-r--r--maps/pre-re/job3_war02.mcachebin0 -> 141 bytes
-rw-r--r--maps/pre-re/job_cru.mcachebin0 -> 744 bytes
-rw-r--r--maps/pre-re/job_duncer.mcachebin0 -> 563 bytes
-rw-r--r--maps/pre-re/job_hunte.mcachebin0 -> 702 bytes
-rw-r--r--maps/pre-re/job_hunter.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/job_knight.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/job_knt.mcachebin0 -> 377 bytes
-rw-r--r--maps/pre-re/job_ko.mcachebin0 -> 722 bytes
-rw-r--r--maps/pre-re/job_monk.mcachebin0 -> 2632 bytes
-rw-r--r--maps/pre-re/job_priest.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/job_prist.mcachebin0 -> 744 bytes
-rw-r--r--maps/pre-re/job_sage.mcachebin0 -> 491 bytes
-rw-r--r--maps/pre-re/job_soul.mcachebin0 -> 75 bytes
-rw-r--r--maps/pre-re/job_star.mcachebin0 -> 353 bytes
-rw-r--r--maps/pre-re/job_sword1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/pre-re/job_thief1.mcachebin0 -> 5733 bytes
-rw-r--r--maps/pre-re/job_wiz.mcachebin0 -> 491 bytes
-rw-r--r--maps/pre-re/job_wizard.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/jupe_area1.mcachebin0 -> 508 bytes
-rw-r--r--maps/pre-re/jupe_area2.mcachebin0 -> 471 bytes
-rw-r--r--maps/pre-re/jupe_cave.mcachebin0 -> 192 bytes
-rw-r--r--maps/pre-re/jupe_core.mcachebin0 -> 1911 bytes
-rw-r--r--maps/pre-re/jupe_core2.mcachebin0 -> 1911 bytes
-rw-r--r--maps/pre-re/jupe_ele.mcachebin0 -> 118 bytes
-rw-r--r--maps/pre-re/jupe_ele_r.mcachebin0 -> 163 bytes
-rw-r--r--maps/pre-re/jupe_gate.mcachebin0 -> 157 bytes
-rw-r--r--maps/pre-re/juperos_01.mcachebin0 -> 2883 bytes
-rw-r--r--maps/pre-re/juperos_02.mcachebin0 -> 3031 bytes
-rw-r--r--maps/pre-re/kh_dun01.mcachebin0 -> 1210 bytes
-rw-r--r--maps/pre-re/kh_dun02.mcachebin0 -> 1593 bytes
-rw-r--r--maps/pre-re/kh_kiehl01.mcachebin0 -> 1407 bytes
-rw-r--r--maps/pre-re/kh_kiehl02.mcachebin0 -> 221 bytes
-rw-r--r--maps/pre-re/kh_mansion.mcachebin0 -> 231 bytes
-rw-r--r--maps/pre-re/kh_rossi.mcachebin0 -> 1415 bytes
-rw-r--r--maps/pre-re/kh_school.mcachebin0 -> 870 bytes
-rw-r--r--maps/pre-re/kh_vila.mcachebin0 -> 1037 bytes
-rw-r--r--maps/pre-re/knight_1-1.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/knight_2-1.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/knight_3-1.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/lhz_airport.mcachebin0 -> 632 bytes
-rw-r--r--maps/pre-re/lhz_cube.mcachebin0 -> 578 bytes
-rw-r--r--maps/pre-re/lhz_dun01.mcachebin0 -> 4225 bytes
-rw-r--r--maps/pre-re/lhz_dun02.mcachebin0 -> 3117 bytes
-rw-r--r--maps/pre-re/lhz_dun03.mcachebin0 -> 2248 bytes
-rw-r--r--maps/pre-re/lhz_dun04.mcachebin0 -> 3942 bytes
-rw-r--r--maps/pre-re/lhz_fild01.mcachebin0 -> 4542 bytes
-rw-r--r--maps/pre-re/lhz_fild02.mcachebin0 -> 2517 bytes
-rw-r--r--maps/pre-re/lhz_fild03.mcachebin0 -> 3731 bytes
-rw-r--r--maps/pre-re/lhz_in01.mcachebin0 -> 2538 bytes
-rw-r--r--maps/pre-re/lhz_in02.mcachebin0 -> 2040 bytes
-rw-r--r--maps/pre-re/lhz_in03.mcachebin0 -> 1391 bytes
-rw-r--r--maps/pre-re/lhz_que01.mcachebin0 -> 364 bytes
-rw-r--r--maps/pre-re/lighthalzen.mcachebin0 -> 5429 bytes
-rw-r--r--maps/pre-re/lou_dun01.mcachebin0 -> 4094 bytes
-rw-r--r--maps/pre-re/lou_dun02.mcachebin0 -> 4746 bytes
-rw-r--r--maps/pre-re/lou_dun03.mcachebin0 -> 2521 bytes
-rw-r--r--maps/pre-re/lou_fild01.mcachebin0 -> 3608 bytes
-rw-r--r--maps/pre-re/lou_in01.mcachebin0 -> 738 bytes
-rw-r--r--maps/pre-re/lou_in02.mcachebin0 -> 1373 bytes
-rw-r--r--maps/pre-re/louyang.mcachebin0 -> 4749 bytes
-rw-r--r--maps/pre-re/ma_dun01.mcachebin0 -> 1662 bytes
-rw-r--r--maps/pre-re/ma_fild01.mcachebin0 -> 6120 bytes
-rw-r--r--maps/pre-re/ma_fild02.mcachebin0 -> 6036 bytes
-rw-r--r--maps/pre-re/ma_in01.mcachebin0 -> 783 bytes
-rw-r--r--maps/pre-re/ma_scene01.mcachebin0 -> 592 bytes
-rw-r--r--maps/pre-re/ma_zif01.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif02.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif03.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif04.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif05.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif06.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif07.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif08.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/ma_zif09.mcachebin0 -> 74 bytes
-rw-r--r--maps/pre-re/mag_dun01.mcachebin0 -> 1840 bytes
-rw-r--r--maps/pre-re/mag_dun02.mcachebin0 -> 1738 bytes
-rw-r--r--maps/pre-re/mal_dun01.mcachebin0 -> 2324 bytes
-rw-r--r--maps/pre-re/mal_in01.mcachebin0 -> 882 bytes
-rw-r--r--maps/pre-re/mal_in02.mcachebin0 -> 604 bytes
-rw-r--r--maps/pre-re/malangdo.mcachebin0 -> 2777 bytes
-rw-r--r--maps/pre-re/malaya.mcachebin0 -> 6437 bytes
-rw-r--r--maps/pre-re/man_fild01.mcachebin0 -> 5789 bytes
-rw-r--r--maps/pre-re/man_fild02.mcachebin0 -> 5027 bytes
-rw-r--r--maps/pre-re/man_fild03.mcachebin0 -> 3147 bytes
-rw-r--r--maps/pre-re/man_in01.mcachebin0 -> 1988 bytes
-rw-r--r--maps/pre-re/manuk.mcachebin0 -> 3307 bytes
-rw-r--r--maps/pre-re/mid_camp.mcachebin0 -> 4389 bytes
-rw-r--r--maps/pre-re/mid_campin.mcachebin0 -> 1027 bytes
-rw-r--r--maps/pre-re/mjo_dun01.mcachebin0 -> 3687 bytes
-rw-r--r--maps/pre-re/mjo_dun02.mcachebin0 -> 2786 bytes
-rw-r--r--maps/pre-re/mjo_dun03.mcachebin0 -> 2836 bytes
-rw-r--r--maps/pre-re/mjolnir_01.mcachebin0 -> 5927 bytes
-rw-r--r--maps/pre-re/mjolnir_02.mcachebin0 -> 5991 bytes
-rw-r--r--maps/pre-re/mjolnir_03.mcachebin0 -> 5445 bytes
-rw-r--r--maps/pre-re/mjolnir_04.mcachebin0 -> 5990 bytes
-rw-r--r--maps/pre-re/mjolnir_05.mcachebin0 -> 6349 bytes
-rw-r--r--maps/pre-re/mjolnir_06.mcachebin0 -> 3575 bytes
-rw-r--r--maps/pre-re/mjolnir_07.mcachebin0 -> 3953 bytes
-rw-r--r--maps/pre-re/mjolnir_08.mcachebin0 -> 5310 bytes
-rw-r--r--maps/pre-re/mjolnir_09.mcachebin0 -> 8422 bytes
-rw-r--r--maps/pre-re/mjolnir_10.mcachebin0 -> 7066 bytes
-rw-r--r--maps/pre-re/mjolnir_11.mcachebin0 -> 5207 bytes
-rw-r--r--maps/pre-re/mjolnir_12.mcachebin0 -> 4551 bytes
-rw-r--r--maps/pre-re/moc_castle.mcachebin0 -> 1034 bytes
-rw-r--r--maps/pre-re/moc_fild01.mcachebin0 -> 4428 bytes
-rw-r--r--maps/pre-re/moc_fild02.mcachebin0 -> 5249 bytes
-rw-r--r--maps/pre-re/moc_fild03.mcachebin0 -> 5033 bytes
-rw-r--r--maps/pre-re/moc_fild04.mcachebin0 -> 6816 bytes
-rw-r--r--maps/pre-re/moc_fild05.mcachebin0 -> 5638 bytes
-rw-r--r--maps/pre-re/moc_fild06.mcachebin0 -> 5550 bytes
-rw-r--r--maps/pre-re/moc_fild07.mcachebin0 -> 5050 bytes
-rw-r--r--maps/pre-re/moc_fild08.mcachebin0 -> 5411 bytes
-rw-r--r--maps/pre-re/moc_fild09.mcachebin0 -> 5086 bytes
-rw-r--r--maps/pre-re/moc_fild10.mcachebin0 -> 6303 bytes
-rw-r--r--maps/pre-re/moc_fild11.mcachebin0 -> 4607 bytes
-rw-r--r--maps/pre-re/moc_fild12.mcachebin0 -> 4434 bytes
-rw-r--r--maps/pre-re/moc_fild13.mcachebin0 -> 3705 bytes
-rw-r--r--maps/pre-re/moc_fild14.mcachebin0 -> 4179 bytes
-rw-r--r--maps/pre-re/moc_fild15.mcachebin0 -> 4805 bytes
-rw-r--r--maps/pre-re/moc_fild16.mcachebin0 -> 4035 bytes
-rw-r--r--maps/pre-re/moc_fild17.mcachebin0 -> 3295 bytes
-rw-r--r--maps/pre-re/moc_fild18.mcachebin0 -> 4135 bytes
-rw-r--r--maps/pre-re/moc_fild19.mcachebin0 -> 1251 bytes
-rw-r--r--maps/pre-re/moc_fild20.mcachebin0 -> 5461 bytes
-rw-r--r--maps/pre-re/moc_fild21.mcachebin0 -> 4625 bytes
-rw-r--r--maps/pre-re/moc_fild22.mcachebin0 -> 5745 bytes
-rw-r--r--maps/pre-re/moc_fild22b.mcachebin0 -> 5830 bytes
-rw-r--r--maps/pre-re/moc_para01.mcachebin0 -> 1043 bytes
-rw-r--r--maps/pre-re/moc_pryd01.mcachebin0 -> 958 bytes
-rw-r--r--maps/pre-re/moc_pryd02.mcachebin0 -> 750 bytes
-rw-r--r--maps/pre-re/moc_pryd03.mcachebin0 -> 574 bytes
-rw-r--r--maps/pre-re/moc_pryd04.mcachebin0 -> 775 bytes
-rw-r--r--maps/pre-re/moc_pryd05.mcachebin0 -> 1344 bytes
-rw-r--r--maps/pre-re/moc_pryd06.mcachebin0 -> 1168 bytes
-rw-r--r--maps/pre-re/moc_prydb1.mcachebin0 -> 646 bytes
-rw-r--r--maps/pre-re/moc_prydn1.mcachebin0 -> 1344 bytes
-rw-r--r--maps/pre-re/moc_prydn2.mcachebin0 -> 1168 bytes
-rw-r--r--maps/pre-re/moc_ruins.mcachebin0 -> 1291 bytes
-rw-r--r--maps/pre-re/monk_in.mcachebin0 -> 812 bytes
-rw-r--r--maps/pre-re/monk_test.mcachebin0 -> 2068 bytes
-rw-r--r--maps/pre-re/mora.mcachebin0 -> 1532 bytes
-rw-r--r--maps/pre-re/moro_cav.mcachebin0 -> 315 bytes
-rw-r--r--maps/pre-re/moro_vol.mcachebin0 -> 3000 bytes
-rw-r--r--maps/pre-re/morocc.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/morocc_in.mcachebin0 -> 1209 bytes
-rw-r--r--maps/pre-re/moscovia.mcachebin0 -> 3042 bytes
-rw-r--r--maps/pre-re/mosk_dun01.mcachebin0 -> 3419 bytes
-rw-r--r--maps/pre-re/mosk_dun02.mcachebin0 -> 3593 bytes
-rw-r--r--maps/pre-re/mosk_dun03.mcachebin0 -> 2773 bytes
-rw-r--r--maps/pre-re/mosk_fild01.mcachebin0 -> 434 bytes
-rw-r--r--maps/pre-re/mosk_fild02.mcachebin0 -> 3761 bytes
-rw-r--r--maps/pre-re/mosk_in.mcachebin0 -> 1516 bytes
-rw-r--r--maps/pre-re/mosk_que.mcachebin0 -> 311 bytes
-rw-r--r--maps/pre-re/mosk_ship.mcachebin0 -> 343 bytes
-rw-r--r--maps/pre-re/n_castle.mcachebin0 -> 764 bytes
-rw-r--r--maps/pre-re/nameless_i.mcachebin0 -> 2805 bytes
-rw-r--r--maps/pre-re/nameless_in.mcachebin0 -> 527 bytes
-rw-r--r--maps/pre-re/nameless_n.mcachebin0 -> 4115 bytes
-rw-r--r--maps/pre-re/new_1-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/pre-re/new_1-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/pre-re/new_1-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/pre-re/new_1-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/new_2-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/pre-re/new_2-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/pre-re/new_2-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/pre-re/new_2-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/new_3-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/pre-re/new_3-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/pre-re/new_3-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/pre-re/new_3-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/new_4-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/pre-re/new_4-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/pre-re/new_4-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/pre-re/new_4-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/new_5-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/pre-re/new_5-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/pre-re/new_5-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/pre-re/new_5-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/new_zone01.mcachebin0 -> 934 bytes
-rw-r--r--maps/pre-re/new_zone02.mcachebin0 -> 807 bytes
-rw-r--r--maps/pre-re/new_zone03.mcachebin0 -> 730 bytes
-rw-r--r--maps/pre-re/new_zone04.mcachebin0 -> 630 bytes
-rw-r--r--maps/pre-re/nguild_alde.mcachebin0 -> 1558 bytes
-rw-r--r--maps/pre-re/nguild_gef.mcachebin0 -> 1174 bytes
-rw-r--r--maps/pre-re/nguild_pay.mcachebin0 -> 1260 bytes
-rw-r--r--maps/pre-re/nguild_prt.mcachebin0 -> 1363 bytes
-rw-r--r--maps/pre-re/nif_fild01.mcachebin0 -> 4159 bytes
-rw-r--r--maps/pre-re/nif_fild02.mcachebin0 -> 3744 bytes
-rw-r--r--maps/pre-re/nif_in.mcachebin0 -> 1083 bytes
-rw-r--r--maps/pre-re/niflheim.mcachebin0 -> 5877 bytes
-rw-r--r--maps/pre-re/nyd_dun01.mcachebin0 -> 1621 bytes
-rw-r--r--maps/pre-re/nyd_dun02.mcachebin0 -> 1569 bytes
-rw-r--r--maps/pre-re/odin_tem01.mcachebin0 -> 3107 bytes
-rw-r--r--maps/pre-re/odin_tem02.mcachebin0 -> 4354 bytes
-rw-r--r--maps/pre-re/odin_tem03.mcachebin0 -> 4735 bytes
-rw-r--r--maps/pre-re/orcsdun01.mcachebin0 -> 1196 bytes
-rw-r--r--maps/pre-re/orcsdun02.mcachebin0 -> 1297 bytes
-rw-r--r--maps/pre-re/ordeal_1-1.mcachebin0 -> 1550 bytes
-rw-r--r--maps/pre-re/ordeal_1-2.mcachebin0 -> 4449 bytes
-rw-r--r--maps/pre-re/ordeal_2-1.mcachebin0 -> 1550 bytes
-rw-r--r--maps/pre-re/ordeal_2-2.mcachebin0 -> 4449 bytes
-rw-r--r--maps/pre-re/ordeal_3-1.mcachebin0 -> 1550 bytes
-rw-r--r--maps/pre-re/ordeal_3-2.mcachebin0 -> 4449 bytes
-rw-r--r--maps/pre-re/p_track01.mcachebin0 -> 171 bytes
-rw-r--r--maps/pre-re/p_track02.mcachebin0 -> 171 bytes
-rw-r--r--maps/pre-re/pay_arche.mcachebin0 -> 1205 bytes
-rw-r--r--maps/pre-re/pay_dun00.mcachebin0 -> 1207 bytes
-rw-r--r--maps/pre-re/pay_dun01.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/pay_dun02.mcachebin0 -> 3195 bytes
-rw-r--r--maps/pre-re/pay_dun03.mcachebin0 -> 2570 bytes
-rw-r--r--maps/pre-re/pay_dun04.mcachebin0 -> 1756 bytes
-rw-r--r--maps/pre-re/pay_fild01.mcachebin0 -> 6539 bytes
-rw-r--r--maps/pre-re/pay_fild02.mcachebin0 -> 3765 bytes
-rw-r--r--maps/pre-re/pay_fild03.mcachebin0 -> 4016 bytes
-rw-r--r--maps/pre-re/pay_fild04.mcachebin0 -> 4616 bytes
-rw-r--r--maps/pre-re/pay_fild05.mcachebin0 -> 2620 bytes
-rw-r--r--maps/pre-re/pay_fild06.mcachebin0 -> 3731 bytes
-rw-r--r--maps/pre-re/pay_fild07.mcachebin0 -> 4995 bytes
-rw-r--r--maps/pre-re/pay_fild08.mcachebin0 -> 3584 bytes
-rw-r--r--maps/pre-re/pay_fild09.mcachebin0 -> 5030 bytes
-rw-r--r--maps/pre-re/pay_fild10.mcachebin0 -> 6051 bytes
-rw-r--r--maps/pre-re/pay_fild11.mcachebin0 -> 2426 bytes
-rw-r--r--maps/pre-re/pay_gld.mcachebin0 -> 4451 bytes
-rw-r--r--maps/pre-re/payg_cas01.mcachebin0 -> 1260 bytes
-rw-r--r--maps/pre-re/payg_cas02.mcachebin0 -> 1860 bytes
-rw-r--r--maps/pre-re/payg_cas03.mcachebin0 -> 1663 bytes
-rw-r--r--maps/pre-re/payg_cas04.mcachebin0 -> 1934 bytes
-rw-r--r--maps/pre-re/payg_cas05.mcachebin0 -> 1738 bytes
-rw-r--r--maps/pre-re/payon.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/payon_in01.mcachebin0 -> 900 bytes
-rw-r--r--maps/pre-re/payon_in02.mcachebin0 -> 392 bytes
-rw-r--r--maps/pre-re/payon_in03.mcachebin0 -> 1070 bytes
-rw-r--r--maps/pre-re/poring_w01.mcachebin0 -> 552 bytes
-rw-r--r--maps/pre-re/poring_w02.mcachebin0 -> 783 bytes
-rw-r--r--maps/pre-re/priest_1-1.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/priest_2-1.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/priest_3-1.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/prontera.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/prt_are01.mcachebin0 -> 3694 bytes
-rw-r--r--maps/pre-re/prt_are_in.mcachebin0 -> 626 bytes
-rw-r--r--maps/pre-re/prt_castle.mcachebin0 -> 2331 bytes
-rw-r--r--maps/pre-re/prt_church.mcachebin0 -> 551 bytes
-rw-r--r--maps/pre-re/prt_fild00.mcachebin0 -> 6845 bytes
-rw-r--r--maps/pre-re/prt_fild01.mcachebin0 -> 7360 bytes
-rw-r--r--maps/pre-re/prt_fild02.mcachebin0 -> 8431 bytes
-rw-r--r--maps/pre-re/prt_fild03.mcachebin0 -> 4789 bytes
-rw-r--r--maps/pre-re/prt_fild04.mcachebin0 -> 4596 bytes
-rw-r--r--maps/pre-re/prt_fild05.mcachebin0 -> 6973 bytes
-rw-r--r--maps/pre-re/prt_fild06.mcachebin0 -> 4286 bytes
-rw-r--r--maps/pre-re/prt_fild07.mcachebin0 -> 6147 bytes
-rw-r--r--maps/pre-re/prt_fild08.mcachebin0 -> 5142 bytes
-rw-r--r--maps/pre-re/prt_fild08a.mcachebin0 -> 5142 bytes
-rw-r--r--maps/pre-re/prt_fild08b.mcachebin0 -> 5142 bytes
-rw-r--r--maps/pre-re/prt_fild08c.mcachebin0 -> 5142 bytes
-rw-r--r--maps/pre-re/prt_fild08d.mcachebin0 -> 5142 bytes
-rw-r--r--maps/pre-re/prt_fild09.mcachebin0 -> 5574 bytes
-rw-r--r--maps/pre-re/prt_fild10.mcachebin0 -> 4784 bytes
-rw-r--r--maps/pre-re/prt_fild11.mcachebin0 -> 4178 bytes
-rw-r--r--maps/pre-re/prt_gld.mcachebin0 -> 2207 bytes
-rw-r--r--maps/pre-re/prt_in.mcachebin0 -> 1914 bytes
-rw-r--r--maps/pre-re/prt_maze01.mcachebin0 -> 2011 bytes
-rw-r--r--maps/pre-re/prt_maze02.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/prt_maze03.mcachebin0 -> 2015 bytes
-rw-r--r--maps/pre-re/prt_monk.mcachebin0 -> 2632 bytes
-rw-r--r--maps/pre-re/prt_sewb1.mcachebin0 -> 1823 bytes
-rw-r--r--maps/pre-re/prt_sewb2.mcachebin0 -> 496 bytes
-rw-r--r--maps/pre-re/prt_sewb3.mcachebin0 -> 465 bytes
-rw-r--r--maps/pre-re/prt_sewb4.mcachebin0 -> 791 bytes
-rw-r--r--maps/pre-re/prtg_cas01.mcachebin0 -> 1363 bytes
-rw-r--r--maps/pre-re/prtg_cas02.mcachebin0 -> 1336 bytes
-rw-r--r--maps/pre-re/prtg_cas03.mcachebin0 -> 1440 bytes
-rw-r--r--maps/pre-re/prtg_cas04.mcachebin0 -> 1512 bytes
-rw-r--r--maps/pre-re/prtg_cas05.mcachebin0 -> 2074 bytes
-rw-r--r--maps/pre-re/pvp_2vs2.mcachebin0 -> 387 bytes
-rw-r--r--maps/pre-re/pvp_c_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/pre-re/pvp_n_1-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_1-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_1-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_1-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_1-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_2-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_2-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_2-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_2-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_2-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_3-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_3-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_3-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_3-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_3-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_4-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_4-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_4-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_4-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_4-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_5-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_5-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_5-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_5-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_5-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_6-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_6-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_6-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_6-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_6-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_7-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_7-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_7-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_7-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_7-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_8-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/pre-re/pvp_n_8-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/pre-re/pvp_n_8-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/pvp_n_8-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/pre-re/pvp_n_8-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/pre-re/pvp_n_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/pre-re/pvp_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/pre-re/pvp_y_1-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_1-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_1-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_1-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_1-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_2-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_2-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_2-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_2-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_2-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_3-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_3-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_3-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_3-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_3-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_4-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_4-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_4-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_4-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_4-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_5-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_5-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_5-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_5-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_5-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_6-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_6-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_6-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_6-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_6-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_7-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_7-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_7-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_7-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_7-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_8-1.mcachebin0 -> 5013 bytes
-rw-r--r--maps/pre-re/pvp_y_8-2.mcachebin0 -> 1678 bytes
-rw-r--r--maps/pre-re/pvp_y_8-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/pre-re/pvp_y_8-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/pre-re/pvp_y_8-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/pre-re/pvp_y_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/pre-re/que_avan01.mcachebin0 -> 205 bytes
-rw-r--r--maps/pre-re/que_ba.mcachebin0 -> 1103 bytes
-rw-r--r--maps/pre-re/que_bingo.mcachebin0 -> 290 bytes
-rw-r--r--maps/pre-re/que_dan01.mcachebin0 -> 272 bytes
-rw-r--r--maps/pre-re/que_dan02.mcachebin0 -> 297 bytes
-rw-r--r--maps/pre-re/que_god01.mcachebin0 -> 887 bytes
-rw-r--r--maps/pre-re/que_god02.mcachebin0 -> 370 bytes
-rw-r--r--maps/pre-re/que_house_s.mcachebin0 -> 167 bytes
-rw-r--r--maps/pre-re/que_hugel.mcachebin0 -> 458 bytes
-rw-r--r--maps/pre-re/que_job01.mcachebin0 -> 389 bytes
-rw-r--r--maps/pre-re/que_job02.mcachebin0 -> 955 bytes
-rw-r--r--maps/pre-re/que_job03.mcachebin0 -> 955 bytes
-rw-r--r--maps/pre-re/que_lhz.mcachebin0 -> 1079 bytes
-rw-r--r--maps/pre-re/que_moc_16.mcachebin0 -> 1125 bytes
-rw-r--r--maps/pre-re/que_moon.mcachebin0 -> 353 bytes
-rw-r--r--maps/pre-re/que_ng.mcachebin0 -> 736 bytes
-rw-r--r--maps/pre-re/que_qaru01.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qaru02.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qaru03.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qaru04.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qaru05.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qsch01.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qsch02.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qsch03.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qsch04.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_qsch05.mcachebin0 -> 3140 bytes
-rw-r--r--maps/pre-re/que_rachel.mcachebin0 -> 3042 bytes
-rw-r--r--maps/pre-re/que_san04.mcachebin0 -> 1072 bytes
-rw-r--r--maps/pre-re/que_sign01.mcachebin0 -> 1085 bytes
-rw-r--r--maps/pre-re/que_sign02.mcachebin0 -> 3744 bytes
-rw-r--r--maps/pre-re/que_temsky.mcachebin0 -> 765 bytes
-rw-r--r--maps/pre-re/que_thor.mcachebin0 -> 495 bytes
-rw-r--r--maps/pre-re/quiz_00.mcachebin0 -> 417 bytes
-rw-r--r--maps/pre-re/quiz_01.mcachebin0 -> 1622 bytes
-rw-r--r--maps/pre-re/quiz_02.mcachebin0 -> 1457 bytes
-rw-r--r--maps/pre-re/quiz_test.mcachebin0 -> 2068 bytes
-rw-r--r--maps/pre-re/ra_fild01.mcachebin0 -> 4369 bytes
-rw-r--r--maps/pre-re/ra_fild02.mcachebin0 -> 4240 bytes
-rw-r--r--maps/pre-re/ra_fild03.mcachebin0 -> 5273 bytes
-rw-r--r--maps/pre-re/ra_fild04.mcachebin0 -> 4885 bytes
-rw-r--r--maps/pre-re/ra_fild05.mcachebin0 -> 4867 bytes
-rw-r--r--maps/pre-re/ra_fild06.mcachebin0 -> 5736 bytes
-rw-r--r--maps/pre-re/ra_fild07.mcachebin0 -> 4591 bytes
-rw-r--r--maps/pre-re/ra_fild08.mcachebin0 -> 4146 bytes
-rw-r--r--maps/pre-re/ra_fild09.mcachebin0 -> 2308 bytes
-rw-r--r--maps/pre-re/ra_fild10.mcachebin0 -> 4094 bytes
-rw-r--r--maps/pre-re/ra_fild11.mcachebin0 -> 4421 bytes
-rw-r--r--maps/pre-re/ra_fild12.mcachebin0 -> 3706 bytes
-rw-r--r--maps/pre-re/ra_fild13.mcachebin0 -> 3607 bytes
-rw-r--r--maps/pre-re/ra_in01.mcachebin0 -> 2743 bytes
-rw-r--r--maps/pre-re/ra_san01.mcachebin0 -> 3060 bytes
-rw-r--r--maps/pre-re/ra_san02.mcachebin0 -> 1959 bytes
-rw-r--r--maps/pre-re/ra_san03.mcachebin0 -> 2429 bytes
-rw-r--r--maps/pre-re/ra_san04.mcachebin0 -> 1072 bytes
-rw-r--r--maps/pre-re/ra_san05.mcachebin0 -> 2080 bytes
-rw-r--r--maps/pre-re/ra_temin.mcachebin0 -> 2965 bytes
-rw-r--r--maps/pre-re/ra_temple.mcachebin0 -> 1295 bytes
-rw-r--r--maps/pre-re/ra_temsky.mcachebin0 -> 765 bytes
-rw-r--r--maps/pre-re/rachel.mcachebin0 -> 3594 bytes
-rw-r--r--maps/pre-re/s_atelier.mcachebin0 -> 664 bytes
-rw-r--r--maps/pre-re/sch_gld.mcachebin0 -> 4103 bytes
-rw-r--r--maps/pre-re/schg_cas01.mcachebin0 -> 3519 bytes
-rw-r--r--maps/pre-re/schg_cas02.mcachebin0 -> 3186 bytes
-rw-r--r--maps/pre-re/schg_cas03.mcachebin0 -> 2794 bytes
-rw-r--r--maps/pre-re/schg_cas04.mcachebin0 -> 3519 bytes
-rw-r--r--maps/pre-re/schg_cas05.mcachebin0 -> 3519 bytes
-rw-r--r--maps/pre-re/schg_dun01.mcachebin0 -> 2271 bytes
-rw-r--r--maps/pre-re/schg_que01.mcachebin0 -> 698 bytes
-rw-r--r--maps/pre-re/sec_in01.mcachebin0 -> 939 bytes
-rw-r--r--maps/pre-re/sec_in02.mcachebin0 -> 1074 bytes
-rw-r--r--maps/pre-re/sec_pri.mcachebin0 -> 315 bytes
-rw-r--r--maps/pre-re/siege_test.mcachebin0 -> 1367 bytes
-rw-r--r--maps/pre-re/silk_lair.mcachebin0 -> 3228 bytes
-rw-r--r--maps/pre-re/spl_fild01.mcachebin0 -> 8871 bytes
-rw-r--r--maps/pre-re/spl_fild02.mcachebin0 -> 9237 bytes
-rw-r--r--maps/pre-re/spl_fild03.mcachebin0 -> 8302 bytes
-rw-r--r--maps/pre-re/spl_in01.mcachebin0 -> 2361 bytes
-rw-r--r--maps/pre-re/spl_in02.mcachebin0 -> 971 bytes
-rw-r--r--maps/pre-re/splendide.mcachebin0 -> 7798 bytes
-rw-r--r--maps/pre-re/sword_1-1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/pre-re/sword_2-1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/pre-re/sword_3-1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/pre-re/te_alde_gld.mcachebin0 -> 2763 bytes
-rw-r--r--maps/pre-re/te_aldecas1.mcachebin0 -> 1558 bytes
-rw-r--r--maps/pre-re/te_aldecas2.mcachebin0 -> 1396 bytes
-rw-r--r--maps/pre-re/te_aldecas3.mcachebin0 -> 1372 bytes
-rw-r--r--maps/pre-re/te_aldecas4.mcachebin0 -> 1265 bytes
-rw-r--r--maps/pre-re/te_aldecas5.mcachebin0 -> 1288 bytes
-rw-r--r--maps/pre-re/te_prt_gld.mcachebin0 -> 2207 bytes
-rw-r--r--maps/pre-re/te_prtcas01.mcachebin0 -> 1363 bytes
-rw-r--r--maps/pre-re/te_prtcas02.mcachebin0 -> 1336 bytes
-rw-r--r--maps/pre-re/te_prtcas03.mcachebin0 -> 1440 bytes
-rw-r--r--maps/pre-re/te_prtcas04.mcachebin0 -> 1512 bytes
-rw-r--r--maps/pre-re/te_prtcas05.mcachebin0 -> 2074 bytes
-rw-r--r--maps/pre-re/teg_dun01.mcachebin0 -> 2866 bytes
-rw-r--r--maps/pre-re/teg_dun02.mcachebin0 -> 1570 bytes
-rw-r--r--maps/pre-re/tha_scene01.mcachebin0 -> 1014 bytes
-rw-r--r--maps/pre-re/tha_t01.mcachebin0 -> 3145 bytes
-rw-r--r--maps/pre-re/tha_t02.mcachebin0 -> 2854 bytes
-rw-r--r--maps/pre-re/tha_t03.mcachebin0 -> 2776 bytes
-rw-r--r--maps/pre-re/tha_t04.mcachebin0 -> 1768 bytes
-rw-r--r--maps/pre-re/tha_t05.mcachebin0 -> 2335 bytes
-rw-r--r--maps/pre-re/tha_t06.mcachebin0 -> 2522 bytes
-rw-r--r--maps/pre-re/tha_t07.mcachebin0 -> 601 bytes
-rw-r--r--maps/pre-re/tha_t08.mcachebin0 -> 680 bytes
-rw-r--r--maps/pre-re/tha_t09.mcachebin0 -> 257 bytes
-rw-r--r--maps/pre-re/tha_t10.mcachebin0 -> 375 bytes
-rw-r--r--maps/pre-re/tha_t11.mcachebin0 -> 477 bytes
-rw-r--r--maps/pre-re/tha_t12.mcachebin0 -> 414 bytes
-rw-r--r--maps/pre-re/thana_boss.mcachebin0 -> 1336 bytes
-rw-r--r--maps/pre-re/thana_step.mcachebin0 -> 779 bytes
-rw-r--r--maps/pre-re/thor_camp.mcachebin0 -> 2991 bytes
-rw-r--r--maps/pre-re/thor_v01.mcachebin0 -> 2794 bytes
-rw-r--r--maps/pre-re/thor_v02.mcachebin0 -> 2303 bytes
-rw-r--r--maps/pre-re/thor_v03.mcachebin0 -> 3307 bytes
-rw-r--r--maps/pre-re/treasure01.mcachebin0 -> 1153 bytes
-rw-r--r--maps/pre-re/treasure02.mcachebin0 -> 1190 bytes
-rw-r--r--maps/pre-re/treasure_n1.mcachebin0 -> 1153 bytes
-rw-r--r--maps/pre-re/treasure_n2.mcachebin0 -> 1190 bytes
-rw-r--r--maps/pre-re/tur_dun01.mcachebin0 -> 2939 bytes
-rw-r--r--maps/pre-re/tur_dun02.mcachebin0 -> 3976 bytes
-rw-r--r--maps/pre-re/tur_dun03.mcachebin0 -> 2569 bytes
-rw-r--r--maps/pre-re/tur_dun04.mcachebin0 -> 1715 bytes
-rw-r--r--maps/pre-re/tur_dun05.mcachebin0 -> 753 bytes
-rw-r--r--maps/pre-re/tur_dun06.mcachebin0 -> 735 bytes
-rw-r--r--maps/pre-re/turbo_e_16.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_e_4.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_e_8.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_n_1.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_n_16.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_n_4.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_n_8.mcachebin0 -> 3302 bytes
-rw-r--r--maps/pre-re/turbo_room.mcachebin0 -> 657 bytes
-rw-r--r--maps/pre-re/um_dun01.mcachebin0 -> 3673 bytes
-rw-r--r--maps/pre-re/um_dun02.mcachebin0 -> 5305 bytes
-rw-r--r--maps/pre-re/um_fild01.mcachebin0 -> 6313 bytes
-rw-r--r--maps/pre-re/um_fild02.mcachebin0 -> 5281 bytes
-rw-r--r--maps/pre-re/um_fild03.mcachebin0 -> 5871 bytes
-rw-r--r--maps/pre-re/um_fild04.mcachebin0 -> 4241 bytes
-rw-r--r--maps/pre-re/um_in.mcachebin0 -> 752 bytes
-rw-r--r--maps/pre-re/umbala.mcachebin0 -> 2441 bytes
-rw-r--r--maps/pre-re/valkyrie.mcachebin0 -> 186 bytes
-rw-r--r--maps/pre-re/ve_fild01.mcachebin0 -> 5625 bytes
-rw-r--r--maps/pre-re/ve_fild02.mcachebin0 -> 5955 bytes
-rw-r--r--maps/pre-re/ve_fild03.mcachebin0 -> 3347 bytes
-rw-r--r--maps/pre-re/ve_fild04.mcachebin0 -> 4274 bytes
-rw-r--r--maps/pre-re/ve_fild05.mcachebin0 -> 4300 bytes
-rw-r--r--maps/pre-re/ve_fild06.mcachebin0 -> 1302 bytes
-rw-r--r--maps/pre-re/ve_fild07.mcachebin0 -> 4044 bytes
-rw-r--r--maps/pre-re/ve_in.mcachebin0 -> 2229 bytes
-rw-r--r--maps/pre-re/ve_in02.mcachebin0 -> 240 bytes
-rw-r--r--maps/pre-re/veins.mcachebin0 -> 5905 bytes
-rw-r--r--maps/pre-re/wizard_1-1.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/wizard_2-1.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/wizard_3-1.mcachebin0 -> 482 bytes
-rw-r--r--maps/pre-re/xmas.mcachebin0 -> 4194 bytes
-rw-r--r--maps/pre-re/xmas_dun01.mcachebin0 -> 3216 bytes
-rw-r--r--maps/pre-re/xmas_dun02.mcachebin0 -> 3329 bytes
-rw-r--r--maps/pre-re/xmas_fild01.mcachebin0 -> 1721 bytes
-rw-r--r--maps/pre-re/xmas_in.mcachebin0 -> 1023 bytes
-rw-r--r--maps/pre-re/y_airport.mcachebin0 -> 632 bytes
-rw-r--r--maps/pre-re/yggdrasil01.mcachebin0 -> 2256 bytes
-rw-r--r--maps/pre-re/yuno.mcachebin0 -> 6815 bytes
-rw-r--r--maps/pre-re/yuno_fild01.mcachebin0 -> 4037 bytes
-rw-r--r--maps/pre-re/yuno_fild02.mcachebin0 -> 7456 bytes
-rw-r--r--maps/pre-re/yuno_fild03.mcachebin0 -> 6934 bytes
-rw-r--r--maps/pre-re/yuno_fild04.mcachebin0 -> 5025 bytes
-rw-r--r--maps/pre-re/yuno_fild05.mcachebin0 -> 5798 bytes
-rw-r--r--maps/pre-re/yuno_fild06.mcachebin0 -> 4598 bytes
-rw-r--r--maps/pre-re/yuno_fild07.mcachebin0 -> 3884 bytes
-rw-r--r--maps/pre-re/yuno_fild08.mcachebin0 -> 7327 bytes
-rw-r--r--maps/pre-re/yuno_fild09.mcachebin0 -> 7116 bytes
-rw-r--r--maps/pre-re/yuno_fild10.mcachebin0 -> 3907 bytes
-rw-r--r--maps/pre-re/yuno_fild11.mcachebin0 -> 6228 bytes
-rw-r--r--maps/pre-re/yuno_fild12.mcachebin0 -> 3057 bytes
-rw-r--r--maps/pre-re/yuno_in01.mcachebin0 -> 898 bytes
-rw-r--r--maps/pre-re/yuno_in02.mcachebin0 -> 780 bytes
-rw-r--r--maps/pre-re/yuno_in03.mcachebin0 -> 1499 bytes
-rw-r--r--maps/pre-re/yuno_in04.mcachebin0 -> 851 bytes
-rw-r--r--maps/pre-re/yuno_in05.mcachebin0 -> 796 bytes
-rw-r--r--maps/pre-re/yuno_pre.mcachebin0 -> 471 bytes
-rw-r--r--maps/pre-re/z_agit.mcachebin0 -> 744 bytes
-rw-r--r--maps/re/06guild_01.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_02.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_03.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_04.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_05.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_06.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_07.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_08.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/06guild_r.mcachebin0 -> 465 bytes
-rw-r--r--maps/re/1@cash.mcachebin0 -> 3228 bytes
-rw-r--r--maps/re/1@cata.mcachebin0 -> 2382 bytes
-rw-r--r--maps/re/1@def01.mcachebin0 -> 96 bytes
-rw-r--r--maps/re/1@def02.mcachebin0 -> 159 bytes
-rw-r--r--maps/re/1@def03.mcachebin0 -> 422 bytes
-rw-r--r--maps/re/1@dth1.mcachebin0 -> 1345 bytes
-rw-r--r--maps/re/1@dth2.mcachebin0 -> 1345 bytes
-rw-r--r--maps/re/1@dth3.mcachebin0 -> 185 bytes
-rw-r--r--maps/re/1@ecl.mcachebin0 -> 617 bytes
-rw-r--r--maps/re/1@eom.mcachebin0 -> 1175 bytes
-rw-r--r--maps/re/1@face.mcachebin0 -> 6036 bytes
-rw-r--r--maps/re/1@ge_st.mcachebin0 -> 410 bytes
-rw-r--r--maps/re/1@gef.mcachebin0 -> 2641 bytes
-rw-r--r--maps/re/1@gef_in.mcachebin0 -> 1274 bytes
-rw-r--r--maps/re/1@gl_k.mcachebin0 -> 4038 bytes
-rw-r--r--maps/re/1@jtb.mcachebin0 -> 5189 bytes
-rw-r--r--maps/re/1@lhz.mcachebin0 -> 727 bytes
-rw-r--r--maps/re/1@ma_b.mcachebin0 -> 784 bytes
-rw-r--r--maps/re/1@ma_c.mcachebin0 -> 747 bytes
-rw-r--r--maps/re/1@ma_h.mcachebin0 -> 1136 bytes
-rw-r--r--maps/re/1@mist.mcachebin0 -> 6845 bytes
-rw-r--r--maps/re/1@nyd.mcachebin0 -> 4325 bytes
-rw-r--r--maps/re/1@orcs.mcachebin0 -> 1308 bytes
-rw-r--r--maps/re/1@pump.mcachebin0 -> 878 bytes
-rw-r--r--maps/re/1@rev.mcachebin0 -> 668 bytes
-rw-r--r--maps/re/1@sara.mcachebin0 -> 3928 bytes
-rw-r--r--maps/re/1@spa.mcachebin0 -> 1424 bytes
-rw-r--r--maps/re/1@tnm1.mcachebin0 -> 609 bytes
-rw-r--r--maps/re/1@tnm2.mcachebin0 -> 1284 bytes
-rw-r--r--maps/re/1@tnm3.mcachebin0 -> 699 bytes
-rw-r--r--maps/re/1@tower.mcachebin0 -> 2315 bytes
-rw-r--r--maps/re/1@xm_d.mcachebin0 -> 3337 bytes
-rw-r--r--maps/re/2@cata.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/2@gl_k.mcachebin0 -> 3746 bytes
-rw-r--r--maps/re/2@nyd.mcachebin0 -> 3859 bytes
-rw-r--r--maps/re/2@orcs.mcachebin0 -> 1213 bytes
-rw-r--r--maps/re/2@pump.mcachebin0 -> 1679 bytes
-rw-r--r--maps/re/2@tower.mcachebin0 -> 2315 bytes
-rw-r--r--maps/re/3@tower.mcachebin0 -> 2315 bytes
-rw-r--r--maps/re/4@tower.mcachebin0 -> 2349 bytes
-rw-r--r--maps/re/5@tower.mcachebin0 -> 279 bytes
-rw-r--r--maps/re/6@tower.mcachebin0 -> 595 bytes
-rw-r--r--maps/re/abbey01.mcachebin0 -> 3659 bytes
-rw-r--r--maps/re/abbey02.mcachebin0 -> 2358 bytes
-rw-r--r--maps/re/abbey03.mcachebin0 -> 1399 bytes
-rw-r--r--maps/re/abyss_01.mcachebin0 -> 2714 bytes
-rw-r--r--maps/re/abyss_02.mcachebin0 -> 2912 bytes
-rw-r--r--maps/re/abyss_03.mcachebin0 -> 1969 bytes
-rw-r--r--maps/re/airplane.mcachebin0 -> 1424 bytes
-rw-r--r--maps/re/airplane_01.mcachebin0 -> 1424 bytes
-rw-r--r--maps/re/airport.mcachebin0 -> 632 bytes
-rw-r--r--maps/re/alb2trea.mcachebin0 -> 685 bytes
-rw-r--r--maps/re/alb_ship.mcachebin0 -> 549 bytes
-rw-r--r--maps/re/alberta.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/alberta_in.mcachebin0 -> 1125 bytes
-rw-r--r--maps/re/alde_alche.mcachebin0 -> 683 bytes
-rw-r--r--maps/re/alde_dun01.mcachebin0 -> 2965 bytes
-rw-r--r--maps/re/alde_dun02.mcachebin0 -> 2627 bytes
-rw-r--r--maps/re/alde_dun03.mcachebin0 -> 3772 bytes
-rw-r--r--maps/re/alde_dun04.mcachebin0 -> 2837 bytes
-rw-r--r--maps/re/alde_gld.mcachebin0 -> 2763 bytes
-rw-r--r--maps/re/alde_tt02.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/alde_tt03.mcachebin0 -> 3096 bytes
-rw-r--r--maps/re/aldeba_in.mcachebin0 -> 1489 bytes
-rw-r--r--maps/re/aldebaran.mcachebin0 -> 3559 bytes
-rw-r--r--maps/re/aldeg_cas01.mcachebin0 -> 1558 bytes
-rw-r--r--maps/re/aldeg_cas02.mcachebin0 -> 1396 bytes
-rw-r--r--maps/re/aldeg_cas03.mcachebin0 -> 1372 bytes
-rw-r--r--maps/re/aldeg_cas04.mcachebin0 -> 1265 bytes
-rw-r--r--maps/re/aldeg_cas05.mcachebin0 -> 1288 bytes
-rw-r--r--maps/re/ama_dun01.mcachebin0 -> 1072 bytes
-rw-r--r--maps/re/ama_dun02.mcachebin0 -> 1679 bytes
-rw-r--r--maps/re/ama_dun03.mcachebin0 -> 1344 bytes
-rw-r--r--maps/re/ama_fild01.mcachebin0 -> 4596 bytes
-rw-r--r--maps/re/ama_in01.mcachebin0 -> 787 bytes
-rw-r--r--maps/re/ama_in02.mcachebin0 -> 1271 bytes
-rw-r--r--maps/re/ama_test.mcachebin0 -> 265 bytes
-rw-r--r--maps/re/amatsu.mcachebin0 -> 3458 bytes
-rw-r--r--maps/re/anthell01.mcachebin0 -> 3095 bytes
-rw-r--r--maps/re/anthell02.mcachebin0 -> 3196 bytes
-rw-r--r--maps/re/arena_room.mcachebin0 -> 756 bytes
-rw-r--r--maps/re/aru_gld.mcachebin0 -> 7279 bytes
-rw-r--r--maps/re/arug_cas01.mcachebin0 -> 3015 bytes
-rw-r--r--maps/re/arug_cas02.mcachebin0 -> 3214 bytes
-rw-r--r--maps/re/arug_cas03.mcachebin0 -> 2740 bytes
-rw-r--r--maps/re/arug_cas04.mcachebin0 -> 2740 bytes
-rw-r--r--maps/re/arug_cas05.mcachebin0 -> 2740 bytes
-rw-r--r--maps/re/arug_dun01.mcachebin0 -> 4908 bytes
-rw-r--r--maps/re/arug_que01.mcachebin0 -> 698 bytes
-rw-r--r--maps/re/auction_01.mcachebin0 -> 336 bytes
-rw-r--r--maps/re/auction_02.mcachebin0 -> 404 bytes
-rw-r--r--maps/re/ayo_dun01.mcachebin0 -> 2024 bytes
-rw-r--r--maps/re/ayo_dun02.mcachebin0 -> 2612 bytes
-rw-r--r--maps/re/ayo_fild01.mcachebin0 -> 3463 bytes
-rw-r--r--maps/re/ayo_fild02.mcachebin0 -> 4078 bytes
-rw-r--r--maps/re/ayo_in01.mcachebin0 -> 889 bytes
-rw-r--r--maps/re/ayo_in02.mcachebin0 -> 477 bytes
-rw-r--r--maps/re/ayothaya.mcachebin0 -> 2312 bytes
-rw-r--r--maps/re/bat_a01.mcachebin0 -> 8016 bytes
-rw-r--r--maps/re/bat_a02.mcachebin0 -> 8016 bytes
-rw-r--r--maps/re/bat_b01.mcachebin0 -> 1847 bytes
-rw-r--r--maps/re/bat_b02.mcachebin0 -> 1847 bytes
-rw-r--r--maps/re/bat_c01.mcachebin0 -> 234 bytes
-rw-r--r--maps/re/bat_c02.mcachebin0 -> 234 bytes
-rw-r--r--maps/re/bat_c03.mcachebin0 -> 234 bytes
-rw-r--r--maps/re/bat_room.mcachebin0 -> 575 bytes
-rw-r--r--maps/re/beach_dun.mcachebin0 -> 3442 bytes
-rw-r--r--maps/re/beach_dun2.mcachebin0 -> 3794 bytes
-rw-r--r--maps/re/beach_dun3.mcachebin0 -> 3789 bytes
-rw-r--r--maps/re/bif_fild01.mcachebin0 -> 4323 bytes
-rw-r--r--maps/re/bif_fild02.mcachebin0 -> 4646 bytes
-rw-r--r--maps/re/bossnia_01.mcachebin0 -> 1614 bytes
-rw-r--r--maps/re/bossnia_02.mcachebin0 -> 1614 bytes
-rw-r--r--maps/re/bossnia_03.mcachebin0 -> 1614 bytes
-rw-r--r--maps/re/bossnia_04.mcachebin0 -> 1614 bytes
-rw-r--r--maps/re/bra_dun01.mcachebin0 -> 2451 bytes
-rw-r--r--maps/re/bra_dun02.mcachebin0 -> 4865 bytes
-rw-r--r--maps/re/bra_fild01.mcachebin0 -> 5124 bytes
-rw-r--r--maps/re/bra_in01.mcachebin0 -> 1012 bytes
-rw-r--r--maps/re/brasilis.mcachebin0 -> 5661 bytes
-rw-r--r--maps/re/c_tower1.mcachebin0 -> 5392 bytes
-rw-r--r--maps/re/c_tower2.mcachebin0 -> 2836 bytes
-rw-r--r--maps/re/c_tower2_.mcachebin0 -> 2836 bytes
-rw-r--r--maps/re/c_tower3.mcachebin0 -> 2872 bytes
-rw-r--r--maps/re/c_tower3_.mcachebin0 -> 2872 bytes
-rw-r--r--maps/re/c_tower4.mcachebin0 -> 2466 bytes
-rw-r--r--maps/re/cave.mcachebin0 -> 1206 bytes
-rw-r--r--maps/re/cmd_fild01.mcachebin0 -> 7169 bytes
-rw-r--r--maps/re/cmd_fild02.mcachebin0 -> 5392 bytes
-rw-r--r--maps/re/cmd_fild03.mcachebin0 -> 6989 bytes
-rw-r--r--maps/re/cmd_fild04.mcachebin0 -> 5462 bytes
-rw-r--r--maps/re/cmd_fild05.mcachebin0 -> 6110 bytes
-rw-r--r--maps/re/cmd_fild06.mcachebin0 -> 5540 bytes
-rw-r--r--maps/re/cmd_fild07.mcachebin0 -> 5116 bytes
-rw-r--r--maps/re/cmd_fild08.mcachebin0 -> 7721 bytes
-rw-r--r--maps/re/cmd_fild09.mcachebin0 -> 5115 bytes
-rw-r--r--maps/re/cmd_in01.mcachebin0 -> 888 bytes
-rw-r--r--maps/re/cmd_in02.mcachebin0 -> 1781 bytes
-rw-r--r--maps/re/comodo.mcachebin0 -> 5592 bytes
-rw-r--r--maps/re/dali.mcachebin0 -> 912 bytes
-rw-r--r--maps/re/dali02.mcachebin0 -> 912 bytes
-rw-r--r--maps/re/dew_dun01.mcachebin0 -> 2402 bytes
-rw-r--r--maps/re/dew_dun02.mcachebin0 -> 2934 bytes
-rw-r--r--maps/re/dew_fild01.mcachebin0 -> 5166 bytes
-rw-r--r--maps/re/dew_in01.mcachebin0 -> 127 bytes
-rw-r--r--maps/re/dewata.mcachebin0 -> 4494 bytes
-rw-r--r--maps/re/dic_dun01.mcachebin0 -> 1144 bytes
-rw-r--r--maps/re/dic_dun02.mcachebin0 -> 2840 bytes
-rw-r--r--maps/re/dic_dun03.mcachebin0 -> 2840 bytes
-rw-r--r--maps/re/dic_fild01.mcachebin0 -> 3253 bytes
-rw-r--r--maps/re/dic_fild02.mcachebin0 -> 4676 bytes
-rw-r--r--maps/re/dic_in01.mcachebin0 -> 2688 bytes
-rw-r--r--maps/re/dicastes01.mcachebin0 -> 4081 bytes
-rw-r--r--maps/re/dicastes02.mcachebin0 -> 1268 bytes
-rw-r--r--maps/re/e_tower.mcachebin0 -> 225 bytes
-rw-r--r--maps/re/ecl_fild01.mcachebin0 -> 2199 bytes
-rw-r--r--maps/re/ecl_hub01.mcachebin0 -> 370 bytes
-rw-r--r--maps/re/ecl_in01.mcachebin0 -> 480 bytes
-rw-r--r--maps/re/ecl_in02.mcachebin0 -> 692 bytes
-rw-r--r--maps/re/ecl_in03.mcachebin0 -> 860 bytes
-rw-r--r--maps/re/ecl_in04.mcachebin0 -> 971 bytes
-rw-r--r--maps/re/ecl_tdun01.mcachebin0 -> 619 bytes
-rw-r--r--maps/re/ecl_tdun02.mcachebin0 -> 455 bytes
-rw-r--r--maps/re/ecl_tdun03.mcachebin0 -> 379 bytes
-rw-r--r--maps/re/ecl_tdun04.mcachebin0 -> 146 bytes
-rw-r--r--maps/re/eclage.mcachebin0 -> 3236 bytes
-rw-r--r--maps/re/ein_dun01.mcachebin0 -> 2489 bytes
-rw-r--r--maps/re/ein_dun02.mcachebin0 -> 2796 bytes
-rw-r--r--maps/re/ein_fild01.mcachebin0 -> 3849 bytes
-rw-r--r--maps/re/ein_fild02.mcachebin0 -> 4219 bytes
-rw-r--r--maps/re/ein_fild03.mcachebin0 -> 3585 bytes
-rw-r--r--maps/re/ein_fild04.mcachebin0 -> 5307 bytes
-rw-r--r--maps/re/ein_fild05.mcachebin0 -> 2988 bytes
-rw-r--r--maps/re/ein_fild06.mcachebin0 -> 3134 bytes
-rw-r--r--maps/re/ein_fild07.mcachebin0 -> 4219 bytes
-rw-r--r--maps/re/ein_fild08.mcachebin0 -> 4686 bytes
-rw-r--r--maps/re/ein_fild09.mcachebin0 -> 4268 bytes
-rw-r--r--maps/re/ein_fild10.mcachebin0 -> 2998 bytes
-rw-r--r--maps/re/ein_in01.mcachebin0 -> 2306 bytes
-rw-r--r--maps/re/einbech.mcachebin0 -> 2636 bytes
-rw-r--r--maps/re/einbroch.mcachebin0 -> 3864 bytes
-rw-r--r--maps/re/evt_bomb.mcachebin0 -> 5290 bytes
-rw-r--r--maps/re/evt_mobroom.mcachebin0 -> 793 bytes
-rw-r--r--maps/re/force_1-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/force_1-2.mcachebin0 -> 907 bytes
-rw-r--r--maps/re/force_1-3.mcachebin0 -> 728 bytes
-rw-r--r--maps/re/force_2-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/force_2-2.mcachebin0 -> 907 bytes
-rw-r--r--maps/re/force_2-3.mcachebin0 -> 728 bytes
-rw-r--r--maps/re/force_3-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/force_3-2.mcachebin0 -> 907 bytes
-rw-r--r--maps/re/force_3-3.mcachebin0 -> 728 bytes
-rw-r--r--maps/re/force_4-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/force_5-1.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/force_map1.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/force_map2.mcachebin0 -> 907 bytes
-rw-r--r--maps/re/force_map3.mcachebin0 -> 728 bytes
-rw-r--r--maps/re/g_room1-1.mcachebin0 -> 1622 bytes
-rw-r--r--maps/re/g_room1-2.mcachebin0 -> 1622 bytes
-rw-r--r--maps/re/g_room1-3.mcachebin0 -> 1622 bytes
-rw-r--r--maps/re/g_room2.mcachebin0 -> 1622 bytes
-rw-r--r--maps/re/gef_dun00.mcachebin0 -> 1219 bytes
-rw-r--r--maps/re/gef_dun01.mcachebin0 -> 2554 bytes
-rw-r--r--maps/re/gef_dun02.mcachebin0 -> 2096 bytes
-rw-r--r--maps/re/gef_dun03.mcachebin0 -> 1614 bytes
-rw-r--r--maps/re/gef_fild00.mcachebin0 -> 4521 bytes
-rw-r--r--maps/re/gef_fild01.mcachebin0 -> 3432 bytes
-rw-r--r--maps/re/gef_fild02.mcachebin0 -> 6359 bytes
-rw-r--r--maps/re/gef_fild03.mcachebin0 -> 5598 bytes
-rw-r--r--maps/re/gef_fild04.mcachebin0 -> 2965 bytes
-rw-r--r--maps/re/gef_fild05.mcachebin0 -> 4186 bytes
-rw-r--r--maps/re/gef_fild06.mcachebin0 -> 4720 bytes
-rw-r--r--maps/re/gef_fild07.mcachebin0 -> 3593 bytes
-rw-r--r--maps/re/gef_fild08.mcachebin0 -> 4114 bytes
-rw-r--r--maps/re/gef_fild09.mcachebin0 -> 3590 bytes
-rw-r--r--maps/re/gef_fild10.mcachebin0 -> 5262 bytes
-rw-r--r--maps/re/gef_fild11.mcachebin0 -> 6463 bytes
-rw-r--r--maps/re/gef_fild12.mcachebin0 -> 4585 bytes
-rw-r--r--maps/re/gef_fild13.mcachebin0 -> 4267 bytes
-rw-r--r--maps/re/gef_fild14.mcachebin0 -> 6090 bytes
-rw-r--r--maps/re/gef_tower.mcachebin0 -> 1287 bytes
-rw-r--r--maps/re/gefenia01.mcachebin0 -> 3033 bytes
-rw-r--r--maps/re/gefenia02.mcachebin0 -> 2640 bytes
-rw-r--r--maps/re/gefenia03.mcachebin0 -> 3098 bytes
-rw-r--r--maps/re/gefenia04.mcachebin0 -> 1756 bytes
-rw-r--r--maps/re/geffen.mcachebin0 -> 2641 bytes
-rw-r--r--maps/re/geffen_in.mcachebin0 -> 1275 bytes
-rw-r--r--maps/re/gefg_cas01.mcachebin0 -> 1174 bytes
-rw-r--r--maps/re/gefg_cas02.mcachebin0 -> 1144 bytes
-rw-r--r--maps/re/gefg_cas03.mcachebin0 -> 2475 bytes
-rw-r--r--maps/re/gefg_cas04.mcachebin0 -> 1298 bytes
-rw-r--r--maps/re/gefg_cas05.mcachebin0 -> 1447 bytes
-rw-r--r--maps/re/gl_cas01.mcachebin0 -> 6126 bytes
-rw-r--r--maps/re/gl_cas02.mcachebin0 -> 2497 bytes
-rw-r--r--maps/re/gl_cas02_.mcachebin0 -> 2497 bytes
-rw-r--r--maps/re/gl_church.mcachebin0 -> 3807 bytes
-rw-r--r--maps/re/gl_chyard.mcachebin0 -> 3516 bytes
-rw-r--r--maps/re/gl_chyard_.mcachebin0 -> 3516 bytes
-rw-r--r--maps/re/gl_dun01.mcachebin0 -> 3208 bytes
-rw-r--r--maps/re/gl_dun02.mcachebin0 -> 3696 bytes
-rw-r--r--maps/re/gl_in01.mcachebin0 -> 1607 bytes
-rw-r--r--maps/re/gl_knt01.mcachebin0 -> 3926 bytes
-rw-r--r--maps/re/gl_knt02.mcachebin0 -> 3127 bytes
-rw-r--r--maps/re/gl_prison.mcachebin0 -> 1958 bytes
-rw-r--r--maps/re/gl_prison1.mcachebin0 -> 1690 bytes
-rw-r--r--maps/re/gl_sew01.mcachebin0 -> 1887 bytes
-rw-r--r--maps/re/gl_sew02.mcachebin0 -> 3261 bytes
-rw-r--r--maps/re/gl_sew03.mcachebin0 -> 2178 bytes
-rw-r--r--maps/re/gl_sew04.mcachebin0 -> 2196 bytes
-rw-r--r--maps/re/gl_step.mcachebin0 -> 2145 bytes
-rw-r--r--maps/re/glast_01.mcachebin0 -> 7074 bytes
-rw-r--r--maps/re/gld2_ald.mcachebin0 -> 3875 bytes
-rw-r--r--maps/re/gld2_gef.mcachebin0 -> 2892 bytes
-rw-r--r--maps/re/gld2_pay.mcachebin0 -> 2761 bytes
-rw-r--r--maps/re/gld2_prt.mcachebin0 -> 3738 bytes
-rw-r--r--maps/re/gld_dun01.mcachebin0 -> 1950 bytes
-rw-r--r--maps/re/gld_dun01_2.mcachebin0 -> 1950 bytes
-rw-r--r--maps/re/gld_dun02.mcachebin0 -> 1570 bytes
-rw-r--r--maps/re/gld_dun02_2.mcachebin0 -> 1570 bytes
-rw-r--r--maps/re/gld_dun03.mcachebin0 -> 2866 bytes
-rw-r--r--maps/re/gld_dun03_2.mcachebin0 -> 2866 bytes
-rw-r--r--maps/re/gld_dun04.mcachebin0 -> 3036 bytes
-rw-r--r--maps/re/gld_dun04_2.mcachebin0 -> 3036 bytes
-rw-r--r--maps/re/gon_dun01.mcachebin0 -> 2314 bytes
-rw-r--r--maps/re/gon_dun02.mcachebin0 -> 2701 bytes
-rw-r--r--maps/re/gon_dun03.mcachebin0 -> 2365 bytes
-rw-r--r--maps/re/gon_fild01.mcachebin0 -> 3587 bytes
-rw-r--r--maps/re/gon_in.mcachebin0 -> 669 bytes
-rw-r--r--maps/re/gon_test.mcachebin0 -> 201 bytes
-rw-r--r--maps/re/gonryun.mcachebin0 -> 3820 bytes
-rw-r--r--maps/re/guild_room.mcachebin0 -> 1622 bytes
-rw-r--r--maps/re/guild_vs1-1.mcachebin0 -> 242 bytes
-rw-r--r--maps/re/guild_vs1-2.mcachebin0 -> 242 bytes
-rw-r--r--maps/re/guild_vs1-3.mcachebin0 -> 242 bytes
-rw-r--r--maps/re/guild_vs1-4.mcachebin0 -> 242 bytes
-rw-r--r--maps/re/guild_vs1.mcachebin0 -> 242 bytes
-rw-r--r--maps/re/guild_vs2-1.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/guild_vs2-2.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/guild_vs2.mcachebin0 -> 213 bytes
-rw-r--r--maps/re/guild_vs3.mcachebin0 -> 227 bytes
-rw-r--r--maps/re/guild_vs4.mcachebin0 -> 254 bytes
-rw-r--r--maps/re/guild_vs5.mcachebin0 -> 358 bytes
-rw-r--r--maps/re/himinn.mcachebin0 -> 186 bytes
-rw-r--r--maps/re/hu_fild01.mcachebin0 -> 3640 bytes
-rw-r--r--maps/re/hu_fild02.mcachebin0 -> 5711 bytes
-rw-r--r--maps/re/hu_fild03.mcachebin0 -> 6052 bytes
-rw-r--r--maps/re/hu_fild04.mcachebin0 -> 6939 bytes
-rw-r--r--maps/re/hu_fild05.mcachebin0 -> 4544 bytes
-rw-r--r--maps/re/hu_fild06.mcachebin0 -> 3245 bytes
-rw-r--r--maps/re/hu_fild07.mcachebin0 -> 4720 bytes
-rw-r--r--maps/re/hu_in01.mcachebin0 -> 2569 bytes
-rw-r--r--maps/re/hugel.mcachebin0 -> 3089 bytes
-rw-r--r--maps/re/hunter_1-1.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/hunter_2-1.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/hunter_3-1.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/ice_dun01.mcachebin0 -> 3551 bytes
-rw-r--r--maps/re/ice_dun02.mcachebin0 -> 3627 bytes
-rw-r--r--maps/re/ice_dun03.mcachebin0 -> 4492 bytes
-rw-r--r--maps/re/ice_dun04.mcachebin0 -> 291 bytes
-rw-r--r--maps/re/in_hunter.mcachebin0 -> 342 bytes
-rw-r--r--maps/re/in_moc_16.mcachebin0 -> 1125 bytes
-rw-r--r--maps/re/in_orcs01.mcachebin0 -> 802 bytes
-rw-r--r--maps/re/in_rogue.mcachebin0 -> 3380 bytes
-rw-r--r--maps/re/in_sphinx1.mcachebin0 -> 3285 bytes
-rw-r--r--maps/re/in_sphinx2.mcachebin0 -> 3247 bytes
-rw-r--r--maps/re/in_sphinx3.mcachebin0 -> 1491 bytes
-rw-r--r--maps/re/in_sphinx4.mcachebin0 -> 1714 bytes
-rw-r--r--maps/re/in_sphinx5.mcachebin0 -> 1355 bytes
-rw-r--r--maps/re/int_land.mcachebin0 -> 636 bytes
-rw-r--r--maps/re/int_land01.mcachebin0 -> 636 bytes
-rw-r--r--maps/re/int_land02.mcachebin0 -> 636 bytes
-rw-r--r--maps/re/int_land03.mcachebin0 -> 636 bytes
-rw-r--r--maps/re/int_land04.mcachebin0 -> 636 bytes
-rw-r--r--maps/re/itemmall.mcachebin0 -> 336 bytes
-rw-r--r--maps/re/iz_ac01.mcachebin0 -> 941 bytes
-rw-r--r--maps/re/iz_ac01_a.mcachebin0 -> 941 bytes
-rw-r--r--maps/re/iz_ac01_b.mcachebin0 -> 941 bytes
-rw-r--r--maps/re/iz_ac01_c.mcachebin0 -> 941 bytes
-rw-r--r--maps/re/iz_ac01_d.mcachebin0 -> 941 bytes
-rw-r--r--maps/re/iz_ac02.mcachebin0 -> 1608 bytes
-rw-r--r--maps/re/iz_ac02_a.mcachebin0 -> 1608 bytes
-rw-r--r--maps/re/iz_ac02_b.mcachebin0 -> 1608 bytes
-rw-r--r--maps/re/iz_ac02_c.mcachebin0 -> 1608 bytes
-rw-r--r--maps/re/iz_ac02_d.mcachebin0 -> 1608 bytes
-rw-r--r--maps/re/iz_dun00.mcachebin0 -> 5376 bytes
-rw-r--r--maps/re/iz_dun01.mcachebin0 -> 4048 bytes
-rw-r--r--maps/re/iz_dun02.mcachebin0 -> 5095 bytes
-rw-r--r--maps/re/iz_dun03.mcachebin0 -> 3181 bytes
-rw-r--r--maps/re/iz_dun04.mcachebin0 -> 2287 bytes
-rw-r--r--maps/re/iz_dun05.mcachebin0 -> 2537 bytes
-rw-r--r--maps/re/iz_int.mcachebin0 -> 217 bytes
-rw-r--r--maps/re/iz_int01.mcachebin0 -> 217 bytes
-rw-r--r--maps/re/iz_int02.mcachebin0 -> 217 bytes
-rw-r--r--maps/re/iz_int03.mcachebin0 -> 217 bytes
-rw-r--r--maps/re/iz_int04.mcachebin0 -> 217 bytes
-rw-r--r--maps/re/iz_ng01.mcachebin0 -> 225 bytes
-rw-r--r--maps/re/izlu2dun.mcachebin0 -> 1237 bytes
-rw-r--r--maps/re/izlude.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/izlude_a.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/izlude_b.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/izlude_c.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/izlude_d.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/izlude_in.mcachebin0 -> 881 bytes
-rw-r--r--maps/re/jawaii.mcachebin0 -> 2791 bytes
-rw-r--r--maps/re/jawaii_in.mcachebin0 -> 707 bytes
-rw-r--r--maps/re/job3_arch01.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/job3_arch02.mcachebin0 -> 4731 bytes
-rw-r--r--maps/re/job3_arch03.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/job3_gen01.mcachebin0 -> 363 bytes
-rw-r--r--maps/re/job3_guil01.mcachebin0 -> 409 bytes
-rw-r--r--maps/re/job3_guil02.mcachebin0 -> 137 bytes
-rw-r--r--maps/re/job3_guil03.mcachebin0 -> 569 bytes
-rw-r--r--maps/re/job3_rang01.mcachebin0 -> 131 bytes
-rw-r--r--maps/re/job3_rang02.mcachebin0 -> 878 bytes
-rw-r--r--maps/re/job3_rune01.mcachebin0 -> 385 bytes
-rw-r--r--maps/re/job3_rune02.mcachebin0 -> 97 bytes
-rw-r--r--maps/re/job3_rune03.mcachebin0 -> 97 bytes
-rw-r--r--maps/re/job3_sha01.mcachebin0 -> 300 bytes
-rw-r--r--maps/re/job3_war01.mcachebin0 -> 141 bytes
-rw-r--r--maps/re/job3_war02.mcachebin0 -> 141 bytes
-rw-r--r--maps/re/job_cru.mcachebin0 -> 744 bytes
-rw-r--r--maps/re/job_duncer.mcachebin0 -> 563 bytes
-rw-r--r--maps/re/job_hunte.mcachebin0 -> 702 bytes
-rw-r--r--maps/re/job_hunter.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/job_knight.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/job_knt.mcachebin0 -> 377 bytes
-rw-r--r--maps/re/job_ko.mcachebin0 -> 722 bytes
-rw-r--r--maps/re/job_monk.mcachebin0 -> 2632 bytes
-rw-r--r--maps/re/job_priest.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/job_prist.mcachebin0 -> 744 bytes
-rw-r--r--maps/re/job_sage.mcachebin0 -> 491 bytes
-rw-r--r--maps/re/job_soul.mcachebin0 -> 75 bytes
-rw-r--r--maps/re/job_star.mcachebin0 -> 353 bytes
-rw-r--r--maps/re/job_sword1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/re/job_thief1.mcachebin0 -> 5733 bytes
-rw-r--r--maps/re/job_wiz.mcachebin0 -> 491 bytes
-rw-r--r--maps/re/job_wizard.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/jupe_area1.mcachebin0 -> 508 bytes
-rw-r--r--maps/re/jupe_area2.mcachebin0 -> 471 bytes
-rw-r--r--maps/re/jupe_cave.mcachebin0 -> 192 bytes
-rw-r--r--maps/re/jupe_core.mcachebin0 -> 1911 bytes
-rw-r--r--maps/re/jupe_core2.mcachebin0 -> 1911 bytes
-rw-r--r--maps/re/jupe_ele.mcachebin0 -> 118 bytes
-rw-r--r--maps/re/jupe_ele_r.mcachebin0 -> 163 bytes
-rw-r--r--maps/re/jupe_gate.mcachebin0 -> 157 bytes
-rw-r--r--maps/re/juperos_01.mcachebin0 -> 2883 bytes
-rw-r--r--maps/re/juperos_02.mcachebin0 -> 3031 bytes
-rw-r--r--maps/re/kh_dun01.mcachebin0 -> 1210 bytes
-rw-r--r--maps/re/kh_dun02.mcachebin0 -> 1593 bytes
-rw-r--r--maps/re/kh_kiehl01.mcachebin0 -> 1407 bytes
-rw-r--r--maps/re/kh_kiehl02.mcachebin0 -> 221 bytes
-rw-r--r--maps/re/kh_mansion.mcachebin0 -> 231 bytes
-rw-r--r--maps/re/kh_rossi.mcachebin0 -> 1415 bytes
-rw-r--r--maps/re/kh_school.mcachebin0 -> 870 bytes
-rw-r--r--maps/re/kh_vila.mcachebin0 -> 1037 bytes
-rw-r--r--maps/re/knight_1-1.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/knight_2-1.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/knight_3-1.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/lhz_airport.mcachebin0 -> 632 bytes
-rw-r--r--maps/re/lhz_cube.mcachebin0 -> 578 bytes
-rw-r--r--maps/re/lhz_dun01.mcachebin0 -> 4225 bytes
-rw-r--r--maps/re/lhz_dun02.mcachebin0 -> 3117 bytes
-rw-r--r--maps/re/lhz_dun03.mcachebin0 -> 2248 bytes
-rw-r--r--maps/re/lhz_dun04.mcachebin0 -> 3942 bytes
-rw-r--r--maps/re/lhz_fild01.mcachebin0 -> 4542 bytes
-rw-r--r--maps/re/lhz_fild02.mcachebin0 -> 2517 bytes
-rw-r--r--maps/re/lhz_fild03.mcachebin0 -> 3731 bytes
-rw-r--r--maps/re/lhz_in01.mcachebin0 -> 2538 bytes
-rw-r--r--maps/re/lhz_in02.mcachebin0 -> 2040 bytes
-rw-r--r--maps/re/lhz_in03.mcachebin0 -> 1391 bytes
-rw-r--r--maps/re/lhz_que01.mcachebin0 -> 364 bytes
-rw-r--r--maps/re/lighthalzen.mcachebin0 -> 5429 bytes
-rw-r--r--maps/re/lou_dun01.mcachebin0 -> 4094 bytes
-rw-r--r--maps/re/lou_dun02.mcachebin0 -> 4746 bytes
-rw-r--r--maps/re/lou_dun03.mcachebin0 -> 2521 bytes
-rw-r--r--maps/re/lou_fild01.mcachebin0 -> 3608 bytes
-rw-r--r--maps/re/lou_in01.mcachebin0 -> 738 bytes
-rw-r--r--maps/re/lou_in02.mcachebin0 -> 1373 bytes
-rw-r--r--maps/re/louyang.mcachebin0 -> 4749 bytes
-rw-r--r--maps/re/ma_dun01.mcachebin0 -> 1662 bytes
-rw-r--r--maps/re/ma_fild01.mcachebin0 -> 6120 bytes
-rw-r--r--maps/re/ma_fild02.mcachebin0 -> 6036 bytes
-rw-r--r--maps/re/ma_in01.mcachebin0 -> 783 bytes
-rw-r--r--maps/re/ma_scene01.mcachebin0 -> 592 bytes
-rw-r--r--maps/re/ma_zif01.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif02.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif03.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif04.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif05.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif06.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif07.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif08.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/ma_zif09.mcachebin0 -> 74 bytes
-rw-r--r--maps/re/mag_dun01.mcachebin0 -> 1840 bytes
-rw-r--r--maps/re/mag_dun02.mcachebin0 -> 1738 bytes
-rw-r--r--maps/re/mal_dun01.mcachebin0 -> 2324 bytes
-rw-r--r--maps/re/mal_in01.mcachebin0 -> 882 bytes
-rw-r--r--maps/re/mal_in02.mcachebin0 -> 604 bytes
-rw-r--r--maps/re/malangdo.mcachebin0 -> 2850 bytes
-rw-r--r--maps/re/malaya.mcachebin0 -> 6437 bytes
-rw-r--r--maps/re/man_fild01.mcachebin0 -> 5789 bytes
-rw-r--r--maps/re/man_fild02.mcachebin0 -> 5027 bytes
-rw-r--r--maps/re/man_fild03.mcachebin0 -> 3147 bytes
-rw-r--r--maps/re/man_in01.mcachebin0 -> 1988 bytes
-rw-r--r--maps/re/manuk.mcachebin0 -> 3307 bytes
-rw-r--r--maps/re/mid_camp.mcachebin0 -> 4389 bytes
-rw-r--r--maps/re/mid_campin.mcachebin0 -> 1027 bytes
-rw-r--r--maps/re/mjo_dun01.mcachebin0 -> 3687 bytes
-rw-r--r--maps/re/mjo_dun02.mcachebin0 -> 2786 bytes
-rw-r--r--maps/re/mjo_dun03.mcachebin0 -> 2836 bytes
-rw-r--r--maps/re/mjolnir_01.mcachebin0 -> 5927 bytes
-rw-r--r--maps/re/mjolnir_02.mcachebin0 -> 5991 bytes
-rw-r--r--maps/re/mjolnir_03.mcachebin0 -> 5445 bytes
-rw-r--r--maps/re/mjolnir_04.mcachebin0 -> 5990 bytes
-rw-r--r--maps/re/mjolnir_05.mcachebin0 -> 6349 bytes
-rw-r--r--maps/re/mjolnir_06.mcachebin0 -> 3575 bytes
-rw-r--r--maps/re/mjolnir_07.mcachebin0 -> 3953 bytes
-rw-r--r--maps/re/mjolnir_08.mcachebin0 -> 5310 bytes
-rw-r--r--maps/re/mjolnir_09.mcachebin0 -> 8422 bytes
-rw-r--r--maps/re/mjolnir_10.mcachebin0 -> 7066 bytes
-rw-r--r--maps/re/mjolnir_11.mcachebin0 -> 5207 bytes
-rw-r--r--maps/re/mjolnir_12.mcachebin0 -> 4551 bytes
-rw-r--r--maps/re/moc_castle.mcachebin0 -> 1034 bytes
-rw-r--r--maps/re/moc_fild01.mcachebin0 -> 4428 bytes
-rw-r--r--maps/re/moc_fild02.mcachebin0 -> 5249 bytes
-rw-r--r--maps/re/moc_fild03.mcachebin0 -> 5033 bytes
-rw-r--r--maps/re/moc_fild04.mcachebin0 -> 6816 bytes
-rw-r--r--maps/re/moc_fild05.mcachebin0 -> 5638 bytes
-rw-r--r--maps/re/moc_fild06.mcachebin0 -> 5550 bytes
-rw-r--r--maps/re/moc_fild07.mcachebin0 -> 5050 bytes
-rw-r--r--maps/re/moc_fild08.mcachebin0 -> 5411 bytes
-rw-r--r--maps/re/moc_fild09.mcachebin0 -> 5086 bytes
-rw-r--r--maps/re/moc_fild10.mcachebin0 -> 6303 bytes
-rw-r--r--maps/re/moc_fild11.mcachebin0 -> 4607 bytes
-rw-r--r--maps/re/moc_fild12.mcachebin0 -> 4434 bytes
-rw-r--r--maps/re/moc_fild13.mcachebin0 -> 3705 bytes
-rw-r--r--maps/re/moc_fild14.mcachebin0 -> 4179 bytes
-rw-r--r--maps/re/moc_fild15.mcachebin0 -> 4805 bytes
-rw-r--r--maps/re/moc_fild16.mcachebin0 -> 4035 bytes
-rw-r--r--maps/re/moc_fild17.mcachebin0 -> 3295 bytes
-rw-r--r--maps/re/moc_fild18.mcachebin0 -> 4135 bytes
-rw-r--r--maps/re/moc_fild19.mcachebin0 -> 1251 bytes
-rw-r--r--maps/re/moc_fild20.mcachebin0 -> 5461 bytes
-rw-r--r--maps/re/moc_fild21.mcachebin0 -> 4625 bytes
-rw-r--r--maps/re/moc_fild22.mcachebin0 -> 5745 bytes
-rw-r--r--maps/re/moc_fild22b.mcachebin0 -> 5830 bytes
-rw-r--r--maps/re/moc_para01.mcachebin0 -> 1043 bytes
-rw-r--r--maps/re/moc_pryd01.mcachebin0 -> 958 bytes
-rw-r--r--maps/re/moc_pryd02.mcachebin0 -> 750 bytes
-rw-r--r--maps/re/moc_pryd03.mcachebin0 -> 574 bytes
-rw-r--r--maps/re/moc_pryd04.mcachebin0 -> 775 bytes
-rw-r--r--maps/re/moc_pryd05.mcachebin0 -> 1344 bytes
-rw-r--r--maps/re/moc_pryd06.mcachebin0 -> 1168 bytes
-rw-r--r--maps/re/moc_prydb1.mcachebin0 -> 646 bytes
-rw-r--r--maps/re/moc_prydn1.mcachebin0 -> 1344 bytes
-rw-r--r--maps/re/moc_prydn2.mcachebin0 -> 1168 bytes
-rw-r--r--maps/re/moc_ruins.mcachebin0 -> 1291 bytes
-rw-r--r--maps/re/monk_in.mcachebin0 -> 812 bytes
-rw-r--r--maps/re/monk_test.mcachebin0 -> 2068 bytes
-rw-r--r--maps/re/mora.mcachebin0 -> 1532 bytes
-rw-r--r--maps/re/moro_cav.mcachebin0 -> 315 bytes
-rw-r--r--maps/re/moro_vol.mcachebin0 -> 3000 bytes
-rw-r--r--maps/re/morocc.mcachebin0 -> 4061 bytes
-rw-r--r--maps/re/morocc_in.mcachebin0 -> 1209 bytes
-rw-r--r--maps/re/moscovia.mcachebin0 -> 3042 bytes
-rw-r--r--maps/re/mosk_dun01.mcachebin0 -> 3419 bytes
-rw-r--r--maps/re/mosk_dun02.mcachebin0 -> 3593 bytes
-rw-r--r--maps/re/mosk_dun03.mcachebin0 -> 2773 bytes
-rw-r--r--maps/re/mosk_fild01.mcachebin0 -> 434 bytes
-rw-r--r--maps/re/mosk_fild02.mcachebin0 -> 3761 bytes
-rw-r--r--maps/re/mosk_in.mcachebin0 -> 1516 bytes
-rw-r--r--maps/re/mosk_que.mcachebin0 -> 311 bytes
-rw-r--r--maps/re/mosk_ship.mcachebin0 -> 343 bytes
-rw-r--r--maps/re/n_castle.mcachebin0 -> 764 bytes
-rw-r--r--maps/re/nameless_i.mcachebin0 -> 2805 bytes
-rw-r--r--maps/re/nameless_in.mcachebin0 -> 527 bytes
-rw-r--r--maps/re/nameless_n.mcachebin0 -> 4115 bytes
-rw-r--r--maps/re/new_1-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/re/new_1-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/re/new_1-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/re/new_1-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/new_2-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/re/new_2-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/re/new_2-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/re/new_2-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/new_3-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/re/new_3-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/re/new_3-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/re/new_3-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/new_4-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/re/new_4-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/re/new_4-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/re/new_4-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/new_5-1.mcachebin0 -> 934 bytes
-rw-r--r--maps/re/new_5-2.mcachebin0 -> 807 bytes
-rw-r--r--maps/re/new_5-3.mcachebin0 -> 730 bytes
-rw-r--r--maps/re/new_5-4.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/new_zone01.mcachebin0 -> 934 bytes
-rw-r--r--maps/re/new_zone02.mcachebin0 -> 807 bytes
-rw-r--r--maps/re/new_zone03.mcachebin0 -> 730 bytes
-rw-r--r--maps/re/new_zone04.mcachebin0 -> 630 bytes
-rw-r--r--maps/re/nguild_alde.mcachebin0 -> 1558 bytes
-rw-r--r--maps/re/nguild_gef.mcachebin0 -> 1174 bytes
-rw-r--r--maps/re/nguild_pay.mcachebin0 -> 1260 bytes
-rw-r--r--maps/re/nguild_prt.mcachebin0 -> 1363 bytes
-rw-r--r--maps/re/nif_fild01.mcachebin0 -> 4159 bytes
-rw-r--r--maps/re/nif_fild02.mcachebin0 -> 3744 bytes
-rw-r--r--maps/re/nif_in.mcachebin0 -> 1083 bytes
-rw-r--r--maps/re/niflheim.mcachebin0 -> 5877 bytes
-rw-r--r--maps/re/nyd_dun01.mcachebin0 -> 1621 bytes
-rw-r--r--maps/re/nyd_dun02.mcachebin0 -> 1569 bytes
-rw-r--r--maps/re/odin_tem01.mcachebin0 -> 3107 bytes
-rw-r--r--maps/re/odin_tem02.mcachebin0 -> 4354 bytes
-rw-r--r--maps/re/odin_tem03.mcachebin0 -> 4735 bytes
-rw-r--r--maps/re/orcsdun01.mcachebin0 -> 1196 bytes
-rw-r--r--maps/re/orcsdun02.mcachebin0 -> 1297 bytes
-rw-r--r--maps/re/ordeal_1-1.mcachebin0 -> 1550 bytes
-rw-r--r--maps/re/ordeal_1-2.mcachebin0 -> 4449 bytes
-rw-r--r--maps/re/ordeal_2-1.mcachebin0 -> 1550 bytes
-rw-r--r--maps/re/ordeal_2-2.mcachebin0 -> 4449 bytes
-rw-r--r--maps/re/ordeal_3-1.mcachebin0 -> 1550 bytes
-rw-r--r--maps/re/ordeal_3-2.mcachebin0 -> 4449 bytes
-rw-r--r--maps/re/p_track01.mcachebin0 -> 171 bytes
-rw-r--r--maps/re/p_track02.mcachebin0 -> 171 bytes
-rw-r--r--maps/re/pay_arche.mcachebin0 -> 1205 bytes
-rw-r--r--maps/re/pay_dun00.mcachebin0 -> 1207 bytes
-rw-r--r--maps/re/pay_dun01.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/pay_dun02.mcachebin0 -> 3195 bytes
-rw-r--r--maps/re/pay_dun03.mcachebin0 -> 2570 bytes
-rw-r--r--maps/re/pay_dun04.mcachebin0 -> 1756 bytes
-rw-r--r--maps/re/pay_fild01.mcachebin0 -> 6539 bytes
-rw-r--r--maps/re/pay_fild02.mcachebin0 -> 3765 bytes
-rw-r--r--maps/re/pay_fild03.mcachebin0 -> 4016 bytes
-rw-r--r--maps/re/pay_fild04.mcachebin0 -> 4616 bytes
-rw-r--r--maps/re/pay_fild05.mcachebin0 -> 2620 bytes
-rw-r--r--maps/re/pay_fild06.mcachebin0 -> 3731 bytes
-rw-r--r--maps/re/pay_fild07.mcachebin0 -> 4995 bytes
-rw-r--r--maps/re/pay_fild08.mcachebin0 -> 3584 bytes
-rw-r--r--maps/re/pay_fild09.mcachebin0 -> 5030 bytes
-rw-r--r--maps/re/pay_fild10.mcachebin0 -> 6051 bytes
-rw-r--r--maps/re/pay_fild11.mcachebin0 -> 2426 bytes
-rw-r--r--maps/re/pay_gld.mcachebin0 -> 4451 bytes
-rw-r--r--maps/re/payg_cas01.mcachebin0 -> 1260 bytes
-rw-r--r--maps/re/payg_cas02.mcachebin0 -> 1860 bytes
-rw-r--r--maps/re/payg_cas03.mcachebin0 -> 1663 bytes
-rw-r--r--maps/re/payg_cas04.mcachebin0 -> 1934 bytes
-rw-r--r--maps/re/payg_cas05.mcachebin0 -> 1738 bytes
-rw-r--r--maps/re/payon.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/payon_in01.mcachebin0 -> 900 bytes
-rw-r--r--maps/re/payon_in02.mcachebin0 -> 392 bytes
-rw-r--r--maps/re/payon_in03.mcachebin0 -> 1070 bytes
-rw-r--r--maps/re/poring_w01.mcachebin0 -> 552 bytes
-rw-r--r--maps/re/poring_w02.mcachebin0 -> 783 bytes
-rw-r--r--maps/re/priest_1-1.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/priest_2-1.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/priest_3-1.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/prontera.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/prt_are01.mcachebin0 -> 3694 bytes
-rw-r--r--maps/re/prt_are_in.mcachebin0 -> 626 bytes
-rw-r--r--maps/re/prt_castle.mcachebin0 -> 2326 bytes
-rw-r--r--maps/re/prt_church.mcachebin0 -> 583 bytes
-rw-r--r--maps/re/prt_fild00.mcachebin0 -> 6845 bytes
-rw-r--r--maps/re/prt_fild01.mcachebin0 -> 7350 bytes
-rw-r--r--maps/re/prt_fild02.mcachebin0 -> 8431 bytes
-rw-r--r--maps/re/prt_fild03.mcachebin0 -> 4789 bytes
-rw-r--r--maps/re/prt_fild04.mcachebin0 -> 4596 bytes
-rw-r--r--maps/re/prt_fild05.mcachebin0 -> 7028 bytes
-rw-r--r--maps/re/prt_fild06.mcachebin0 -> 4346 bytes
-rw-r--r--maps/re/prt_fild07.mcachebin0 -> 6147 bytes
-rw-r--r--maps/re/prt_fild08.mcachebin0 -> 5153 bytes
-rw-r--r--maps/re/prt_fild08a.mcachebin0 -> 5153 bytes
-rw-r--r--maps/re/prt_fild08b.mcachebin0 -> 5153 bytes
-rw-r--r--maps/re/prt_fild08c.mcachebin0 -> 5153 bytes
-rw-r--r--maps/re/prt_fild08d.mcachebin0 -> 5153 bytes
-rw-r--r--maps/re/prt_fild09.mcachebin0 -> 5574 bytes
-rw-r--r--maps/re/prt_fild10.mcachebin0 -> 4784 bytes
-rw-r--r--maps/re/prt_fild11.mcachebin0 -> 4178 bytes
-rw-r--r--maps/re/prt_gld.mcachebin0 -> 2207 bytes
-rw-r--r--maps/re/prt_in.mcachebin0 -> 2045 bytes
-rw-r--r--maps/re/prt_maze01.mcachebin0 -> 2011 bytes
-rw-r--r--maps/re/prt_maze02.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/prt_maze03.mcachebin0 -> 2015 bytes
-rw-r--r--maps/re/prt_monk.mcachebin0 -> 2632 bytes
-rw-r--r--maps/re/prt_sewb1.mcachebin0 -> 1823 bytes
-rw-r--r--maps/re/prt_sewb2.mcachebin0 -> 496 bytes
-rw-r--r--maps/re/prt_sewb3.mcachebin0 -> 465 bytes
-rw-r--r--maps/re/prt_sewb4.mcachebin0 -> 791 bytes
-rw-r--r--maps/re/prtg_cas01.mcachebin0 -> 1363 bytes
-rw-r--r--maps/re/prtg_cas02.mcachebin0 -> 1336 bytes
-rw-r--r--maps/re/prtg_cas03.mcachebin0 -> 1440 bytes
-rw-r--r--maps/re/prtg_cas04.mcachebin0 -> 1512 bytes
-rw-r--r--maps/re/prtg_cas05.mcachebin0 -> 2074 bytes
-rw-r--r--maps/re/pvp_2vs2.mcachebin0 -> 387 bytes
-rw-r--r--maps/re/pvp_c_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/re/pvp_n_1-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_1-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_1-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_1-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_1-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_2-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_2-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_2-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_2-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_2-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_3-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_3-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_3-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_3-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_3-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_4-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_4-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_4-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_4-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_4-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_5-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_5-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_5-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_5-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_5-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_6-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_6-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_6-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_6-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_6-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_7-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_7-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_7-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_7-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_7-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_8-1.mcachebin0 -> 843 bytes
-rw-r--r--maps/re/pvp_n_8-2.mcachebin0 -> 731 bytes
-rw-r--r--maps/re/pvp_n_8-3.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/pvp_n_8-4.mcachebin0 -> 995 bytes
-rw-r--r--maps/re/pvp_n_8-5.mcachebin0 -> 472 bytes
-rw-r--r--maps/re/pvp_n_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/re/pvp_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/re/pvp_y_1-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_1-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_1-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_1-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_1-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_2-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_2-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_2-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_2-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_2-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_3-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_3-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_3-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_3-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_3-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_4-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_4-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_4-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_4-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_4-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_5-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_5-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_5-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_5-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_5-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_6-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_6-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_6-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_6-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_6-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_7-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_7-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_7-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_7-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_7-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_8-1.mcachebin0 -> 6108 bytes
-rw-r--r--maps/re/pvp_y_8-2.mcachebin0 -> 1680 bytes
-rw-r--r--maps/re/pvp_y_8-3.mcachebin0 -> 3904 bytes
-rw-r--r--maps/re/pvp_y_8-4.mcachebin0 -> 2565 bytes
-rw-r--r--maps/re/pvp_y_8-5.mcachebin0 -> 4420 bytes
-rw-r--r--maps/re/pvp_y_room.mcachebin0 -> 171 bytes
-rw-r--r--maps/re/que_avan01.mcachebin0 -> 205 bytes
-rw-r--r--maps/re/que_ba.mcachebin0 -> 1103 bytes
-rw-r--r--maps/re/que_bingo.mcachebin0 -> 290 bytes
-rw-r--r--maps/re/que_dan01.mcachebin0 -> 272 bytes
-rw-r--r--maps/re/que_dan02.mcachebin0 -> 297 bytes
-rw-r--r--maps/re/que_god01.mcachebin0 -> 887 bytes
-rw-r--r--maps/re/que_god02.mcachebin0 -> 370 bytes
-rw-r--r--maps/re/que_house_s.mcachebin0 -> 167 bytes
-rw-r--r--maps/re/que_hugel.mcachebin0 -> 458 bytes
-rw-r--r--maps/re/que_job01.mcachebin0 -> 389 bytes
-rw-r--r--maps/re/que_job02.mcachebin0 -> 955 bytes
-rw-r--r--maps/re/que_job03.mcachebin0 -> 955 bytes
-rw-r--r--maps/re/que_lhz.mcachebin0 -> 1079 bytes
-rw-r--r--maps/re/que_moc_16.mcachebin0 -> 1125 bytes
-rw-r--r--maps/re/que_moon.mcachebin0 -> 353 bytes
-rw-r--r--maps/re/que_ng.mcachebin0 -> 736 bytes
-rw-r--r--maps/re/que_qaru01.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qaru02.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qaru03.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qaru04.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qaru05.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qsch01.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qsch02.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qsch03.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qsch04.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_qsch05.mcachebin0 -> 3140 bytes
-rw-r--r--maps/re/que_rachel.mcachebin0 -> 3042 bytes
-rw-r--r--maps/re/que_san04.mcachebin0 -> 1072 bytes
-rw-r--r--maps/re/que_sign01.mcachebin0 -> 1085 bytes
-rw-r--r--maps/re/que_sign02.mcachebin0 -> 3744 bytes
-rw-r--r--maps/re/que_temsky.mcachebin0 -> 765 bytes
-rw-r--r--maps/re/que_thor.mcachebin0 -> 495 bytes
-rw-r--r--maps/re/quiz_00.mcachebin0 -> 417 bytes
-rw-r--r--maps/re/quiz_01.mcachebin0 -> 1622 bytes
-rw-r--r--maps/re/quiz_02.mcachebin0 -> 1457 bytes
-rw-r--r--maps/re/quiz_test.mcachebin0 -> 2068 bytes
-rw-r--r--maps/re/ra_fild01.mcachebin0 -> 4369 bytes
-rw-r--r--maps/re/ra_fild02.mcachebin0 -> 4240 bytes
-rw-r--r--maps/re/ra_fild03.mcachebin0 -> 5273 bytes
-rw-r--r--maps/re/ra_fild04.mcachebin0 -> 4885 bytes
-rw-r--r--maps/re/ra_fild05.mcachebin0 -> 4867 bytes
-rw-r--r--maps/re/ra_fild06.mcachebin0 -> 5736 bytes
-rw-r--r--maps/re/ra_fild07.mcachebin0 -> 4591 bytes
-rw-r--r--maps/re/ra_fild08.mcachebin0 -> 4146 bytes
-rw-r--r--maps/re/ra_fild09.mcachebin0 -> 2308 bytes
-rw-r--r--maps/re/ra_fild10.mcachebin0 -> 4094 bytes
-rw-r--r--maps/re/ra_fild11.mcachebin0 -> 4421 bytes
-rw-r--r--maps/re/ra_fild12.mcachebin0 -> 3706 bytes
-rw-r--r--maps/re/ra_fild13.mcachebin0 -> 3607 bytes
-rw-r--r--maps/re/ra_in01.mcachebin0 -> 2743 bytes
-rw-r--r--maps/re/ra_san01.mcachebin0 -> 3060 bytes
-rw-r--r--maps/re/ra_san02.mcachebin0 -> 1959 bytes
-rw-r--r--maps/re/ra_san03.mcachebin0 -> 2429 bytes
-rw-r--r--maps/re/ra_san04.mcachebin0 -> 1072 bytes
-rw-r--r--maps/re/ra_san05.mcachebin0 -> 2080 bytes
-rw-r--r--maps/re/ra_temin.mcachebin0 -> 2965 bytes
-rw-r--r--maps/re/ra_temple.mcachebin0 -> 1295 bytes
-rw-r--r--maps/re/ra_temsky.mcachebin0 -> 765 bytes
-rw-r--r--maps/re/rachel.mcachebin0 -> 3596 bytes
-rw-r--r--maps/re/s_atelier.mcachebin0 -> 664 bytes
-rw-r--r--maps/re/sch_gld.mcachebin0 -> 4103 bytes
-rw-r--r--maps/re/schg_cas01.mcachebin0 -> 3519 bytes
-rw-r--r--maps/re/schg_cas02.mcachebin0 -> 3186 bytes
-rw-r--r--maps/re/schg_cas03.mcachebin0 -> 2794 bytes
-rw-r--r--maps/re/schg_cas04.mcachebin0 -> 3519 bytes
-rw-r--r--maps/re/schg_cas05.mcachebin0 -> 3519 bytes
-rw-r--r--maps/re/schg_dun01.mcachebin0 -> 2271 bytes
-rw-r--r--maps/re/schg_que01.mcachebin0 -> 698 bytes
-rw-r--r--maps/re/sec_in01.mcachebin0 -> 939 bytes
-rw-r--r--maps/re/sec_in02.mcachebin0 -> 1074 bytes
-rw-r--r--maps/re/sec_pri.mcachebin0 -> 315 bytes
-rw-r--r--maps/re/siege_test.mcachebin0 -> 1367 bytes
-rw-r--r--maps/re/silk_lair.mcachebin0 -> 3228 bytes
-rw-r--r--maps/re/spl_fild01.mcachebin0 -> 8871 bytes
-rw-r--r--maps/re/spl_fild02.mcachebin0 -> 9237 bytes
-rw-r--r--maps/re/spl_fild03.mcachebin0 -> 8302 bytes
-rw-r--r--maps/re/spl_in01.mcachebin0 -> 2361 bytes
-rw-r--r--maps/re/spl_in02.mcachebin0 -> 971 bytes
-rw-r--r--maps/re/splendide.mcachebin0 -> 7798 bytes
-rw-r--r--maps/re/sword_1-1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/re/sword_2-1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/re/sword_3-1.mcachebin0 -> 2409 bytes
-rw-r--r--maps/re/te_alde_gld.mcachebin0 -> 2763 bytes
-rw-r--r--maps/re/te_aldecas1.mcachebin0 -> 1558 bytes
-rw-r--r--maps/re/te_aldecas2.mcachebin0 -> 1396 bytes
-rw-r--r--maps/re/te_aldecas3.mcachebin0 -> 1372 bytes
-rw-r--r--maps/re/te_aldecas4.mcachebin0 -> 1265 bytes
-rw-r--r--maps/re/te_aldecas5.mcachebin0 -> 1288 bytes
-rw-r--r--maps/re/te_prt_gld.mcachebin0 -> 2207 bytes
-rw-r--r--maps/re/te_prtcas01.mcachebin0 -> 1363 bytes
-rw-r--r--maps/re/te_prtcas02.mcachebin0 -> 1336 bytes
-rw-r--r--maps/re/te_prtcas03.mcachebin0 -> 1440 bytes
-rw-r--r--maps/re/te_prtcas04.mcachebin0 -> 1512 bytes
-rw-r--r--maps/re/te_prtcas05.mcachebin0 -> 2074 bytes
-rw-r--r--maps/re/teg_dun01.mcachebin0 -> 2866 bytes
-rw-r--r--maps/re/teg_dun02.mcachebin0 -> 1570 bytes
-rw-r--r--maps/re/tha_scene01.mcachebin0 -> 1014 bytes
-rw-r--r--maps/re/tha_t01.mcachebin0 -> 3145 bytes
-rw-r--r--maps/re/tha_t02.mcachebin0 -> 2854 bytes
-rw-r--r--maps/re/tha_t03.mcachebin0 -> 2776 bytes
-rw-r--r--maps/re/tha_t04.mcachebin0 -> 1768 bytes
-rw-r--r--maps/re/tha_t05.mcachebin0 -> 2335 bytes
-rw-r--r--maps/re/tha_t06.mcachebin0 -> 2522 bytes
-rw-r--r--maps/re/tha_t07.mcachebin0 -> 601 bytes
-rw-r--r--maps/re/tha_t08.mcachebin0 -> 680 bytes
-rw-r--r--maps/re/tha_t09.mcachebin0 -> 257 bytes
-rw-r--r--maps/re/tha_t10.mcachebin0 -> 375 bytes
-rw-r--r--maps/re/tha_t11.mcachebin0 -> 477 bytes
-rw-r--r--maps/re/tha_t12.mcachebin0 -> 414 bytes
-rw-r--r--maps/re/thana_boss.mcachebin0 -> 1336 bytes
-rw-r--r--maps/re/thana_step.mcachebin0 -> 779 bytes
-rw-r--r--maps/re/thor_camp.mcachebin0 -> 2991 bytes
-rw-r--r--maps/re/thor_v01.mcachebin0 -> 2794 bytes
-rw-r--r--maps/re/thor_v02.mcachebin0 -> 2303 bytes
-rw-r--r--maps/re/thor_v03.mcachebin0 -> 3307 bytes
-rw-r--r--maps/re/treasure01.mcachebin0 -> 1153 bytes
-rw-r--r--maps/re/treasure02.mcachebin0 -> 1190 bytes
-rw-r--r--maps/re/treasure_n1.mcachebin0 -> 1153 bytes
-rw-r--r--maps/re/treasure_n2.mcachebin0 -> 1190 bytes
-rw-r--r--maps/re/tur_dun01.mcachebin0 -> 2939 bytes
-rw-r--r--maps/re/tur_dun02.mcachebin0 -> 3976 bytes
-rw-r--r--maps/re/tur_dun03.mcachebin0 -> 2569 bytes
-rw-r--r--maps/re/tur_dun04.mcachebin0 -> 1715 bytes
-rw-r--r--maps/re/tur_dun05.mcachebin0 -> 753 bytes
-rw-r--r--maps/re/tur_dun06.mcachebin0 -> 735 bytes
-rw-r--r--maps/re/turbo_e_16.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_e_4.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_e_8.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_n_1.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_n_16.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_n_4.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_n_8.mcachebin0 -> 3302 bytes
-rw-r--r--maps/re/turbo_room.mcachebin0 -> 657 bytes
-rw-r--r--maps/re/um_dun01.mcachebin0 -> 3673 bytes
-rw-r--r--maps/re/um_dun02.mcachebin0 -> 5305 bytes
-rw-r--r--maps/re/um_fild01.mcachebin0 -> 6313 bytes
-rw-r--r--maps/re/um_fild02.mcachebin0 -> 5281 bytes
-rw-r--r--maps/re/um_fild03.mcachebin0 -> 5871 bytes
-rw-r--r--maps/re/um_fild04.mcachebin0 -> 4241 bytes
-rw-r--r--maps/re/um_in.mcachebin0 -> 752 bytes
-rw-r--r--maps/re/umbala.mcachebin0 -> 2441 bytes
-rw-r--r--maps/re/valkyrie.mcachebin0 -> 186 bytes
-rw-r--r--maps/re/ve_fild01.mcachebin0 -> 5625 bytes
-rw-r--r--maps/re/ve_fild02.mcachebin0 -> 5955 bytes
-rw-r--r--maps/re/ve_fild03.mcachebin0 -> 3347 bytes
-rw-r--r--maps/re/ve_fild04.mcachebin0 -> 4274 bytes
-rw-r--r--maps/re/ve_fild05.mcachebin0 -> 4300 bytes
-rw-r--r--maps/re/ve_fild06.mcachebin0 -> 1302 bytes
-rw-r--r--maps/re/ve_fild07.mcachebin0 -> 4044 bytes
-rw-r--r--maps/re/ve_in.mcachebin0 -> 2229 bytes
-rw-r--r--maps/re/ve_in02.mcachebin0 -> 240 bytes
-rw-r--r--maps/re/veins.mcachebin0 -> 5905 bytes
-rw-r--r--maps/re/wizard_1-1.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/wizard_2-1.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/wizard_3-1.mcachebin0 -> 482 bytes
-rw-r--r--maps/re/xmas.mcachebin0 -> 4194 bytes
-rw-r--r--maps/re/xmas_dun01.mcachebin0 -> 3216 bytes
-rw-r--r--maps/re/xmas_dun02.mcachebin0 -> 3329 bytes
-rw-r--r--maps/re/xmas_fild01.mcachebin0 -> 1721 bytes
-rw-r--r--maps/re/xmas_in.mcachebin0 -> 1023 bytes
-rw-r--r--maps/re/y_airport.mcachebin0 -> 632 bytes
-rw-r--r--maps/re/yggdrasil01.mcachebin0 -> 2256 bytes
-rw-r--r--maps/re/yuno.mcachebin0 -> 6815 bytes
-rw-r--r--maps/re/yuno_fild01.mcachebin0 -> 4037 bytes
-rw-r--r--maps/re/yuno_fild02.mcachebin0 -> 7456 bytes
-rw-r--r--maps/re/yuno_fild03.mcachebin0 -> 6934 bytes
-rw-r--r--maps/re/yuno_fild04.mcachebin0 -> 5025 bytes
-rw-r--r--maps/re/yuno_fild05.mcachebin0 -> 5798 bytes
-rw-r--r--maps/re/yuno_fild06.mcachebin0 -> 4598 bytes
-rw-r--r--maps/re/yuno_fild07.mcachebin0 -> 3884 bytes
-rw-r--r--maps/re/yuno_fild08.mcachebin0 -> 7327 bytes
-rw-r--r--maps/re/yuno_fild09.mcachebin0 -> 7116 bytes
-rw-r--r--maps/re/yuno_fild10.mcachebin0 -> 3907 bytes
-rw-r--r--maps/re/yuno_fild11.mcachebin0 -> 6228 bytes
-rw-r--r--maps/re/yuno_fild12.mcachebin0 -> 3057 bytes
-rw-r--r--maps/re/yuno_in01.mcachebin0 -> 898 bytes
-rw-r--r--maps/re/yuno_in02.mcachebin0 -> 780 bytes
-rw-r--r--maps/re/yuno_in03.mcachebin0 -> 1499 bytes
-rw-r--r--maps/re/yuno_in04.mcachebin0 -> 851 bytes
-rw-r--r--maps/re/yuno_in05.mcachebin0 -> 796 bytes
-rw-r--r--maps/re/yuno_pre.mcachebin0 -> 471 bytes
-rw-r--r--maps/re/z_agit.mcachebin0 -> 744 bytes
-rw-r--r--npc/instances/NydhoggsNest.txt3366
-rw-r--r--npc/re/instances/BakonawaLake.txt652
-rw-r--r--npc/re/instances/BuwayaCave.txt460
-rw-r--r--npc/re/instances/EclageInterior.txt738
-rw-r--r--npc/re/instances/HazyForest.txt1199
-rw-r--r--npc/re/instances/MalangdoCulvert.txt1287
-rw-r--r--npc/re/other/clans.txt581
-rw-r--r--npc/re/scripts.conf2
-rw-r--r--sql-files/item_db.sql2
-rw-r--r--sql-files/item_db2.sql2
-rw-r--r--sql-files/item_db_re.sql2
-rw-r--r--sql-files/logs.sql2
-rw-r--r--sql-files/main.sql8
-rw-r--r--sql-files/mob_db.sql2
-rw-r--r--sql-files/mob_db2.sql2
-rw-r--r--sql-files/mob_db_re.sql2
-rw-r--r--sql-files/upgrades/2017-06-04--15-04.sql24
-rw-r--r--sql-files/upgrades/2017-06-04--15-05.sql23
-rw-r--r--sql-files/upgrades/2018-02-26--15-57.sql6
-rw-r--r--sql-files/upgrades/index.txt3
-rw-r--r--src/char/HPMchar.c1
-rw-r--r--src/char/Makefile.in4
-rw-r--r--src/char/char.c20
-rw-r--r--src/char/int_clan.c181
-rw-r--r--src/char/int_clan.h39
-rw-r--r--src/char/int_rodex.c74
-rw-r--r--src/char/inter.c7
-rw-r--r--src/char/mapif.c8
-rw-r--r--src/char/mapif.h5
-rw-r--r--src/char/pincode.c17
-rw-r--r--src/common/HPMDataCheck.h44
-rw-r--r--src/common/HPMSymbols.inc.h44
-rw-r--r--src/common/HPMi.h5
-rw-r--r--src/common/md5calc.c2
-rw-r--r--src/common/mmo.h61
-rw-r--r--src/common/nullpo.h9
-rw-r--r--src/common/socket.c4
-rw-r--r--src/login/HPMlogin.c4
-rw-r--r--src/login/Makefile.in2
-rw-r--r--src/login/account.c (renamed from src/login/account_sql.c)123
-rw-r--r--src/login/account.h70
-rw-r--r--src/login/ipban.c (renamed from src/login/ipban_sql.c)120
-rw-r--r--src/login/ipban.h46
-rw-r--r--src/login/lclif.c26
-rw-r--r--src/login/lclif.p.h2
-rw-r--r--src/login/login.c210
-rw-r--r--src/login/login.h20
-rw-r--r--src/login/loginlog.c (renamed from src/login/loginlog_sql.c)107
-rw-r--r--src/login/loginlog.h38
-rw-r--r--src/map/HPMmap.c32
-rw-r--r--src/map/Makefile.in11
-rw-r--r--src/map/atcommand.c279
-rw-r--r--src/map/battle.c34
-rw-r--r--src/map/battle.h2
-rw-r--r--src/map/clan.c1075
-rw-r--r--src/map/clan.h85
-rw-r--r--src/map/clif.c670
-rw-r--r--src/map/clif.h11
-rw-r--r--src/map/constants.inc1029
-rw-r--r--src/map/guild.c5
-rw-r--r--src/map/intif.c122
-rw-r--r--src/map/intif.h5
-rw-r--r--src/map/itemdb.c6
-rw-r--r--src/map/itemdb.h4
-rw-r--r--src/map/log.c22
-rw-r--r--src/map/log.h1
-rw-r--r--src/map/map.c245
-rw-r--r--src/map/map.h38
-rw-r--r--src/map/mob.c15
-rw-r--r--src/map/mob.h2
-rw-r--r--src/map/npc.c49
-rw-r--r--src/map/npc.h2
-rw-r--r--src/map/packets.h130
-rw-r--r--src/map/packets_keys_main.h (renamed from src/map/packets_keys.h)445
-rw-r--r--src/map/packets_keys_zero.h145
-rw-r--r--src/map/packets_shuffle_main.h (renamed from src/map/packets_shuffle.h)4403
-rw-r--r--src/map/packets_shuffle_zero.h656
-rw-r--r--src/map/packets_struct.h109
-rw-r--r--src/map/pc.c11
-rw-r--r--src/map/pc.h1
-rw-r--r--src/map/pet.c8
-rw-r--r--src/map/rodex.c41
-rw-r--r--src/map/script.c184
-rw-r--r--src/map/script.h1
-rw-r--r--src/map/skill.c47
-rw-r--r--src/map/skill.h6
-rw-r--r--src/map/status.c21
-rw-r--r--src/map/status.h7
-rw-r--r--src/map/unit.c20
-rw-r--r--src/plugins/HPMHooking.c5
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc198
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc23
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc8
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.Hooks.inc150
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.sources.inc3
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc162
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc45
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.Hooks.inc1047
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.sources.inc6
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc163
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc43
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc1091
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.sources.inc3
-rw-r--r--src/plugins/mapcache.c490
-rw-r--r--src/tool/Makefile.in23
-rw-r--r--src/tool/mapcache.c377
-rwxr-xr-xtools/ci/travis.sh6
-rw-r--r--vcproj-11/char-server.vcxproj2
-rw-r--r--vcproj-11/char-server.vcxproj.filters6
-rw-r--r--vcproj-11/login-server.vcxproj6
-rw-r--r--vcproj-11/login-server.vcxproj.filters6
-rw-r--r--vcproj-11/map-server.vcxproj6
-rw-r--r--vcproj-11/map-server.vcxproj.filters18
-rw-r--r--vcproj-11/mapcache.vcxproj165
-rw-r--r--vcproj-11/mapcache.vcxproj.filters105
-rw-r--r--vcproj-12/char-server.vcxproj2
-rw-r--r--vcproj-12/char-server.vcxproj.filters6
-rw-r--r--vcproj-12/login-server.vcxproj6
-rw-r--r--vcproj-12/login-server.vcxproj.filters6
-rw-r--r--vcproj-12/map-server.vcxproj6
-rw-r--r--vcproj-12/map-server.vcxproj.filters18
-rw-r--r--vcproj-12/mapcache.vcxproj165
-rw-r--r--vcproj-12/mapcache.vcxproj.filters105
-rw-r--r--vcproj-14/char-server.vcxproj2
-rw-r--r--vcproj-14/char-server.vcxproj.filters6
-rw-r--r--vcproj-14/login-server.vcxproj6
-rw-r--r--vcproj-14/login-server.vcxproj.filters6
-rw-r--r--vcproj-14/map-server.vcxproj6
-rw-r--r--vcproj-14/map-server.vcxproj.filters18
-rw-r--r--vcproj-14/mapcache.vcxproj163
-rw-r--r--vcproj-14/mapcache.vcxproj.filters105
1972 files changed, 18421 insertions, 7809 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
new file mode 100644
index 000000000..de3f255e8
--- /dev/null
+++ b/.appveyor.yml
@@ -0,0 +1,28 @@
+version: 1.{branch}.{build}
+pull_requests:
+ do_not_increment_build_number: true
+branches:
+ except:
+ - rathena
+ - coverity_scan
+skip_tags: true
+skip_branch_with_pr: true
+image: Visual Studio 2015
+clone_depth: 5
+environment:
+ matrix:
+ - HerculesProject: Hercules-11.sln
+ - HerculesProject: Hercules-12.sln
+ - HerculesProject: Hercules-14.sln
+services: mysql56
+build_script:
+- cmd: MSBuild %HerculesProject% /t:map-server,char-server,login-server
+test: off
+deploy: off
+notifications:
+- provider: Email
+ to:
+ - dev@herc.ws
+ on_build_success: false
+ on_build_failure: true
+ on_build_status_changed: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4f5710832..2f29e8642 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,8 +9,70 @@ and this project does not adhere to [Semantic Versioning](http://semver.org/spec
If you are reading this in a text editor, simply ignore this section
-->
+## [v2018.02.11+1] `February 13 2018` `PATCH 1`
+### Fixed
+- Fixed a possible crash in `@cvcon` (and possibly other functions) when a referenced map zone doesn't exist. (#1972, issue #1971)
+- Fixed the messages displayed when enabling or disabling CvC. (part of #1972)
+- Extended the `bg_message` string termination fix to all the clients. (#1973)
+
+## [v2018.02.11] `February 11 2018`
+### Added
+- Added/updated packets support for clients from 2017-12-13 to 2018-01-24. (part of #1957)
+- Implemented the official Clan System, including the possibility of customization and a Clan vs Clan versus mode. (#1718, #1964, #1968, related to issue #241)
+ - New GM commands: `@claninfo`, `@joinclan`, `@leaveclan`, `@reloadclans`, `@cvcon` and `@cvcoff`.
+ - New script commands: `clan_join()`, `clan_leave()` and `clan_master()`; extended `strcharinfo()` and `getcharid()`.
+ - Configuration changes: see `conf/clans.conf`, `conf/map/logs.conf`, `db/clans.conf`, `db/*/map_zone_db.conf`.
+ - Note: This requires the SQL migrations `2017-06-04--15-04.sql` and `2017-06-04--15-05.sql`.
+ - Note: The `npc/re/other/clans.txt` script is now loaded by default in renewal mode.
+- Added several (status-icon related) constants to the script engine (through the new `constants.inc` file). (part of #1718)
+- Implemented the missing HPM interfaces in the login server (account, ipban, lchrif), added the missing variables into the login interfaces. (#1963, issue #1908)
+ - The `_sql` suffix has been removed from the source files in the login server.
+ - Functions in `account.c` and `loginlog.c` have been prefixed with `account_` and `loginlog_` respectively.
+ - The `chrif_` functions of the login server have been renamed to `lchrif_`.
+ - The `server[]` array has been moved to `login->dbs->server[]`.
+ - The `account` (account.h), `ipban` (ipban.h), `lchrif` (login.h), `loginlog` (loginlog.h)
+ - Several `log_*` global variables have been moved to the loginlog interface, with their respective names.
+ - The `account_engine[0]` variable has been moved to `login->dbs->account_engine` (note: this is not an array!)
+- Added/updated packets support for clients from 2018-01-31 to 2018-02-07. (#1969)
+
+### Changed
+- Applied script standardization to the Bakonawa Lake instance script. (#1874)
+- Applied script standardization to the Buwaya Cave instance script. (#1877)
+- Applied script standardization to the Eclage Interior instance script. (#1878)
+- Applied script standardization to the Hazy Forest instance script. (#1880)
+- Applied script standardization to the Malangdo Culvert instance script. (#1881)
+
+### Fixed
+- Fixed compatibility issues with the 2013-12-23 client. (part of #1957, issue #1956)
+- Prevented the leak of a hidden GM's presence through area packets. (#1200)
+- Fixed an unterminated string in the `bg_message()` related packets, with certain client versions. (#1890)
+
+## [v2018.01.14] `January 14 2018`
+### Added
+- Added support for the `AllowReproduce` flag in the skill DB. This supersedes the skill_reproduce_db. (#1943)
+- Added support for the `ZC_PROGRESS_ACTOR` packet. The packet is exposed to the script engine through the `progressbar_unit()` command (available on PACKETVER 20130821 and newer). (#1929)
+- Added support for the new item drop packet for the Zero clients. The packet is controlled by the `ShowDropEffect` and `DropEffectMode` item DB flags and ignored by non-Zero clients. (#1939)
+- Added support for the new Map Server Change packet 0x0ac7. (part of #1948)
+
+### Changed
+- Always enabled assertions and null pointer checks. In order to disable them (very discouraged, as it may lead to security issues), it is now necessary to edit `nullpo.h`. (#1937)
+- Disabled the address sanitizer's memory leak detector in the travis builds, since it produced failures in third libraries. (#1949, #1952)
+- Applied script standardization to the Nydhogg's Nest instance script. (#1871)
+- Split packet_keys.h into separate files for main clients and zero clients. (part of #1948)
+- Split packets_shuffle.h into separate files for main clients and zero clients. (part of #1948)
+- Replaced the custom bank unavailable error message with the actual bank check error packet. (part of #1948)
+- Updated and corrected the party member and party info packets. (part of #1948)
+- Updated README.md with more relevant badges and links (added Discord, removed Waffle, added more GitHub information). (#1951)
+
+### Fixed
+- Updated Xcode project to include the RODEX related files. (#1942)
+- Fixed RODEX loading mails when it requires multiple packets. (#1945, issue #1933)
+
+### Removed
+- Removed the skill_reproduce_db, now superseded by the `AllowReproduce` skill flag. (part of #1943)
+
## [v2017.12.17] `December 17 2017`
-# Added
+### Added
- Implemented Homunculus Autofeeding, available on the 2017 clients. The feature can be disabled by flipping `features.enable_homun_autofeed` in feature.conf. (#1898)
- Added support for the newly released Ragnarok Zero clients. The client type is controlled with the `--enable-packetver-zero` configure-time flag (disabled by default). (#1923)
@@ -18,7 +80,7 @@ If you are reading this in a text editor, simply ignore this section
- Applied script standardization to the Old Glast Heim instance script. (#1883)
- Split packets.h into two files: packets.h and packets_shuffle.h. (part of #1923)
-## Fixed
+### Fixed
- Corrected a wrong path displayed in an error message pointing to the map-server configuration. (#1913)
- Fixed the natural expiration of the Poison status when under the effect of Slow Poison. (#1925)
@@ -98,6 +160,9 @@ If you are reading this in a text editor, simply ignore this section
- New versioning scheme and project changelogs/release notes (#1853)
[Unreleased]: https://github.com/HerculesWS/Hercules/compare/stable...master
+[v2018.02.11+1]: https://github.com/HerculesWS/Hercules/compare/v2018.02.11...v2018.02.11+1
+[v2018.02.11]: https://github.com/HerculesWS/Hercules/compare/v2018.01.14...v2018.02.11
+[v2018.01.14]: https://github.com/HerculesWS/Hercules/compare/v2017.12.17...v2018.01.14
[v2017.12.17]: https://github.com/HerculesWS/Hercules/compare/v2017.11.19+2...v2017.12.17
[v2017.11.19+2]: https://github.com/HerculesWS/Hercules/compare/v2017.11.19+1...v2017.11.19+2
[v2017.11.19+1]: https://github.com/HerculesWS/Hercules/compare/v2017.11.19...v2017.11.19+1
diff --git a/Hercules-11.sln b/Hercules-11.sln
index cc5aad477..1fc5f7f52 100644
--- a/Hercules-11.sln
+++ b/Hercules-11.sln
@@ -1,13 +1,13 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Express 2012 for Windows Desktop
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "vcproj-11\char-server.vcxproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server", "vcproj-11\login-server.vcxproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "vcproj-11\map-server.vcxproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapcache", "vcproj-11\mapcache.vcxproj", "{D356871D-58E1-450B-967A-E7E9646175AF}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-sample", "vcproj-11\plugin-sample.vcxproj", "{E64C56D3-CDFB-483B-900B-A62D216B6D2F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_map", "vcproj-11\plugin-HPMHooking_map.vcxproj", "{745D4A8C-6A68-4721-A43A-D81BF59860A1}"
@@ -34,10 +34,6 @@ Global
{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.Build.0 = Release|Win32
{E64C56D3-CDFB-483B-900B-A62D216B6D2F}.Debug|Win32.ActiveCfg = Debug|Win32
{E64C56D3-CDFB-483B-900B-A62D216B6D2F}.Debug|Win32.Build.0 = Debug|Win32
{E64C56D3-CDFB-483B-900B-A62D216B6D2F}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/Hercules-12.sln b/Hercules-12.sln
index ab0df4e07..c1a78b5ef 100644
--- a/Hercules-12.sln
+++ b/Hercules-12.sln
@@ -1,14 +1,12 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Express 2013 for Windows Desktop
-VisualStudioVersion = 12.0.30723.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "vcproj-12\char-server.vcxproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server", "vcproj-12\login-server.vcxproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapcache", "vcproj-12\mapcache.vcxproj", "{D356871D-58E1-450B-967A-E7E9646175AF}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "vcproj-12\map-server.vcxproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-sample", "vcproj-12\plugin-sample.vcxproj", "{E64C56D3-CDFB-483B-900B-A62D216B6D2F}"
@@ -33,10 +31,6 @@ Global
{D356871D-58E1-450B-967A-E5E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
{D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
{D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.Build.0 = Release|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/Hercules-14.sln b/Hercules-14.sln
index 0abbb1102..7c5ba6cf7 100644
--- a/Hercules-14.sln
+++ b/Hercules-14.sln
@@ -1,14 +1,12 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
-VisualStudioVersion = 14.0.23107.0
+VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "vcproj-14\char-server.vcxproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server", "vcproj-14\login-server.vcxproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapcache", "vcproj-14\mapcache.vcxproj", "{D356871D-58E1-450B-967A-E7E9646175AF}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "vcproj-14\map-server.vcxproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-sample", "vcproj-14\plugin-sample.vcxproj", "{E64C56D3-CDFB-483B-900B-A62D216B6D2F}"
@@ -33,10 +31,6 @@ Global
{D356871D-58E1-450B-967A-E5E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
{D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
{D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.Build.0 = Release|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
{D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/Hercules.xcodeproj/project.pbxproj b/Hercules.xcodeproj/project.pbxproj
index fc7aa8dc4..bb3149d3a 100644
--- a/Hercules.xcodeproj/project.pbxproj
+++ b/Hercules.xcodeproj/project.pbxproj
@@ -7,12 +7,12 @@
objects = {
/* Begin PBXBuildFile section */
+ 755495841FEE5A0000CE4B7D /* int_rodex.c in Sources */ = {isa = PBXBuildFile; fileRef = 755495831FEE5A0000CE4B7D /* int_rodex.c */; };
+ 755495871FEE5A1F00CE4B7D /* rodex.c in Sources */ = {isa = PBXBuildFile; fileRef = 755495851FEE5A1F00CE4B7D /* rodex.c */; };
A5296FCD1CAC40CF001ABCAC /* lclif.c in Sources */ = {isa = PBXBuildFile; fileRef = A5296FCA1CAC40CF001ABCAC /* lclif.c */; };
- A5380CD71856CE3C0090CBC4 /* mapcache.c in Sources */ = {isa = PBXBuildFile; fileRef = A5380CD61856CE3C0090CBC4 /* mapcache.c */; };
- A5380CD81856CE8A0090CBC4 /* console.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC692185643BB009EB79C /* console.c */; };
- A5380CD91856CF4A0090CBC4 /* core.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC694185643BB009EB79C /* core.c */; };
- A5380CDA1856D0650090CBC4 /* socket.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC6BA185643BB009EB79C /* socket.c */; };
- A5380CDB1856D0690090CBC4 /* memmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC6A3185643BB009EB79C /* memmgr.c */; };
+ A530267B202D78CE0060E394 /* clan.c in Sources */ = {isa = PBXBuildFile; fileRef = A5302673202D78B00060E394 /* clan.c */; };
+ A530267F202D793C0060E394 /* int_clan.c in Sources */ = {isa = PBXBuildFile; fileRef = A530267D202D792F0060E394 /* int_clan.c */; };
+ A5302683202D7A1F0060E394 /* HPMHooking.Defs.inc in Sources */ = {isa = PBXBuildFile; fileRef = A5302682202D7A1F0060E394 /* HPMHooking.Defs.inc */; };
A5467AD31A16FCB4008AFAA6 /* loginif.c in Sources */ = {isa = PBXBuildFile; fileRef = A5467AD11A16FCB4008AFAA6 /* loginif.c */; };
A5467AD61A16FCDC008AFAA6 /* mapif.c in Sources */ = {isa = PBXBuildFile; fileRef = A5467AD41A16FCDC008AFAA6 /* mapif.c */; };
A5467AD91A16FD08008AFAA6 /* geoip.c in Sources */ = {isa = PBXBuildFile; fileRef = A5467AD71A16FD08008AFAA6 /* geoip.c */; };
@@ -23,10 +23,10 @@
A55AED7C1B8153F100149CF8 /* scanner.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC72918564C05009EB79C /* scanner.c */; };
A55AED7D1B8153F300149CF8 /* strbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC72B18564C05009EB79C /* strbuf.c */; };
A567612D185D11D700997C0D /* nullpo.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC6B2185643BB009EB79C /* nullpo.c */; };
- A56CC68918564387009EB79C /* account_sql.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68118564387009EB79C /* account_sql.c */; };
- A56CC68A18564387009EB79C /* ipban_sql.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68318564387009EB79C /* ipban_sql.c */; };
+ A56CC68918564387009EB79C /* account.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68118564387009EB79C /* account.c */; };
+ A56CC68A18564387009EB79C /* ipban.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68318564387009EB79C /* ipban.c */; };
A56CC68B18564387009EB79C /* login.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68518564387009EB79C /* login.c */; };
- A56CC68C18564387009EB79C /* loginlog_sql.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68718564387009EB79C /* loginlog_sql.c */; };
+ A56CC68C18564387009EB79C /* loginlog.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC68718564387009EB79C /* loginlog.c */; };
A56CC6C9185643BB009EB79C /* conf.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC690185643BB009EB79C /* conf.c */; };
A56CC6CA185643BB009EB79C /* conf.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC690185643BB009EB79C /* conf.c */; };
A56CC6CB185643BB009EB79C /* conf.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC690185643BB009EB79C /* conf.c */; };
@@ -160,11 +160,6 @@
A56CC7DD18565812009EB79C /* trade.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC7B318565812009EB79C /* trade.c */; };
A56CC7DE18565812009EB79C /* unit.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC7B518565812009EB79C /* unit.c */; };
A56CC7DF18565812009EB79C /* vending.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC7B718565812009EB79C /* vending.c */; };
- A58A5A17185800A40099683E /* showmsg.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC6B8185643BB009EB79C /* showmsg.c */; };
- A58A5A18185800B80099683E /* grfio.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC69E185643BB009EB79C /* grfio.c */; };
- A58A5A19185800C20099683E /* des.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC698185643BB009EB79C /* des.c */; };
- A58A5A1A185800CD0099683E /* strlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC6BF185643BB009EB79C /* strlib.c */; };
- A58A5A1B185800E70099683E /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A56CC6C6185643BB009EB79C /* utils.c */; };
A58A5A281858025D0099683E /* HPMHooking.c in Sources */ = {isa = PBXBuildFile; fileRef = A58A5A271858025D0099683E /* HPMHooking.c */; };
A59EA4511A727D36005F2B6D /* channel.c in Sources */ = {isa = PBXBuildFile; fileRef = A59EA44F1A727D36005F2B6D /* channel.c */; };
A5AA94EE185796CB00C940C8 /* sample.c in Sources */ = {isa = PBXBuildFile; fileRef = A5AA94ED185796CB00C940C8 /* sample.c */; };
@@ -176,19 +171,9 @@
A5F7946C191CA34E002293AB /* sysinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A5F79469191CA34E002293AB /* sysinfo.c */; };
A5F7946D191CA34E002293AB /* sysinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A5F79469191CA34E002293AB /* sysinfo.c */; };
A5F7946E191CA34E002293AB /* sysinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A5F79469191CA34E002293AB /* sysinfo.c */; };
- A5F7946F191CA34E002293AB /* sysinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A5F79469191CA34E002293AB /* sysinfo.c */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
- A5380CCB1856CE180090CBC4 /* CopyFiles */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = /usr/share/man/man1/;
- dstSubfolderSpec = 0;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 1;
- };
A56CC66818564315009EB79C /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -219,11 +204,26 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 755495821FEE5A0000CE4B7D /* int_rodex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = int_rodex.h; path = src/char/int_rodex.h; sourceTree = SOURCE_ROOT; };
+ 755495831FEE5A0000CE4B7D /* int_rodex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = int_rodex.c; path = src/char/int_rodex.c; sourceTree = SOURCE_ROOT; };
+ 755495851FEE5A1F00CE4B7D /* rodex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rodex.c; path = src/map/rodex.c; sourceTree = SOURCE_ROOT; };
+ 755495861FEE5A1F00CE4B7D /* rodex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rodex.h; path = src/map/rodex.h; sourceTree = SOURCE_ROOT; };
A5296FCA1CAC40CF001ABCAC /* lclif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lclif.c; path = src/login/lclif.c; sourceTree = SOURCE_ROOT; };
A5296FCB1CAC40CF001ABCAC /* lclif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lclif.h; path = src/login/lclif.h; sourceTree = SOURCE_ROOT; };
A5296FCC1CAC40CF001ABCAC /* lclif.p.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lclif.p.h; path = src/login/lclif.p.h; sourceTree = SOURCE_ROOT; };
- A5380CCD1856CE180090CBC4 /* mapcache */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mapcache; sourceTree = BUILT_PRODUCTS_DIR; };
- A5380CD61856CE3C0090CBC4 /* mapcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mapcache.c; path = src/tool/mapcache.c; sourceTree = "<group>"; };
+ A5302672202D78B00060E394 /* packets_keys_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packets_keys_main.h; path = src/map/packets_keys_main.h; sourceTree = SOURCE_ROOT; };
+ A5302673202D78B00060E394 /* clan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clan.c; path = src/map/clan.c; sourceTree = SOURCE_ROOT; };
+ A5302674202D78B00060E394 /* constants.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = constants.inc; path = src/map/constants.inc; sourceTree = SOURCE_ROOT; };
+ A5302675202D78B10060E394 /* packets_shuffle_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packets_shuffle_main.h; path = src/map/packets_shuffle_main.h; sourceTree = SOURCE_ROOT; };
+ A5302676202D78B10060E394 /* clan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = clan.h; path = src/map/clan.h; sourceTree = SOURCE_ROOT; };
+ A5302677202D78B10060E394 /* packets_keys_zero.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packets_keys_zero.h; path = src/map/packets_keys_zero.h; sourceTree = SOURCE_ROOT; };
+ A5302678202D78B10060E394 /* packets_shuffle_zero.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packets_shuffle_zero.h; path = src/map/packets_shuffle_zero.h; sourceTree = SOURCE_ROOT; };
+ A530267C202D792F0060E394 /* int_clan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = int_clan.h; path = src/char/int_clan.h; sourceTree = SOURCE_ROOT; };
+ A530267D202D792F0060E394 /* int_clan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = int_clan.c; path = src/char/int_clan.c; sourceTree = SOURCE_ROOT; };
+ A5302680202D79940060E394 /* HPMSymbols.inc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HPMSymbols.inc.h; path = src/common/HPMSymbols.inc.h; sourceTree = "<group>"; };
+ A5302681202D79940060E394 /* hercules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hercules.h; path = src/common/hercules.h; sourceTree = "<group>"; };
+ A5302682202D7A1F0060E394 /* HPMHooking.Defs.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = HPMHooking.Defs.inc; path = src/plugins/HPMHooking/HPMHooking.Defs.inc; sourceTree = "<group>"; };
+ A5302684202D7A2F0060E394 /* HPMHooking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HPMHooking.h; path = src/plugins/HPMHooking.h; sourceTree = "<group>"; };
A5467AD11A16FCB4008AFAA6 /* loginif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loginif.c; path = src/char/loginif.c; sourceTree = SOURCE_ROOT; };
A5467AD21A16FCB4008AFAA6 /* loginif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = loginif.h; path = src/char/loginif.h; sourceTree = SOURCE_ROOT; };
A5467AD41A16FCDC008AFAA6 /* mapif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mapif.c; path = src/char/mapif.c; sourceTree = SOURCE_ROOT; };
@@ -233,13 +233,13 @@
A56CC66A18564315009EB79C /* login-server */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "login-server"; sourceTree = BUILT_PRODUCTS_DIR; };
A56CC6731856434D009EB79C /* char-server */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "char-server"; sourceTree = BUILT_PRODUCTS_DIR; };
A56CC67C18564356009EB79C /* map-server */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "map-server"; sourceTree = BUILT_PRODUCTS_DIR; };
- A56CC68118564387009EB79C /* account_sql.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = account_sql.c; path = src/login/account_sql.c; sourceTree = SOURCE_ROOT; };
+ A56CC68118564387009EB79C /* account.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = account.c; path = src/login/account.c; sourceTree = SOURCE_ROOT; };
A56CC68218564387009EB79C /* account.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = account.h; path = src/login/account.h; sourceTree = SOURCE_ROOT; };
- A56CC68318564387009EB79C /* ipban_sql.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipban_sql.c; path = src/login/ipban_sql.c; sourceTree = SOURCE_ROOT; };
+ A56CC68318564387009EB79C /* ipban.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipban.c; path = src/login/ipban.c; sourceTree = SOURCE_ROOT; };
A56CC68418564387009EB79C /* ipban.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ipban.h; path = src/login/ipban.h; sourceTree = SOURCE_ROOT; };
A56CC68518564387009EB79C /* login.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = login.c; path = src/login/login.c; sourceTree = SOURCE_ROOT; };
A56CC68618564387009EB79C /* login.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = login.h; path = src/login/login.h; sourceTree = SOURCE_ROOT; };
- A56CC68718564387009EB79C /* loginlog_sql.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loginlog_sql.c; path = src/login/loginlog_sql.c; sourceTree = SOURCE_ROOT; };
+ A56CC68718564387009EB79C /* loginlog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loginlog.c; path = src/login/loginlog.c; sourceTree = SOURCE_ROOT; };
A56CC68818564387009EB79C /* loginlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = loginlog.h; path = src/login/loginlog.h; sourceTree = SOURCE_ROOT; };
A56CC68E185643BB009EB79C /* atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = atomic.h; path = src/common/atomic.h; sourceTree = "<group>"; };
A56CC68F185643BB009EB79C /* cbasetypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cbasetypes.h; path = src/common/cbasetypes.h; sourceTree = "<group>"; };
@@ -427,36 +427,26 @@
A5B894AC1A03CDFA005AD22E /* HPMchar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HPMchar.h; path = src/char/HPMchar.h; sourceTree = SOURCE_ROOT; };
A5B894B61A03CE25005AD22E /* HPMHooking_char.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = HPMHooking_char.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
A5B894BF1A03CE5D005AD22E /* HPMHooking_login.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = HPMHooking_login.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
- A5B894C01A03CEE1005AD22E /* HPMHooking_char.GetSymbol.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_char.GetSymbol.inc; path = src/plugins/HPMHooking/HPMHooking_char.GetSymbol.inc; sourceTree = "<group>"; };
- A5B894C11A03CEE1005AD22E /* HPMHooking_char.HookingPoints.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_char.HookingPoints.inc; path = src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc; sourceTree = "<group>"; };
- A5B894C21A03CEE1005AD22E /* HPMHooking_char.Hooks.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_char.Hooks.inc; path = src/plugins/HPMHooking/HPMHooking_char.Hooks.inc; sourceTree = "<group>"; };
- A5B894C31A03CEE1005AD22E /* HPMHooking_char.HPMHooksCore.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_char.HPMHooksCore.inc; path = src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc; sourceTree = "<group>"; };
- A5B894C41A03CEE1005AD22E /* HPMHooking_char.sources.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_char.sources.inc; path = src/plugins/HPMHooking/HPMHooking_char.sources.inc; sourceTree = "<group>"; };
- A5B894C51A03CEE1005AD22E /* HPMHooking_login.GetSymbol.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_login.GetSymbol.inc; path = src/plugins/HPMHooking/HPMHooking_login.GetSymbol.inc; sourceTree = "<group>"; };
- A5B894C61A03CEE1005AD22E /* HPMHooking_login.HookingPoints.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_login.HookingPoints.inc; path = src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc; sourceTree = "<group>"; };
- A5B894C71A03CEE1005AD22E /* HPMHooking_login.Hooks.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_login.Hooks.inc; path = src/plugins/HPMHooking/HPMHooking_login.Hooks.inc; sourceTree = "<group>"; };
- A5B894C81A03CEE1005AD22E /* HPMHooking_login.HPMHooksCore.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_login.HPMHooksCore.inc; path = src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc; sourceTree = "<group>"; };
- A5B894C91A03CEE1005AD22E /* HPMHooking_login.sources.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_login.sources.inc; path = src/plugins/HPMHooking/HPMHooking_login.sources.inc; sourceTree = "<group>"; };
- A5B894CA1A03CEE1005AD22E /* HPMHooking_map.GetSymbol.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_map.GetSymbol.inc; path = src/plugins/HPMHooking/HPMHooking_map.GetSymbol.inc; sourceTree = "<group>"; };
- A5B894CB1A03CEE1005AD22E /* HPMHooking_map.HookingPoints.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_map.HookingPoints.inc; path = src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc; sourceTree = "<group>"; };
- A5B894CC1A03CEE1005AD22E /* HPMHooking_map.Hooks.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_map.Hooks.inc; path = src/plugins/HPMHooking/HPMHooking_map.Hooks.inc; sourceTree = "<group>"; };
- A5B894CD1A03CEE1005AD22E /* HPMHooking_map.HPMHooksCore.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_map.HPMHooksCore.inc; path = src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc; sourceTree = "<group>"; };
- A5B894CE1A03CEE1005AD22E /* HPMHooking_map.sources.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = HPMHooking_map.sources.inc; path = src/plugins/HPMHooking/HPMHooking_map.sources.inc; sourceTree = "<group>"; };
+ A5B894C11A03CEE1005AD22E /* HPMHooking_char.HookingPoints.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_char.HookingPoints.inc; path = src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc; sourceTree = "<group>"; };
+ A5B894C21A03CEE1005AD22E /* HPMHooking_char.Hooks.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_char.Hooks.inc; path = src/plugins/HPMHooking/HPMHooking_char.Hooks.inc; sourceTree = "<group>"; };
+ A5B894C31A03CEE1005AD22E /* HPMHooking_char.HPMHooksCore.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_char.HPMHooksCore.inc; path = src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc; sourceTree = "<group>"; };
+ A5B894C41A03CEE1005AD22E /* HPMHooking_char.sources.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_char.sources.inc; path = src/plugins/HPMHooking/HPMHooking_char.sources.inc; sourceTree = "<group>"; };
+ A5B894C61A03CEE1005AD22E /* HPMHooking_login.HookingPoints.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_login.HookingPoints.inc; path = src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc; sourceTree = "<group>"; };
+ A5B894C71A03CEE1005AD22E /* HPMHooking_login.Hooks.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_login.Hooks.inc; path = src/plugins/HPMHooking/HPMHooking_login.Hooks.inc; sourceTree = "<group>"; };
+ A5B894C81A03CEE1005AD22E /* HPMHooking_login.HPMHooksCore.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_login.HPMHooksCore.inc; path = src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc; sourceTree = "<group>"; };
+ A5B894C91A03CEE1005AD22E /* HPMHooking_login.sources.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_login.sources.inc; path = src/plugins/HPMHooking/HPMHooking_login.sources.inc; sourceTree = "<group>"; };
+ A5B894CB1A03CEE1005AD22E /* HPMHooking_map.HookingPoints.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_map.HookingPoints.inc; path = src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc; sourceTree = "<group>"; };
+ A5B894CC1A03CEE1005AD22E /* HPMHooking_map.Hooks.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_map.Hooks.inc; path = src/plugins/HPMHooking/HPMHooking_map.Hooks.inc; sourceTree = "<group>"; };
+ A5B894CD1A03CEE1005AD22E /* HPMHooking_map.HPMHooksCore.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_map.HPMHooksCore.inc; path = src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc; sourceTree = "<group>"; };
+ A5B894CE1A03CEE1005AD22E /* HPMHooking_map.sources.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; name = HPMHooking_map.sources.inc; path = src/plugins/HPMHooking/HPMHooking_map.sources.inc; sourceTree = "<group>"; };
A5F79468191CA34E002293AB /* HPMDataCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HPMDataCheck.h; path = src/common/HPMDataCheck.h; sourceTree = "<group>"; };
A5F79469191CA34E002293AB /* sysinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sysinfo.c; path = src/common/sysinfo.c; sourceTree = "<group>"; };
A5F7946A191CA34E002293AB /* sysinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sysinfo.h; path = src/common/sysinfo.h; sourceTree = "<group>"; };
- A5F7946B191CA34E002293AB /* sysinfo.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = sysinfo.inc; path = src/common/sysinfo.inc; sourceTree = "<group>"; };
+ A5F7946B191CA34E002293AB /* sysinfo.inc */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; name = sysinfo.inc; path = src/common/sysinfo.inc; sourceTree = "<group>"; };
A5F79476191CA3F4002293AB /* sysinfogen.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = sysinfogen.sh; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
- A5380CCA1856CE180090CBC4 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
A56CC66718564315009EB79C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -516,14 +506,6 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- A5380CC81856CDF70090CBC4 /* tools */ = {
- isa = PBXGroup;
- children = (
- A5380CD61856CE3C0090CBC4 /* mapcache.c */,
- );
- name = tools;
- sourceTree = "<group>";
- };
A56CC651185642B4009EB79C = {
isa = PBXGroup;
children = (
@@ -541,7 +523,6 @@
A56CC66A18564315009EB79C /* login-server */,
A56CC6731856434D009EB79C /* char-server */,
A56CC67C18564356009EB79C /* map-server */,
- A5380CCD1856CE180090CBC4 /* mapcache */,
A5AA94E71857956100C940C8 /* sample.dylib */,
A5AA94F3185799B700C940C8 /* db2sql.dylib */,
A58A5A26185801FF0099683E /* HPMHooking_map.dylib */,
@@ -554,18 +535,18 @@
A56CC66B18564315009EB79C /* login-server */ = {
isa = PBXGroup;
children = (
- A5296FCA1CAC40CF001ABCAC /* lclif.c */,
- A5296FCB1CAC40CF001ABCAC /* lclif.h */,
- A5296FCC1CAC40CF001ABCAC /* lclif.p.h */,
+ A56CC68118564387009EB79C /* account.c */,
+ A56CC68218564387009EB79C /* account.h */,
A5B894A81A03CDD4005AD22E /* HPMlogin.c */,
A5B894A91A03CDD4005AD22E /* HPMlogin.h */,
- A56CC68118564387009EB79C /* account_sql.c */,
- A56CC68218564387009EB79C /* account.h */,
- A56CC68318564387009EB79C /* ipban_sql.c */,
+ A56CC68318564387009EB79C /* ipban.c */,
A56CC68418564387009EB79C /* ipban.h */,
+ A5296FCA1CAC40CF001ABCAC /* lclif.c */,
+ A5296FCB1CAC40CF001ABCAC /* lclif.h */,
+ A5296FCC1CAC40CF001ABCAC /* lclif.p.h */,
A56CC68518564387009EB79C /* login.c */,
A56CC68618564387009EB79C /* login.h */,
- A56CC68718564387009EB79C /* loginlog_sql.c */,
+ A56CC68718564387009EB79C /* loginlog.c */,
A56CC68818564387009EB79C /* loginlog.h */,
);
path = "login-server";
@@ -574,18 +555,16 @@
A56CC6741856434D009EB79C /* char-server */ = {
isa = PBXGroup;
children = (
+ A56CC743185657D9009EB79C /* char.c */,
+ A56CC744185657D9009EB79C /* char.h */,
A5467AD71A16FD08008AFAA6 /* geoip.c */,
A5467AD81A16FD08008AFAA6 /* geoip.h */,
- A5467AD41A16FCDC008AFAA6 /* mapif.c */,
- A5467AD51A16FCDC008AFAA6 /* mapif.h */,
- A5467AD11A16FCB4008AFAA6 /* loginif.c */,
- A5467AD21A16FCB4008AFAA6 /* loginif.h */,
A5B894AB1A03CDFA005AD22E /* HPMchar.c */,
A5B894AC1A03CDFA005AD22E /* HPMchar.h */,
- A56CC743185657D9009EB79C /* char.c */,
- A56CC744185657D9009EB79C /* char.h */,
A56CC745185657D9009EB79C /* int_auction.c */,
A56CC746185657D9009EB79C /* int_auction.h */,
+ A530267D202D792F0060E394 /* int_clan.c */,
+ A530267C202D792F0060E394 /* int_clan.h */,
A56CC747185657D9009EB79C /* int_elemental.c */,
A56CC748185657D9009EB79C /* int_elemental.h */,
A56CC749185657D9009EB79C /* int_guild.c */,
@@ -602,10 +581,16 @@
A56CC754185657D9009EB79C /* int_pet.h */,
A56CC755185657D9009EB79C /* int_quest.c */,
A56CC756185657D9009EB79C /* int_quest.h */,
+ 755495831FEE5A0000CE4B7D /* int_rodex.c */,
+ 755495821FEE5A0000CE4B7D /* int_rodex.h */,
A56CC757185657D9009EB79C /* int_storage.c */,
A56CC758185657D9009EB79C /* int_storage.h */,
A56CC759185657D9009EB79C /* inter.c */,
A56CC75A185657D9009EB79C /* inter.h */,
+ A5467AD11A16FCB4008AFAA6 /* loginif.c */,
+ A5467AD21A16FCB4008AFAA6 /* loginif.h */,
+ A5467AD41A16FCDC008AFAA6 /* mapif.c */,
+ A5467AD51A16FCDC008AFAA6 /* mapif.h */,
A56CC75B185657D9009EB79C /* pincode.c */,
A56CC75C185657D9009EB79C /* pincode.h */,
);
@@ -629,8 +614,11 @@
A56CC77318565812009EB79C /* chat.h */,
A56CC77418565812009EB79C /* chrif.c */,
A56CC77518565812009EB79C /* chrif.h */,
+ A5302673202D78B00060E394 /* clan.c */,
+ A5302676202D78B10060E394 /* clan.h */,
A56CC77618565812009EB79C /* clif.c */,
A56CC77718565812009EB79C /* clif.h */,
+ A5302674202D78B00060E394 /* constants.inc */,
A56CC77818565812009EB79C /* date.c */,
A56CC77918565812009EB79C /* date.h */,
A56CC77A18565812009EB79C /* duel.c */,
@@ -666,6 +654,10 @@
A56CC79818565812009EB79C /* npc_chat.c */,
A56CC79918565812009EB79C /* npc.c */,
A56CC79A18565812009EB79C /* npc.h */,
+ A5302672202D78B00060E394 /* packets_keys_main.h */,
+ A5302677202D78B10060E394 /* packets_keys_zero.h */,
+ A5302675202D78B10060E394 /* packets_shuffle_main.h */,
+ A5302678202D78B10060E394 /* packets_shuffle_zero.h */,
A56CC79B18565812009EB79C /* packets_struct.h */,
A56CC79C18565812009EB79C /* packets.h */,
A56CC79D18565812009EB79C /* party.c */,
@@ -680,6 +672,8 @@
A56CC7A618565812009EB79C /* pet.h */,
A56CC7A718565812009EB79C /* quest.c */,
A56CC7A818565812009EB79C /* quest.h */,
+ 755495851FEE5A1F00CE4B7D /* rodex.c */,
+ 755495861FEE5A1F00CE4B7D /* rodex.h */,
A56CC7A918565812009EB79C /* script.c */,
A56CC7AA18565812009EB79C /* script.h */,
A56CC7AB18565812009EB79C /* searchstore.c */,
@@ -703,10 +697,6 @@
A56CC68D1856439A009EB79C /* common */ = {
isa = PBXGroup;
children = (
- A5F79468191CA34E002293AB /* HPMDataCheck.h */,
- A5F79469191CA34E002293AB /* sysinfo.c */,
- A5F7946A191CA34E002293AB /* sysinfo.h */,
- A5F7946B191CA34E002293AB /* sysinfo.inc */,
A56CC68E185643BB009EB79C /* atomic.h */,
A56CC68F185643BB009EB79C /* cbasetypes.h */,
A56CC690185643BB009EB79C /* conf.c */,
@@ -723,15 +713,18 @@
A56CC69B185643BB009EB79C /* ers.h */,
A56CC69E185643BB009EB79C /* grfio.c */,
A56CC69F185643BB009EB79C /* grfio.h */,
+ A5302681202D79940060E394 /* hercules.h */,
A56CC6A0185643BB009EB79C /* HPM.c */,
A56CC6A1185643BB009EB79C /* HPM.h */,
+ A5F79468191CA34E002293AB /* HPMDataCheck.h */,
A56CC6A2185643BB009EB79C /* HPMi.h */,
- A56CC6A3185643BB009EB79C /* memmgr.c */,
- A56CC6A4185643BB009EB79C /* memmgr.h */,
+ A5302680202D79940060E394 /* HPMSymbols.inc.h */,
A56CC6A5185643BB009EB79C /* mapindex.c */,
A56CC6A6185643BB009EB79C /* mapindex.h */,
A56CC6A7185643BB009EB79C /* md5calc.c */,
A56CC6A8185643BB009EB79C /* md5calc.h */,
+ A56CC6A3185643BB009EB79C /* memmgr.c */,
+ A56CC6A4185643BB009EB79C /* memmgr.h */,
A56CC6AB185643BB009EB79C /* mmo.h */,
A56CC6AC185643BB009EB79C /* mutex.c */,
A56CC6AD185643BB009EB79C /* mutex.h */,
@@ -748,6 +741,9 @@
A56CC6BE185643BB009EB79C /* sql.h */,
A56CC6BF185643BB009EB79C /* strlib.c */,
A56CC6C0185643BB009EB79C /* strlib.h */,
+ A5F79469191CA34E002293AB /* sysinfo.c */,
+ A5F7946A191CA34E002293AB /* sysinfo.h */,
+ A5F7946B191CA34E002293AB /* sysinfo.inc */,
A56CC6C2185643BB009EB79C /* thread.c */,
A56CC6C3185643BB009EB79C /* thread.h */,
A56CC6C4185643BB009EB79C /* timer.c */,
@@ -762,9 +758,9 @@
A56CC71A18564AC7009EB79C /* config */ = {
isa = PBXGroup;
children = (
- A56CC71F18564B00009EB79C /* general.h */,
A56CC71B18564AF7009EB79C /* const.h */,
A56CC71C18564AF7009EB79C /* core.h */,
+ A56CC71F18564B00009EB79C /* general.h */,
A56CC71D18564AF7009EB79C /* renewal.h */,
A56CC71E18564AF7009EB79C /* secure.h */,
);
@@ -812,7 +808,6 @@
isa = PBXGroup;
children = (
A5F79476191CA3F4002293AB /* sysinfogen.sh */,
- A5380CC81856CDF70090CBC4 /* tools */,
A56CC71A18564AC7009EB79C /* config */,
A56CC68D1856439A009EB79C /* common */,
A56CC66B18564315009EB79C /* login-server */,
@@ -825,22 +820,21 @@
A58A5A291858026F0099683E /* HPMHooking */ = {
isa = PBXGroup;
children = (
- A5B894C01A03CEE1005AD22E /* HPMHooking_char.GetSymbol.inc */,
A5B894C11A03CEE1005AD22E /* HPMHooking_char.HookingPoints.inc */,
A5B894C21A03CEE1005AD22E /* HPMHooking_char.Hooks.inc */,
A5B894C31A03CEE1005AD22E /* HPMHooking_char.HPMHooksCore.inc */,
A5B894C41A03CEE1005AD22E /* HPMHooking_char.sources.inc */,
- A5B894C51A03CEE1005AD22E /* HPMHooking_login.GetSymbol.inc */,
A5B894C61A03CEE1005AD22E /* HPMHooking_login.HookingPoints.inc */,
A5B894C71A03CEE1005AD22E /* HPMHooking_login.Hooks.inc */,
A5B894C81A03CEE1005AD22E /* HPMHooking_login.HPMHooksCore.inc */,
A5B894C91A03CEE1005AD22E /* HPMHooking_login.sources.inc */,
- A5B894CA1A03CEE1005AD22E /* HPMHooking_map.GetSymbol.inc */,
A5B894CB1A03CEE1005AD22E /* HPMHooking_map.HookingPoints.inc */,
A5B894CC1A03CEE1005AD22E /* HPMHooking_map.Hooks.inc */,
A5B894CD1A03CEE1005AD22E /* HPMHooking_map.HPMHooksCore.inc */,
A5B894CE1A03CEE1005AD22E /* HPMHooking_map.sources.inc */,
A58A5A271858025D0099683E /* HPMHooking.c */,
+ A5302682202D7A1F0060E394 /* HPMHooking.Defs.inc */,
+ A5302684202D7A2F0060E394 /* HPMHooking.h */,
);
name = HPMHooking;
sourceTree = "<group>";
@@ -912,24 +906,6 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
- A5380CCC1856CE180090CBC4 /* mapcache */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = A5380CD31856CE190090CBC4 /* Build configuration list for PBXNativeTarget "mapcache" */;
- buildPhases = (
- A5F79479191CA5BC002293AB /* ShellScript */,
- A5380CC91856CE180090CBC4 /* Sources */,
- A5380CCA1856CE180090CBC4 /* Frameworks */,
- A5380CCB1856CE180090CBC4 /* CopyFiles */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = mapcache;
- productName = mapcache;
- productReference = A5380CCD1856CE180090CBC4 /* mapcache */;
- productType = "com.apple.product-type.tool";
- };
A56CC66918564315009EB79C /* login-server */ = {
isa = PBXNativeTarget;
buildConfigurationList = A56CC66C18564315009EB79C /* Build configuration list for PBXNativeTarget "login-server" */;
@@ -1093,7 +1069,6 @@
A56CC66918564315009EB79C /* login-server */,
A56CC6721856434D009EB79C /* char-server */,
A56CC67B18564356009EB79C /* map-server */,
- A5380CCC1856CE180090CBC4 /* mapcache */,
A5B894B71A03CE5D005AD22E /* HPMHooking_login */,
A5B894AE1A03CE25005AD22E /* HPMHooking_char */,
A58A5A1E185801FF0099683E /* HPMHooking_map */,
@@ -1143,47 +1118,9 @@
shellPath = /bin/sh;
shellScript = "./sysinfogen.sh src/common/sysinfo_new.inc ${WARNING_CFLAGS} ${OTHER_CFLAGS} ${OTHER_LDFLAGS}\nif cmp -s src/common/sysinfo.inc src/common/sysinfo_new.inc; then\nrm src/common/sysinfo_new.inc ;\nelse\nmv src/common/sysinfo_new.inc src/common/sysinfo.inc ;\nfi\n";
};
- A5F79479191CA5BC002293AB /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "./sysinfogen.sh src/common/sysinfo_new.inc ${WARNING_CFLAGS} ${OTHER_CFLAGS} ${OTHER_LDFLAGS}\nif cmp -s src/common/sysinfo.inc src/common/sysinfo_new.inc; then\nrm src/common/sysinfo_new.inc ;\nelse\nmv src/common/sysinfo_new.inc src/common/sysinfo.inc ;\nfi\n";
- };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
- A5380CC91856CE180090CBC4 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- A55AED781B8153D800149CF8 /* conf.c in Sources */,
- A58A5A1A185800CD0099683E /* strlib.c in Sources */,
- A5F7946F191CA34E002293AB /* sysinfo.c in Sources */,
- A5380CD91856CF4A0090CBC4 /* core.c in Sources */,
- A567612D185D11D700997C0D /* nullpo.c in Sources */,
- A5380CD81856CE8A0090CBC4 /* console.c in Sources */,
- A58A5A19185800C20099683E /* des.c in Sources */,
- A5380CD71856CE3C0090CBC4 /* mapcache.c in Sources */,
- A58A5A1B185800E70099683E /* utils.c in Sources */,
- A55AED7A1B8153EC00149CF8 /* libconfig.c in Sources */,
- A58A5A18185800B80099683E /* grfio.c in Sources */,
- A5380CDA1856D0650090CBC4 /* socket.c in Sources */,
- A55AED7C1B8153F100149CF8 /* scanner.c in Sources */,
- A58A5A17185800A40099683E /* showmsg.c in Sources */,
- A5380CDB1856D0690090CBC4 /* memmgr.c in Sources */,
- A55AED7B1B8153EF00149CF8 /* scanctx.c in Sources */,
- A55AED791B8153EA00149CF8 /* grammar.c in Sources */,
- A55AED7D1B8153F300149CF8 /* strbuf.c in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
A56CC66618564315009EB79C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -1198,7 +1135,7 @@
A5B894AA1A03CDD4005AD22E /* HPMlogin.c in Sources */,
A5296FCD1CAC40CF001ABCAC /* lclif.c in Sources */,
A56CC6DE185643BB009EB79C /* grfio.c in Sources */,
- A56CC68C18564387009EB79C /* loginlog_sql.c in Sources */,
+ A56CC68C18564387009EB79C /* loginlog.c in Sources */,
A56CC73118564C05009EB79C /* libconfig.c in Sources */,
A56CC717185643BB009EB79C /* utils.c in Sources */,
A56CC708185643BB009EB79C /* sql.c in Sources */,
@@ -1207,6 +1144,7 @@
A56CC6D5185643BB009EB79C /* des.c in Sources */,
A56CC6E7185643BB009EB79C /* mapindex.c in Sources */,
A56CC73A18564C05009EB79C /* strbuf.c in Sources */,
+ A5302683202D7A1F0060E394 /* HPMHooking.Defs.inc in Sources */,
A56CC6F0185643BB009EB79C /* mutex.c in Sources */,
A56CC6D2185643BB009EB79C /* db.c in Sources */,
A56CC711185643BB009EB79C /* thread.c in Sources */,
@@ -1215,13 +1153,13 @@
A56CC6CC185643BB009EB79C /* console.c in Sources */,
A56CC72E18564C05009EB79C /* grammar.c in Sources */,
A56CC705185643BB009EB79C /* socket.c in Sources */,
- A56CC68918564387009EB79C /* account_sql.c in Sources */,
+ A56CC68918564387009EB79C /* account.c in Sources */,
A56CC6E4185643BB009EB79C /* memmgr.c in Sources */,
A56CC6E1185643BB009EB79C /* HPM.c in Sources */,
A56CC6FF185643BB009EB79C /* random.c in Sources */,
A56CC73418564C05009EB79C /* scanctx.c in Sources */,
A56CC714185643BB009EB79C /* timer.c in Sources */,
- A56CC68A18564387009EB79C /* ipban_sql.c in Sources */,
+ A56CC68A18564387009EB79C /* ipban.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1229,6 +1167,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 755495841FEE5A0000CE4B7D /* int_rodex.c in Sources */,
A56CC766185657D9009EB79C /* int_quest.c in Sources */,
A56CC709185643BB009EB79C /* sql.c in Sources */,
A56CC75E185657D9009EB79C /* int_auction.c in Sources */,
@@ -1255,6 +1194,7 @@
A56CC769185657D9009EB79C /* pincode.c in Sources */,
A56CC6F1185643BB009EB79C /* mutex.c in Sources */,
A56CC762185657D9009EB79C /* int_mail.c in Sources */,
+ A530267F202D793C0060E394 /* int_clan.c in Sources */,
A56CC706185643BB009EB79C /* socket.c in Sources */,
A56CC6D6185643BB009EB79C /* des.c in Sources */,
A56CC764185657D9009EB79C /* int_party.c in Sources */,
@@ -1336,8 +1276,10 @@
A56CC6E9185643BB009EB79C /* mapindex.c in Sources */,
A56CC7D918565812009EB79C /* searchstore.c in Sources */,
A56CC73318564C05009EB79C /* libconfig.c in Sources */,
+ A530267B202D78CE0060E394 /* clan.c in Sources */,
A56CC74218564C23009EB79C /* mt19937ar.c in Sources */,
A56CC7BD18565812009EB79C /* chat.c in Sources */,
+ 755495871FEE5A1F00CE4B7D /* rodex.c in Sources */,
A56CC7CF18565812009EB79C /* mob.c in Sources */,
A56CC7BB18565812009EB79C /* battleground.c in Sources */,
A56CC73618564C05009EB79C /* scanctx.c in Sources */,
@@ -1395,106 +1337,6 @@
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
- A5380CD41856CE190090CBC4 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- OTHER_CFLAGS = (
- "-DMAXCONN=16384",
- "-DHAS_TLS",
- "-DHAVE_SETRLIMIT",
- "-DHAVE_STRNLEN",
- "-DPACKAGE_NAME=\\\"\\\"",
- "-DPACKAGE_TARNAME=\\\"\\\"",
- "-DPACKAGE_VERSION=\\\"\\\"",
- "-DPACKAGE_STRING=\\\"\\\"",
- "-DPACKAGE_BUGREPORT=\\\"\\\"",
- "-DPACKAGE_URL=\\\"\\\"",
- "-DSTDC_HEADERS=1",
- "-DHAVE_SYS_TYPES_H=1",
- "-DHAVE_SYS_STAT_H=1",
- "-DHAVE_STDLIB_H=1",
- "-DHAVE_STRING_H=1",
- "-DHAVE_MEMORY_H=1",
- "-DHAVE_STRINGS_H=1",
- "-DHAVE_INTTYPES_H=1",
- "-DHAVE_STDINT_H=1",
- "-DHAVE_UNISTD_H=1",
- "-D__EXTENSIONS__=1",
- "-D_ALL_SOURCE=1",
- "-D_GNU_SOURCE=1",
- "-D_POSIX_PTHREAD_SEMANTICS=1",
- "-D_TANDEM_SOURCE=1",
- "-DHAVE_USELOCALE=1",
- "-DHAVE_NEWLOCALE=1",
- "-DHAVE_FREELOCALE=1",
- "-DHAVE_XLOCALE_H=1",
- "-DHAVE_LIBZ=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DMINICORE",
- );
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Debug;
- };
- A5380CD51856CE190090CBC4 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- OTHER_CFLAGS = (
- "-DMAXCONN=16384",
- "-DHAS_TLS",
- "-DHAVE_SETRLIMIT",
- "-DHAVE_STRNLEN",
- "-DPACKAGE_NAME=\\\"\\\"",
- "-DPACKAGE_TARNAME=\\\"\\\"",
- "-DPACKAGE_VERSION=\\\"\\\"",
- "-DPACKAGE_STRING=\\\"\\\"",
- "-DPACKAGE_BUGREPORT=\\\"\\\"",
- "-DPACKAGE_URL=\\\"\\\"",
- "-DSTDC_HEADERS=1",
- "-DHAVE_SYS_TYPES_H=1",
- "-DHAVE_SYS_STAT_H=1",
- "-DHAVE_STDLIB_H=1",
- "-DHAVE_STRING_H=1",
- "-DHAVE_MEMORY_H=1",
- "-DHAVE_STRINGS_H=1",
- "-DHAVE_INTTYPES_H=1",
- "-DHAVE_STDINT_H=1",
- "-DHAVE_UNISTD_H=1",
- "-D__EXTENSIONS__=1",
- "-D_ALL_SOURCE=1",
- "-D_GNU_SOURCE=1",
- "-D_POSIX_PTHREAD_SEMANTICS=1",
- "-D_TANDEM_SOURCE=1",
- "-DHAVE_USELOCALE=1",
- "-DHAVE_NEWLOCALE=1",
- "-DHAVE_FREELOCALE=1",
- "-DHAVE_XLOCALE_H=1",
- "-DHAVE_LIBZ=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DHAVE_LIBPTHREAD=1",
- "-DMINICORE",
- );
- PRODUCT_NAME = "$(TARGET_NAME)";
- };
- name = Release;
- };
A56CC661185642B4009EB79C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -2058,15 +1900,6 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- A5380CD31856CE190090CBC4 /* Build configuration list for PBXNativeTarget "mapcache" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- A5380CD41856CE190090CBC4 /* Debug */,
- A5380CD51856CE190090CBC4 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
A56CC655185642B4009EB79C /* Build configuration list for PBXProject "Hercules" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/Hercules.xcodeproj/xcshareddata/xcschemes/mapcache.xcscheme b/Hercules.xcodeproj/xcshareddata/xcschemes/mapcache.xcscheme
deleted file mode 100644
index f437d0718..000000000
--- a/Hercules.xcodeproj/xcshareddata/xcschemes/mapcache.xcscheme
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
- LastUpgradeVersion = "0800"
- version = "1.3">
- <BuildAction
- parallelizeBuildables = "YES"
- buildImplicitDependencies = "YES">
- <BuildActionEntries>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "A5380CCC1856CE180090CBC4"
- BuildableName = "mapcache"
- BlueprintName = "mapcache"
- ReferencedContainer = "container:Hercules.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- </BuildActionEntries>
- </BuildAction>
- <TestAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- shouldUseLaunchSchemeArgsEnv = "YES">
- <Testables>
- </Testables>
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "A5380CCC1856CE180090CBC4"
- BuildableName = "mapcache"
- BlueprintName = "mapcache"
- ReferencedContainer = "container:Hercules.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- <AdditionalOptions>
- </AdditionalOptions>
- </TestAction>
- <LaunchAction
- buildConfiguration = "Debug"
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- launchStyle = "0"
- useCustomWorkingDirectory = "NO"
- ignoresPersistentStateOnLaunch = "NO"
- debugDocumentVersioning = "YES"
- debugServiceExtension = "internal"
- allowLocationSimulation = "YES">
- <BuildableProductRunnable
- runnableDebuggingMode = "0">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "A5380CCC1856CE180090CBC4"
- BuildableName = "mapcache"
- BlueprintName = "mapcache"
- ReferencedContainer = "container:Hercules.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- <AdditionalOptions>
- </AdditionalOptions>
- </LaunchAction>
- <ProfileAction
- buildConfiguration = "Release"
- shouldUseLaunchSchemeArgsEnv = "YES"
- savedToolIdentifier = ""
- useCustomWorkingDirectory = "NO"
- debugDocumentVersioning = "YES">
- <BuildableProductRunnable
- runnableDebuggingMode = "0">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "A5380CCC1856CE180090CBC4"
- BuildableName = "mapcache"
- BlueprintName = "mapcache"
- ReferencedContainer = "container:Hercules.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- </ProfileAction>
- <AnalyzeAction
- buildConfiguration = "Debug">
- </AnalyzeAction>
- <ArchiveAction
- buildConfiguration = "Release"
- revealArchiveInOrganizer = "YES">
- </ArchiveAction>
-</Scheme>
diff --git a/README.md b/README.md
index dc7e9e72e..11d2df70c 100644
--- a/README.md
+++ b/README.md
@@ -5,25 +5,25 @@ Build Status:
[![Build Status](https://travis-ci.org/HerculesWS/Hercules.svg?branch=master)](https://travis-ci.org/HerculesWS/Hercules)
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/cm9xbwurpbltqjop?svg=true)](https://ci.appveyor.com/project/Haru/hercules)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/3892/badge.svg)](https://scan.coverity.com/projects/herculesws-hercules)
-[![GitLabl Build Status](https://gitlab.com/HerculesWS/Hercules/badges/master/build.svg)](https://gitlab.com/HerculesWS/Hercules/commits/master)
+[![GitLab Build Status](https://gitlab.com/HerculesWS/Hercules/badges/master/build.svg)](https://gitlab.com/HerculesWS/Hercules/commits/master)
[![Coverage Report](https://gitlab.com/HerculesWS/Hercules/badges/master/coverage.svg)](https://gitlab.com/HerculesWS/Hercules/commits/master)
Issues and pull requests:
[![Open Issues](https://img.shields.io/github/issues-raw/HerculesWS/Hercules.svg?label=Open%20Issues)](https://github.com/HerculesWS/Hercules/issues)
-[![Issues in progress](https://badge.waffle.io/HerculesWS/Hercules.svg?label=status%3Aconfirmed&title=In%20Progress)](https://waffle.io/HerculesWS/Hercules)
-[![Ready PRs](https://badge.waffle.io/HerculesWS/Hercules.svg?label=status%3Aready&title=Ready%20PRs)](https://waffle.io/HerculesWS/Hercules)
+[![Open Pull Requests](https://img.shields.io/github/issues-pr-raw/HerculesWS/Hercules.svg?label=Open%20Pull%20Requests)](https://github.com/HerculesWS/Hercules/pulls)
Development and Community:
-[![GitHub Repository](https://img.shields.io/badge/github-HerculesWS/Hercules-green.svg)](https://github.com/HerculesWS/Hercules)
-[![Waffle Board](https://img.shields.io/badge/waffle-HerculesWS/Hercules-6699dd.svg)](https://waffle.io/HerculesWS/Hercules)
+[![GitHub Repository](https://img.shields.io/badge/github-HerculesWS/Hercules-green.svg?logo=github)](https://github.com/HerculesWS/Hercules)
+[![Community Forum](https://img.shields.io/badge/forum-herc.ws-orange.svg)](http://herc.ws)
[![IRC](https://img.shields.io/badge/IRC-Rizon/Hercules-yellow.svg)](irc://rizon.net/Hercules)
-[![Community Forum](https://img.shields.io/badge/forum-herc.ws-orange.svg)](http://herc.ws)
-[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/HerculesWS/Hercules)
-[![Twitter](https://img.shields.io/badge/twitter-@HerculesWS-blue.svg)](https://twitter.com/HerculesWS)
+[![Discord](https://img.shields.io/badge/discord-Hercules%20Emulator-7289da.svg)](https://discord.gg/rqCxS8p)
+[![Twitter](https://img.shields.io/badge/twitter-@HerculesWS-blue.svg?logo=twitter)](https://twitter.com/HerculesWS)
Project Info:
-![Language](https://img.shields.io/badge/language-C-yellow.svg)
+[![Release](https://img.shields.io/github/release/HerculesWS/Hercules.svg)](https://github.com/HerculesWS/Hercules/releases)
+![Language](https://img.shields.io/badge/language-C-yellow.svg)
[![License](https://img.shields.io/badge/license-GPLv3-663399.svg)](https://github.com/HerculesWS/Hercules/blob/master/LICENSE)
+[![GitHub contributors](https://img.shields.io/github/contributors/HerculesWS/Hercules.svg)](https://github.com/HerculesWS/Hercules/graphs/contributors)
Table of Contents
---------
@@ -37,7 +37,7 @@ Table of Contents
What is Hercules?
-----------------
Hercules is a collaborative software development project revolving around the
-creation of a robust massively multiplayer online role playing game (MMORPG)
+creation of a robust Massively Multiplayer Online Role Playing Game (MMORPG)
server package. Written in C, the program is very versatile and provides NPCs,
warps and modifications. The project is jointly managed by a group of
volunteers located around the world as well as a tremendous community providing
@@ -45,9 +45,9 @@ QA and support. Hercules is a continuation of the original Athena project.
Prerequisites
-------------
-Before installing Hercules there are certain tools and applications you will
-need. This differs between the varying operating systems available, so the
-following is broken down into Windows and Unix (incl. Linux) prerequisites.
+Before installing Hercules, you will need to install certain tools and applications.
+This differs between the varying Operating Systems available, so the
+following list is broken down into Windows and Unix (incl. Linux) prerequisites.
For a list of supported platforms, please refer to the [Supported
Platforms](https://github.com/HerculesWS/Hercules/wiki/Supported-Platforms) wiki page.
diff --git a/conf/clans.conf b/conf/clans.conf
new file mode 100644
index 000000000..85ef280fe
--- /dev/null
+++ b/conf/clans.conf
@@ -0,0 +1,48 @@
+//================= Hercules Configuration ================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2017 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Clan System local configuration file.
+//=========================================================================
+
+clan_configuration: {
+
+ // Maximum players for each clan
+ MaxMembers: 500
+
+ // Maximum alliances/oppositions for each clan
+ MaxRelations: 6
+
+ // how many hours player must be inactive to be kicked?
+ // Disabled: 0
+ // Official: 336 (2 weeks)
+ InactivityKickTime: 336
+
+ // Checks each clan member every 'InactivityCheckTime' hour(s) (default 24h, minimum value of 1h)
+ InactivityCheckTime: 24
+
+ // Clan Database
+ @include "db/clans.conf"
+}
diff --git a/conf/map/logs.conf b/conf/map/logs.conf
index 4f3a8a4db..e2dc7fbdd 100644
--- a/conf/map/logs.conf
+++ b/conf/map/logs.conf
@@ -164,13 +164,14 @@ map_log: {
// 0x04 - Log Party messages
// 0x08 - Log Guild messages
// 0x10 - Log Main chat messages
+ // 0x20 - Log Clan messages
// Example:
// log_chat: 0x5 = logs both Whisper & Party messages
// log_chat: 0x8 = logs only Guild messages
- // log_chat: 0x1f = logs everything
+ // log_chat: 0x2f = logs everything
// FIXME: This isn't fully functional, as of now it's only checking
// if the log is active or not [Panikon]
- log_chat: 0x1f
+ log_chat: 0x2f
// Disable chat logging when WoE is running? (Note 1)
log_chat_woe_disable: false
diff --git a/conf/messages.conf b/conf/messages.conf
index 78f0c6aa9..3f395ab5e 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -151,7 +151,13 @@
131: Unable to spawn clone.
132: Slave clone spawned.
133: Unable to spawn slave clone.
-//134-142 FREE (possibly for other clone types)
+//134-136 FREE (possibly for other clone types)
+137: CvC: Off
+138: CvC: On
+139: CvC ON |
+140: You can't join in a clan if you're in a guild.
+141: CvC is already Off.
+142: CvC is already On.
143: Commands are disabled in this map.
144: Invalid e-mail. If your email hasn't been set, use a@a.com.
145: Invalid new e-mail. Please enter a real e-mail address.
diff --git a/db/clans.conf b/db/clans.conf
new file mode 100644
index 000000000..93257f470
--- /dev/null
+++ b/db/clans.conf
@@ -0,0 +1,141 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2017 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Clan System Database File.
+//=========================================================================
+
+clans: (
+ /**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+ {
+ Id: ID (int)
+ Const: "Const Name" (string)
+ Name: "Clan Name" (string)
+ Leader: "Leader Name" (string)
+ Map: "Map Name" (string)
+ MaxMembers: Max (int, optional, overrides MaxMembers on conf/clans.conf)
+ KickTime: Hours (int, optional, overrides InactivityKickTime)
+ CheckTime: Hours (int, optional, overrides InactivityCheckTime)
+ Buff: {
+ Icon: State Icon ID/Constant (int, you can find all ids on your lua folder: stateicon/efstids.lub or /src/map/constants.inc.h)
+ Script: <" (optional)
+ Script (it can be multi-line)
+ ">
+ }
+ Allies: [
+ "CLAN_NAME_CONSTANT", (string)
+ ]
+ Antagonists: [
+ "CLAN_NAME_CONSTANT", (string)
+ ]
+ },
+ **************************************************************************/
+ {
+ Id: 1
+ Const: "SWORDCLAN"
+ Name: "Sword Clan"
+ Leader: "Raffam Oranpere"
+ Map: "prontera"
+ Buff: {
+ Icon: "SI_SWORDCLAN"
+ Script: <"
+ bonus(bStr, 1);
+ bonus(bVit, 1);
+ bonus(bMaxHP, 30);
+ bonus(bMaxSP, 10);
+ ">
+ }
+ Allies: [
+ "GOLDENMACECLAN",
+ ]
+ },
+ {
+ Id: 2
+ Const: "ARCWANDCLAN"
+ Name: "Arc Wand Clan"
+ Leader: "Devon Aire"
+ Map: "geffen"
+ Buff: {
+ Icon: "SI_ARCWANDCLAN"
+ Script: <"
+ bonus(bInt, 1);
+ bonus(bDex, 1);
+ bonus(bMaxHP, 30);
+ bonus(bMaxSP, 10);
+ ">
+ }
+ Allies: [
+ "GOLDENMACECLAN",
+ ]
+ Antagonists: [
+ "CROSSBOWCLAN",
+ ]
+ },
+ {
+ Id: 3
+ Const: "GOLDENMACECLAN"
+ Name: "Golden Mace Clan"
+ Leader: "Berman Aire"
+ Map: "prontera"
+ Buff: {
+ Icon: "SI_GOLDENMACECLAN"
+ Script: <"
+ bonus(bInt, 1);
+ bonus(bLuk, 1);
+ bonus(bMaxHP, 30);
+ bonus(bMaxSP, 10);
+ ">
+ }
+ Allies: [
+ "SWORDCLAN",
+ "ARCWANDCLAN",
+ "CROSSBOWCLAN",
+ ]
+ },
+ {
+ Id: 4
+ Const: "CROSSBOWCLAN"
+ Name: "Crossbow Clan"
+ Leader: "Shaam Rumi"
+ Map: "payon"
+ Buff: {
+ Icon: "SI_CROSSBOWCLAN"
+ Script: <"
+ bonus(bDex, 1);
+ bonus(bAgi, 1);
+ bonus(bMaxHP, 30);
+ bonus(bMaxSP, 10);
+ ">
+ }
+ Allies: [
+ "GOLDENMACECLAN",
+ ]
+ Antagonists: [
+ "ARCWANDCLAN",
+ ]
+ },
+)
diff --git a/db/constants.conf b/db/constants.conf
index eda877671..8c3336f79 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -1401,6 +1401,9 @@ constants_db: {
// Summer 2 Costume
SC_DRESS_UP: 652
+ // Clan System
+ SC_CLAN_INFO: 654
+
comment__: "Emotes"
e_gasp: 0
e_what: 1
@@ -3720,6 +3723,7 @@ constants_db: {
PC_PARTY: 1
PC_GUILD: 2
PC_MAP: 3
+ PC_CLAN: 4
comment__: "strnpcinfo"
NPC_NAME: 0
@@ -3734,6 +3738,7 @@ constants_db: {
CHAR_ID_GUILD: 2
CHAR_ID_ACCOUNT: 3
CHAR_ID_BG: 4
+ CHAR_ID_CLAN: 5
comment__: "sc_start"
SCFLAG_NONE: 0x00
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index 3169ddd6c..a98495eee 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -95,6 +95,8 @@ item_db: (
Delay: Delay to use item (int, defaults to 0)
KeepAfterUse: true/false (boolean, defaults to false)
DropAnnounce: true/false (boolean, defaults to false)
+ ShowDropEffect: true/false (boolean, defaults to false)
+ DropEffectMode: Effect Type (int, default to 0)
Trade: { (defaults to no restrictions)
override: GroupID (int, defaults to 100)
nodrop: true/false (boolean, defaults to false)
diff --git a/db/pre-re/map_cache.dat b/db/pre-re/map_cache.dat
deleted file mode 100644
index 59aa50b20..000000000
--- a/db/pre-re/map_cache.dat
+++ /dev/null
Binary files differ
diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf
index 06c06dd16..4873012aa 100644
--- a/db/pre-re/skill_db.conf
+++ b/db/pre-re/skill_db.conf
@@ -74,6 +74,7 @@
FreeCastNormal: true/false (boolean, defaults to false)
Works like FreeCastReduced, but not reduce speed.
ShowSkillScale: true/false (boolean, defaults to false)
+ AllowReproduce: true/false (boolean, defaults to false)
}
AttackType: "Attack Type" (string, defaults to "None")
Types: "None", "Weapon", "Magic" or "Misc"
@@ -291,6 +292,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
Requirements: {
@@ -371,6 +375,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Fire"
DamageType: {
@@ -468,6 +475,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Ghost"
DamageType: {
@@ -583,6 +593,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Ghost"
NumberOfHits: {
@@ -637,6 +650,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
NumberOfHits: {
@@ -702,6 +718,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
InterruptCast: true
@@ -783,6 +802,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -829,6 +851,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
InterruptCast: true
@@ -882,6 +907,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
NumberOfHits: {
@@ -947,6 +975,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -1012,6 +1043,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -1092,6 +1126,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -1236,6 +1273,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -1581,6 +1621,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
Requirements: {
@@ -1666,6 +1709,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: 2
@@ -1694,6 +1740,7 @@ skill_db: (
}
SkillInfo: {
IgnoreLandProtector: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -1801,6 +1848,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Poison"
SkillData2: {
@@ -1849,6 +1899,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2109,6 +2162,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -2236,6 +2292,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2288,6 +2347,7 @@ skill_db: (
}
SkillInfo: {
Ensemble: true
+ AllowReproduce: true
}
AttackType: "Magic"
DamageType: {
@@ -2324,6 +2384,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2598,6 +2661,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2645,6 +2711,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
NumberOfHits: {
@@ -2716,6 +2785,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Fire"
@@ -2801,6 +2871,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
SplashRange: 3
@@ -2836,6 +2909,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
SplashRange: {
@@ -2913,6 +2989,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -2978,6 +3057,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: -10
@@ -3056,6 +3138,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
InterruptCast: true
@@ -3139,6 +3224,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -3197,6 +3285,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
InterruptCast: true
@@ -3242,6 +3333,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: {
@@ -3296,6 +3390,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: {
@@ -3852,6 +3949,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Earth"
@@ -4132,6 +4230,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Water"
@@ -4194,6 +4293,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Wind"
@@ -4244,6 +4344,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Fire"
@@ -4742,6 +4843,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -4911,6 +5015,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -5007,6 +5112,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Misc"
DamageType: {
@@ -5101,6 +5207,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Holy"
@@ -6144,6 +6251,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -6520,6 +6630,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Fire"
DamageType: {
@@ -6568,6 +6681,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
IgnoreCards: true
@@ -6963,6 +7079,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
KnockBackTiles: {
Lv1: 5
@@ -7004,6 +7123,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
AfterCastActDelay: 700
CoolDown: 0
@@ -7050,6 +7172,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Holy"
NumberOfHits: -2
@@ -7093,6 +7218,7 @@ skill_db: (
}
SkillInfo: {
TargetSelf: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Holy"
@@ -7342,6 +7468,9 @@ skill_db: (
MaxLevel: 10
Range: -1
Hit: "BDT_MULTIHIT"
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -3
@@ -7387,6 +7516,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
IgnoreFlee: true
@@ -7420,6 +7552,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: {
@@ -7595,6 +7730,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
IgnoreDefense: true
@@ -7669,6 +7807,7 @@ skill_db: (
}
SkillInfo: {
NoCastSelf: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -9795,6 +9934,7 @@ skill_db: (
}
SkillInfo: {
NPC: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -12317,6 +12457,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -15706,6 +15849,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Misc"
DamageType: {
IgnoreElement: true
@@ -15738,6 +15884,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
KnockBackTiles: 3
@@ -15769,6 +15918,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
AfterCastActDelay: 1000
@@ -15821,6 +15973,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -15880,6 +16035,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -15991,6 +16149,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
NumberOfHits: {
@@ -16087,6 +16248,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -16126,6 +16290,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
NumberOfHits: {
@@ -16258,6 +16425,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -16319,6 +16489,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -16373,6 +16546,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
DamageType: {
@@ -16421,6 +16597,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
SplashRange: 3
@@ -17588,6 +17767,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -17646,6 +17826,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
DamageType: {
@@ -17706,6 +17887,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Fire"
@@ -17781,6 +17963,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
KnockBackTiles: 3
@@ -17924,6 +18107,7 @@ skill_db: (
SkillInfo: {
Quest: true
PartyOnly: true
+ AllowReproduce: true
}
AttackType: "Weapon"
DamageType: {
@@ -18108,6 +18292,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
AfterCastActDelay: 1000
@@ -18204,6 +18391,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Wind"
DamageType: {
@@ -18244,6 +18434,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -18671,6 +18864,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -7
@@ -18713,6 +18909,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
AfterCastActDelay: 1500
@@ -19010,6 +19209,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -19142,6 +19344,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -19200,6 +19405,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
NumberOfHits: -10
@@ -19657,6 +19865,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -19766,6 +19977,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
Element: "Ele_Holy"
DamageType: {
NoDamage: true
@@ -19940,6 +20154,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Ghost"
DamageType: {
@@ -19986,6 +20203,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -20044,6 +20264,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -20341,6 +20564,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
InterruptCast: true
CastTime: 4000
@@ -20370,6 +20596,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -20408,6 +20637,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
InterruptCast: true
@@ -20451,6 +20683,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
NumberOfHits: -20
InterruptCast: true
@@ -20508,6 +20743,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
SplashRange: 3
InterruptCast: true
@@ -20566,6 +20804,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: {
@@ -21059,6 +21300,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -21182,6 +21426,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
InterruptCast: true
@@ -21294,6 +21541,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
DamageType: {
@@ -21704,6 +21952,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Fire"
@@ -21744,6 +21993,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Water"
@@ -22916,6 +23166,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -23085,6 +23338,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -3
@@ -23905,6 +24161,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
CastTime: 1000
@@ -24045,6 +24304,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
SkillData1: {
Lv1: 5500
@@ -24172,6 +24434,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
Element: {
Lv1: "Ele_Neutral"
Lv2: "Ele_Holy"
@@ -24210,6 +24475,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -24382,6 +24650,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -24537,6 +24808,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Earth"
DamageType: {
@@ -24727,6 +25001,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -2
@@ -24756,6 +25033,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -24790,6 +25070,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -24886,6 +25169,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -24980,6 +25266,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25163,6 +25452,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
KnockBackTiles: {
@@ -25204,6 +25496,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25342,6 +25637,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
NumberOfHits: -7
InterruptCast: true
@@ -25408,6 +25706,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
SkillData1: {
@@ -25970,6 +26271,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Weapon"
NumberOfHits: {
@@ -26037,6 +26341,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
Element: "Ele_Weapon"
DamageType: {
@@ -26143,6 +26448,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -27212,6 +27520,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
InterruptCast: true
@@ -27264,6 +27575,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
InterruptCast: true
@@ -27358,6 +27672,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: -3
@@ -27435,6 +27752,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
NumberOfHits: -5
@@ -27512,6 +27832,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Poison"
DamageType: {
@@ -27569,6 +27892,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
InterruptCast: true
CastTime: {
@@ -27643,6 +27969,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Poison"
InterruptCast: true
@@ -27909,6 +28238,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
DamageType: {
@@ -28746,6 +29078,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
InterruptCast: true
@@ -28804,6 +29137,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Misc"
DamageType: {
NoDamage: true
@@ -28853,6 +29189,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -28914,6 +29253,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
NoDamage: true
@@ -28974,6 +29316,7 @@ skill_db: (
}
SkillInfo: {
IgnoreLandProtector: true
+ AllowReproduce: true
}
AttackType: "Weapon"
DamageType: {
@@ -29259,6 +29602,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
DamageType: {
NoDamage: true
@@ -29607,6 +29951,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -29675,6 +30022,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index b2e7f20cb..80baad89f 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -95,6 +95,8 @@ item_db: (
Delay: Delay to use item (int, defaults to 0)
KeepAfterUse: true/false (boolean, defaults to false)
DropAnnounce: true/false (boolean, defaults to false)
+ ShowDropEffect: true/false (boolean, defaults to false)
+ DropEffectMode: Effect Type (int, default to 0)
Trade: { (defaults to no restrictions)
override: GroupID (int, defaults to 100)
nodrop: true/false (boolean, defaults to false)
diff --git a/db/re/map_cache.dat b/db/re/map_cache.dat
deleted file mode 100644
index c678535eb..000000000
--- a/db/re/map_cache.dat
+++ /dev/null
Binary files differ
diff --git a/db/re/map_zone_db.conf b/db/re/map_zone_db.conf
index 133cc5337..42391a6f0 100644
--- a/db/re/map_zone_db.conf
+++ b/db/re/map_zone_db.conf
@@ -177,6 +177,25 @@ zones: (
)
},
{
+ /* CvC zone is applied to all maps with a cvc mapflag */
+ name: "CvC" /* changing this name requires MAP_ZONE_CVC_NAME to also be changed in src/map/map.h file */
+
+ disabled_skills: {
+ BS_GREED: "PLAYER"
+ CG_HERMODE: "PLAYER"
+ }
+
+ disabled_items: {
+ Greed_Scroll: true
+ C_Beginner_Cap: true
+ }
+
+ /* cashshop disabled in cvc maps */
+ mapflags: (
+ "nocashshop",
+ )
+},
+{
/* PK Mode zone is only used when server is on pk_mode (battle.conf),
it applies to all pvp maps that don't have their own zone */
name: "PK Mode" /* changing this name requires MAP_ZONE_PK_NAME to also be changed in src/map/map.h file */
diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf
index 815442fd9..4863e4051 100644
--- a/db/re/skill_db.conf
+++ b/db/re/skill_db.conf
@@ -74,6 +74,7 @@
FreeCastNormal: true/false (boolean, defaults to false)
Works like FreeCastReduced, but not reduce speed.
ShowSkillScale: true/false (boolean, defaults to false)
+ AllowReproduce: true/false (boolean, defaults to false)
}
AttackType: "Attack Type" (string, defaults to "None")
Types: "None", "Weapon", "Magic" or "Misc"
@@ -293,6 +294,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
Requirements: {
@@ -373,6 +377,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Fire"
DamageType: {
@@ -472,6 +479,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Ghost"
DamageType: {
@@ -598,6 +608,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Ghost"
NumberOfHits: {
@@ -652,6 +665,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
NumberOfHits: {
@@ -728,6 +744,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
InterruptCast: true
@@ -809,6 +828,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -866,6 +888,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
InterruptCast: true
@@ -930,6 +955,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
NumberOfHits: {
@@ -1006,6 +1034,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -1082,6 +1113,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -1184,6 +1218,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -1327,6 +1364,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -1672,6 +1712,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
Requirements: {
@@ -1757,6 +1800,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: 2
@@ -1786,6 +1832,7 @@ skill_db: (
}
SkillInfo: {
IgnoreLandProtector: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -1916,6 +1963,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Poison"
SkillData2: {
@@ -1964,6 +2014,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2235,6 +2288,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -2362,6 +2418,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2414,6 +2473,7 @@ skill_db: (
}
SkillInfo: {
Ensemble: true
+ AllowReproduce: true
}
AttackType: "Magic"
DamageType: {
@@ -2450,6 +2510,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2724,6 +2787,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -2771,6 +2837,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
NumberOfHits: {
@@ -2840,6 +2909,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -2932,6 +3004,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
SplashRange: 3
@@ -2966,6 +3041,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
SplashRange: {
@@ -3043,6 +3121,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -3119,6 +3200,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: -10
@@ -3208,6 +3292,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
InterruptCast: true
@@ -3302,6 +3389,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -3371,6 +3461,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
InterruptCast: true
@@ -3427,6 +3520,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: {
@@ -3503,6 +3599,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: {
@@ -4070,6 +4169,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Earth"
@@ -4351,6 +4451,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Water"
@@ -4413,6 +4514,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Wind"
@@ -4464,6 +4566,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Fire"
@@ -4962,6 +5065,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -5143,6 +5249,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -5237,6 +5344,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Misc"
DamageType: {
@@ -5332,6 +5440,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Holy"
@@ -6374,6 +6483,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -6839,6 +6951,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Fire"
DamageType: {
@@ -6888,6 +7003,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
IgnoreCards: true
@@ -7284,6 +7402,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
KnockBackTiles: {
Lv1: 5
@@ -7325,6 +7446,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
AfterCastActDelay: 700
FixedCastTime: 0
@@ -7371,6 +7495,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Holy"
NumberOfHits: -2
@@ -7414,6 +7541,7 @@ skill_db: (
}
SkillInfo: {
TargetSelf: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Holy"
@@ -7664,6 +7792,9 @@ skill_db: (
MaxLevel: 10
Range: -1
Hit: "BDT_MULTIHIT"
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -3
@@ -7708,6 +7839,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
IgnoreFlee: true
@@ -7741,6 +7875,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: {
@@ -7917,6 +8054,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
IgnoreDefense: true
@@ -8003,6 +8143,7 @@ skill_db: (
}
SkillInfo: {
NoCastSelf: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -10121,6 +10262,7 @@ skill_db: (
}
SkillInfo: {
NPC: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -12657,6 +12799,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -16087,6 +16232,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Misc"
DamageType: {
IgnoreElement: true
@@ -16119,6 +16267,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
KnockBackTiles: 4
@@ -16150,6 +16301,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
AfterCastActDelay: 1000
@@ -16191,6 +16345,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -16238,6 +16395,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -16360,6 +16520,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
NumberOfHits: {
@@ -16478,6 +16641,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -16517,6 +16683,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
NumberOfHits: {
@@ -16661,6 +16830,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -16733,6 +16905,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
NumberOfHits: {
@@ -16798,6 +16973,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
DamageType: {
@@ -16868,6 +17046,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
SplashRange: 3
@@ -18135,6 +18316,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
@@ -18192,6 +18374,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
DamageType: {
@@ -18252,6 +18435,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Magic"
Element: "Ele_Fire"
@@ -18326,6 +18510,7 @@ skill_db: (
}
SkillInfo: {
Quest: true
+ AllowReproduce: true
}
AttackType: "Weapon"
KnockBackTiles: 3
@@ -18466,6 +18651,7 @@ skill_db: (
SkillInfo: {
Quest: true
PartyOnly: true
+ AllowReproduce: true
}
AttackType: "Weapon"
DamageType: {
@@ -18647,6 +18833,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
AfterCastActDelay: 1000
@@ -18746,6 +18935,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Wind"
DamageType: {
@@ -18787,6 +18979,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -19216,6 +19411,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -7
@@ -19258,6 +19456,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
AfterCastActDelay: 1500
@@ -19555,6 +19756,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -19688,6 +19892,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -19746,6 +19953,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
NumberOfHits: -10
@@ -20222,6 +20432,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Holy"
DamageType: {
@@ -20334,6 +20547,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
Element: "Ele_Holy"
DamageType: {
NoDamage: true
@@ -20510,6 +20726,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Ghost"
DamageType: {
@@ -20556,6 +20775,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -20615,6 +20837,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
DamageType: {
@@ -20915,6 +21140,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
InterruptCast: true
CastTime: 4000
@@ -20945,6 +21173,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
DamageType: {
@@ -20984,6 +21215,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
InterruptCast: true
@@ -21027,6 +21261,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
NumberOfHits: -20
InterruptCast: true
@@ -21096,6 +21333,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
SplashRange: 3
InterruptCast: true
@@ -21155,6 +21395,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: {
@@ -21650,6 +21893,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -21774,6 +22020,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
InterruptCast: true
@@ -21886,6 +22135,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
DamageType: {
@@ -22297,6 +22547,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Fire"
@@ -22337,6 +22588,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
Element: "Ele_Water"
@@ -23554,6 +23806,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -23723,6 +23978,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -3
@@ -24553,6 +24811,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
CastTime: 1000
@@ -24695,6 +24956,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
SkillData1: {
Lv1: 5500
@@ -24824,6 +25088,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
Element: {
Lv1: "Ele_Neutral"
Lv2: "Ele_Holy"
@@ -24863,6 +25130,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -25036,6 +25306,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25193,6 +25466,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Earth"
DamageType: {
@@ -25386,6 +25662,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
NumberOfHits: -2
@@ -25415,6 +25694,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25449,6 +25731,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25546,6 +25831,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25641,6 +25929,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -25828,6 +26119,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
KnockBackTiles: {
@@ -25869,6 +26163,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -26010,6 +26307,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
NumberOfHits: -7
InterruptCast: true
@@ -26076,6 +26376,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
SkillData1: {
@@ -26654,6 +26957,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Weapon"
NumberOfHits: {
@@ -26722,6 +27028,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
Element: "Ele_Weapon"
DamageType: {
@@ -26828,6 +27135,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
}
@@ -27912,6 +28222,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Fire"
InterruptCast: true
@@ -27964,6 +28277,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
InterruptCast: true
@@ -28058,6 +28374,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Earth"
NumberOfHits: -3
@@ -28147,6 +28466,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Water"
NumberOfHits: -5
@@ -28236,6 +28558,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Poison"
DamageType: {
@@ -28305,6 +28630,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
InterruptCast: true
CastTime: {
@@ -28391,6 +28719,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Poison"
InterruptCast: true
@@ -28682,6 +29013,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Magic"
Element: "Ele_Wind"
DamageType: {
@@ -29554,6 +29888,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
AttackType: "Misc"
InterruptCast: true
@@ -29612,6 +29947,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Misc"
DamageType: {
NoDamage: true
@@ -29661,6 +29999,9 @@ skill_db: (
SkillType: {
Enemy: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -29723,6 +30064,9 @@ skill_db: (
SkillType: {
Friend: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
DamageType: {
NoDamage: true
@@ -29782,6 +30126,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
DamageType: {
NoDamage: true
SplashArea: true
@@ -30069,6 +30416,7 @@ skill_db: (
}
SkillInfo: {
Trap: true
+ AllowReproduce: true
}
DamageType: {
NoDamage: true
@@ -30419,6 +30767,9 @@ skill_db: (
SkillType: {
Self: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
@@ -30488,6 +30839,9 @@ skill_db: (
SkillType: {
Place: true
}
+ SkillInfo: {
+ AllowReproduce: true
+ }
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
diff --git a/db/sc_config.txt b/db/sc_config.txt
index 797a2578b..2648f7bae 100644
--- a/db/sc_config.txt
+++ b/db/sc_config.txt
@@ -496,6 +496,9 @@ SC_BLOSSOM_FLUTTERING, 463
SC_SPRITEMABLE, 205
SC_BITESCAR, 4
+// Clan System
+SC_CLAN_INFO, 463
+
// Cant Clear
SC_ALL_RIDING, 397
diff --git a/db/skill_reproduce_db.txt b/db/skill_reproduce_db.txt
deleted file mode 100644
index eca500da2..000000000
--- a/db/skill_reproduce_db.txt
+++ /dev/null
@@ -1,204 +0,0 @@
-// Reproduce Copy Skills List
-//
-// ##TODO## screw this file and make it a new skill_info2 flag
-//
-// Structure of Database:
-// SkillID
-//=================================
-
-//Swordsman
-5 //Bash
-7 //Magnum Break
-
-//Mage
-11 // Napalm Beat
-13 // Soul Strike
-14 // Cold Bolt
-15 // Frost Diver
-17 // Fire Ball
-18 // Fire Wall
-19 // Fire Bolt
-20 // Lightning Bolt
-21 // Thunderstorm
-
-//Acolyte
-24 // Ruwach
-28 // Heal
-
-//Merchant
-42 // Mammonite
-
-//Archer
-46 // Double Strafe
-47 // Arrow Shower
-
-//Thief
-52 // Envenom
-
-// Resurrection
-54 // Resurrection
-
-// Knight
-62 // Bowling Bash
-
-// Priest
-68 // Asperio
-69 // B.S Sacramenti
-70 // Sanctuary
-77 // Turn Undead
-79 // Magnus Exorcismus
-
-// Wizard
-80 // Fire Pillar
-81 // Sightrasher
-83 // Meteor Storm
-84 // Jupitel Thunder
-85 // Lord of Vermillion
-86 // Water Ball
-88 // Frost Nova
-89 // Storm Gust
-90 // Earth Spike
-91 // Heaven's Drive
-
-// Hunter
-116 // Land Mine
-121 // Freezing Trap
-122 // Blast Mine
-123 // Claymore Trap
-
-// Assassin
-141 // Venom Splasher
-
-// 1st Job Quest Skills
-148 // Arrow Repel
-152 // Stone Fling
-156 // Holy Light
-
-// Rogue
-212 // Backstab
-
-// Alchemist
-229 // Bomb
-230 // Acid Terror
-
-// Crusader
-250 // Smite
-251 // Shield Boomerang
-253 // Holy Cross
-254 // Grand Cross
-
-// Monk
-263 // Raging Trifecta Blow
-266 // Occult Impaction
-267 // Throw Spirit Sphere
-271 // Guillotine Fist
-272 // Raging Quadruple Blow
-
-// Item Skill
-337 // Tomahawk Throwing
-
-// TaeKwon Kid
-421 // Flying Kick
-
-// Ninja
-526 // Throw Coins
-527 // Flip Tatami
-528 // Haze Slasher
-529 // Shadow Slash
-531 // Blaze Shield
-534 // Flaming Petals
-536 // Exploding Dragon
-537 // Freezing Spear
-539 // Snow Flake Draft
-540 // Wind Blade
-541 // Lightning Jolt
-542 // First Wind
-
-// 2nd Job Quest Skills
-1001 // Charge Attack
-1004 // Venom Knife
-1006 // Sight Blaster
-1009 // Phantasmic Arrow
-1015 // Excruciating Palm
-
-// Rune Knight
-2002 // Sonic Wave
-2005 // Ignition Break
-2006 // Wind Cutter
-
-// Guillotine Cross
-2022 // Cross Impact
-2023 // Dark Illusion
-2034 // Phantom Menace
-
-// Arch Bishop
-2038 // Judex
-2040 // Adoramus
-2051 // Highness Heal
-2054 // Duple Light
-
-// Warlock
-2202 // Soul Expansion
-2203 // Frosty Misty
-2204 // Jack Frost
-2210 // Drain Life
-2211 // Crimson Rock
-2212 // Hell Inferno
-2213 // Comet
-2214 // Chain Lightning
-2216 // Earth Strain
-
-// Ranger
-2233 // Arrow Storm
-2236 // Aimed Bolt
-2239 // Cluster Bomb
-2253 // Icebound Trap
-2254 // Firing Trap
-
-// Shadow Chaser
-2284 // Fatal Menace
-2288 // Triangle Shot
-2304 // Feint Bomb
-
-// Royal Guard
-2310 // Shield Press
-2315 // Shield Spell
-2316 // Exceed Break
-2320 // Moon Slasher
-2323 // Earth Drive
-
-// Sura
-2326 // Dragon Combo
-2327 // Sky Net Blow
-2328 // Earth Shaker
-2330 // Tiger Cannon
-2332 // Rampage Blaster
-2336 // Knuckle Arrow
-2337 // Windmill
-2343 // Gate of Hell
-2344 // Gentle Touch - Quiet
-2517 // Howling of Lion
-2518 // Riding Lightning
-
-// Minstrel/Wanderer
-2413 // Metallic Sound
-2414 // Reverberation
-2418 // Severe Rainstorm
-
-// Sorcerer
-2443 // Fire Walk
-2444 // Electric Walk
-2446 // Earth Grave
-2447 // Diamond Dust
-2448 // Poison Buster
-2449 // Psychic Wave
-2450 // Cloud Kill
-2454 // Varetyr Spear
-
-// Genetic
-2479 // Thorn Trap
-2480 // Blood Sucker
-2481 // Spore Explosion
-2482 // Wall of Thorns
-2483 // Crazy Weed
-2490 // Hell's Plant
diff --git a/doc/atcommands.txt b/doc/atcommands.txt
index fdafb6c90..18d3de4e4 100644
--- a/doc/atcommands.txt
+++ b/doc/atcommands.txt
@@ -1455,3 +1455,40 @@ Sets the intimacy level of your homunculus, with 1000 being "Loyal".
Sets the hunger level of your homunculus, with 100 being "Stuffed".
---------------------------------------
+
+@cvcon
+
+Set the mapflag cvc on the map (Turn on Clans vs Clans mode)
+
+---------------------------------------
+
+@cvcoff
+
+Unset the mapflag cvc on the map (Turn off Clans vs Clans mode)
+
+---------------------------------------
+
+@claninfo
+
+Lists all informations of all clans
+
+---------------------------------------
+
+@joinclan <ClanID>
+
+Joins the Clan with the given ID if it exists.
+
+---------------------------------------
+
+@leaveclan
+
+Leaves the Clan if any.
+
+---------------------------------------
+
+@reloadclans
+
+Reloads the 'conf/clans.conf' file.
+Obs: it will reload 'db/clans.conf' too since it's included inside 'conf/clans.conf'
+
+---------------------------------------
diff --git a/doc/item_db.txt b/doc/item_db.txt
index 913ab80e0..16eca2e23 100644
--- a/doc/item_db.txt
+++ b/doc/item_db.txt
@@ -73,6 +73,8 @@ item_db: (
Delay: Delay to use item (int, defaults to 0)
KeepAfterUse: true/false (boolean, defaults to false)
DropAnnounce: true/false (boolean, defaults to false)
+ ShowDropEffect: true/false (boolean, defaults to false)
+ DropEffectMode: Effect Type (int, default to 0)
Trade: { (defaults to no restrictions)
override: GroupID (int, defaults to 100)
nodrop: true/false (boolean, defaults to false)
@@ -368,3 +370,12 @@ OnUnequipScript: Script to execute when the item is unequipped.
Inherit: This can be used only in item_db2.conf, and if set to true, and the
item already exists in item_db.conf, all the missing fields will be
inherited from there rather than using their default values.
+
+ShowDropEffect: Allow showing an effect when the item dropped by a monster. [ZERO client only]
+DropEffectMode: Set attribute for ShowDropEffect. [ZERO client only]
+ 0 - Client Based (itemInfo EffectID)
+ 1 - White effect
+ 2 - Blue effect
+ 3 - Yellow effect
+ 4 - Purple effect
+ 5 - Orange effect
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 465804061..e14e80444 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -2381,6 +2381,7 @@ the invoking character. Whatever it returns is determined by type.
(1) PC_PARTY - The name of the party they're in if any.
(2) PC_GUILD - The name of the guild they're in if any.
(3) PC_MAP - The name of the map the character is in.
+(4) PC_CLAN - The name of the clan they're in if any.
If <GID> is passed, it will return the value of the specified player instead
the attached player. If the player is not found, it will return
@@ -2522,6 +2523,7 @@ Type is the kind of associated ID number required:
(2) CHAR_ID_GUILD - Guild ID number.
(3) CHAR_ID_ACCOUNT - Account ID number.
(4) CHAR_ID_BG - Battle ground ID
+(5) CHAR_ID_CLAN - Clan ID number.
For most purposes other than printing it, a number is better to have than
a name (people do horrifying things to their character names).
@@ -6915,6 +6917,7 @@ Examples:
---------------------------------------
*progressbar("<color>", <seconds>)
+*progressbar_unit("<color>", <seconds>{, <GID>})
This command works almost like sleep2(), but displays a progress bar above
the head of the currently attached character (like cast bar). Once the
@@ -6923,6 +6926,11 @@ while the progress bar progresses, it is aborted and the script ends. The
color format is in RGB (0xRRGGBB). The color is currently ignored by the
client and appears always green.
+progressbar_unit works only for PACKETVER >= 20130821
+The progressbar will show on the given unit id but it will not
+put the unit in timeout (the progressbar would be just an animation).
+if GID is not given use the attached player.
+
---------------------------------------
//=====================================
5.1 - End of Time-related commands
@@ -9946,3 +9954,37 @@ Changes the name of a unit.
Supported Types - [ MOB | HOM | PET ].
returns 1 on success, 0 on failure.
+
+---------------------------------------
+//=====================================
+13 - Clan System Related Commands
+//=====================================
+---------------------------------------
+
+*join_clan(<ClanID>{,<RID>})
+
+Joins a player into the given clan.
+If no RID is given, will run with the current attached player.
+
+returns true on success, false on failure.
+
+---------------------------------------
+
+*clan_leave({<RID>})
+
+Removes a player from its clan.
+If no RID is given, will run with the current attached player.
+
+returns true on success, false on failure.
+
+---------------------------------------
+
+*clan_master(<ClanID>)
+
+Enables the Emblem of the given Clan to the current NPC
+
+---------------------------------------
+//=====================================
+13 - End of Clan System Related Commands
+//=====================================
+--------------------------------------- \ No newline at end of file
diff --git a/maps/pre-re/06guild_01.mcache b/maps/pre-re/06guild_01.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_01.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_02.mcache b/maps/pre-re/06guild_02.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_02.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_03.mcache b/maps/pre-re/06guild_03.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_03.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_04.mcache b/maps/pre-re/06guild_04.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_04.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_05.mcache b/maps/pre-re/06guild_05.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_05.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_06.mcache b/maps/pre-re/06guild_06.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_06.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_07.mcache b/maps/pre-re/06guild_07.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_07.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_08.mcache b/maps/pre-re/06guild_08.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/06guild_08.mcache
Binary files differ
diff --git a/maps/pre-re/06guild_r.mcache b/maps/pre-re/06guild_r.mcache
new file mode 100644
index 000000000..54574500a
--- /dev/null
+++ b/maps/pre-re/06guild_r.mcache
Binary files differ
diff --git a/maps/pre-re/1@cash.mcache b/maps/pre-re/1@cash.mcache
new file mode 100644
index 000000000..fd960e8af
--- /dev/null
+++ b/maps/pre-re/1@cash.mcache
Binary files differ
diff --git a/maps/pre-re/1@cata.mcache b/maps/pre-re/1@cata.mcache
new file mode 100644
index 000000000..2ad1d4f08
--- /dev/null
+++ b/maps/pre-re/1@cata.mcache
Binary files differ
diff --git a/maps/pre-re/1@def01.mcache b/maps/pre-re/1@def01.mcache
new file mode 100644
index 000000000..278ab038a
--- /dev/null
+++ b/maps/pre-re/1@def01.mcache
Binary files differ
diff --git a/maps/pre-re/1@def02.mcache b/maps/pre-re/1@def02.mcache
new file mode 100644
index 000000000..9799bf83d
--- /dev/null
+++ b/maps/pre-re/1@def02.mcache
Binary files differ
diff --git a/maps/pre-re/1@def03.mcache b/maps/pre-re/1@def03.mcache
new file mode 100644
index 000000000..071cd7b79
--- /dev/null
+++ b/maps/pre-re/1@def03.mcache
Binary files differ
diff --git a/maps/pre-re/1@dth1.mcache b/maps/pre-re/1@dth1.mcache
new file mode 100644
index 000000000..2ab136d97
--- /dev/null
+++ b/maps/pre-re/1@dth1.mcache
Binary files differ
diff --git a/maps/pre-re/1@dth2.mcache b/maps/pre-re/1@dth2.mcache
new file mode 100644
index 000000000..2ab136d97
--- /dev/null
+++ b/maps/pre-re/1@dth2.mcache
Binary files differ
diff --git a/maps/pre-re/1@dth3.mcache b/maps/pre-re/1@dth3.mcache
new file mode 100644
index 000000000..621173b3d
--- /dev/null
+++ b/maps/pre-re/1@dth3.mcache
Binary files differ
diff --git a/maps/pre-re/1@ecl.mcache b/maps/pre-re/1@ecl.mcache
new file mode 100644
index 000000000..30a68ef95
--- /dev/null
+++ b/maps/pre-re/1@ecl.mcache
Binary files differ
diff --git a/maps/pre-re/1@eom.mcache b/maps/pre-re/1@eom.mcache
new file mode 100644
index 000000000..b648f56ea
--- /dev/null
+++ b/maps/pre-re/1@eom.mcache
Binary files differ
diff --git a/maps/pre-re/1@face.mcache b/maps/pre-re/1@face.mcache
new file mode 100644
index 000000000..d7a8cf9ed
--- /dev/null
+++ b/maps/pre-re/1@face.mcache
Binary files differ
diff --git a/maps/pre-re/1@ge_st.mcache b/maps/pre-re/1@ge_st.mcache
new file mode 100644
index 000000000..f2865ebbb
--- /dev/null
+++ b/maps/pre-re/1@ge_st.mcache
Binary files differ
diff --git a/maps/pre-re/1@gef.mcache b/maps/pre-re/1@gef.mcache
new file mode 100644
index 000000000..72d8d30f3
--- /dev/null
+++ b/maps/pre-re/1@gef.mcache
Binary files differ
diff --git a/maps/pre-re/1@gef_in.mcache b/maps/pre-re/1@gef_in.mcache
new file mode 100644
index 000000000..349794fc8
--- /dev/null
+++ b/maps/pre-re/1@gef_in.mcache
Binary files differ
diff --git a/maps/pre-re/1@gl_k.mcache b/maps/pre-re/1@gl_k.mcache
new file mode 100644
index 000000000..c2f7c08b3
--- /dev/null
+++ b/maps/pre-re/1@gl_k.mcache
Binary files differ
diff --git a/maps/pre-re/1@jtb.mcache b/maps/pre-re/1@jtb.mcache
new file mode 100644
index 000000000..b1b3b5724
--- /dev/null
+++ b/maps/pre-re/1@jtb.mcache
Binary files differ
diff --git a/maps/pre-re/1@lhz.mcache b/maps/pre-re/1@lhz.mcache
new file mode 100644
index 000000000..e8d151283
--- /dev/null
+++ b/maps/pre-re/1@lhz.mcache
Binary files differ
diff --git a/maps/pre-re/1@ma_b.mcache b/maps/pre-re/1@ma_b.mcache
new file mode 100644
index 000000000..5d552d807
--- /dev/null
+++ b/maps/pre-re/1@ma_b.mcache
Binary files differ
diff --git a/maps/pre-re/1@ma_c.mcache b/maps/pre-re/1@ma_c.mcache
new file mode 100644
index 000000000..bd08e2297
--- /dev/null
+++ b/maps/pre-re/1@ma_c.mcache
Binary files differ
diff --git a/maps/pre-re/1@ma_h.mcache b/maps/pre-re/1@ma_h.mcache
new file mode 100644
index 000000000..c978d34ad
--- /dev/null
+++ b/maps/pre-re/1@ma_h.mcache
Binary files differ
diff --git a/maps/pre-re/1@mist.mcache b/maps/pre-re/1@mist.mcache
new file mode 100644
index 000000000..d037c1a95
--- /dev/null
+++ b/maps/pre-re/1@mist.mcache
Binary files differ
diff --git a/maps/pre-re/1@nyd.mcache b/maps/pre-re/1@nyd.mcache
new file mode 100644
index 000000000..4523d504a
--- /dev/null
+++ b/maps/pre-re/1@nyd.mcache
Binary files differ
diff --git a/maps/pre-re/1@orcs.mcache b/maps/pre-re/1@orcs.mcache
new file mode 100644
index 000000000..d1373af5a
--- /dev/null
+++ b/maps/pre-re/1@orcs.mcache
Binary files differ
diff --git a/maps/pre-re/1@pump.mcache b/maps/pre-re/1@pump.mcache
new file mode 100644
index 000000000..a050515e4
--- /dev/null
+++ b/maps/pre-re/1@pump.mcache
Binary files differ
diff --git a/maps/pre-re/1@rev.mcache b/maps/pre-re/1@rev.mcache
new file mode 100644
index 000000000..6ef1bc791
--- /dev/null
+++ b/maps/pre-re/1@rev.mcache
Binary files differ
diff --git a/maps/pre-re/1@sara.mcache b/maps/pre-re/1@sara.mcache
new file mode 100644
index 000000000..1e0b29606
--- /dev/null
+++ b/maps/pre-re/1@sara.mcache
Binary files differ
diff --git a/maps/pre-re/1@spa.mcache b/maps/pre-re/1@spa.mcache
new file mode 100644
index 000000000..aa8a6451b
--- /dev/null
+++ b/maps/pre-re/1@spa.mcache
Binary files differ
diff --git a/maps/pre-re/1@tnm1.mcache b/maps/pre-re/1@tnm1.mcache
new file mode 100644
index 000000000..57e0465ce
--- /dev/null
+++ b/maps/pre-re/1@tnm1.mcache
Binary files differ
diff --git a/maps/pre-re/1@tnm2.mcache b/maps/pre-re/1@tnm2.mcache
new file mode 100644
index 000000000..50f3e2b17
--- /dev/null
+++ b/maps/pre-re/1@tnm2.mcache
Binary files differ
diff --git a/maps/pre-re/1@tnm3.mcache b/maps/pre-re/1@tnm3.mcache
new file mode 100644
index 000000000..42d8c59f2
--- /dev/null
+++ b/maps/pre-re/1@tnm3.mcache
Binary files differ
diff --git a/maps/pre-re/1@tower.mcache b/maps/pre-re/1@tower.mcache
new file mode 100644
index 000000000..2bf1085f7
--- /dev/null
+++ b/maps/pre-re/1@tower.mcache
Binary files differ
diff --git a/maps/pre-re/1@xm_d.mcache b/maps/pre-re/1@xm_d.mcache
new file mode 100644
index 000000000..560b08599
--- /dev/null
+++ b/maps/pre-re/1@xm_d.mcache
Binary files differ
diff --git a/maps/pre-re/2@cata.mcache b/maps/pre-re/2@cata.mcache
new file mode 100644
index 000000000..ff97088f7
--- /dev/null
+++ b/maps/pre-re/2@cata.mcache
Binary files differ
diff --git a/maps/pre-re/2@gl_k.mcache b/maps/pre-re/2@gl_k.mcache
new file mode 100644
index 000000000..e6cc3b364
--- /dev/null
+++ b/maps/pre-re/2@gl_k.mcache
Binary files differ
diff --git a/maps/pre-re/2@nyd.mcache b/maps/pre-re/2@nyd.mcache
new file mode 100644
index 000000000..bb1f06914
--- /dev/null
+++ b/maps/pre-re/2@nyd.mcache
Binary files differ
diff --git a/maps/pre-re/2@orcs.mcache b/maps/pre-re/2@orcs.mcache
new file mode 100644
index 000000000..042edc377
--- /dev/null
+++ b/maps/pre-re/2@orcs.mcache
Binary files differ
diff --git a/maps/pre-re/2@pump.mcache b/maps/pre-re/2@pump.mcache
new file mode 100644
index 000000000..165ab802a
--- /dev/null
+++ b/maps/pre-re/2@pump.mcache
Binary files differ
diff --git a/maps/pre-re/2@tower.mcache b/maps/pre-re/2@tower.mcache
new file mode 100644
index 000000000..2bf1085f7
--- /dev/null
+++ b/maps/pre-re/2@tower.mcache
Binary files differ
diff --git a/maps/pre-re/3@tower.mcache b/maps/pre-re/3@tower.mcache
new file mode 100644
index 000000000..2bf1085f7
--- /dev/null
+++ b/maps/pre-re/3@tower.mcache
Binary files differ
diff --git a/maps/pre-re/4@tower.mcache b/maps/pre-re/4@tower.mcache
new file mode 100644
index 000000000..0c0bb0f43
--- /dev/null
+++ b/maps/pre-re/4@tower.mcache
Binary files differ
diff --git a/maps/pre-re/5@tower.mcache b/maps/pre-re/5@tower.mcache
new file mode 100644
index 000000000..08f66c2f1
--- /dev/null
+++ b/maps/pre-re/5@tower.mcache
Binary files differ
diff --git a/maps/pre-re/6@tower.mcache b/maps/pre-re/6@tower.mcache
new file mode 100644
index 000000000..2cc37a9ae
--- /dev/null
+++ b/maps/pre-re/6@tower.mcache
Binary files differ
diff --git a/maps/pre-re/abbey01.mcache b/maps/pre-re/abbey01.mcache
new file mode 100644
index 000000000..6a7389595
--- /dev/null
+++ b/maps/pre-re/abbey01.mcache
Binary files differ
diff --git a/maps/pre-re/abbey02.mcache b/maps/pre-re/abbey02.mcache
new file mode 100644
index 000000000..2d14e1814
--- /dev/null
+++ b/maps/pre-re/abbey02.mcache
Binary files differ
diff --git a/maps/pre-re/abbey03.mcache b/maps/pre-re/abbey03.mcache
new file mode 100644
index 000000000..b83d92cc3
--- /dev/null
+++ b/maps/pre-re/abbey03.mcache
Binary files differ
diff --git a/maps/pre-re/abyss_01.mcache b/maps/pre-re/abyss_01.mcache
new file mode 100644
index 000000000..6cec213a6
--- /dev/null
+++ b/maps/pre-re/abyss_01.mcache
Binary files differ
diff --git a/maps/pre-re/abyss_02.mcache b/maps/pre-re/abyss_02.mcache
new file mode 100644
index 000000000..9a7363b52
--- /dev/null
+++ b/maps/pre-re/abyss_02.mcache
Binary files differ
diff --git a/maps/pre-re/abyss_03.mcache b/maps/pre-re/abyss_03.mcache
new file mode 100644
index 000000000..758f87925
--- /dev/null
+++ b/maps/pre-re/abyss_03.mcache
Binary files differ
diff --git a/maps/pre-re/airplane.mcache b/maps/pre-re/airplane.mcache
new file mode 100644
index 000000000..9c0c2edce
--- /dev/null
+++ b/maps/pre-re/airplane.mcache
Binary files differ
diff --git a/maps/pre-re/airplane_01.mcache b/maps/pre-re/airplane_01.mcache
new file mode 100644
index 000000000..9c0c2edce
--- /dev/null
+++ b/maps/pre-re/airplane_01.mcache
Binary files differ
diff --git a/maps/pre-re/airport.mcache b/maps/pre-re/airport.mcache
new file mode 100644
index 000000000..ff75f0fd4
--- /dev/null
+++ b/maps/pre-re/airport.mcache
Binary files differ
diff --git a/maps/pre-re/alb2trea.mcache b/maps/pre-re/alb2trea.mcache
new file mode 100644
index 000000000..8a25c776d
--- /dev/null
+++ b/maps/pre-re/alb2trea.mcache
Binary files differ
diff --git a/maps/pre-re/alb_ship.mcache b/maps/pre-re/alb_ship.mcache
new file mode 100644
index 000000000..1e2626d07
--- /dev/null
+++ b/maps/pre-re/alb_ship.mcache
Binary files differ
diff --git a/maps/pre-re/alberta.mcache b/maps/pre-re/alberta.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/alberta.mcache
Binary files differ
diff --git a/maps/pre-re/alberta_in.mcache b/maps/pre-re/alberta_in.mcache
new file mode 100644
index 000000000..88bca9805
--- /dev/null
+++ b/maps/pre-re/alberta_in.mcache
Binary files differ
diff --git a/maps/pre-re/alde_alche.mcache b/maps/pre-re/alde_alche.mcache
new file mode 100644
index 000000000..9460e8f93
--- /dev/null
+++ b/maps/pre-re/alde_alche.mcache
Binary files differ
diff --git a/maps/pre-re/alde_dun01.mcache b/maps/pre-re/alde_dun01.mcache
new file mode 100644
index 000000000..e099e48c6
--- /dev/null
+++ b/maps/pre-re/alde_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/alde_dun02.mcache b/maps/pre-re/alde_dun02.mcache
new file mode 100644
index 000000000..957bb04e4
--- /dev/null
+++ b/maps/pre-re/alde_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/alde_dun03.mcache b/maps/pre-re/alde_dun03.mcache
new file mode 100644
index 000000000..46bcfea4f
--- /dev/null
+++ b/maps/pre-re/alde_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/alde_dun04.mcache b/maps/pre-re/alde_dun04.mcache
new file mode 100644
index 000000000..4afa9c862
--- /dev/null
+++ b/maps/pre-re/alde_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/alde_gld.mcache b/maps/pre-re/alde_gld.mcache
new file mode 100644
index 000000000..0b4cd694f
--- /dev/null
+++ b/maps/pre-re/alde_gld.mcache
Binary files differ
diff --git a/maps/pre-re/alde_tt02.mcache b/maps/pre-re/alde_tt02.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/alde_tt02.mcache
Binary files differ
diff --git a/maps/pre-re/alde_tt03.mcache b/maps/pre-re/alde_tt03.mcache
new file mode 100644
index 000000000..6921d05bd
--- /dev/null
+++ b/maps/pre-re/alde_tt03.mcache
Binary files differ
diff --git a/maps/pre-re/aldeba_in.mcache b/maps/pre-re/aldeba_in.mcache
new file mode 100644
index 000000000..dd96c3b76
--- /dev/null
+++ b/maps/pre-re/aldeba_in.mcache
Binary files differ
diff --git a/maps/pre-re/aldebaran.mcache b/maps/pre-re/aldebaran.mcache
new file mode 100644
index 000000000..b1415bec1
--- /dev/null
+++ b/maps/pre-re/aldebaran.mcache
Binary files differ
diff --git a/maps/pre-re/aldeg_cas01.mcache b/maps/pre-re/aldeg_cas01.mcache
new file mode 100644
index 000000000..4d96f61e3
--- /dev/null
+++ b/maps/pre-re/aldeg_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/aldeg_cas02.mcache b/maps/pre-re/aldeg_cas02.mcache
new file mode 100644
index 000000000..493e494b9
--- /dev/null
+++ b/maps/pre-re/aldeg_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/aldeg_cas03.mcache b/maps/pre-re/aldeg_cas03.mcache
new file mode 100644
index 000000000..82d4719bc
--- /dev/null
+++ b/maps/pre-re/aldeg_cas03.mcache
Binary files differ
diff --git a/maps/pre-re/aldeg_cas04.mcache b/maps/pre-re/aldeg_cas04.mcache
new file mode 100644
index 000000000..324040d79
--- /dev/null
+++ b/maps/pre-re/aldeg_cas04.mcache
Binary files differ
diff --git a/maps/pre-re/aldeg_cas05.mcache b/maps/pre-re/aldeg_cas05.mcache
new file mode 100644
index 000000000..8094ea0d1
--- /dev/null
+++ b/maps/pre-re/aldeg_cas05.mcache
Binary files differ
diff --git a/maps/pre-re/ama_dun01.mcache b/maps/pre-re/ama_dun01.mcache
new file mode 100644
index 000000000..0cd2b4e38
--- /dev/null
+++ b/maps/pre-re/ama_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/ama_dun02.mcache b/maps/pre-re/ama_dun02.mcache
new file mode 100644
index 000000000..dd17db0ad
--- /dev/null
+++ b/maps/pre-re/ama_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/ama_dun03.mcache b/maps/pre-re/ama_dun03.mcache
new file mode 100644
index 000000000..2ad974112
--- /dev/null
+++ b/maps/pre-re/ama_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/ama_fild01.mcache b/maps/pre-re/ama_fild01.mcache
new file mode 100644
index 000000000..a8335d906
--- /dev/null
+++ b/maps/pre-re/ama_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ama_in01.mcache b/maps/pre-re/ama_in01.mcache
new file mode 100644
index 000000000..ec9ce6316
--- /dev/null
+++ b/maps/pre-re/ama_in01.mcache
Binary files differ
diff --git a/maps/pre-re/ama_in02.mcache b/maps/pre-re/ama_in02.mcache
new file mode 100644
index 000000000..0ba4aae60
--- /dev/null
+++ b/maps/pre-re/ama_in02.mcache
Binary files differ
diff --git a/maps/pre-re/ama_test.mcache b/maps/pre-re/ama_test.mcache
new file mode 100644
index 000000000..ae8389469
--- /dev/null
+++ b/maps/pre-re/ama_test.mcache
Binary files differ
diff --git a/maps/pre-re/amatsu.mcache b/maps/pre-re/amatsu.mcache
new file mode 100644
index 000000000..68fd1de44
--- /dev/null
+++ b/maps/pre-re/amatsu.mcache
Binary files differ
diff --git a/maps/pre-re/anthell01.mcache b/maps/pre-re/anthell01.mcache
new file mode 100644
index 000000000..f0008f8be
--- /dev/null
+++ b/maps/pre-re/anthell01.mcache
Binary files differ
diff --git a/maps/pre-re/anthell02.mcache b/maps/pre-re/anthell02.mcache
new file mode 100644
index 000000000..cebc93ec8
--- /dev/null
+++ b/maps/pre-re/anthell02.mcache
Binary files differ
diff --git a/maps/pre-re/arena_room.mcache b/maps/pre-re/arena_room.mcache
new file mode 100644
index 000000000..123aeeee1
--- /dev/null
+++ b/maps/pre-re/arena_room.mcache
Binary files differ
diff --git a/maps/pre-re/aru_gld.mcache b/maps/pre-re/aru_gld.mcache
new file mode 100644
index 000000000..e8c779747
--- /dev/null
+++ b/maps/pre-re/aru_gld.mcache
Binary files differ
diff --git a/maps/pre-re/arug_cas01.mcache b/maps/pre-re/arug_cas01.mcache
new file mode 100644
index 000000000..fff355c8c
--- /dev/null
+++ b/maps/pre-re/arug_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/arug_cas02.mcache b/maps/pre-re/arug_cas02.mcache
new file mode 100644
index 000000000..25464c5d6
--- /dev/null
+++ b/maps/pre-re/arug_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/arug_cas03.mcache b/maps/pre-re/arug_cas03.mcache
new file mode 100644
index 000000000..c15ce7baa
--- /dev/null
+++ b/maps/pre-re/arug_cas03.mcache
Binary files differ
diff --git a/maps/pre-re/arug_cas04.mcache b/maps/pre-re/arug_cas04.mcache
new file mode 100644
index 000000000..c15ce7baa
--- /dev/null
+++ b/maps/pre-re/arug_cas04.mcache
Binary files differ
diff --git a/maps/pre-re/arug_cas05.mcache b/maps/pre-re/arug_cas05.mcache
new file mode 100644
index 000000000..c15ce7baa
--- /dev/null
+++ b/maps/pre-re/arug_cas05.mcache
Binary files differ
diff --git a/maps/pre-re/arug_dun01.mcache b/maps/pre-re/arug_dun01.mcache
new file mode 100644
index 000000000..26d3ed34a
--- /dev/null
+++ b/maps/pre-re/arug_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/arug_que01.mcache b/maps/pre-re/arug_que01.mcache
new file mode 100644
index 000000000..560d36240
--- /dev/null
+++ b/maps/pre-re/arug_que01.mcache
Binary files differ
diff --git a/maps/pre-re/auction_01.mcache b/maps/pre-re/auction_01.mcache
new file mode 100644
index 000000000..93879880f
--- /dev/null
+++ b/maps/pre-re/auction_01.mcache
Binary files differ
diff --git a/maps/pre-re/auction_02.mcache b/maps/pre-re/auction_02.mcache
new file mode 100644
index 000000000..82823e9ce
--- /dev/null
+++ b/maps/pre-re/auction_02.mcache
Binary files differ
diff --git a/maps/pre-re/ayo_dun01.mcache b/maps/pre-re/ayo_dun01.mcache
new file mode 100644
index 000000000..11b96a511
--- /dev/null
+++ b/maps/pre-re/ayo_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/ayo_dun02.mcache b/maps/pre-re/ayo_dun02.mcache
new file mode 100644
index 000000000..331546eb4
--- /dev/null
+++ b/maps/pre-re/ayo_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/ayo_fild01.mcache b/maps/pre-re/ayo_fild01.mcache
new file mode 100644
index 000000000..0dd9737f7
--- /dev/null
+++ b/maps/pre-re/ayo_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ayo_fild02.mcache b/maps/pre-re/ayo_fild02.mcache
new file mode 100644
index 000000000..b1fce355f
--- /dev/null
+++ b/maps/pre-re/ayo_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/ayo_in01.mcache b/maps/pre-re/ayo_in01.mcache
new file mode 100644
index 000000000..e5f9aaccb
--- /dev/null
+++ b/maps/pre-re/ayo_in01.mcache
Binary files differ
diff --git a/maps/pre-re/ayo_in02.mcache b/maps/pre-re/ayo_in02.mcache
new file mode 100644
index 000000000..fed8f3d2c
--- /dev/null
+++ b/maps/pre-re/ayo_in02.mcache
Binary files differ
diff --git a/maps/pre-re/ayothaya.mcache b/maps/pre-re/ayothaya.mcache
new file mode 100644
index 000000000..dee41b1b8
--- /dev/null
+++ b/maps/pre-re/ayothaya.mcache
Binary files differ
diff --git a/maps/pre-re/bat_a01.mcache b/maps/pre-re/bat_a01.mcache
new file mode 100644
index 000000000..d1d9ede7c
--- /dev/null
+++ b/maps/pre-re/bat_a01.mcache
Binary files differ
diff --git a/maps/pre-re/bat_a02.mcache b/maps/pre-re/bat_a02.mcache
new file mode 100644
index 000000000..d1d9ede7c
--- /dev/null
+++ b/maps/pre-re/bat_a02.mcache
Binary files differ
diff --git a/maps/pre-re/bat_b01.mcache b/maps/pre-re/bat_b01.mcache
new file mode 100644
index 000000000..7025d2d99
--- /dev/null
+++ b/maps/pre-re/bat_b01.mcache
Binary files differ
diff --git a/maps/pre-re/bat_b02.mcache b/maps/pre-re/bat_b02.mcache
new file mode 100644
index 000000000..7025d2d99
--- /dev/null
+++ b/maps/pre-re/bat_b02.mcache
Binary files differ
diff --git a/maps/pre-re/bat_c01.mcache b/maps/pre-re/bat_c01.mcache
new file mode 100644
index 000000000..5b3b9c44c
--- /dev/null
+++ b/maps/pre-re/bat_c01.mcache
Binary files differ
diff --git a/maps/pre-re/bat_c02.mcache b/maps/pre-re/bat_c02.mcache
new file mode 100644
index 000000000..5b3b9c44c
--- /dev/null
+++ b/maps/pre-re/bat_c02.mcache
Binary files differ
diff --git a/maps/pre-re/bat_c03.mcache b/maps/pre-re/bat_c03.mcache
new file mode 100644
index 000000000..5b3b9c44c
--- /dev/null
+++ b/maps/pre-re/bat_c03.mcache
Binary files differ
diff --git a/maps/pre-re/bat_room.mcache b/maps/pre-re/bat_room.mcache
new file mode 100644
index 000000000..03511b9ee
--- /dev/null
+++ b/maps/pre-re/bat_room.mcache
Binary files differ
diff --git a/maps/pre-re/beach_dun.mcache b/maps/pre-re/beach_dun.mcache
new file mode 100644
index 000000000..b0c3b56b6
--- /dev/null
+++ b/maps/pre-re/beach_dun.mcache
Binary files differ
diff --git a/maps/pre-re/beach_dun2.mcache b/maps/pre-re/beach_dun2.mcache
new file mode 100644
index 000000000..171a1a81f
--- /dev/null
+++ b/maps/pre-re/beach_dun2.mcache
Binary files differ
diff --git a/maps/pre-re/beach_dun3.mcache b/maps/pre-re/beach_dun3.mcache
new file mode 100644
index 000000000..c0f4de5bb
--- /dev/null
+++ b/maps/pre-re/beach_dun3.mcache
Binary files differ
diff --git a/maps/pre-re/bif_fild01.mcache b/maps/pre-re/bif_fild01.mcache
new file mode 100644
index 000000000..1c4521922
--- /dev/null
+++ b/maps/pre-re/bif_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/bif_fild02.mcache b/maps/pre-re/bif_fild02.mcache
new file mode 100644
index 000000000..c5bcccab7
--- /dev/null
+++ b/maps/pre-re/bif_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/bossnia_01.mcache b/maps/pre-re/bossnia_01.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/pre-re/bossnia_01.mcache
Binary files differ
diff --git a/maps/pre-re/bossnia_02.mcache b/maps/pre-re/bossnia_02.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/pre-re/bossnia_02.mcache
Binary files differ
diff --git a/maps/pre-re/bossnia_03.mcache b/maps/pre-re/bossnia_03.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/pre-re/bossnia_03.mcache
Binary files differ
diff --git a/maps/pre-re/bossnia_04.mcache b/maps/pre-re/bossnia_04.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/pre-re/bossnia_04.mcache
Binary files differ
diff --git a/maps/pre-re/bra_dun01.mcache b/maps/pre-re/bra_dun01.mcache
new file mode 100644
index 000000000..a361ad0d2
--- /dev/null
+++ b/maps/pre-re/bra_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/bra_dun02.mcache b/maps/pre-re/bra_dun02.mcache
new file mode 100644
index 000000000..b8cf26063
--- /dev/null
+++ b/maps/pre-re/bra_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/bra_fild01.mcache b/maps/pre-re/bra_fild01.mcache
new file mode 100644
index 000000000..a024b900f
--- /dev/null
+++ b/maps/pre-re/bra_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/bra_in01.mcache b/maps/pre-re/bra_in01.mcache
new file mode 100644
index 000000000..453447803
--- /dev/null
+++ b/maps/pre-re/bra_in01.mcache
Binary files differ
diff --git a/maps/pre-re/brasilis.mcache b/maps/pre-re/brasilis.mcache
new file mode 100644
index 000000000..3917230c5
--- /dev/null
+++ b/maps/pre-re/brasilis.mcache
Binary files differ
diff --git a/maps/pre-re/c_tower1.mcache b/maps/pre-re/c_tower1.mcache
new file mode 100644
index 000000000..369f27205
--- /dev/null
+++ b/maps/pre-re/c_tower1.mcache
Binary files differ
diff --git a/maps/pre-re/c_tower2.mcache b/maps/pre-re/c_tower2.mcache
new file mode 100644
index 000000000..123709fe0
--- /dev/null
+++ b/maps/pre-re/c_tower2.mcache
Binary files differ
diff --git a/maps/pre-re/c_tower2_.mcache b/maps/pre-re/c_tower2_.mcache
new file mode 100644
index 000000000..123709fe0
--- /dev/null
+++ b/maps/pre-re/c_tower2_.mcache
Binary files differ
diff --git a/maps/pre-re/c_tower3.mcache b/maps/pre-re/c_tower3.mcache
new file mode 100644
index 000000000..dbf535c66
--- /dev/null
+++ b/maps/pre-re/c_tower3.mcache
Binary files differ
diff --git a/maps/pre-re/c_tower3_.mcache b/maps/pre-re/c_tower3_.mcache
new file mode 100644
index 000000000..dbf535c66
--- /dev/null
+++ b/maps/pre-re/c_tower3_.mcache
Binary files differ
diff --git a/maps/pre-re/c_tower4.mcache b/maps/pre-re/c_tower4.mcache
new file mode 100644
index 000000000..f9d79d599
--- /dev/null
+++ b/maps/pre-re/c_tower4.mcache
Binary files differ
diff --git a/maps/pre-re/cave.mcache b/maps/pre-re/cave.mcache
new file mode 100644
index 000000000..06f55656e
--- /dev/null
+++ b/maps/pre-re/cave.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild01.mcache b/maps/pre-re/cmd_fild01.mcache
new file mode 100644
index 000000000..b26e68c79
--- /dev/null
+++ b/maps/pre-re/cmd_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild02.mcache b/maps/pre-re/cmd_fild02.mcache
new file mode 100644
index 000000000..b543dd2c1
--- /dev/null
+++ b/maps/pre-re/cmd_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild03.mcache b/maps/pre-re/cmd_fild03.mcache
new file mode 100644
index 000000000..70bc98c73
--- /dev/null
+++ b/maps/pre-re/cmd_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild04.mcache b/maps/pre-re/cmd_fild04.mcache
new file mode 100644
index 000000000..840e58dd5
--- /dev/null
+++ b/maps/pre-re/cmd_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild05.mcache b/maps/pre-re/cmd_fild05.mcache
new file mode 100644
index 000000000..4b24e60d9
--- /dev/null
+++ b/maps/pre-re/cmd_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild06.mcache b/maps/pre-re/cmd_fild06.mcache
new file mode 100644
index 000000000..9dc5b931f
--- /dev/null
+++ b/maps/pre-re/cmd_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild07.mcache b/maps/pre-re/cmd_fild07.mcache
new file mode 100644
index 000000000..71388d661
--- /dev/null
+++ b/maps/pre-re/cmd_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild08.mcache b/maps/pre-re/cmd_fild08.mcache
new file mode 100644
index 000000000..fe6925920
--- /dev/null
+++ b/maps/pre-re/cmd_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_fild09.mcache b/maps/pre-re/cmd_fild09.mcache
new file mode 100644
index 000000000..0408c3239
--- /dev/null
+++ b/maps/pre-re/cmd_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_in01.mcache b/maps/pre-re/cmd_in01.mcache
new file mode 100644
index 000000000..737ed0471
--- /dev/null
+++ b/maps/pre-re/cmd_in01.mcache
Binary files differ
diff --git a/maps/pre-re/cmd_in02.mcache b/maps/pre-re/cmd_in02.mcache
new file mode 100644
index 000000000..615df16aa
--- /dev/null
+++ b/maps/pre-re/cmd_in02.mcache
Binary files differ
diff --git a/maps/pre-re/comodo.mcache b/maps/pre-re/comodo.mcache
new file mode 100644
index 000000000..eac11b2db
--- /dev/null
+++ b/maps/pre-re/comodo.mcache
Binary files differ
diff --git a/maps/pre-re/dali.mcache b/maps/pre-re/dali.mcache
new file mode 100644
index 000000000..c802a1c7d
--- /dev/null
+++ b/maps/pre-re/dali.mcache
Binary files differ
diff --git a/maps/pre-re/dali02.mcache b/maps/pre-re/dali02.mcache
new file mode 100644
index 000000000..c802a1c7d
--- /dev/null
+++ b/maps/pre-re/dali02.mcache
Binary files differ
diff --git a/maps/pre-re/dew_dun01.mcache b/maps/pre-re/dew_dun01.mcache
new file mode 100644
index 000000000..4a391f370
--- /dev/null
+++ b/maps/pre-re/dew_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/dew_dun02.mcache b/maps/pre-re/dew_dun02.mcache
new file mode 100644
index 000000000..19f1fa235
--- /dev/null
+++ b/maps/pre-re/dew_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/dew_fild01.mcache b/maps/pre-re/dew_fild01.mcache
new file mode 100644
index 000000000..c3d625525
--- /dev/null
+++ b/maps/pre-re/dew_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/dew_in01.mcache b/maps/pre-re/dew_in01.mcache
new file mode 100644
index 000000000..0e8446c4d
--- /dev/null
+++ b/maps/pre-re/dew_in01.mcache
Binary files differ
diff --git a/maps/pre-re/dewata.mcache b/maps/pre-re/dewata.mcache
new file mode 100644
index 000000000..d16ec5d30
--- /dev/null
+++ b/maps/pre-re/dewata.mcache
Binary files differ
diff --git a/maps/pre-re/dic_dun01.mcache b/maps/pre-re/dic_dun01.mcache
new file mode 100644
index 000000000..1ae77a718
--- /dev/null
+++ b/maps/pre-re/dic_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/dic_dun02.mcache b/maps/pre-re/dic_dun02.mcache
new file mode 100644
index 000000000..765b4b756
--- /dev/null
+++ b/maps/pre-re/dic_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/dic_dun03.mcache b/maps/pre-re/dic_dun03.mcache
new file mode 100644
index 000000000..765b4b756
--- /dev/null
+++ b/maps/pre-re/dic_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/dic_fild01.mcache b/maps/pre-re/dic_fild01.mcache
new file mode 100644
index 000000000..3b24b6025
--- /dev/null
+++ b/maps/pre-re/dic_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/dic_fild02.mcache b/maps/pre-re/dic_fild02.mcache
new file mode 100644
index 000000000..51314624d
--- /dev/null
+++ b/maps/pre-re/dic_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/dic_in01.mcache b/maps/pre-re/dic_in01.mcache
new file mode 100644
index 000000000..56717c50b
--- /dev/null
+++ b/maps/pre-re/dic_in01.mcache
Binary files differ
diff --git a/maps/pre-re/dicastes01.mcache b/maps/pre-re/dicastes01.mcache
new file mode 100644
index 000000000..da84af440
--- /dev/null
+++ b/maps/pre-re/dicastes01.mcache
Binary files differ
diff --git a/maps/pre-re/dicastes02.mcache b/maps/pre-re/dicastes02.mcache
new file mode 100644
index 000000000..fcfec592d
--- /dev/null
+++ b/maps/pre-re/dicastes02.mcache
Binary files differ
diff --git a/maps/pre-re/e_tower.mcache b/maps/pre-re/e_tower.mcache
new file mode 100644
index 000000000..95e46c5d9
--- /dev/null
+++ b/maps/pre-re/e_tower.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_fild01.mcache b/maps/pre-re/ecl_fild01.mcache
new file mode 100644
index 000000000..ccfccc429
--- /dev/null
+++ b/maps/pre-re/ecl_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_hub01.mcache b/maps/pre-re/ecl_hub01.mcache
new file mode 100644
index 000000000..f484f889d
--- /dev/null
+++ b/maps/pre-re/ecl_hub01.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_in01.mcache b/maps/pre-re/ecl_in01.mcache
new file mode 100644
index 000000000..2f827d6ca
--- /dev/null
+++ b/maps/pre-re/ecl_in01.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_in02.mcache b/maps/pre-re/ecl_in02.mcache
new file mode 100644
index 000000000..b05037719
--- /dev/null
+++ b/maps/pre-re/ecl_in02.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_in03.mcache b/maps/pre-re/ecl_in03.mcache
new file mode 100644
index 000000000..f62ec45c1
--- /dev/null
+++ b/maps/pre-re/ecl_in03.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_in04.mcache b/maps/pre-re/ecl_in04.mcache
new file mode 100644
index 000000000..2261bc8f7
--- /dev/null
+++ b/maps/pre-re/ecl_in04.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_tdun01.mcache b/maps/pre-re/ecl_tdun01.mcache
new file mode 100644
index 000000000..814786557
--- /dev/null
+++ b/maps/pre-re/ecl_tdun01.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_tdun02.mcache b/maps/pre-re/ecl_tdun02.mcache
new file mode 100644
index 000000000..bf1e078bc
--- /dev/null
+++ b/maps/pre-re/ecl_tdun02.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_tdun03.mcache b/maps/pre-re/ecl_tdun03.mcache
new file mode 100644
index 000000000..d41be2bdc
--- /dev/null
+++ b/maps/pre-re/ecl_tdun03.mcache
Binary files differ
diff --git a/maps/pre-re/ecl_tdun04.mcache b/maps/pre-re/ecl_tdun04.mcache
new file mode 100644
index 000000000..763331f2a
--- /dev/null
+++ b/maps/pre-re/ecl_tdun04.mcache
Binary files differ
diff --git a/maps/pre-re/eclage.mcache b/maps/pre-re/eclage.mcache
new file mode 100644
index 000000000..da637db44
--- /dev/null
+++ b/maps/pre-re/eclage.mcache
Binary files differ
diff --git a/maps/pre-re/ein_dun01.mcache b/maps/pre-re/ein_dun01.mcache
new file mode 100644
index 000000000..1c5e03593
--- /dev/null
+++ b/maps/pre-re/ein_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/ein_dun02.mcache b/maps/pre-re/ein_dun02.mcache
new file mode 100644
index 000000000..ccdfd65ed
--- /dev/null
+++ b/maps/pre-re/ein_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild01.mcache b/maps/pre-re/ein_fild01.mcache
new file mode 100644
index 000000000..997794512
--- /dev/null
+++ b/maps/pre-re/ein_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild02.mcache b/maps/pre-re/ein_fild02.mcache
new file mode 100644
index 000000000..d75b8e4f0
--- /dev/null
+++ b/maps/pre-re/ein_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild03.mcache b/maps/pre-re/ein_fild03.mcache
new file mode 100644
index 000000000..d73adb11e
--- /dev/null
+++ b/maps/pre-re/ein_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild04.mcache b/maps/pre-re/ein_fild04.mcache
new file mode 100644
index 000000000..31a4b325c
--- /dev/null
+++ b/maps/pre-re/ein_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild05.mcache b/maps/pre-re/ein_fild05.mcache
new file mode 100644
index 000000000..ac28ff888
--- /dev/null
+++ b/maps/pre-re/ein_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild06.mcache b/maps/pre-re/ein_fild06.mcache
new file mode 100644
index 000000000..014bd685c
--- /dev/null
+++ b/maps/pre-re/ein_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild07.mcache b/maps/pre-re/ein_fild07.mcache
new file mode 100644
index 000000000..28d7059a7
--- /dev/null
+++ b/maps/pre-re/ein_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild08.mcache b/maps/pre-re/ein_fild08.mcache
new file mode 100644
index 000000000..d3c6bb754
--- /dev/null
+++ b/maps/pre-re/ein_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild09.mcache b/maps/pre-re/ein_fild09.mcache
new file mode 100644
index 000000000..fc5e2c7c2
--- /dev/null
+++ b/maps/pre-re/ein_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/ein_fild10.mcache b/maps/pre-re/ein_fild10.mcache
new file mode 100644
index 000000000..80776201a
--- /dev/null
+++ b/maps/pre-re/ein_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/ein_in01.mcache b/maps/pre-re/ein_in01.mcache
new file mode 100644
index 000000000..d5218dc9c
--- /dev/null
+++ b/maps/pre-re/ein_in01.mcache
Binary files differ
diff --git a/maps/pre-re/einbech.mcache b/maps/pre-re/einbech.mcache
new file mode 100644
index 000000000..f48882174
--- /dev/null
+++ b/maps/pre-re/einbech.mcache
Binary files differ
diff --git a/maps/pre-re/einbroch.mcache b/maps/pre-re/einbroch.mcache
new file mode 100644
index 000000000..adb422207
--- /dev/null
+++ b/maps/pre-re/einbroch.mcache
Binary files differ
diff --git a/maps/pre-re/evt_bomb.mcache b/maps/pre-re/evt_bomb.mcache
new file mode 100644
index 000000000..36424c23f
--- /dev/null
+++ b/maps/pre-re/evt_bomb.mcache
Binary files differ
diff --git a/maps/pre-re/evt_mobroom.mcache b/maps/pre-re/evt_mobroom.mcache
new file mode 100644
index 000000000..7d3c46952
--- /dev/null
+++ b/maps/pre-re/evt_mobroom.mcache
Binary files differ
diff --git a/maps/pre-re/force_1-1.mcache b/maps/pre-re/force_1-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/pre-re/force_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/force_1-2.mcache b/maps/pre-re/force_1-2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/pre-re/force_1-2.mcache
Binary files differ
diff --git a/maps/pre-re/force_1-3.mcache b/maps/pre-re/force_1-3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/pre-re/force_1-3.mcache
Binary files differ
diff --git a/maps/pre-re/force_2-1.mcache b/maps/pre-re/force_2-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/pre-re/force_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/force_2-2.mcache b/maps/pre-re/force_2-2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/pre-re/force_2-2.mcache
Binary files differ
diff --git a/maps/pre-re/force_2-3.mcache b/maps/pre-re/force_2-3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/pre-re/force_2-3.mcache
Binary files differ
diff --git a/maps/pre-re/force_3-1.mcache b/maps/pre-re/force_3-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/pre-re/force_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/force_3-2.mcache b/maps/pre-re/force_3-2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/pre-re/force_3-2.mcache
Binary files differ
diff --git a/maps/pre-re/force_3-3.mcache b/maps/pre-re/force_3-3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/pre-re/force_3-3.mcache
Binary files differ
diff --git a/maps/pre-re/force_4-1.mcache b/maps/pre-re/force_4-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/pre-re/force_4-1.mcache
Binary files differ
diff --git a/maps/pre-re/force_5-1.mcache b/maps/pre-re/force_5-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/pre-re/force_5-1.mcache
Binary files differ
diff --git a/maps/pre-re/force_map1.mcache b/maps/pre-re/force_map1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/pre-re/force_map1.mcache
Binary files differ
diff --git a/maps/pre-re/force_map2.mcache b/maps/pre-re/force_map2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/pre-re/force_map2.mcache
Binary files differ
diff --git a/maps/pre-re/force_map3.mcache b/maps/pre-re/force_map3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/pre-re/force_map3.mcache
Binary files differ
diff --git a/maps/pre-re/g_room1-1.mcache b/maps/pre-re/g_room1-1.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/pre-re/g_room1-1.mcache
Binary files differ
diff --git a/maps/pre-re/g_room1-2.mcache b/maps/pre-re/g_room1-2.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/pre-re/g_room1-2.mcache
Binary files differ
diff --git a/maps/pre-re/g_room1-3.mcache b/maps/pre-re/g_room1-3.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/pre-re/g_room1-3.mcache
Binary files differ
diff --git a/maps/pre-re/g_room2.mcache b/maps/pre-re/g_room2.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/pre-re/g_room2.mcache
Binary files differ
diff --git a/maps/pre-re/gef_dun00.mcache b/maps/pre-re/gef_dun00.mcache
new file mode 100644
index 000000000..682eb2ce6
--- /dev/null
+++ b/maps/pre-re/gef_dun00.mcache
Binary files differ
diff --git a/maps/pre-re/gef_dun01.mcache b/maps/pre-re/gef_dun01.mcache
new file mode 100644
index 000000000..050a70c65
--- /dev/null
+++ b/maps/pre-re/gef_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/gef_dun02.mcache b/maps/pre-re/gef_dun02.mcache
new file mode 100644
index 000000000..95eabec82
--- /dev/null
+++ b/maps/pre-re/gef_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/gef_dun03.mcache b/maps/pre-re/gef_dun03.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/pre-re/gef_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild00.mcache b/maps/pre-re/gef_fild00.mcache
new file mode 100644
index 000000000..158321931
--- /dev/null
+++ b/maps/pre-re/gef_fild00.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild01.mcache b/maps/pre-re/gef_fild01.mcache
new file mode 100644
index 000000000..52042dbcc
--- /dev/null
+++ b/maps/pre-re/gef_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild02.mcache b/maps/pre-re/gef_fild02.mcache
new file mode 100644
index 000000000..c20df945f
--- /dev/null
+++ b/maps/pre-re/gef_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild03.mcache b/maps/pre-re/gef_fild03.mcache
new file mode 100644
index 000000000..809e54809
--- /dev/null
+++ b/maps/pre-re/gef_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild04.mcache b/maps/pre-re/gef_fild04.mcache
new file mode 100644
index 000000000..d08e64cf8
--- /dev/null
+++ b/maps/pre-re/gef_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild05.mcache b/maps/pre-re/gef_fild05.mcache
new file mode 100644
index 000000000..72f050a49
--- /dev/null
+++ b/maps/pre-re/gef_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild06.mcache b/maps/pre-re/gef_fild06.mcache
new file mode 100644
index 000000000..a9003f922
--- /dev/null
+++ b/maps/pre-re/gef_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild07.mcache b/maps/pre-re/gef_fild07.mcache
new file mode 100644
index 000000000..e56f091c6
--- /dev/null
+++ b/maps/pre-re/gef_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild08.mcache b/maps/pre-re/gef_fild08.mcache
new file mode 100644
index 000000000..671438ac3
--- /dev/null
+++ b/maps/pre-re/gef_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild09.mcache b/maps/pre-re/gef_fild09.mcache
new file mode 100644
index 000000000..d4a9d5644
--- /dev/null
+++ b/maps/pre-re/gef_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild10.mcache b/maps/pre-re/gef_fild10.mcache
new file mode 100644
index 000000000..ed9b3d6fc
--- /dev/null
+++ b/maps/pre-re/gef_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild11.mcache b/maps/pre-re/gef_fild11.mcache
new file mode 100644
index 000000000..4c7e4d700
--- /dev/null
+++ b/maps/pre-re/gef_fild11.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild12.mcache b/maps/pre-re/gef_fild12.mcache
new file mode 100644
index 000000000..1d18a1421
--- /dev/null
+++ b/maps/pre-re/gef_fild12.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild13.mcache b/maps/pre-re/gef_fild13.mcache
new file mode 100644
index 000000000..e7243c1ad
--- /dev/null
+++ b/maps/pre-re/gef_fild13.mcache
Binary files differ
diff --git a/maps/pre-re/gef_fild14.mcache b/maps/pre-re/gef_fild14.mcache
new file mode 100644
index 000000000..c9bc47e6d
--- /dev/null
+++ b/maps/pre-re/gef_fild14.mcache
Binary files differ
diff --git a/maps/pre-re/gef_tower.mcache b/maps/pre-re/gef_tower.mcache
new file mode 100644
index 000000000..893e8d1ff
--- /dev/null
+++ b/maps/pre-re/gef_tower.mcache
Binary files differ
diff --git a/maps/pre-re/gefenia01.mcache b/maps/pre-re/gefenia01.mcache
new file mode 100644
index 000000000..347332bab
--- /dev/null
+++ b/maps/pre-re/gefenia01.mcache
Binary files differ
diff --git a/maps/pre-re/gefenia02.mcache b/maps/pre-re/gefenia02.mcache
new file mode 100644
index 000000000..3ac05d055
--- /dev/null
+++ b/maps/pre-re/gefenia02.mcache
Binary files differ
diff --git a/maps/pre-re/gefenia03.mcache b/maps/pre-re/gefenia03.mcache
new file mode 100644
index 000000000..ac86014ba
--- /dev/null
+++ b/maps/pre-re/gefenia03.mcache
Binary files differ
diff --git a/maps/pre-re/gefenia04.mcache b/maps/pre-re/gefenia04.mcache
new file mode 100644
index 000000000..8e7a53f32
--- /dev/null
+++ b/maps/pre-re/gefenia04.mcache
Binary files differ
diff --git a/maps/pre-re/geffen.mcache b/maps/pre-re/geffen.mcache
new file mode 100644
index 000000000..a38c98f38
--- /dev/null
+++ b/maps/pre-re/geffen.mcache
Binary files differ
diff --git a/maps/pre-re/geffen_in.mcache b/maps/pre-re/geffen_in.mcache
new file mode 100644
index 000000000..6f8ded6aa
--- /dev/null
+++ b/maps/pre-re/geffen_in.mcache
Binary files differ
diff --git a/maps/pre-re/gefg_cas01.mcache b/maps/pre-re/gefg_cas01.mcache
new file mode 100644
index 000000000..fcc51f76d
--- /dev/null
+++ b/maps/pre-re/gefg_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/gefg_cas02.mcache b/maps/pre-re/gefg_cas02.mcache
new file mode 100644
index 000000000..4c9ed620c
--- /dev/null
+++ b/maps/pre-re/gefg_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/gefg_cas03.mcache b/maps/pre-re/gefg_cas03.mcache
new file mode 100644
index 000000000..ce0c0b5e2
--- /dev/null
+++ b/maps/pre-re/gefg_cas03.mcache
Binary files differ
diff --git a/maps/pre-re/gefg_cas04.mcache b/maps/pre-re/gefg_cas04.mcache
new file mode 100644
index 000000000..644ae4732
--- /dev/null
+++ b/maps/pre-re/gefg_cas04.mcache
Binary files differ
diff --git a/maps/pre-re/gefg_cas05.mcache b/maps/pre-re/gefg_cas05.mcache
new file mode 100644
index 000000000..01eb7e0b4
--- /dev/null
+++ b/maps/pre-re/gefg_cas05.mcache
Binary files differ
diff --git a/maps/pre-re/gl_cas01.mcache b/maps/pre-re/gl_cas01.mcache
new file mode 100644
index 000000000..8b21d8863
--- /dev/null
+++ b/maps/pre-re/gl_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/gl_cas02.mcache b/maps/pre-re/gl_cas02.mcache
new file mode 100644
index 000000000..76fc00c96
--- /dev/null
+++ b/maps/pre-re/gl_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/gl_cas02_.mcache b/maps/pre-re/gl_cas02_.mcache
new file mode 100644
index 000000000..76fc00c96
--- /dev/null
+++ b/maps/pre-re/gl_cas02_.mcache
Binary files differ
diff --git a/maps/pre-re/gl_church.mcache b/maps/pre-re/gl_church.mcache
new file mode 100644
index 000000000..c2f5f0a55
--- /dev/null
+++ b/maps/pre-re/gl_church.mcache
Binary files differ
diff --git a/maps/pre-re/gl_chyard.mcache b/maps/pre-re/gl_chyard.mcache
new file mode 100644
index 000000000..f38b51ef9
--- /dev/null
+++ b/maps/pre-re/gl_chyard.mcache
Binary files differ
diff --git a/maps/pre-re/gl_chyard_.mcache b/maps/pre-re/gl_chyard_.mcache
new file mode 100644
index 000000000..f38b51ef9
--- /dev/null
+++ b/maps/pre-re/gl_chyard_.mcache
Binary files differ
diff --git a/maps/pre-re/gl_dun01.mcache b/maps/pre-re/gl_dun01.mcache
new file mode 100644
index 000000000..abe4f0783
--- /dev/null
+++ b/maps/pre-re/gl_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/gl_dun02.mcache b/maps/pre-re/gl_dun02.mcache
new file mode 100644
index 000000000..9fbc24dca
--- /dev/null
+++ b/maps/pre-re/gl_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/gl_in01.mcache b/maps/pre-re/gl_in01.mcache
new file mode 100644
index 000000000..a49f299d3
--- /dev/null
+++ b/maps/pre-re/gl_in01.mcache
Binary files differ
diff --git a/maps/pre-re/gl_knt01.mcache b/maps/pre-re/gl_knt01.mcache
new file mode 100644
index 000000000..521698b12
--- /dev/null
+++ b/maps/pre-re/gl_knt01.mcache
Binary files differ
diff --git a/maps/pre-re/gl_knt02.mcache b/maps/pre-re/gl_knt02.mcache
new file mode 100644
index 000000000..1b399e506
--- /dev/null
+++ b/maps/pre-re/gl_knt02.mcache
Binary files differ
diff --git a/maps/pre-re/gl_prison.mcache b/maps/pre-re/gl_prison.mcache
new file mode 100644
index 000000000..019e06253
--- /dev/null
+++ b/maps/pre-re/gl_prison.mcache
Binary files differ
diff --git a/maps/pre-re/gl_prison1.mcache b/maps/pre-re/gl_prison1.mcache
new file mode 100644
index 000000000..a2347a9e8
--- /dev/null
+++ b/maps/pre-re/gl_prison1.mcache
Binary files differ
diff --git a/maps/pre-re/gl_sew01.mcache b/maps/pre-re/gl_sew01.mcache
new file mode 100644
index 000000000..27df90681
--- /dev/null
+++ b/maps/pre-re/gl_sew01.mcache
Binary files differ
diff --git a/maps/pre-re/gl_sew02.mcache b/maps/pre-re/gl_sew02.mcache
new file mode 100644
index 000000000..ce47f81c1
--- /dev/null
+++ b/maps/pre-re/gl_sew02.mcache
Binary files differ
diff --git a/maps/pre-re/gl_sew03.mcache b/maps/pre-re/gl_sew03.mcache
new file mode 100644
index 000000000..1e74e3f22
--- /dev/null
+++ b/maps/pre-re/gl_sew03.mcache
Binary files differ
diff --git a/maps/pre-re/gl_sew04.mcache b/maps/pre-re/gl_sew04.mcache
new file mode 100644
index 000000000..e1d17fea3
--- /dev/null
+++ b/maps/pre-re/gl_sew04.mcache
Binary files differ
diff --git a/maps/pre-re/gl_step.mcache b/maps/pre-re/gl_step.mcache
new file mode 100644
index 000000000..1783be8e3
--- /dev/null
+++ b/maps/pre-re/gl_step.mcache
Binary files differ
diff --git a/maps/pre-re/glast_01.mcache b/maps/pre-re/glast_01.mcache
new file mode 100644
index 000000000..5317424c2
--- /dev/null
+++ b/maps/pre-re/glast_01.mcache
Binary files differ
diff --git a/maps/pre-re/gld2_ald.mcache b/maps/pre-re/gld2_ald.mcache
new file mode 100644
index 000000000..02eba4a80
--- /dev/null
+++ b/maps/pre-re/gld2_ald.mcache
Binary files differ
diff --git a/maps/pre-re/gld2_gef.mcache b/maps/pre-re/gld2_gef.mcache
new file mode 100644
index 000000000..52cf7c354
--- /dev/null
+++ b/maps/pre-re/gld2_gef.mcache
Binary files differ
diff --git a/maps/pre-re/gld2_pay.mcache b/maps/pre-re/gld2_pay.mcache
new file mode 100644
index 000000000..b7f4a485d
--- /dev/null
+++ b/maps/pre-re/gld2_pay.mcache
Binary files differ
diff --git a/maps/pre-re/gld2_prt.mcache b/maps/pre-re/gld2_prt.mcache
new file mode 100644
index 000000000..890b34ac7
--- /dev/null
+++ b/maps/pre-re/gld2_prt.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun01.mcache b/maps/pre-re/gld_dun01.mcache
new file mode 100644
index 000000000..725b334a0
--- /dev/null
+++ b/maps/pre-re/gld_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun01_2.mcache b/maps/pre-re/gld_dun01_2.mcache
new file mode 100644
index 000000000..725b334a0
--- /dev/null
+++ b/maps/pre-re/gld_dun01_2.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun02.mcache b/maps/pre-re/gld_dun02.mcache
new file mode 100644
index 000000000..4feff8774
--- /dev/null
+++ b/maps/pre-re/gld_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun02_2.mcache b/maps/pre-re/gld_dun02_2.mcache
new file mode 100644
index 000000000..4feff8774
--- /dev/null
+++ b/maps/pre-re/gld_dun02_2.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun03.mcache b/maps/pre-re/gld_dun03.mcache
new file mode 100644
index 000000000..44c528bc2
--- /dev/null
+++ b/maps/pre-re/gld_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun03_2.mcache b/maps/pre-re/gld_dun03_2.mcache
new file mode 100644
index 000000000..44c528bc2
--- /dev/null
+++ b/maps/pre-re/gld_dun03_2.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun04.mcache b/maps/pre-re/gld_dun04.mcache
new file mode 100644
index 000000000..953b7d375
--- /dev/null
+++ b/maps/pre-re/gld_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/gld_dun04_2.mcache b/maps/pre-re/gld_dun04_2.mcache
new file mode 100644
index 000000000..953b7d375
--- /dev/null
+++ b/maps/pre-re/gld_dun04_2.mcache
Binary files differ
diff --git a/maps/pre-re/gon_dun01.mcache b/maps/pre-re/gon_dun01.mcache
new file mode 100644
index 000000000..d6250c57d
--- /dev/null
+++ b/maps/pre-re/gon_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/gon_dun02.mcache b/maps/pre-re/gon_dun02.mcache
new file mode 100644
index 000000000..8c40622ae
--- /dev/null
+++ b/maps/pre-re/gon_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/gon_dun03.mcache b/maps/pre-re/gon_dun03.mcache
new file mode 100644
index 000000000..2f1e77961
--- /dev/null
+++ b/maps/pre-re/gon_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/gon_fild01.mcache b/maps/pre-re/gon_fild01.mcache
new file mode 100644
index 000000000..2d3a56939
--- /dev/null
+++ b/maps/pre-re/gon_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/gon_in.mcache b/maps/pre-re/gon_in.mcache
new file mode 100644
index 000000000..a015b8899
--- /dev/null
+++ b/maps/pre-re/gon_in.mcache
Binary files differ
diff --git a/maps/pre-re/gon_test.mcache b/maps/pre-re/gon_test.mcache
new file mode 100644
index 000000000..0147bed4a
--- /dev/null
+++ b/maps/pre-re/gon_test.mcache
Binary files differ
diff --git a/maps/pre-re/gonryun.mcache b/maps/pre-re/gonryun.mcache
new file mode 100644
index 000000000..1f8b8414c
--- /dev/null
+++ b/maps/pre-re/gonryun.mcache
Binary files differ
diff --git a/maps/pre-re/guild_room.mcache b/maps/pre-re/guild_room.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/pre-re/guild_room.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs1-1.mcache b/maps/pre-re/guild_vs1-1.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/pre-re/guild_vs1-1.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs1-2.mcache b/maps/pre-re/guild_vs1-2.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/pre-re/guild_vs1-2.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs1-3.mcache b/maps/pre-re/guild_vs1-3.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/pre-re/guild_vs1-3.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs1-4.mcache b/maps/pre-re/guild_vs1-4.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/pre-re/guild_vs1-4.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs1.mcache b/maps/pre-re/guild_vs1.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/pre-re/guild_vs1.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs2-1.mcache b/maps/pre-re/guild_vs2-1.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/guild_vs2-1.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs2-2.mcache b/maps/pre-re/guild_vs2-2.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/guild_vs2-2.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs2.mcache b/maps/pre-re/guild_vs2.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/pre-re/guild_vs2.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs3.mcache b/maps/pre-re/guild_vs3.mcache
new file mode 100644
index 000000000..32615fe48
--- /dev/null
+++ b/maps/pre-re/guild_vs3.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs4.mcache b/maps/pre-re/guild_vs4.mcache
new file mode 100644
index 000000000..d3d7f545f
--- /dev/null
+++ b/maps/pre-re/guild_vs4.mcache
Binary files differ
diff --git a/maps/pre-re/guild_vs5.mcache b/maps/pre-re/guild_vs5.mcache
new file mode 100644
index 000000000..d529f8a76
--- /dev/null
+++ b/maps/pre-re/guild_vs5.mcache
Binary files differ
diff --git a/maps/pre-re/himinn.mcache b/maps/pre-re/himinn.mcache
new file mode 100644
index 000000000..208d13ed9
--- /dev/null
+++ b/maps/pre-re/himinn.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild01.mcache b/maps/pre-re/hu_fild01.mcache
new file mode 100644
index 000000000..6608d7ded
--- /dev/null
+++ b/maps/pre-re/hu_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild02.mcache b/maps/pre-re/hu_fild02.mcache
new file mode 100644
index 000000000..35716719d
--- /dev/null
+++ b/maps/pre-re/hu_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild03.mcache b/maps/pre-re/hu_fild03.mcache
new file mode 100644
index 000000000..dd41b8ed3
--- /dev/null
+++ b/maps/pre-re/hu_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild04.mcache b/maps/pre-re/hu_fild04.mcache
new file mode 100644
index 000000000..4658b3d4a
--- /dev/null
+++ b/maps/pre-re/hu_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild05.mcache b/maps/pre-re/hu_fild05.mcache
new file mode 100644
index 000000000..5b145894f
--- /dev/null
+++ b/maps/pre-re/hu_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild06.mcache b/maps/pre-re/hu_fild06.mcache
new file mode 100644
index 000000000..420460fdd
--- /dev/null
+++ b/maps/pre-re/hu_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/hu_fild07.mcache b/maps/pre-re/hu_fild07.mcache
new file mode 100644
index 000000000..82aaf0b2a
--- /dev/null
+++ b/maps/pre-re/hu_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/hu_in01.mcache b/maps/pre-re/hu_in01.mcache
new file mode 100644
index 000000000..e56450467
--- /dev/null
+++ b/maps/pre-re/hu_in01.mcache
Binary files differ
diff --git a/maps/pre-re/hugel.mcache b/maps/pre-re/hugel.mcache
new file mode 100644
index 000000000..e350349bb
--- /dev/null
+++ b/maps/pre-re/hugel.mcache
Binary files differ
diff --git a/maps/pre-re/hunter_1-1.mcache b/maps/pre-re/hunter_1-1.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/hunter_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/hunter_2-1.mcache b/maps/pre-re/hunter_2-1.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/hunter_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/hunter_3-1.mcache b/maps/pre-re/hunter_3-1.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/hunter_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/ice_dun01.mcache b/maps/pre-re/ice_dun01.mcache
new file mode 100644
index 000000000..8f7fedeac
--- /dev/null
+++ b/maps/pre-re/ice_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/ice_dun02.mcache b/maps/pre-re/ice_dun02.mcache
new file mode 100644
index 000000000..5d3f7205a
--- /dev/null
+++ b/maps/pre-re/ice_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/ice_dun03.mcache b/maps/pre-re/ice_dun03.mcache
new file mode 100644
index 000000000..7600452d4
--- /dev/null
+++ b/maps/pre-re/ice_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/ice_dun04.mcache b/maps/pre-re/ice_dun04.mcache
new file mode 100644
index 000000000..ffee28527
--- /dev/null
+++ b/maps/pre-re/ice_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/in_hunter.mcache b/maps/pre-re/in_hunter.mcache
new file mode 100644
index 000000000..797d74456
--- /dev/null
+++ b/maps/pre-re/in_hunter.mcache
Binary files differ
diff --git a/maps/pre-re/in_moc_16.mcache b/maps/pre-re/in_moc_16.mcache
new file mode 100644
index 000000000..70290570b
--- /dev/null
+++ b/maps/pre-re/in_moc_16.mcache
Binary files differ
diff --git a/maps/pre-re/in_orcs01.mcache b/maps/pre-re/in_orcs01.mcache
new file mode 100644
index 000000000..c7d3dac4d
--- /dev/null
+++ b/maps/pre-re/in_orcs01.mcache
Binary files differ
diff --git a/maps/pre-re/in_rogue.mcache b/maps/pre-re/in_rogue.mcache
new file mode 100644
index 000000000..7eabc9922
--- /dev/null
+++ b/maps/pre-re/in_rogue.mcache
Binary files differ
diff --git a/maps/pre-re/in_sphinx1.mcache b/maps/pre-re/in_sphinx1.mcache
new file mode 100644
index 000000000..f18547ed7
--- /dev/null
+++ b/maps/pre-re/in_sphinx1.mcache
Binary files differ
diff --git a/maps/pre-re/in_sphinx2.mcache b/maps/pre-re/in_sphinx2.mcache
new file mode 100644
index 000000000..8884f8d34
--- /dev/null
+++ b/maps/pre-re/in_sphinx2.mcache
Binary files differ
diff --git a/maps/pre-re/in_sphinx3.mcache b/maps/pre-re/in_sphinx3.mcache
new file mode 100644
index 000000000..be610a8bf
--- /dev/null
+++ b/maps/pre-re/in_sphinx3.mcache
Binary files differ
diff --git a/maps/pre-re/in_sphinx4.mcache b/maps/pre-re/in_sphinx4.mcache
new file mode 100644
index 000000000..bcb095f83
--- /dev/null
+++ b/maps/pre-re/in_sphinx4.mcache
Binary files differ
diff --git a/maps/pre-re/in_sphinx5.mcache b/maps/pre-re/in_sphinx5.mcache
new file mode 100644
index 000000000..3779ca02d
--- /dev/null
+++ b/maps/pre-re/in_sphinx5.mcache
Binary files differ
diff --git a/maps/pre-re/int_land.mcache b/maps/pre-re/int_land.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/pre-re/int_land.mcache
Binary files differ
diff --git a/maps/pre-re/int_land01.mcache b/maps/pre-re/int_land01.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/pre-re/int_land01.mcache
Binary files differ
diff --git a/maps/pre-re/int_land02.mcache b/maps/pre-re/int_land02.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/pre-re/int_land02.mcache
Binary files differ
diff --git a/maps/pre-re/int_land03.mcache b/maps/pre-re/int_land03.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/pre-re/int_land03.mcache
Binary files differ
diff --git a/maps/pre-re/int_land04.mcache b/maps/pre-re/int_land04.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/pre-re/int_land04.mcache
Binary files differ
diff --git a/maps/pre-re/itemmall.mcache b/maps/pre-re/itemmall.mcache
new file mode 100644
index 000000000..93879880f
--- /dev/null
+++ b/maps/pre-re/itemmall.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac01.mcache b/maps/pre-re/iz_ac01.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/pre-re/iz_ac01.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac01_a.mcache b/maps/pre-re/iz_ac01_a.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/pre-re/iz_ac01_a.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac01_b.mcache b/maps/pre-re/iz_ac01_b.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/pre-re/iz_ac01_b.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac01_c.mcache b/maps/pre-re/iz_ac01_c.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/pre-re/iz_ac01_c.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac01_d.mcache b/maps/pre-re/iz_ac01_d.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/pre-re/iz_ac01_d.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac02.mcache b/maps/pre-re/iz_ac02.mcache
new file mode 100644
index 000000000..c62875fb4
--- /dev/null
+++ b/maps/pre-re/iz_ac02.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac02_a.mcache b/maps/pre-re/iz_ac02_a.mcache
new file mode 100644
index 000000000..c62875fb4
--- /dev/null
+++ b/maps/pre-re/iz_ac02_a.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac02_b.mcache b/maps/pre-re/iz_ac02_b.mcache
new file mode 100644
index 000000000..c62875fb4
--- /dev/null
+++ b/maps/pre-re/iz_ac02_b.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac02_c.mcache b/maps/pre-re/iz_ac02_c.mcache
new file mode 100644
index 000000000..c62875fb4
--- /dev/null
+++ b/maps/pre-re/iz_ac02_c.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ac02_d.mcache b/maps/pre-re/iz_ac02_d.mcache
new file mode 100644
index 000000000..c62875fb4
--- /dev/null
+++ b/maps/pre-re/iz_ac02_d.mcache
Binary files differ
diff --git a/maps/pre-re/iz_dun00.mcache b/maps/pre-re/iz_dun00.mcache
new file mode 100644
index 000000000..448c90de6
--- /dev/null
+++ b/maps/pre-re/iz_dun00.mcache
Binary files differ
diff --git a/maps/pre-re/iz_dun01.mcache b/maps/pre-re/iz_dun01.mcache
new file mode 100644
index 000000000..a00173a75
--- /dev/null
+++ b/maps/pre-re/iz_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/iz_dun02.mcache b/maps/pre-re/iz_dun02.mcache
new file mode 100644
index 000000000..ef21c8b77
--- /dev/null
+++ b/maps/pre-re/iz_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/iz_dun03.mcache b/maps/pre-re/iz_dun03.mcache
new file mode 100644
index 000000000..6dfc8bd38
--- /dev/null
+++ b/maps/pre-re/iz_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/iz_dun04.mcache b/maps/pre-re/iz_dun04.mcache
new file mode 100644
index 000000000..2487067a9
--- /dev/null
+++ b/maps/pre-re/iz_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/iz_dun05.mcache b/maps/pre-re/iz_dun05.mcache
new file mode 100644
index 000000000..7c411a5c4
--- /dev/null
+++ b/maps/pre-re/iz_dun05.mcache
Binary files differ
diff --git a/maps/pre-re/iz_int.mcache b/maps/pre-re/iz_int.mcache
new file mode 100644
index 000000000..ccf01c2ec
--- /dev/null
+++ b/maps/pre-re/iz_int.mcache
Binary files differ
diff --git a/maps/pre-re/iz_int01.mcache b/maps/pre-re/iz_int01.mcache
new file mode 100644
index 000000000..ccf01c2ec
--- /dev/null
+++ b/maps/pre-re/iz_int01.mcache
Binary files differ
diff --git a/maps/pre-re/iz_int02.mcache b/maps/pre-re/iz_int02.mcache
new file mode 100644
index 000000000..ccf01c2ec
--- /dev/null
+++ b/maps/pre-re/iz_int02.mcache
Binary files differ
diff --git a/maps/pre-re/iz_int03.mcache b/maps/pre-re/iz_int03.mcache
new file mode 100644
index 000000000..ccf01c2ec
--- /dev/null
+++ b/maps/pre-re/iz_int03.mcache
Binary files differ
diff --git a/maps/pre-re/iz_int04.mcache b/maps/pre-re/iz_int04.mcache
new file mode 100644
index 000000000..ccf01c2ec
--- /dev/null
+++ b/maps/pre-re/iz_int04.mcache
Binary files differ
diff --git a/maps/pre-re/iz_ng01.mcache b/maps/pre-re/iz_ng01.mcache
new file mode 100644
index 000000000..e0905abbc
--- /dev/null
+++ b/maps/pre-re/iz_ng01.mcache
Binary files differ
diff --git a/maps/pre-re/izlu2dun.mcache b/maps/pre-re/izlu2dun.mcache
new file mode 100644
index 000000000..69818e218
--- /dev/null
+++ b/maps/pre-re/izlu2dun.mcache
Binary files differ
diff --git a/maps/pre-re/izlude.mcache b/maps/pre-re/izlude.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/izlude.mcache
Binary files differ
diff --git a/maps/pre-re/izlude_a.mcache b/maps/pre-re/izlude_a.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/pre-re/izlude_a.mcache
Binary files differ
diff --git a/maps/pre-re/izlude_b.mcache b/maps/pre-re/izlude_b.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/pre-re/izlude_b.mcache
Binary files differ
diff --git a/maps/pre-re/izlude_c.mcache b/maps/pre-re/izlude_c.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/pre-re/izlude_c.mcache
Binary files differ
diff --git a/maps/pre-re/izlude_d.mcache b/maps/pre-re/izlude_d.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/pre-re/izlude_d.mcache
Binary files differ
diff --git a/maps/pre-re/izlude_in.mcache b/maps/pre-re/izlude_in.mcache
new file mode 100644
index 000000000..b2e04aaf4
--- /dev/null
+++ b/maps/pre-re/izlude_in.mcache
Binary files differ
diff --git a/maps/pre-re/jawaii.mcache b/maps/pre-re/jawaii.mcache
new file mode 100644
index 000000000..71b73455c
--- /dev/null
+++ b/maps/pre-re/jawaii.mcache
Binary files differ
diff --git a/maps/pre-re/jawaii_in.mcache b/maps/pre-re/jawaii_in.mcache
new file mode 100644
index 000000000..1062ddabb
--- /dev/null
+++ b/maps/pre-re/jawaii_in.mcache
Binary files differ
diff --git a/maps/pre-re/job3_arch01.mcache b/maps/pre-re/job3_arch01.mcache
new file mode 100644
index 000000000..ba9b44e08
--- /dev/null
+++ b/maps/pre-re/job3_arch01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_arch02.mcache b/maps/pre-re/job3_arch02.mcache
new file mode 100644
index 000000000..cd8315d99
--- /dev/null
+++ b/maps/pre-re/job3_arch02.mcache
Binary files differ
diff --git a/maps/pre-re/job3_arch03.mcache b/maps/pre-re/job3_arch03.mcache
new file mode 100644
index 000000000..ba9b44e08
--- /dev/null
+++ b/maps/pre-re/job3_arch03.mcache
Binary files differ
diff --git a/maps/pre-re/job3_gen01.mcache b/maps/pre-re/job3_gen01.mcache
new file mode 100644
index 000000000..63f2b8624
--- /dev/null
+++ b/maps/pre-re/job3_gen01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_guil01.mcache b/maps/pre-re/job3_guil01.mcache
new file mode 100644
index 000000000..b54f4d168
--- /dev/null
+++ b/maps/pre-re/job3_guil01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_guil02.mcache b/maps/pre-re/job3_guil02.mcache
new file mode 100644
index 000000000..1da7a382d
--- /dev/null
+++ b/maps/pre-re/job3_guil02.mcache
Binary files differ
diff --git a/maps/pre-re/job3_guil03.mcache b/maps/pre-re/job3_guil03.mcache
new file mode 100644
index 000000000..5cef8124b
--- /dev/null
+++ b/maps/pre-re/job3_guil03.mcache
Binary files differ
diff --git a/maps/pre-re/job3_rang01.mcache b/maps/pre-re/job3_rang01.mcache
new file mode 100644
index 000000000..929a32d82
--- /dev/null
+++ b/maps/pre-re/job3_rang01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_rang02.mcache b/maps/pre-re/job3_rang02.mcache
new file mode 100644
index 000000000..613668187
--- /dev/null
+++ b/maps/pre-re/job3_rang02.mcache
Binary files differ
diff --git a/maps/pre-re/job3_rune01.mcache b/maps/pre-re/job3_rune01.mcache
new file mode 100644
index 000000000..d7682d4ad
--- /dev/null
+++ b/maps/pre-re/job3_rune01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_rune02.mcache b/maps/pre-re/job3_rune02.mcache
new file mode 100644
index 000000000..3484ed56e
--- /dev/null
+++ b/maps/pre-re/job3_rune02.mcache
Binary files differ
diff --git a/maps/pre-re/job3_rune03.mcache b/maps/pre-re/job3_rune03.mcache
new file mode 100644
index 000000000..3484ed56e
--- /dev/null
+++ b/maps/pre-re/job3_rune03.mcache
Binary files differ
diff --git a/maps/pre-re/job3_sha01.mcache b/maps/pre-re/job3_sha01.mcache
new file mode 100644
index 000000000..d9e2da13b
--- /dev/null
+++ b/maps/pre-re/job3_sha01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_war01.mcache b/maps/pre-re/job3_war01.mcache
new file mode 100644
index 000000000..2b8277e4a
--- /dev/null
+++ b/maps/pre-re/job3_war01.mcache
Binary files differ
diff --git a/maps/pre-re/job3_war02.mcache b/maps/pre-re/job3_war02.mcache
new file mode 100644
index 000000000..2b8277e4a
--- /dev/null
+++ b/maps/pre-re/job3_war02.mcache
Binary files differ
diff --git a/maps/pre-re/job_cru.mcache b/maps/pre-re/job_cru.mcache
new file mode 100644
index 000000000..208dc31a7
--- /dev/null
+++ b/maps/pre-re/job_cru.mcache
Binary files differ
diff --git a/maps/pre-re/job_duncer.mcache b/maps/pre-re/job_duncer.mcache
new file mode 100644
index 000000000..d8bff67e0
--- /dev/null
+++ b/maps/pre-re/job_duncer.mcache
Binary files differ
diff --git a/maps/pre-re/job_hunte.mcache b/maps/pre-re/job_hunte.mcache
new file mode 100644
index 000000000..471db33ae
--- /dev/null
+++ b/maps/pre-re/job_hunte.mcache
Binary files differ
diff --git a/maps/pre-re/job_hunter.mcache b/maps/pre-re/job_hunter.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/job_hunter.mcache
Binary files differ
diff --git a/maps/pre-re/job_knight.mcache b/maps/pre-re/job_knight.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/job_knight.mcache
Binary files differ
diff --git a/maps/pre-re/job_knt.mcache b/maps/pre-re/job_knt.mcache
new file mode 100644
index 000000000..15ce2586a
--- /dev/null
+++ b/maps/pre-re/job_knt.mcache
Binary files differ
diff --git a/maps/pre-re/job_ko.mcache b/maps/pre-re/job_ko.mcache
new file mode 100644
index 000000000..24ada6df1
--- /dev/null
+++ b/maps/pre-re/job_ko.mcache
Binary files differ
diff --git a/maps/pre-re/job_monk.mcache b/maps/pre-re/job_monk.mcache
new file mode 100644
index 000000000..dede5a9c2
--- /dev/null
+++ b/maps/pre-re/job_monk.mcache
Binary files differ
diff --git a/maps/pre-re/job_priest.mcache b/maps/pre-re/job_priest.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/job_priest.mcache
Binary files differ
diff --git a/maps/pre-re/job_prist.mcache b/maps/pre-re/job_prist.mcache
new file mode 100644
index 000000000..208dc31a7
--- /dev/null
+++ b/maps/pre-re/job_prist.mcache
Binary files differ
diff --git a/maps/pre-re/job_sage.mcache b/maps/pre-re/job_sage.mcache
new file mode 100644
index 000000000..9456f3795
--- /dev/null
+++ b/maps/pre-re/job_sage.mcache
Binary files differ
diff --git a/maps/pre-re/job_soul.mcache b/maps/pre-re/job_soul.mcache
new file mode 100644
index 000000000..d48f37a50
--- /dev/null
+++ b/maps/pre-re/job_soul.mcache
Binary files differ
diff --git a/maps/pre-re/job_star.mcache b/maps/pre-re/job_star.mcache
new file mode 100644
index 000000000..92057f58f
--- /dev/null
+++ b/maps/pre-re/job_star.mcache
Binary files differ
diff --git a/maps/pre-re/job_sword1.mcache b/maps/pre-re/job_sword1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/pre-re/job_sword1.mcache
Binary files differ
diff --git a/maps/pre-re/job_thief1.mcache b/maps/pre-re/job_thief1.mcache
new file mode 100644
index 000000000..ea4d5a2d4
--- /dev/null
+++ b/maps/pre-re/job_thief1.mcache
Binary files differ
diff --git a/maps/pre-re/job_wiz.mcache b/maps/pre-re/job_wiz.mcache
new file mode 100644
index 000000000..9456f3795
--- /dev/null
+++ b/maps/pre-re/job_wiz.mcache
Binary files differ
diff --git a/maps/pre-re/job_wizard.mcache b/maps/pre-re/job_wizard.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/job_wizard.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_area1.mcache b/maps/pre-re/jupe_area1.mcache
new file mode 100644
index 000000000..1c7e0707c
--- /dev/null
+++ b/maps/pre-re/jupe_area1.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_area2.mcache b/maps/pre-re/jupe_area2.mcache
new file mode 100644
index 000000000..378dddd1b
--- /dev/null
+++ b/maps/pre-re/jupe_area2.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_cave.mcache b/maps/pre-re/jupe_cave.mcache
new file mode 100644
index 000000000..a21a22c8a
--- /dev/null
+++ b/maps/pre-re/jupe_cave.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_core.mcache b/maps/pre-re/jupe_core.mcache
new file mode 100644
index 000000000..2d9cc99e4
--- /dev/null
+++ b/maps/pre-re/jupe_core.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_core2.mcache b/maps/pre-re/jupe_core2.mcache
new file mode 100644
index 000000000..2d9cc99e4
--- /dev/null
+++ b/maps/pre-re/jupe_core2.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_ele.mcache b/maps/pre-re/jupe_ele.mcache
new file mode 100644
index 000000000..ec326e92b
--- /dev/null
+++ b/maps/pre-re/jupe_ele.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_ele_r.mcache b/maps/pre-re/jupe_ele_r.mcache
new file mode 100644
index 000000000..614aa48a0
--- /dev/null
+++ b/maps/pre-re/jupe_ele_r.mcache
Binary files differ
diff --git a/maps/pre-re/jupe_gate.mcache b/maps/pre-re/jupe_gate.mcache
new file mode 100644
index 000000000..3ba62bf77
--- /dev/null
+++ b/maps/pre-re/jupe_gate.mcache
Binary files differ
diff --git a/maps/pre-re/juperos_01.mcache b/maps/pre-re/juperos_01.mcache
new file mode 100644
index 000000000..35d86a746
--- /dev/null
+++ b/maps/pre-re/juperos_01.mcache
Binary files differ
diff --git a/maps/pre-re/juperos_02.mcache b/maps/pre-re/juperos_02.mcache
new file mode 100644
index 000000000..6135fbb7e
--- /dev/null
+++ b/maps/pre-re/juperos_02.mcache
Binary files differ
diff --git a/maps/pre-re/kh_dun01.mcache b/maps/pre-re/kh_dun01.mcache
new file mode 100644
index 000000000..253a31f28
--- /dev/null
+++ b/maps/pre-re/kh_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/kh_dun02.mcache b/maps/pre-re/kh_dun02.mcache
new file mode 100644
index 000000000..033ff067e
--- /dev/null
+++ b/maps/pre-re/kh_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/kh_kiehl01.mcache b/maps/pre-re/kh_kiehl01.mcache
new file mode 100644
index 000000000..cf636187c
--- /dev/null
+++ b/maps/pre-re/kh_kiehl01.mcache
Binary files differ
diff --git a/maps/pre-re/kh_kiehl02.mcache b/maps/pre-re/kh_kiehl02.mcache
new file mode 100644
index 000000000..f37292670
--- /dev/null
+++ b/maps/pre-re/kh_kiehl02.mcache
Binary files differ
diff --git a/maps/pre-re/kh_mansion.mcache b/maps/pre-re/kh_mansion.mcache
new file mode 100644
index 000000000..7c6290e6c
--- /dev/null
+++ b/maps/pre-re/kh_mansion.mcache
Binary files differ
diff --git a/maps/pre-re/kh_rossi.mcache b/maps/pre-re/kh_rossi.mcache
new file mode 100644
index 000000000..f5d3694cb
--- /dev/null
+++ b/maps/pre-re/kh_rossi.mcache
Binary files differ
diff --git a/maps/pre-re/kh_school.mcache b/maps/pre-re/kh_school.mcache
new file mode 100644
index 000000000..f7a5472dd
--- /dev/null
+++ b/maps/pre-re/kh_school.mcache
Binary files differ
diff --git a/maps/pre-re/kh_vila.mcache b/maps/pre-re/kh_vila.mcache
new file mode 100644
index 000000000..3b1aaa619
--- /dev/null
+++ b/maps/pre-re/kh_vila.mcache
Binary files differ
diff --git a/maps/pre-re/knight_1-1.mcache b/maps/pre-re/knight_1-1.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/knight_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/knight_2-1.mcache b/maps/pre-re/knight_2-1.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/knight_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/knight_3-1.mcache b/maps/pre-re/knight_3-1.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/knight_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_airport.mcache b/maps/pre-re/lhz_airport.mcache
new file mode 100644
index 000000000..ff75f0fd4
--- /dev/null
+++ b/maps/pre-re/lhz_airport.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_cube.mcache b/maps/pre-re/lhz_cube.mcache
new file mode 100644
index 000000000..aea70b220
--- /dev/null
+++ b/maps/pre-re/lhz_cube.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_dun01.mcache b/maps/pre-re/lhz_dun01.mcache
new file mode 100644
index 000000000..f4aaa536c
--- /dev/null
+++ b/maps/pre-re/lhz_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_dun02.mcache b/maps/pre-re/lhz_dun02.mcache
new file mode 100644
index 000000000..27dea3a1a
--- /dev/null
+++ b/maps/pre-re/lhz_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_dun03.mcache b/maps/pre-re/lhz_dun03.mcache
new file mode 100644
index 000000000..21c5a0777
--- /dev/null
+++ b/maps/pre-re/lhz_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_dun04.mcache b/maps/pre-re/lhz_dun04.mcache
new file mode 100644
index 000000000..abe634c5b
--- /dev/null
+++ b/maps/pre-re/lhz_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_fild01.mcache b/maps/pre-re/lhz_fild01.mcache
new file mode 100644
index 000000000..da09232e0
--- /dev/null
+++ b/maps/pre-re/lhz_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_fild02.mcache b/maps/pre-re/lhz_fild02.mcache
new file mode 100644
index 000000000..e2b2a173e
--- /dev/null
+++ b/maps/pre-re/lhz_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_fild03.mcache b/maps/pre-re/lhz_fild03.mcache
new file mode 100644
index 000000000..fc0f780b9
--- /dev/null
+++ b/maps/pre-re/lhz_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_in01.mcache b/maps/pre-re/lhz_in01.mcache
new file mode 100644
index 000000000..2157cbfdf
--- /dev/null
+++ b/maps/pre-re/lhz_in01.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_in02.mcache b/maps/pre-re/lhz_in02.mcache
new file mode 100644
index 000000000..697a72dec
--- /dev/null
+++ b/maps/pre-re/lhz_in02.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_in03.mcache b/maps/pre-re/lhz_in03.mcache
new file mode 100644
index 000000000..212d47dd9
--- /dev/null
+++ b/maps/pre-re/lhz_in03.mcache
Binary files differ
diff --git a/maps/pre-re/lhz_que01.mcache b/maps/pre-re/lhz_que01.mcache
new file mode 100644
index 000000000..9a88496da
--- /dev/null
+++ b/maps/pre-re/lhz_que01.mcache
Binary files differ
diff --git a/maps/pre-re/lighthalzen.mcache b/maps/pre-re/lighthalzen.mcache
new file mode 100644
index 000000000..9fa7e2d55
--- /dev/null
+++ b/maps/pre-re/lighthalzen.mcache
Binary files differ
diff --git a/maps/pre-re/lou_dun01.mcache b/maps/pre-re/lou_dun01.mcache
new file mode 100644
index 000000000..bfef8e06a
--- /dev/null
+++ b/maps/pre-re/lou_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/lou_dun02.mcache b/maps/pre-re/lou_dun02.mcache
new file mode 100644
index 000000000..218820a8a
--- /dev/null
+++ b/maps/pre-re/lou_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/lou_dun03.mcache b/maps/pre-re/lou_dun03.mcache
new file mode 100644
index 000000000..dffe3027c
--- /dev/null
+++ b/maps/pre-re/lou_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/lou_fild01.mcache b/maps/pre-re/lou_fild01.mcache
new file mode 100644
index 000000000..e50f0cbc0
--- /dev/null
+++ b/maps/pre-re/lou_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/lou_in01.mcache b/maps/pre-re/lou_in01.mcache
new file mode 100644
index 000000000..f5beb6a85
--- /dev/null
+++ b/maps/pre-re/lou_in01.mcache
Binary files differ
diff --git a/maps/pre-re/lou_in02.mcache b/maps/pre-re/lou_in02.mcache
new file mode 100644
index 000000000..599ce2a91
--- /dev/null
+++ b/maps/pre-re/lou_in02.mcache
Binary files differ
diff --git a/maps/pre-re/louyang.mcache b/maps/pre-re/louyang.mcache
new file mode 100644
index 000000000..2fc2771c7
--- /dev/null
+++ b/maps/pre-re/louyang.mcache
Binary files differ
diff --git a/maps/pre-re/ma_dun01.mcache b/maps/pre-re/ma_dun01.mcache
new file mode 100644
index 000000000..08e14d31d
--- /dev/null
+++ b/maps/pre-re/ma_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/ma_fild01.mcache b/maps/pre-re/ma_fild01.mcache
new file mode 100644
index 000000000..533ae6f76
--- /dev/null
+++ b/maps/pre-re/ma_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ma_fild02.mcache b/maps/pre-re/ma_fild02.mcache
new file mode 100644
index 000000000..0a3a30139
--- /dev/null
+++ b/maps/pre-re/ma_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/ma_in01.mcache b/maps/pre-re/ma_in01.mcache
new file mode 100644
index 000000000..fd575eb05
--- /dev/null
+++ b/maps/pre-re/ma_in01.mcache
Binary files differ
diff --git a/maps/pre-re/ma_scene01.mcache b/maps/pre-re/ma_scene01.mcache
new file mode 100644
index 000000000..5a72418c2
--- /dev/null
+++ b/maps/pre-re/ma_scene01.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif01.mcache b/maps/pre-re/ma_zif01.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif01.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif02.mcache b/maps/pre-re/ma_zif02.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif02.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif03.mcache b/maps/pre-re/ma_zif03.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif03.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif04.mcache b/maps/pre-re/ma_zif04.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif04.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif05.mcache b/maps/pre-re/ma_zif05.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif05.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif06.mcache b/maps/pre-re/ma_zif06.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif06.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif07.mcache b/maps/pre-re/ma_zif07.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif07.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif08.mcache b/maps/pre-re/ma_zif08.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif08.mcache
Binary files differ
diff --git a/maps/pre-re/ma_zif09.mcache b/maps/pre-re/ma_zif09.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/pre-re/ma_zif09.mcache
Binary files differ
diff --git a/maps/pre-re/mag_dun01.mcache b/maps/pre-re/mag_dun01.mcache
new file mode 100644
index 000000000..f7b105384
--- /dev/null
+++ b/maps/pre-re/mag_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/mag_dun02.mcache b/maps/pre-re/mag_dun02.mcache
new file mode 100644
index 000000000..f431b1be4
--- /dev/null
+++ b/maps/pre-re/mag_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/mal_dun01.mcache b/maps/pre-re/mal_dun01.mcache
new file mode 100644
index 000000000..5e6c8cac0
--- /dev/null
+++ b/maps/pre-re/mal_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/mal_in01.mcache b/maps/pre-re/mal_in01.mcache
new file mode 100644
index 000000000..ad09b6b31
--- /dev/null
+++ b/maps/pre-re/mal_in01.mcache
Binary files differ
diff --git a/maps/pre-re/mal_in02.mcache b/maps/pre-re/mal_in02.mcache
new file mode 100644
index 000000000..e1de349d5
--- /dev/null
+++ b/maps/pre-re/mal_in02.mcache
Binary files differ
diff --git a/maps/pre-re/malangdo.mcache b/maps/pre-re/malangdo.mcache
new file mode 100644
index 000000000..ca38b2099
--- /dev/null
+++ b/maps/pre-re/malangdo.mcache
Binary files differ
diff --git a/maps/pre-re/malaya.mcache b/maps/pre-re/malaya.mcache
new file mode 100644
index 000000000..f96dcb859
--- /dev/null
+++ b/maps/pre-re/malaya.mcache
Binary files differ
diff --git a/maps/pre-re/man_fild01.mcache b/maps/pre-re/man_fild01.mcache
new file mode 100644
index 000000000..38084c1a1
--- /dev/null
+++ b/maps/pre-re/man_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/man_fild02.mcache b/maps/pre-re/man_fild02.mcache
new file mode 100644
index 000000000..39df537f9
--- /dev/null
+++ b/maps/pre-re/man_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/man_fild03.mcache b/maps/pre-re/man_fild03.mcache
new file mode 100644
index 000000000..59450915a
--- /dev/null
+++ b/maps/pre-re/man_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/man_in01.mcache b/maps/pre-re/man_in01.mcache
new file mode 100644
index 000000000..0263fd518
--- /dev/null
+++ b/maps/pre-re/man_in01.mcache
Binary files differ
diff --git a/maps/pre-re/manuk.mcache b/maps/pre-re/manuk.mcache
new file mode 100644
index 000000000..3dde06f18
--- /dev/null
+++ b/maps/pre-re/manuk.mcache
Binary files differ
diff --git a/maps/pre-re/mid_camp.mcache b/maps/pre-re/mid_camp.mcache
new file mode 100644
index 000000000..8927c2b0c
--- /dev/null
+++ b/maps/pre-re/mid_camp.mcache
Binary files differ
diff --git a/maps/pre-re/mid_campin.mcache b/maps/pre-re/mid_campin.mcache
new file mode 100644
index 000000000..f1a91e0f2
--- /dev/null
+++ b/maps/pre-re/mid_campin.mcache
Binary files differ
diff --git a/maps/pre-re/mjo_dun01.mcache b/maps/pre-re/mjo_dun01.mcache
new file mode 100644
index 000000000..463ff9391
--- /dev/null
+++ b/maps/pre-re/mjo_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/mjo_dun02.mcache b/maps/pre-re/mjo_dun02.mcache
new file mode 100644
index 000000000..783a6168c
--- /dev/null
+++ b/maps/pre-re/mjo_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/mjo_dun03.mcache b/maps/pre-re/mjo_dun03.mcache
new file mode 100644
index 000000000..85e9d8c86
--- /dev/null
+++ b/maps/pre-re/mjo_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_01.mcache b/maps/pre-re/mjolnir_01.mcache
new file mode 100644
index 000000000..a7e82b8c9
--- /dev/null
+++ b/maps/pre-re/mjolnir_01.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_02.mcache b/maps/pre-re/mjolnir_02.mcache
new file mode 100644
index 000000000..dd4106bca
--- /dev/null
+++ b/maps/pre-re/mjolnir_02.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_03.mcache b/maps/pre-re/mjolnir_03.mcache
new file mode 100644
index 000000000..fcf3f2fcd
--- /dev/null
+++ b/maps/pre-re/mjolnir_03.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_04.mcache b/maps/pre-re/mjolnir_04.mcache
new file mode 100644
index 000000000..7ec6bb4e3
--- /dev/null
+++ b/maps/pre-re/mjolnir_04.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_05.mcache b/maps/pre-re/mjolnir_05.mcache
new file mode 100644
index 000000000..36399ad50
--- /dev/null
+++ b/maps/pre-re/mjolnir_05.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_06.mcache b/maps/pre-re/mjolnir_06.mcache
new file mode 100644
index 000000000..b701e8d48
--- /dev/null
+++ b/maps/pre-re/mjolnir_06.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_07.mcache b/maps/pre-re/mjolnir_07.mcache
new file mode 100644
index 000000000..3f58fad46
--- /dev/null
+++ b/maps/pre-re/mjolnir_07.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_08.mcache b/maps/pre-re/mjolnir_08.mcache
new file mode 100644
index 000000000..14ed36043
--- /dev/null
+++ b/maps/pre-re/mjolnir_08.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_09.mcache b/maps/pre-re/mjolnir_09.mcache
new file mode 100644
index 000000000..a0a2e7850
--- /dev/null
+++ b/maps/pre-re/mjolnir_09.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_10.mcache b/maps/pre-re/mjolnir_10.mcache
new file mode 100644
index 000000000..6798feeef
--- /dev/null
+++ b/maps/pre-re/mjolnir_10.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_11.mcache b/maps/pre-re/mjolnir_11.mcache
new file mode 100644
index 000000000..a531be2e5
--- /dev/null
+++ b/maps/pre-re/mjolnir_11.mcache
Binary files differ
diff --git a/maps/pre-re/mjolnir_12.mcache b/maps/pre-re/mjolnir_12.mcache
new file mode 100644
index 000000000..263826474
--- /dev/null
+++ b/maps/pre-re/mjolnir_12.mcache
Binary files differ
diff --git a/maps/pre-re/moc_castle.mcache b/maps/pre-re/moc_castle.mcache
new file mode 100644
index 000000000..df2f98364
--- /dev/null
+++ b/maps/pre-re/moc_castle.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild01.mcache b/maps/pre-re/moc_fild01.mcache
new file mode 100644
index 000000000..9d5248ede
--- /dev/null
+++ b/maps/pre-re/moc_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild02.mcache b/maps/pre-re/moc_fild02.mcache
new file mode 100644
index 000000000..4e8823539
--- /dev/null
+++ b/maps/pre-re/moc_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild03.mcache b/maps/pre-re/moc_fild03.mcache
new file mode 100644
index 000000000..30fe9a339
--- /dev/null
+++ b/maps/pre-re/moc_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild04.mcache b/maps/pre-re/moc_fild04.mcache
new file mode 100644
index 000000000..425ef02c8
--- /dev/null
+++ b/maps/pre-re/moc_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild05.mcache b/maps/pre-re/moc_fild05.mcache
new file mode 100644
index 000000000..7a7c17fea
--- /dev/null
+++ b/maps/pre-re/moc_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild06.mcache b/maps/pre-re/moc_fild06.mcache
new file mode 100644
index 000000000..adc69992a
--- /dev/null
+++ b/maps/pre-re/moc_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild07.mcache b/maps/pre-re/moc_fild07.mcache
new file mode 100644
index 000000000..c5b871572
--- /dev/null
+++ b/maps/pre-re/moc_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild08.mcache b/maps/pre-re/moc_fild08.mcache
new file mode 100644
index 000000000..90be6a00a
--- /dev/null
+++ b/maps/pre-re/moc_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild09.mcache b/maps/pre-re/moc_fild09.mcache
new file mode 100644
index 000000000..92333b843
--- /dev/null
+++ b/maps/pre-re/moc_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild10.mcache b/maps/pre-re/moc_fild10.mcache
new file mode 100644
index 000000000..a2ca0c310
--- /dev/null
+++ b/maps/pre-re/moc_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild11.mcache b/maps/pre-re/moc_fild11.mcache
new file mode 100644
index 000000000..3990f7f2c
--- /dev/null
+++ b/maps/pre-re/moc_fild11.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild12.mcache b/maps/pre-re/moc_fild12.mcache
new file mode 100644
index 000000000..d3cc8492b
--- /dev/null
+++ b/maps/pre-re/moc_fild12.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild13.mcache b/maps/pre-re/moc_fild13.mcache
new file mode 100644
index 000000000..8897412ce
--- /dev/null
+++ b/maps/pre-re/moc_fild13.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild14.mcache b/maps/pre-re/moc_fild14.mcache
new file mode 100644
index 000000000..6d2c5273b
--- /dev/null
+++ b/maps/pre-re/moc_fild14.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild15.mcache b/maps/pre-re/moc_fild15.mcache
new file mode 100644
index 000000000..3e4822215
--- /dev/null
+++ b/maps/pre-re/moc_fild15.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild16.mcache b/maps/pre-re/moc_fild16.mcache
new file mode 100644
index 000000000..cbcc87c09
--- /dev/null
+++ b/maps/pre-re/moc_fild16.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild17.mcache b/maps/pre-re/moc_fild17.mcache
new file mode 100644
index 000000000..d3482c025
--- /dev/null
+++ b/maps/pre-re/moc_fild17.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild18.mcache b/maps/pre-re/moc_fild18.mcache
new file mode 100644
index 000000000..11c5c87e9
--- /dev/null
+++ b/maps/pre-re/moc_fild18.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild19.mcache b/maps/pre-re/moc_fild19.mcache
new file mode 100644
index 000000000..b2120a479
--- /dev/null
+++ b/maps/pre-re/moc_fild19.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild20.mcache b/maps/pre-re/moc_fild20.mcache
new file mode 100644
index 000000000..b6114b4fd
--- /dev/null
+++ b/maps/pre-re/moc_fild20.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild21.mcache b/maps/pre-re/moc_fild21.mcache
new file mode 100644
index 000000000..81960cb34
--- /dev/null
+++ b/maps/pre-re/moc_fild21.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild22.mcache b/maps/pre-re/moc_fild22.mcache
new file mode 100644
index 000000000..3ee6cdb98
--- /dev/null
+++ b/maps/pre-re/moc_fild22.mcache
Binary files differ
diff --git a/maps/pre-re/moc_fild22b.mcache b/maps/pre-re/moc_fild22b.mcache
new file mode 100644
index 000000000..401a147a7
--- /dev/null
+++ b/maps/pre-re/moc_fild22b.mcache
Binary files differ
diff --git a/maps/pre-re/moc_para01.mcache b/maps/pre-re/moc_para01.mcache
new file mode 100644
index 000000000..75a96162b
--- /dev/null
+++ b/maps/pre-re/moc_para01.mcache
Binary files differ
diff --git a/maps/pre-re/moc_pryd01.mcache b/maps/pre-re/moc_pryd01.mcache
new file mode 100644
index 000000000..9f63b5199
--- /dev/null
+++ b/maps/pre-re/moc_pryd01.mcache
Binary files differ
diff --git a/maps/pre-re/moc_pryd02.mcache b/maps/pre-re/moc_pryd02.mcache
new file mode 100644
index 000000000..99edf571c
--- /dev/null
+++ b/maps/pre-re/moc_pryd02.mcache
Binary files differ
diff --git a/maps/pre-re/moc_pryd03.mcache b/maps/pre-re/moc_pryd03.mcache
new file mode 100644
index 000000000..1fd2c3334
--- /dev/null
+++ b/maps/pre-re/moc_pryd03.mcache
Binary files differ
diff --git a/maps/pre-re/moc_pryd04.mcache b/maps/pre-re/moc_pryd04.mcache
new file mode 100644
index 000000000..df0b9e8b8
--- /dev/null
+++ b/maps/pre-re/moc_pryd04.mcache
Binary files differ
diff --git a/maps/pre-re/moc_pryd05.mcache b/maps/pre-re/moc_pryd05.mcache
new file mode 100644
index 000000000..055734937
--- /dev/null
+++ b/maps/pre-re/moc_pryd05.mcache
Binary files differ
diff --git a/maps/pre-re/moc_pryd06.mcache b/maps/pre-re/moc_pryd06.mcache
new file mode 100644
index 000000000..11470d0e9
--- /dev/null
+++ b/maps/pre-re/moc_pryd06.mcache
Binary files differ
diff --git a/maps/pre-re/moc_prydb1.mcache b/maps/pre-re/moc_prydb1.mcache
new file mode 100644
index 000000000..dcab86b5d
--- /dev/null
+++ b/maps/pre-re/moc_prydb1.mcache
Binary files differ
diff --git a/maps/pre-re/moc_prydn1.mcache b/maps/pre-re/moc_prydn1.mcache
new file mode 100644
index 000000000..055734937
--- /dev/null
+++ b/maps/pre-re/moc_prydn1.mcache
Binary files differ
diff --git a/maps/pre-re/moc_prydn2.mcache b/maps/pre-re/moc_prydn2.mcache
new file mode 100644
index 000000000..11470d0e9
--- /dev/null
+++ b/maps/pre-re/moc_prydn2.mcache
Binary files differ
diff --git a/maps/pre-re/moc_ruins.mcache b/maps/pre-re/moc_ruins.mcache
new file mode 100644
index 000000000..01f4238d5
--- /dev/null
+++ b/maps/pre-re/moc_ruins.mcache
Binary files differ
diff --git a/maps/pre-re/monk_in.mcache b/maps/pre-re/monk_in.mcache
new file mode 100644
index 000000000..95894520b
--- /dev/null
+++ b/maps/pre-re/monk_in.mcache
Binary files differ
diff --git a/maps/pre-re/monk_test.mcache b/maps/pre-re/monk_test.mcache
new file mode 100644
index 000000000..c9c05a35e
--- /dev/null
+++ b/maps/pre-re/monk_test.mcache
Binary files differ
diff --git a/maps/pre-re/mora.mcache b/maps/pre-re/mora.mcache
new file mode 100644
index 000000000..62fef21db
--- /dev/null
+++ b/maps/pre-re/mora.mcache
Binary files differ
diff --git a/maps/pre-re/moro_cav.mcache b/maps/pre-re/moro_cav.mcache
new file mode 100644
index 000000000..5c0a300c7
--- /dev/null
+++ b/maps/pre-re/moro_cav.mcache
Binary files differ
diff --git a/maps/pre-re/moro_vol.mcache b/maps/pre-re/moro_vol.mcache
new file mode 100644
index 000000000..12c80874e
--- /dev/null
+++ b/maps/pre-re/moro_vol.mcache
Binary files differ
diff --git a/maps/pre-re/morocc.mcache b/maps/pre-re/morocc.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/morocc.mcache
Binary files differ
diff --git a/maps/pre-re/morocc_in.mcache b/maps/pre-re/morocc_in.mcache
new file mode 100644
index 000000000..048478ec6
--- /dev/null
+++ b/maps/pre-re/morocc_in.mcache
Binary files differ
diff --git a/maps/pre-re/moscovia.mcache b/maps/pre-re/moscovia.mcache
new file mode 100644
index 000000000..b1dc3cc65
--- /dev/null
+++ b/maps/pre-re/moscovia.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_dun01.mcache b/maps/pre-re/mosk_dun01.mcache
new file mode 100644
index 000000000..4ac6743a2
--- /dev/null
+++ b/maps/pre-re/mosk_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_dun02.mcache b/maps/pre-re/mosk_dun02.mcache
new file mode 100644
index 000000000..e506eb7f4
--- /dev/null
+++ b/maps/pre-re/mosk_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_dun03.mcache b/maps/pre-re/mosk_dun03.mcache
new file mode 100644
index 000000000..b1f422919
--- /dev/null
+++ b/maps/pre-re/mosk_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_fild01.mcache b/maps/pre-re/mosk_fild01.mcache
new file mode 100644
index 000000000..d2a243439
--- /dev/null
+++ b/maps/pre-re/mosk_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_fild02.mcache b/maps/pre-re/mosk_fild02.mcache
new file mode 100644
index 000000000..5f41071fe
--- /dev/null
+++ b/maps/pre-re/mosk_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_in.mcache b/maps/pre-re/mosk_in.mcache
new file mode 100644
index 000000000..bc9b95245
--- /dev/null
+++ b/maps/pre-re/mosk_in.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_que.mcache b/maps/pre-re/mosk_que.mcache
new file mode 100644
index 000000000..2bd62ef91
--- /dev/null
+++ b/maps/pre-re/mosk_que.mcache
Binary files differ
diff --git a/maps/pre-re/mosk_ship.mcache b/maps/pre-re/mosk_ship.mcache
new file mode 100644
index 000000000..b00b89476
--- /dev/null
+++ b/maps/pre-re/mosk_ship.mcache
Binary files differ
diff --git a/maps/pre-re/n_castle.mcache b/maps/pre-re/n_castle.mcache
new file mode 100644
index 000000000..21addf51b
--- /dev/null
+++ b/maps/pre-re/n_castle.mcache
Binary files differ
diff --git a/maps/pre-re/nameless_i.mcache b/maps/pre-re/nameless_i.mcache
new file mode 100644
index 000000000..61ebdf476
--- /dev/null
+++ b/maps/pre-re/nameless_i.mcache
Binary files differ
diff --git a/maps/pre-re/nameless_in.mcache b/maps/pre-re/nameless_in.mcache
new file mode 100644
index 000000000..c7e3e7ade
--- /dev/null
+++ b/maps/pre-re/nameless_in.mcache
Binary files differ
diff --git a/maps/pre-re/nameless_n.mcache b/maps/pre-re/nameless_n.mcache
new file mode 100644
index 000000000..f1d0e03b9
--- /dev/null
+++ b/maps/pre-re/nameless_n.mcache
Binary files differ
diff --git a/maps/pre-re/new_1-1.mcache b/maps/pre-re/new_1-1.mcache
new file mode 100644
index 000000000..14d9c7501
--- /dev/null
+++ b/maps/pre-re/new_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/new_1-2.mcache b/maps/pre-re/new_1-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/pre-re/new_1-2.mcache
Binary files differ
diff --git a/maps/pre-re/new_1-3.mcache b/maps/pre-re/new_1-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/pre-re/new_1-3.mcache
Binary files differ
diff --git a/maps/pre-re/new_1-4.mcache b/maps/pre-re/new_1-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/pre-re/new_1-4.mcache
Binary files differ
diff --git a/maps/pre-re/new_2-1.mcache b/maps/pre-re/new_2-1.mcache
new file mode 100644
index 000000000..14d9c7501
--- /dev/null
+++ b/maps/pre-re/new_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/new_2-2.mcache b/maps/pre-re/new_2-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/pre-re/new_2-2.mcache
Binary files differ
diff --git a/maps/pre-re/new_2-3.mcache b/maps/pre-re/new_2-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/pre-re/new_2-3.mcache
Binary files differ
diff --git a/maps/pre-re/new_2-4.mcache b/maps/pre-re/new_2-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/pre-re/new_2-4.mcache
Binary files differ
diff --git a/maps/pre-re/new_3-1.mcache b/maps/pre-re/new_3-1.mcache
new file mode 100644
index 000000000..14d9c7501
--- /dev/null
+++ b/maps/pre-re/new_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/new_3-2.mcache b/maps/pre-re/new_3-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/pre-re/new_3-2.mcache
Binary files differ
diff --git a/maps/pre-re/new_3-3.mcache b/maps/pre-re/new_3-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/pre-re/new_3-3.mcache
Binary files differ
diff --git a/maps/pre-re/new_3-4.mcache b/maps/pre-re/new_3-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/pre-re/new_3-4.mcache
Binary files differ
diff --git a/maps/pre-re/new_4-1.mcache b/maps/pre-re/new_4-1.mcache
new file mode 100644
index 000000000..14d9c7501
--- /dev/null
+++ b/maps/pre-re/new_4-1.mcache
Binary files differ
diff --git a/maps/pre-re/new_4-2.mcache b/maps/pre-re/new_4-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/pre-re/new_4-2.mcache
Binary files differ
diff --git a/maps/pre-re/new_4-3.mcache b/maps/pre-re/new_4-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/pre-re/new_4-3.mcache
Binary files differ
diff --git a/maps/pre-re/new_4-4.mcache b/maps/pre-re/new_4-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/pre-re/new_4-4.mcache
Binary files differ
diff --git a/maps/pre-re/new_5-1.mcache b/maps/pre-re/new_5-1.mcache
new file mode 100644
index 000000000..14d9c7501
--- /dev/null
+++ b/maps/pre-re/new_5-1.mcache
Binary files differ
diff --git a/maps/pre-re/new_5-2.mcache b/maps/pre-re/new_5-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/pre-re/new_5-2.mcache
Binary files differ
diff --git a/maps/pre-re/new_5-3.mcache b/maps/pre-re/new_5-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/pre-re/new_5-3.mcache
Binary files differ
diff --git a/maps/pre-re/new_5-4.mcache b/maps/pre-re/new_5-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/pre-re/new_5-4.mcache
Binary files differ
diff --git a/maps/pre-re/new_zone01.mcache b/maps/pre-re/new_zone01.mcache
new file mode 100644
index 000000000..14d9c7501
--- /dev/null
+++ b/maps/pre-re/new_zone01.mcache
Binary files differ
diff --git a/maps/pre-re/new_zone02.mcache b/maps/pre-re/new_zone02.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/pre-re/new_zone02.mcache
Binary files differ
diff --git a/maps/pre-re/new_zone03.mcache b/maps/pre-re/new_zone03.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/pre-re/new_zone03.mcache
Binary files differ
diff --git a/maps/pre-re/new_zone04.mcache b/maps/pre-re/new_zone04.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/pre-re/new_zone04.mcache
Binary files differ
diff --git a/maps/pre-re/nguild_alde.mcache b/maps/pre-re/nguild_alde.mcache
new file mode 100644
index 000000000..4d96f61e3
--- /dev/null
+++ b/maps/pre-re/nguild_alde.mcache
Binary files differ
diff --git a/maps/pre-re/nguild_gef.mcache b/maps/pre-re/nguild_gef.mcache
new file mode 100644
index 000000000..fcc51f76d
--- /dev/null
+++ b/maps/pre-re/nguild_gef.mcache
Binary files differ
diff --git a/maps/pre-re/nguild_pay.mcache b/maps/pre-re/nguild_pay.mcache
new file mode 100644
index 000000000..dd8f3e46f
--- /dev/null
+++ b/maps/pre-re/nguild_pay.mcache
Binary files differ
diff --git a/maps/pre-re/nguild_prt.mcache b/maps/pre-re/nguild_prt.mcache
new file mode 100644
index 000000000..1e01f48a7
--- /dev/null
+++ b/maps/pre-re/nguild_prt.mcache
Binary files differ
diff --git a/maps/pre-re/nif_fild01.mcache b/maps/pre-re/nif_fild01.mcache
new file mode 100644
index 000000000..70373e9c1
--- /dev/null
+++ b/maps/pre-re/nif_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/nif_fild02.mcache b/maps/pre-re/nif_fild02.mcache
new file mode 100644
index 000000000..7aa820023
--- /dev/null
+++ b/maps/pre-re/nif_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/nif_in.mcache b/maps/pre-re/nif_in.mcache
new file mode 100644
index 000000000..3ab7e945a
--- /dev/null
+++ b/maps/pre-re/nif_in.mcache
Binary files differ
diff --git a/maps/pre-re/niflheim.mcache b/maps/pre-re/niflheim.mcache
new file mode 100644
index 000000000..3d2def292
--- /dev/null
+++ b/maps/pre-re/niflheim.mcache
Binary files differ
diff --git a/maps/pre-re/nyd_dun01.mcache b/maps/pre-re/nyd_dun01.mcache
new file mode 100644
index 000000000..c29cebe1a
--- /dev/null
+++ b/maps/pre-re/nyd_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/nyd_dun02.mcache b/maps/pre-re/nyd_dun02.mcache
new file mode 100644
index 000000000..a8ef4a685
--- /dev/null
+++ b/maps/pre-re/nyd_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/odin_tem01.mcache b/maps/pre-re/odin_tem01.mcache
new file mode 100644
index 000000000..4339dd605
--- /dev/null
+++ b/maps/pre-re/odin_tem01.mcache
Binary files differ
diff --git a/maps/pre-re/odin_tem02.mcache b/maps/pre-re/odin_tem02.mcache
new file mode 100644
index 000000000..1003a8c08
--- /dev/null
+++ b/maps/pre-re/odin_tem02.mcache
Binary files differ
diff --git a/maps/pre-re/odin_tem03.mcache b/maps/pre-re/odin_tem03.mcache
new file mode 100644
index 000000000..9f3307aef
--- /dev/null
+++ b/maps/pre-re/odin_tem03.mcache
Binary files differ
diff --git a/maps/pre-re/orcsdun01.mcache b/maps/pre-re/orcsdun01.mcache
new file mode 100644
index 000000000..3b3951498
--- /dev/null
+++ b/maps/pre-re/orcsdun01.mcache
Binary files differ
diff --git a/maps/pre-re/orcsdun02.mcache b/maps/pre-re/orcsdun02.mcache
new file mode 100644
index 000000000..004256991
--- /dev/null
+++ b/maps/pre-re/orcsdun02.mcache
Binary files differ
diff --git a/maps/pre-re/ordeal_1-1.mcache b/maps/pre-re/ordeal_1-1.mcache
new file mode 100644
index 000000000..3a0270fbe
--- /dev/null
+++ b/maps/pre-re/ordeal_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/ordeal_1-2.mcache b/maps/pre-re/ordeal_1-2.mcache
new file mode 100644
index 000000000..e2b64784d
--- /dev/null
+++ b/maps/pre-re/ordeal_1-2.mcache
Binary files differ
diff --git a/maps/pre-re/ordeal_2-1.mcache b/maps/pre-re/ordeal_2-1.mcache
new file mode 100644
index 000000000..3a0270fbe
--- /dev/null
+++ b/maps/pre-re/ordeal_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/ordeal_2-2.mcache b/maps/pre-re/ordeal_2-2.mcache
new file mode 100644
index 000000000..e2b64784d
--- /dev/null
+++ b/maps/pre-re/ordeal_2-2.mcache
Binary files differ
diff --git a/maps/pre-re/ordeal_3-1.mcache b/maps/pre-re/ordeal_3-1.mcache
new file mode 100644
index 000000000..3a0270fbe
--- /dev/null
+++ b/maps/pre-re/ordeal_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/ordeal_3-2.mcache b/maps/pre-re/ordeal_3-2.mcache
new file mode 100644
index 000000000..e2b64784d
--- /dev/null
+++ b/maps/pre-re/ordeal_3-2.mcache
Binary files differ
diff --git a/maps/pre-re/p_track01.mcache b/maps/pre-re/p_track01.mcache
new file mode 100644
index 000000000..c521d1a2f
--- /dev/null
+++ b/maps/pre-re/p_track01.mcache
Binary files differ
diff --git a/maps/pre-re/p_track02.mcache b/maps/pre-re/p_track02.mcache
new file mode 100644
index 000000000..c521d1a2f
--- /dev/null
+++ b/maps/pre-re/p_track02.mcache
Binary files differ
diff --git a/maps/pre-re/pay_arche.mcache b/maps/pre-re/pay_arche.mcache
new file mode 100644
index 000000000..5ff2bc766
--- /dev/null
+++ b/maps/pre-re/pay_arche.mcache
Binary files differ
diff --git a/maps/pre-re/pay_dun00.mcache b/maps/pre-re/pay_dun00.mcache
new file mode 100644
index 000000000..ed867896b
--- /dev/null
+++ b/maps/pre-re/pay_dun00.mcache
Binary files differ
diff --git a/maps/pre-re/pay_dun01.mcache b/maps/pre-re/pay_dun01.mcache
new file mode 100644
index 000000000..212935951
--- /dev/null
+++ b/maps/pre-re/pay_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/pay_dun02.mcache b/maps/pre-re/pay_dun02.mcache
new file mode 100644
index 000000000..c0241aa2d
--- /dev/null
+++ b/maps/pre-re/pay_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/pay_dun03.mcache b/maps/pre-re/pay_dun03.mcache
new file mode 100644
index 000000000..b0a2e4dea
--- /dev/null
+++ b/maps/pre-re/pay_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/pay_dun04.mcache b/maps/pre-re/pay_dun04.mcache
new file mode 100644
index 000000000..d143327aa
--- /dev/null
+++ b/maps/pre-re/pay_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild01.mcache b/maps/pre-re/pay_fild01.mcache
new file mode 100644
index 000000000..e18c4ae1c
--- /dev/null
+++ b/maps/pre-re/pay_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild02.mcache b/maps/pre-re/pay_fild02.mcache
new file mode 100644
index 000000000..ea3929609
--- /dev/null
+++ b/maps/pre-re/pay_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild03.mcache b/maps/pre-re/pay_fild03.mcache
new file mode 100644
index 000000000..2c1411fb8
--- /dev/null
+++ b/maps/pre-re/pay_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild04.mcache b/maps/pre-re/pay_fild04.mcache
new file mode 100644
index 000000000..9380cb3f5
--- /dev/null
+++ b/maps/pre-re/pay_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild05.mcache b/maps/pre-re/pay_fild05.mcache
new file mode 100644
index 000000000..476c6f9a2
--- /dev/null
+++ b/maps/pre-re/pay_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild06.mcache b/maps/pre-re/pay_fild06.mcache
new file mode 100644
index 000000000..295db1acb
--- /dev/null
+++ b/maps/pre-re/pay_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild07.mcache b/maps/pre-re/pay_fild07.mcache
new file mode 100644
index 000000000..7b72778f4
--- /dev/null
+++ b/maps/pre-re/pay_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild08.mcache b/maps/pre-re/pay_fild08.mcache
new file mode 100644
index 000000000..65ae31131
--- /dev/null
+++ b/maps/pre-re/pay_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild09.mcache b/maps/pre-re/pay_fild09.mcache
new file mode 100644
index 000000000..2b2fd9936
--- /dev/null
+++ b/maps/pre-re/pay_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild10.mcache b/maps/pre-re/pay_fild10.mcache
new file mode 100644
index 000000000..22e021de3
--- /dev/null
+++ b/maps/pre-re/pay_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/pay_fild11.mcache b/maps/pre-re/pay_fild11.mcache
new file mode 100644
index 000000000..455f4773d
--- /dev/null
+++ b/maps/pre-re/pay_fild11.mcache
Binary files differ
diff --git a/maps/pre-re/pay_gld.mcache b/maps/pre-re/pay_gld.mcache
new file mode 100644
index 000000000..7ee389aa9
--- /dev/null
+++ b/maps/pre-re/pay_gld.mcache
Binary files differ
diff --git a/maps/pre-re/payg_cas01.mcache b/maps/pre-re/payg_cas01.mcache
new file mode 100644
index 000000000..dd8f3e46f
--- /dev/null
+++ b/maps/pre-re/payg_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/payg_cas02.mcache b/maps/pre-re/payg_cas02.mcache
new file mode 100644
index 000000000..08bfdf4c6
--- /dev/null
+++ b/maps/pre-re/payg_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/payg_cas03.mcache b/maps/pre-re/payg_cas03.mcache
new file mode 100644
index 000000000..241303db7
--- /dev/null
+++ b/maps/pre-re/payg_cas03.mcache
Binary files differ
diff --git a/maps/pre-re/payg_cas04.mcache b/maps/pre-re/payg_cas04.mcache
new file mode 100644
index 000000000..4a24ce972
--- /dev/null
+++ b/maps/pre-re/payg_cas04.mcache
Binary files differ
diff --git a/maps/pre-re/payg_cas05.mcache b/maps/pre-re/payg_cas05.mcache
new file mode 100644
index 000000000..cd0c46764
--- /dev/null
+++ b/maps/pre-re/payg_cas05.mcache
Binary files differ
diff --git a/maps/pre-re/payon.mcache b/maps/pre-re/payon.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/payon.mcache
Binary files differ
diff --git a/maps/pre-re/payon_in01.mcache b/maps/pre-re/payon_in01.mcache
new file mode 100644
index 000000000..7615d0ba8
--- /dev/null
+++ b/maps/pre-re/payon_in01.mcache
Binary files differ
diff --git a/maps/pre-re/payon_in02.mcache b/maps/pre-re/payon_in02.mcache
new file mode 100644
index 000000000..930ca08f0
--- /dev/null
+++ b/maps/pre-re/payon_in02.mcache
Binary files differ
diff --git a/maps/pre-re/payon_in03.mcache b/maps/pre-re/payon_in03.mcache
new file mode 100644
index 000000000..4021bd697
--- /dev/null
+++ b/maps/pre-re/payon_in03.mcache
Binary files differ
diff --git a/maps/pre-re/poring_w01.mcache b/maps/pre-re/poring_w01.mcache
new file mode 100644
index 000000000..42a9b8bcd
--- /dev/null
+++ b/maps/pre-re/poring_w01.mcache
Binary files differ
diff --git a/maps/pre-re/poring_w02.mcache b/maps/pre-re/poring_w02.mcache
new file mode 100644
index 000000000..728073980
--- /dev/null
+++ b/maps/pre-re/poring_w02.mcache
Binary files differ
diff --git a/maps/pre-re/priest_1-1.mcache b/maps/pre-re/priest_1-1.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/priest_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/priest_2-1.mcache b/maps/pre-re/priest_2-1.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/priest_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/priest_3-1.mcache b/maps/pre-re/priest_3-1.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/priest_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/prontera.mcache b/maps/pre-re/prontera.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/prontera.mcache
Binary files differ
diff --git a/maps/pre-re/prt_are01.mcache b/maps/pre-re/prt_are01.mcache
new file mode 100644
index 000000000..2ebcad3d5
--- /dev/null
+++ b/maps/pre-re/prt_are01.mcache
Binary files differ
diff --git a/maps/pre-re/prt_are_in.mcache b/maps/pre-re/prt_are_in.mcache
new file mode 100644
index 000000000..03216ff8b
--- /dev/null
+++ b/maps/pre-re/prt_are_in.mcache
Binary files differ
diff --git a/maps/pre-re/prt_castle.mcache b/maps/pre-re/prt_castle.mcache
new file mode 100644
index 000000000..8f3f6005f
--- /dev/null
+++ b/maps/pre-re/prt_castle.mcache
Binary files differ
diff --git a/maps/pre-re/prt_church.mcache b/maps/pre-re/prt_church.mcache
new file mode 100644
index 000000000..d3f67cfd2
--- /dev/null
+++ b/maps/pre-re/prt_church.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild00.mcache b/maps/pre-re/prt_fild00.mcache
new file mode 100644
index 000000000..0727f12dd
--- /dev/null
+++ b/maps/pre-re/prt_fild00.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild01.mcache b/maps/pre-re/prt_fild01.mcache
new file mode 100644
index 000000000..0caccefba
--- /dev/null
+++ b/maps/pre-re/prt_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild02.mcache b/maps/pre-re/prt_fild02.mcache
new file mode 100644
index 000000000..9e256cff8
--- /dev/null
+++ b/maps/pre-re/prt_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild03.mcache b/maps/pre-re/prt_fild03.mcache
new file mode 100644
index 000000000..c0c96b87b
--- /dev/null
+++ b/maps/pre-re/prt_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild04.mcache b/maps/pre-re/prt_fild04.mcache
new file mode 100644
index 000000000..bf80badac
--- /dev/null
+++ b/maps/pre-re/prt_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild05.mcache b/maps/pre-re/prt_fild05.mcache
new file mode 100644
index 000000000..bf8fa9c62
--- /dev/null
+++ b/maps/pre-re/prt_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild06.mcache b/maps/pre-re/prt_fild06.mcache
new file mode 100644
index 000000000..5deb8ab1e
--- /dev/null
+++ b/maps/pre-re/prt_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild07.mcache b/maps/pre-re/prt_fild07.mcache
new file mode 100644
index 000000000..bf985211e
--- /dev/null
+++ b/maps/pre-re/prt_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild08.mcache b/maps/pre-re/prt_fild08.mcache
new file mode 100644
index 000000000..ea7908458
--- /dev/null
+++ b/maps/pre-re/prt_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild08a.mcache b/maps/pre-re/prt_fild08a.mcache
new file mode 100644
index 000000000..ea7908458
--- /dev/null
+++ b/maps/pre-re/prt_fild08a.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild08b.mcache b/maps/pre-re/prt_fild08b.mcache
new file mode 100644
index 000000000..ea7908458
--- /dev/null
+++ b/maps/pre-re/prt_fild08b.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild08c.mcache b/maps/pre-re/prt_fild08c.mcache
new file mode 100644
index 000000000..ea7908458
--- /dev/null
+++ b/maps/pre-re/prt_fild08c.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild08d.mcache b/maps/pre-re/prt_fild08d.mcache
new file mode 100644
index 000000000..ea7908458
--- /dev/null
+++ b/maps/pre-re/prt_fild08d.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild09.mcache b/maps/pre-re/prt_fild09.mcache
new file mode 100644
index 000000000..e82e16b53
--- /dev/null
+++ b/maps/pre-re/prt_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild10.mcache b/maps/pre-re/prt_fild10.mcache
new file mode 100644
index 000000000..4a75d4436
--- /dev/null
+++ b/maps/pre-re/prt_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/prt_fild11.mcache b/maps/pre-re/prt_fild11.mcache
new file mode 100644
index 000000000..eefc95413
--- /dev/null
+++ b/maps/pre-re/prt_fild11.mcache
Binary files differ
diff --git a/maps/pre-re/prt_gld.mcache b/maps/pre-re/prt_gld.mcache
new file mode 100644
index 000000000..6f2c0b38e
--- /dev/null
+++ b/maps/pre-re/prt_gld.mcache
Binary files differ
diff --git a/maps/pre-re/prt_in.mcache b/maps/pre-re/prt_in.mcache
new file mode 100644
index 000000000..cdef00b3c
--- /dev/null
+++ b/maps/pre-re/prt_in.mcache
Binary files differ
diff --git a/maps/pre-re/prt_maze01.mcache b/maps/pre-re/prt_maze01.mcache
new file mode 100644
index 000000000..c3ebc6cb8
--- /dev/null
+++ b/maps/pre-re/prt_maze01.mcache
Binary files differ
diff --git a/maps/pre-re/prt_maze02.mcache b/maps/pre-re/prt_maze02.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/prt_maze02.mcache
Binary files differ
diff --git a/maps/pre-re/prt_maze03.mcache b/maps/pre-re/prt_maze03.mcache
new file mode 100644
index 000000000..19206a004
--- /dev/null
+++ b/maps/pre-re/prt_maze03.mcache
Binary files differ
diff --git a/maps/pre-re/prt_monk.mcache b/maps/pre-re/prt_monk.mcache
new file mode 100644
index 000000000..dede5a9c2
--- /dev/null
+++ b/maps/pre-re/prt_monk.mcache
Binary files differ
diff --git a/maps/pre-re/prt_sewb1.mcache b/maps/pre-re/prt_sewb1.mcache
new file mode 100644
index 000000000..9321818f6
--- /dev/null
+++ b/maps/pre-re/prt_sewb1.mcache
Binary files differ
diff --git a/maps/pre-re/prt_sewb2.mcache b/maps/pre-re/prt_sewb2.mcache
new file mode 100644
index 000000000..312bac4b3
--- /dev/null
+++ b/maps/pre-re/prt_sewb2.mcache
Binary files differ
diff --git a/maps/pre-re/prt_sewb3.mcache b/maps/pre-re/prt_sewb3.mcache
new file mode 100644
index 000000000..373c2ecea
--- /dev/null
+++ b/maps/pre-re/prt_sewb3.mcache
Binary files differ
diff --git a/maps/pre-re/prt_sewb4.mcache b/maps/pre-re/prt_sewb4.mcache
new file mode 100644
index 000000000..010cc1808
--- /dev/null
+++ b/maps/pre-re/prt_sewb4.mcache
Binary files differ
diff --git a/maps/pre-re/prtg_cas01.mcache b/maps/pre-re/prtg_cas01.mcache
new file mode 100644
index 000000000..1e01f48a7
--- /dev/null
+++ b/maps/pre-re/prtg_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/prtg_cas02.mcache b/maps/pre-re/prtg_cas02.mcache
new file mode 100644
index 000000000..90ba580fa
--- /dev/null
+++ b/maps/pre-re/prtg_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/prtg_cas03.mcache b/maps/pre-re/prtg_cas03.mcache
new file mode 100644
index 000000000..25f9fd86a
--- /dev/null
+++ b/maps/pre-re/prtg_cas03.mcache
Binary files differ
diff --git a/maps/pre-re/prtg_cas04.mcache b/maps/pre-re/prtg_cas04.mcache
new file mode 100644
index 000000000..66f12ad53
--- /dev/null
+++ b/maps/pre-re/prtg_cas04.mcache
Binary files differ
diff --git a/maps/pre-re/prtg_cas05.mcache b/maps/pre-re/prtg_cas05.mcache
new file mode 100644
index 000000000..e57e5e886
--- /dev/null
+++ b/maps/pre-re/prtg_cas05.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_2vs2.mcache b/maps/pre-re/pvp_2vs2.mcache
new file mode 100644
index 000000000..c0043ec27
--- /dev/null
+++ b/maps/pre-re/pvp_2vs2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_c_room.mcache b/maps/pre-re/pvp_c_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/pre-re/pvp_c_room.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_1-1.mcache b/maps/pre-re/pvp_n_1-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_1-2.mcache b/maps/pre-re/pvp_n_1-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_1-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_1-3.mcache b/maps/pre-re/pvp_n_1-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_1-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_1-4.mcache b/maps/pre-re/pvp_n_1-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_1-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_1-5.mcache b/maps/pre-re/pvp_n_1-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_1-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_2-1.mcache b/maps/pre-re/pvp_n_2-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_2-2.mcache b/maps/pre-re/pvp_n_2-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_2-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_2-3.mcache b/maps/pre-re/pvp_n_2-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_2-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_2-4.mcache b/maps/pre-re/pvp_n_2-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_2-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_2-5.mcache b/maps/pre-re/pvp_n_2-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_2-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_3-1.mcache b/maps/pre-re/pvp_n_3-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_3-2.mcache b/maps/pre-re/pvp_n_3-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_3-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_3-3.mcache b/maps/pre-re/pvp_n_3-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_3-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_3-4.mcache b/maps/pre-re/pvp_n_3-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_3-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_3-5.mcache b/maps/pre-re/pvp_n_3-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_3-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_4-1.mcache b/maps/pre-re/pvp_n_4-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_4-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_4-2.mcache b/maps/pre-re/pvp_n_4-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_4-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_4-3.mcache b/maps/pre-re/pvp_n_4-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_4-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_4-4.mcache b/maps/pre-re/pvp_n_4-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_4-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_4-5.mcache b/maps/pre-re/pvp_n_4-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_4-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_5-1.mcache b/maps/pre-re/pvp_n_5-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_5-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_5-2.mcache b/maps/pre-re/pvp_n_5-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_5-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_5-3.mcache b/maps/pre-re/pvp_n_5-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_5-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_5-4.mcache b/maps/pre-re/pvp_n_5-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_5-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_5-5.mcache b/maps/pre-re/pvp_n_5-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_5-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_6-1.mcache b/maps/pre-re/pvp_n_6-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_6-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_6-2.mcache b/maps/pre-re/pvp_n_6-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_6-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_6-3.mcache b/maps/pre-re/pvp_n_6-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_6-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_6-4.mcache b/maps/pre-re/pvp_n_6-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_6-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_6-5.mcache b/maps/pre-re/pvp_n_6-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_6-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_7-1.mcache b/maps/pre-re/pvp_n_7-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_7-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_7-2.mcache b/maps/pre-re/pvp_n_7-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_7-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_7-3.mcache b/maps/pre-re/pvp_n_7-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_7-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_7-4.mcache b/maps/pre-re/pvp_n_7-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_7-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_7-5.mcache b/maps/pre-re/pvp_n_7-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_7-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_8-1.mcache b/maps/pre-re/pvp_n_8-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/pre-re/pvp_n_8-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_8-2.mcache b/maps/pre-re/pvp_n_8-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/pre-re/pvp_n_8-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_8-3.mcache b/maps/pre-re/pvp_n_8-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/pvp_n_8-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_8-4.mcache b/maps/pre-re/pvp_n_8-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/pre-re/pvp_n_8-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_8-5.mcache b/maps/pre-re/pvp_n_8-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/pre-re/pvp_n_8-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_n_room.mcache b/maps/pre-re/pvp_n_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/pre-re/pvp_n_room.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_room.mcache b/maps/pre-re/pvp_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/pre-re/pvp_room.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_1-1.mcache b/maps/pre-re/pvp_y_1-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_1-2.mcache b/maps/pre-re/pvp_y_1-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_1-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_1-3.mcache b/maps/pre-re/pvp_y_1-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_1-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_1-4.mcache b/maps/pre-re/pvp_y_1-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_1-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_1-5.mcache b/maps/pre-re/pvp_y_1-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_1-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_2-1.mcache b/maps/pre-re/pvp_y_2-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_2-2.mcache b/maps/pre-re/pvp_y_2-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_2-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_2-3.mcache b/maps/pre-re/pvp_y_2-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_2-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_2-4.mcache b/maps/pre-re/pvp_y_2-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_2-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_2-5.mcache b/maps/pre-re/pvp_y_2-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_2-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_3-1.mcache b/maps/pre-re/pvp_y_3-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_3-2.mcache b/maps/pre-re/pvp_y_3-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_3-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_3-3.mcache b/maps/pre-re/pvp_y_3-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_3-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_3-4.mcache b/maps/pre-re/pvp_y_3-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_3-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_3-5.mcache b/maps/pre-re/pvp_y_3-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_3-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_4-1.mcache b/maps/pre-re/pvp_y_4-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_4-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_4-2.mcache b/maps/pre-re/pvp_y_4-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_4-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_4-3.mcache b/maps/pre-re/pvp_y_4-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_4-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_4-4.mcache b/maps/pre-re/pvp_y_4-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_4-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_4-5.mcache b/maps/pre-re/pvp_y_4-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_4-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_5-1.mcache b/maps/pre-re/pvp_y_5-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_5-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_5-2.mcache b/maps/pre-re/pvp_y_5-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_5-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_5-3.mcache b/maps/pre-re/pvp_y_5-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_5-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_5-4.mcache b/maps/pre-re/pvp_y_5-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_5-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_5-5.mcache b/maps/pre-re/pvp_y_5-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_5-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_6-1.mcache b/maps/pre-re/pvp_y_6-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_6-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_6-2.mcache b/maps/pre-re/pvp_y_6-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_6-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_6-3.mcache b/maps/pre-re/pvp_y_6-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_6-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_6-4.mcache b/maps/pre-re/pvp_y_6-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_6-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_6-5.mcache b/maps/pre-re/pvp_y_6-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_6-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_7-1.mcache b/maps/pre-re/pvp_y_7-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_7-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_7-2.mcache b/maps/pre-re/pvp_y_7-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_7-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_7-3.mcache b/maps/pre-re/pvp_y_7-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_7-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_7-4.mcache b/maps/pre-re/pvp_y_7-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_7-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_7-5.mcache b/maps/pre-re/pvp_y_7-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_7-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_8-1.mcache b/maps/pre-re/pvp_y_8-1.mcache
new file mode 100644
index 000000000..c0da924b4
--- /dev/null
+++ b/maps/pre-re/pvp_y_8-1.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_8-2.mcache b/maps/pre-re/pvp_y_8-2.mcache
new file mode 100644
index 000000000..3390e2169
--- /dev/null
+++ b/maps/pre-re/pvp_y_8-2.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_8-3.mcache b/maps/pre-re/pvp_y_8-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/pre-re/pvp_y_8-3.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_8-4.mcache b/maps/pre-re/pvp_y_8-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/pre-re/pvp_y_8-4.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_8-5.mcache b/maps/pre-re/pvp_y_8-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/pre-re/pvp_y_8-5.mcache
Binary files differ
diff --git a/maps/pre-re/pvp_y_room.mcache b/maps/pre-re/pvp_y_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/pre-re/pvp_y_room.mcache
Binary files differ
diff --git a/maps/pre-re/que_avan01.mcache b/maps/pre-re/que_avan01.mcache
new file mode 100644
index 000000000..51cef085a
--- /dev/null
+++ b/maps/pre-re/que_avan01.mcache
Binary files differ
diff --git a/maps/pre-re/que_ba.mcache b/maps/pre-re/que_ba.mcache
new file mode 100644
index 000000000..837b899e8
--- /dev/null
+++ b/maps/pre-re/que_ba.mcache
Binary files differ
diff --git a/maps/pre-re/que_bingo.mcache b/maps/pre-re/que_bingo.mcache
new file mode 100644
index 000000000..dbb24a106
--- /dev/null
+++ b/maps/pre-re/que_bingo.mcache
Binary files differ
diff --git a/maps/pre-re/que_dan01.mcache b/maps/pre-re/que_dan01.mcache
new file mode 100644
index 000000000..b65d1e480
--- /dev/null
+++ b/maps/pre-re/que_dan01.mcache
Binary files differ
diff --git a/maps/pre-re/que_dan02.mcache b/maps/pre-re/que_dan02.mcache
new file mode 100644
index 000000000..ec41374dd
--- /dev/null
+++ b/maps/pre-re/que_dan02.mcache
Binary files differ
diff --git a/maps/pre-re/que_god01.mcache b/maps/pre-re/que_god01.mcache
new file mode 100644
index 000000000..10adf6241
--- /dev/null
+++ b/maps/pre-re/que_god01.mcache
Binary files differ
diff --git a/maps/pre-re/que_god02.mcache b/maps/pre-re/que_god02.mcache
new file mode 100644
index 000000000..11530ecb4
--- /dev/null
+++ b/maps/pre-re/que_god02.mcache
Binary files differ
diff --git a/maps/pre-re/que_house_s.mcache b/maps/pre-re/que_house_s.mcache
new file mode 100644
index 000000000..3c3cdb3bd
--- /dev/null
+++ b/maps/pre-re/que_house_s.mcache
Binary files differ
diff --git a/maps/pre-re/que_hugel.mcache b/maps/pre-re/que_hugel.mcache
new file mode 100644
index 000000000..57e944d7c
--- /dev/null
+++ b/maps/pre-re/que_hugel.mcache
Binary files differ
diff --git a/maps/pre-re/que_job01.mcache b/maps/pre-re/que_job01.mcache
new file mode 100644
index 000000000..a6ae0a3e8
--- /dev/null
+++ b/maps/pre-re/que_job01.mcache
Binary files differ
diff --git a/maps/pre-re/que_job02.mcache b/maps/pre-re/que_job02.mcache
new file mode 100644
index 000000000..368ce1682
--- /dev/null
+++ b/maps/pre-re/que_job02.mcache
Binary files differ
diff --git a/maps/pre-re/que_job03.mcache b/maps/pre-re/que_job03.mcache
new file mode 100644
index 000000000..368ce1682
--- /dev/null
+++ b/maps/pre-re/que_job03.mcache
Binary files differ
diff --git a/maps/pre-re/que_lhz.mcache b/maps/pre-re/que_lhz.mcache
new file mode 100644
index 000000000..4f1ec7242
--- /dev/null
+++ b/maps/pre-re/que_lhz.mcache
Binary files differ
diff --git a/maps/pre-re/que_moc_16.mcache b/maps/pre-re/que_moc_16.mcache
new file mode 100644
index 000000000..70290570b
--- /dev/null
+++ b/maps/pre-re/que_moc_16.mcache
Binary files differ
diff --git a/maps/pre-re/que_moon.mcache b/maps/pre-re/que_moon.mcache
new file mode 100644
index 000000000..92057f58f
--- /dev/null
+++ b/maps/pre-re/que_moon.mcache
Binary files differ
diff --git a/maps/pre-re/que_ng.mcache b/maps/pre-re/que_ng.mcache
new file mode 100644
index 000000000..3a5e9f818
--- /dev/null
+++ b/maps/pre-re/que_ng.mcache
Binary files differ
diff --git a/maps/pre-re/que_qaru01.mcache b/maps/pre-re/que_qaru01.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qaru01.mcache
Binary files differ
diff --git a/maps/pre-re/que_qaru02.mcache b/maps/pre-re/que_qaru02.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qaru02.mcache
Binary files differ
diff --git a/maps/pre-re/que_qaru03.mcache b/maps/pre-re/que_qaru03.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qaru03.mcache
Binary files differ
diff --git a/maps/pre-re/que_qaru04.mcache b/maps/pre-re/que_qaru04.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qaru04.mcache
Binary files differ
diff --git a/maps/pre-re/que_qaru05.mcache b/maps/pre-re/que_qaru05.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qaru05.mcache
Binary files differ
diff --git a/maps/pre-re/que_qsch01.mcache b/maps/pre-re/que_qsch01.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qsch01.mcache
Binary files differ
diff --git a/maps/pre-re/que_qsch02.mcache b/maps/pre-re/que_qsch02.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qsch02.mcache
Binary files differ
diff --git a/maps/pre-re/que_qsch03.mcache b/maps/pre-re/que_qsch03.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qsch03.mcache
Binary files differ
diff --git a/maps/pre-re/que_qsch04.mcache b/maps/pre-re/que_qsch04.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qsch04.mcache
Binary files differ
diff --git a/maps/pre-re/que_qsch05.mcache b/maps/pre-re/que_qsch05.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/pre-re/que_qsch05.mcache
Binary files differ
diff --git a/maps/pre-re/que_rachel.mcache b/maps/pre-re/que_rachel.mcache
new file mode 100644
index 000000000..1e333b6d9
--- /dev/null
+++ b/maps/pre-re/que_rachel.mcache
Binary files differ
diff --git a/maps/pre-re/que_san04.mcache b/maps/pre-re/que_san04.mcache
new file mode 100644
index 000000000..d52e3959d
--- /dev/null
+++ b/maps/pre-re/que_san04.mcache
Binary files differ
diff --git a/maps/pre-re/que_sign01.mcache b/maps/pre-re/que_sign01.mcache
new file mode 100644
index 000000000..19d57d7c8
--- /dev/null
+++ b/maps/pre-re/que_sign01.mcache
Binary files differ
diff --git a/maps/pre-re/que_sign02.mcache b/maps/pre-re/que_sign02.mcache
new file mode 100644
index 000000000..7aa820023
--- /dev/null
+++ b/maps/pre-re/que_sign02.mcache
Binary files differ
diff --git a/maps/pre-re/que_temsky.mcache b/maps/pre-re/que_temsky.mcache
new file mode 100644
index 000000000..8d0f12699
--- /dev/null
+++ b/maps/pre-re/que_temsky.mcache
Binary files differ
diff --git a/maps/pre-re/que_thor.mcache b/maps/pre-re/que_thor.mcache
new file mode 100644
index 000000000..27d5fe8f9
--- /dev/null
+++ b/maps/pre-re/que_thor.mcache
Binary files differ
diff --git a/maps/pre-re/quiz_00.mcache b/maps/pre-re/quiz_00.mcache
new file mode 100644
index 000000000..abc576e2e
--- /dev/null
+++ b/maps/pre-re/quiz_00.mcache
Binary files differ
diff --git a/maps/pre-re/quiz_01.mcache b/maps/pre-re/quiz_01.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/pre-re/quiz_01.mcache
Binary files differ
diff --git a/maps/pre-re/quiz_02.mcache b/maps/pre-re/quiz_02.mcache
new file mode 100644
index 000000000..8f68e3446
--- /dev/null
+++ b/maps/pre-re/quiz_02.mcache
Binary files differ
diff --git a/maps/pre-re/quiz_test.mcache b/maps/pre-re/quiz_test.mcache
new file mode 100644
index 000000000..c9c05a35e
--- /dev/null
+++ b/maps/pre-re/quiz_test.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild01.mcache b/maps/pre-re/ra_fild01.mcache
new file mode 100644
index 000000000..ef2598b19
--- /dev/null
+++ b/maps/pre-re/ra_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild02.mcache b/maps/pre-re/ra_fild02.mcache
new file mode 100644
index 000000000..372aca88b
--- /dev/null
+++ b/maps/pre-re/ra_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild03.mcache b/maps/pre-re/ra_fild03.mcache
new file mode 100644
index 000000000..f280f4ad3
--- /dev/null
+++ b/maps/pre-re/ra_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild04.mcache b/maps/pre-re/ra_fild04.mcache
new file mode 100644
index 000000000..e3a9483ee
--- /dev/null
+++ b/maps/pre-re/ra_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild05.mcache b/maps/pre-re/ra_fild05.mcache
new file mode 100644
index 000000000..ef9d5f155
--- /dev/null
+++ b/maps/pre-re/ra_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild06.mcache b/maps/pre-re/ra_fild06.mcache
new file mode 100644
index 000000000..5b62c13e0
--- /dev/null
+++ b/maps/pre-re/ra_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild07.mcache b/maps/pre-re/ra_fild07.mcache
new file mode 100644
index 000000000..7a74eeaaf
--- /dev/null
+++ b/maps/pre-re/ra_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild08.mcache b/maps/pre-re/ra_fild08.mcache
new file mode 100644
index 000000000..c066078e6
--- /dev/null
+++ b/maps/pre-re/ra_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild09.mcache b/maps/pre-re/ra_fild09.mcache
new file mode 100644
index 000000000..bb5c8babd
--- /dev/null
+++ b/maps/pre-re/ra_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild10.mcache b/maps/pre-re/ra_fild10.mcache
new file mode 100644
index 000000000..9b1342ba2
--- /dev/null
+++ b/maps/pre-re/ra_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild11.mcache b/maps/pre-re/ra_fild11.mcache
new file mode 100644
index 000000000..a4430163b
--- /dev/null
+++ b/maps/pre-re/ra_fild11.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild12.mcache b/maps/pre-re/ra_fild12.mcache
new file mode 100644
index 000000000..05b5d2c21
--- /dev/null
+++ b/maps/pre-re/ra_fild12.mcache
Binary files differ
diff --git a/maps/pre-re/ra_fild13.mcache b/maps/pre-re/ra_fild13.mcache
new file mode 100644
index 000000000..78361c01b
--- /dev/null
+++ b/maps/pre-re/ra_fild13.mcache
Binary files differ
diff --git a/maps/pre-re/ra_in01.mcache b/maps/pre-re/ra_in01.mcache
new file mode 100644
index 000000000..7994371ff
--- /dev/null
+++ b/maps/pre-re/ra_in01.mcache
Binary files differ
diff --git a/maps/pre-re/ra_san01.mcache b/maps/pre-re/ra_san01.mcache
new file mode 100644
index 000000000..de911bae5
--- /dev/null
+++ b/maps/pre-re/ra_san01.mcache
Binary files differ
diff --git a/maps/pre-re/ra_san02.mcache b/maps/pre-re/ra_san02.mcache
new file mode 100644
index 000000000..3ddc0c860
--- /dev/null
+++ b/maps/pre-re/ra_san02.mcache
Binary files differ
diff --git a/maps/pre-re/ra_san03.mcache b/maps/pre-re/ra_san03.mcache
new file mode 100644
index 000000000..a3a26391b
--- /dev/null
+++ b/maps/pre-re/ra_san03.mcache
Binary files differ
diff --git a/maps/pre-re/ra_san04.mcache b/maps/pre-re/ra_san04.mcache
new file mode 100644
index 000000000..d52e3959d
--- /dev/null
+++ b/maps/pre-re/ra_san04.mcache
Binary files differ
diff --git a/maps/pre-re/ra_san05.mcache b/maps/pre-re/ra_san05.mcache
new file mode 100644
index 000000000..f6192e106
--- /dev/null
+++ b/maps/pre-re/ra_san05.mcache
Binary files differ
diff --git a/maps/pre-re/ra_temin.mcache b/maps/pre-re/ra_temin.mcache
new file mode 100644
index 000000000..635ac463d
--- /dev/null
+++ b/maps/pre-re/ra_temin.mcache
Binary files differ
diff --git a/maps/pre-re/ra_temple.mcache b/maps/pre-re/ra_temple.mcache
new file mode 100644
index 000000000..1463713b3
--- /dev/null
+++ b/maps/pre-re/ra_temple.mcache
Binary files differ
diff --git a/maps/pre-re/ra_temsky.mcache b/maps/pre-re/ra_temsky.mcache
new file mode 100644
index 000000000..8d0f12699
--- /dev/null
+++ b/maps/pre-re/ra_temsky.mcache
Binary files differ
diff --git a/maps/pre-re/rachel.mcache b/maps/pre-re/rachel.mcache
new file mode 100644
index 000000000..21a1cdd1e
--- /dev/null
+++ b/maps/pre-re/rachel.mcache
Binary files differ
diff --git a/maps/pre-re/s_atelier.mcache b/maps/pre-re/s_atelier.mcache
new file mode 100644
index 000000000..d09bcb250
--- /dev/null
+++ b/maps/pre-re/s_atelier.mcache
Binary files differ
diff --git a/maps/pre-re/sch_gld.mcache b/maps/pre-re/sch_gld.mcache
new file mode 100644
index 000000000..7398be4c2
--- /dev/null
+++ b/maps/pre-re/sch_gld.mcache
Binary files differ
diff --git a/maps/pre-re/schg_cas01.mcache b/maps/pre-re/schg_cas01.mcache
new file mode 100644
index 000000000..21db06c29
--- /dev/null
+++ b/maps/pre-re/schg_cas01.mcache
Binary files differ
diff --git a/maps/pre-re/schg_cas02.mcache b/maps/pre-re/schg_cas02.mcache
new file mode 100644
index 000000000..5232cedab
--- /dev/null
+++ b/maps/pre-re/schg_cas02.mcache
Binary files differ
diff --git a/maps/pre-re/schg_cas03.mcache b/maps/pre-re/schg_cas03.mcache
new file mode 100644
index 000000000..5c85b2530
--- /dev/null
+++ b/maps/pre-re/schg_cas03.mcache
Binary files differ
diff --git a/maps/pre-re/schg_cas04.mcache b/maps/pre-re/schg_cas04.mcache
new file mode 100644
index 000000000..21db06c29
--- /dev/null
+++ b/maps/pre-re/schg_cas04.mcache
Binary files differ
diff --git a/maps/pre-re/schg_cas05.mcache b/maps/pre-re/schg_cas05.mcache
new file mode 100644
index 000000000..21db06c29
--- /dev/null
+++ b/maps/pre-re/schg_cas05.mcache
Binary files differ
diff --git a/maps/pre-re/schg_dun01.mcache b/maps/pre-re/schg_dun01.mcache
new file mode 100644
index 000000000..7911c2db1
--- /dev/null
+++ b/maps/pre-re/schg_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/schg_que01.mcache b/maps/pre-re/schg_que01.mcache
new file mode 100644
index 000000000..560d36240
--- /dev/null
+++ b/maps/pre-re/schg_que01.mcache
Binary files differ
diff --git a/maps/pre-re/sec_in01.mcache b/maps/pre-re/sec_in01.mcache
new file mode 100644
index 000000000..b19147a22
--- /dev/null
+++ b/maps/pre-re/sec_in01.mcache
Binary files differ
diff --git a/maps/pre-re/sec_in02.mcache b/maps/pre-re/sec_in02.mcache
new file mode 100644
index 000000000..e5d6be474
--- /dev/null
+++ b/maps/pre-re/sec_in02.mcache
Binary files differ
diff --git a/maps/pre-re/sec_pri.mcache b/maps/pre-re/sec_pri.mcache
new file mode 100644
index 000000000..e3fbc45cc
--- /dev/null
+++ b/maps/pre-re/sec_pri.mcache
Binary files differ
diff --git a/maps/pre-re/siege_test.mcache b/maps/pre-re/siege_test.mcache
new file mode 100644
index 000000000..8ddd58b6b
--- /dev/null
+++ b/maps/pre-re/siege_test.mcache
Binary files differ
diff --git a/maps/pre-re/silk_lair.mcache b/maps/pre-re/silk_lair.mcache
new file mode 100644
index 000000000..b490eb124
--- /dev/null
+++ b/maps/pre-re/silk_lair.mcache
Binary files differ
diff --git a/maps/pre-re/spl_fild01.mcache b/maps/pre-re/spl_fild01.mcache
new file mode 100644
index 000000000..d6c9d470b
--- /dev/null
+++ b/maps/pre-re/spl_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/spl_fild02.mcache b/maps/pre-re/spl_fild02.mcache
new file mode 100644
index 000000000..af881cea5
--- /dev/null
+++ b/maps/pre-re/spl_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/spl_fild03.mcache b/maps/pre-re/spl_fild03.mcache
new file mode 100644
index 000000000..84bd4b4cb
--- /dev/null
+++ b/maps/pre-re/spl_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/spl_in01.mcache b/maps/pre-re/spl_in01.mcache
new file mode 100644
index 000000000..5bbfcf515
--- /dev/null
+++ b/maps/pre-re/spl_in01.mcache
Binary files differ
diff --git a/maps/pre-re/spl_in02.mcache b/maps/pre-re/spl_in02.mcache
new file mode 100644
index 000000000..2261bc8f7
--- /dev/null
+++ b/maps/pre-re/spl_in02.mcache
Binary files differ
diff --git a/maps/pre-re/splendide.mcache b/maps/pre-re/splendide.mcache
new file mode 100644
index 000000000..b67155e85
--- /dev/null
+++ b/maps/pre-re/splendide.mcache
Binary files differ
diff --git a/maps/pre-re/sword_1-1.mcache b/maps/pre-re/sword_1-1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/pre-re/sword_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/sword_2-1.mcache b/maps/pre-re/sword_2-1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/pre-re/sword_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/sword_3-1.mcache b/maps/pre-re/sword_3-1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/pre-re/sword_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/te_alde_gld.mcache b/maps/pre-re/te_alde_gld.mcache
new file mode 100644
index 000000000..0b4cd694f
--- /dev/null
+++ b/maps/pre-re/te_alde_gld.mcache
Binary files differ
diff --git a/maps/pre-re/te_aldecas1.mcache b/maps/pre-re/te_aldecas1.mcache
new file mode 100644
index 000000000..4d96f61e3
--- /dev/null
+++ b/maps/pre-re/te_aldecas1.mcache
Binary files differ
diff --git a/maps/pre-re/te_aldecas2.mcache b/maps/pre-re/te_aldecas2.mcache
new file mode 100644
index 000000000..493e494b9
--- /dev/null
+++ b/maps/pre-re/te_aldecas2.mcache
Binary files differ
diff --git a/maps/pre-re/te_aldecas3.mcache b/maps/pre-re/te_aldecas3.mcache
new file mode 100644
index 000000000..82d4719bc
--- /dev/null
+++ b/maps/pre-re/te_aldecas3.mcache
Binary files differ
diff --git a/maps/pre-re/te_aldecas4.mcache b/maps/pre-re/te_aldecas4.mcache
new file mode 100644
index 000000000..324040d79
--- /dev/null
+++ b/maps/pre-re/te_aldecas4.mcache
Binary files differ
diff --git a/maps/pre-re/te_aldecas5.mcache b/maps/pre-re/te_aldecas5.mcache
new file mode 100644
index 000000000..8094ea0d1
--- /dev/null
+++ b/maps/pre-re/te_aldecas5.mcache
Binary files differ
diff --git a/maps/pre-re/te_prt_gld.mcache b/maps/pre-re/te_prt_gld.mcache
new file mode 100644
index 000000000..6f2c0b38e
--- /dev/null
+++ b/maps/pre-re/te_prt_gld.mcache
Binary files differ
diff --git a/maps/pre-re/te_prtcas01.mcache b/maps/pre-re/te_prtcas01.mcache
new file mode 100644
index 000000000..1e01f48a7
--- /dev/null
+++ b/maps/pre-re/te_prtcas01.mcache
Binary files differ
diff --git a/maps/pre-re/te_prtcas02.mcache b/maps/pre-re/te_prtcas02.mcache
new file mode 100644
index 000000000..90ba580fa
--- /dev/null
+++ b/maps/pre-re/te_prtcas02.mcache
Binary files differ
diff --git a/maps/pre-re/te_prtcas03.mcache b/maps/pre-re/te_prtcas03.mcache
new file mode 100644
index 000000000..25f9fd86a
--- /dev/null
+++ b/maps/pre-re/te_prtcas03.mcache
Binary files differ
diff --git a/maps/pre-re/te_prtcas04.mcache b/maps/pre-re/te_prtcas04.mcache
new file mode 100644
index 000000000..66f12ad53
--- /dev/null
+++ b/maps/pre-re/te_prtcas04.mcache
Binary files differ
diff --git a/maps/pre-re/te_prtcas05.mcache b/maps/pre-re/te_prtcas05.mcache
new file mode 100644
index 000000000..e57e5e886
--- /dev/null
+++ b/maps/pre-re/te_prtcas05.mcache
Binary files differ
diff --git a/maps/pre-re/teg_dun01.mcache b/maps/pre-re/teg_dun01.mcache
new file mode 100644
index 000000000..44c528bc2
--- /dev/null
+++ b/maps/pre-re/teg_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/teg_dun02.mcache b/maps/pre-re/teg_dun02.mcache
new file mode 100644
index 000000000..4feff8774
--- /dev/null
+++ b/maps/pre-re/teg_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/tha_scene01.mcache b/maps/pre-re/tha_scene01.mcache
new file mode 100644
index 000000000..2a55d531a
--- /dev/null
+++ b/maps/pre-re/tha_scene01.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t01.mcache b/maps/pre-re/tha_t01.mcache
new file mode 100644
index 000000000..386d9cb5d
--- /dev/null
+++ b/maps/pre-re/tha_t01.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t02.mcache b/maps/pre-re/tha_t02.mcache
new file mode 100644
index 000000000..e7685c06e
--- /dev/null
+++ b/maps/pre-re/tha_t02.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t03.mcache b/maps/pre-re/tha_t03.mcache
new file mode 100644
index 000000000..0975f06f6
--- /dev/null
+++ b/maps/pre-re/tha_t03.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t04.mcache b/maps/pre-re/tha_t04.mcache
new file mode 100644
index 000000000..db8d386db
--- /dev/null
+++ b/maps/pre-re/tha_t04.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t05.mcache b/maps/pre-re/tha_t05.mcache
new file mode 100644
index 000000000..589075e58
--- /dev/null
+++ b/maps/pre-re/tha_t05.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t06.mcache b/maps/pre-re/tha_t06.mcache
new file mode 100644
index 000000000..223baf5f8
--- /dev/null
+++ b/maps/pre-re/tha_t06.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t07.mcache b/maps/pre-re/tha_t07.mcache
new file mode 100644
index 000000000..ab820b420
--- /dev/null
+++ b/maps/pre-re/tha_t07.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t08.mcache b/maps/pre-re/tha_t08.mcache
new file mode 100644
index 000000000..18389fba6
--- /dev/null
+++ b/maps/pre-re/tha_t08.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t09.mcache b/maps/pre-re/tha_t09.mcache
new file mode 100644
index 000000000..1a55d3474
--- /dev/null
+++ b/maps/pre-re/tha_t09.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t10.mcache b/maps/pre-re/tha_t10.mcache
new file mode 100644
index 000000000..67fde65a8
--- /dev/null
+++ b/maps/pre-re/tha_t10.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t11.mcache b/maps/pre-re/tha_t11.mcache
new file mode 100644
index 000000000..2593d6ad1
--- /dev/null
+++ b/maps/pre-re/tha_t11.mcache
Binary files differ
diff --git a/maps/pre-re/tha_t12.mcache b/maps/pre-re/tha_t12.mcache
new file mode 100644
index 000000000..25ad4c2fc
--- /dev/null
+++ b/maps/pre-re/tha_t12.mcache
Binary files differ
diff --git a/maps/pre-re/thana_boss.mcache b/maps/pre-re/thana_boss.mcache
new file mode 100644
index 000000000..e58d1f6d1
--- /dev/null
+++ b/maps/pre-re/thana_boss.mcache
Binary files differ
diff --git a/maps/pre-re/thana_step.mcache b/maps/pre-re/thana_step.mcache
new file mode 100644
index 000000000..d7c6837fd
--- /dev/null
+++ b/maps/pre-re/thana_step.mcache
Binary files differ
diff --git a/maps/pre-re/thor_camp.mcache b/maps/pre-re/thor_camp.mcache
new file mode 100644
index 000000000..fec5deb8b
--- /dev/null
+++ b/maps/pre-re/thor_camp.mcache
Binary files differ
diff --git a/maps/pre-re/thor_v01.mcache b/maps/pre-re/thor_v01.mcache
new file mode 100644
index 000000000..2471e1854
--- /dev/null
+++ b/maps/pre-re/thor_v01.mcache
Binary files differ
diff --git a/maps/pre-re/thor_v02.mcache b/maps/pre-re/thor_v02.mcache
new file mode 100644
index 000000000..c3b1e240f
--- /dev/null
+++ b/maps/pre-re/thor_v02.mcache
Binary files differ
diff --git a/maps/pre-re/thor_v03.mcache b/maps/pre-re/thor_v03.mcache
new file mode 100644
index 000000000..9951cd423
--- /dev/null
+++ b/maps/pre-re/thor_v03.mcache
Binary files differ
diff --git a/maps/pre-re/treasure01.mcache b/maps/pre-re/treasure01.mcache
new file mode 100644
index 000000000..8a3f25c6a
--- /dev/null
+++ b/maps/pre-re/treasure01.mcache
Binary files differ
diff --git a/maps/pre-re/treasure02.mcache b/maps/pre-re/treasure02.mcache
new file mode 100644
index 000000000..e83bb6906
--- /dev/null
+++ b/maps/pre-re/treasure02.mcache
Binary files differ
diff --git a/maps/pre-re/treasure_n1.mcache b/maps/pre-re/treasure_n1.mcache
new file mode 100644
index 000000000..8a3f25c6a
--- /dev/null
+++ b/maps/pre-re/treasure_n1.mcache
Binary files differ
diff --git a/maps/pre-re/treasure_n2.mcache b/maps/pre-re/treasure_n2.mcache
new file mode 100644
index 000000000..e83bb6906
--- /dev/null
+++ b/maps/pre-re/treasure_n2.mcache
Binary files differ
diff --git a/maps/pre-re/tur_dun01.mcache b/maps/pre-re/tur_dun01.mcache
new file mode 100644
index 000000000..ede11d905
--- /dev/null
+++ b/maps/pre-re/tur_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/tur_dun02.mcache b/maps/pre-re/tur_dun02.mcache
new file mode 100644
index 000000000..3e951e3ed
--- /dev/null
+++ b/maps/pre-re/tur_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/tur_dun03.mcache b/maps/pre-re/tur_dun03.mcache
new file mode 100644
index 000000000..0f0c190cc
--- /dev/null
+++ b/maps/pre-re/tur_dun03.mcache
Binary files differ
diff --git a/maps/pre-re/tur_dun04.mcache b/maps/pre-re/tur_dun04.mcache
new file mode 100644
index 000000000..eddf597f9
--- /dev/null
+++ b/maps/pre-re/tur_dun04.mcache
Binary files differ
diff --git a/maps/pre-re/tur_dun05.mcache b/maps/pre-re/tur_dun05.mcache
new file mode 100644
index 000000000..2b9a523d5
--- /dev/null
+++ b/maps/pre-re/tur_dun05.mcache
Binary files differ
diff --git a/maps/pre-re/tur_dun06.mcache b/maps/pre-re/tur_dun06.mcache
new file mode 100644
index 000000000..32ea2aa7f
--- /dev/null
+++ b/maps/pre-re/tur_dun06.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_e_16.mcache b/maps/pre-re/turbo_e_16.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_e_16.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_e_4.mcache b/maps/pre-re/turbo_e_4.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_e_4.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_e_8.mcache b/maps/pre-re/turbo_e_8.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_e_8.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_n_1.mcache b/maps/pre-re/turbo_n_1.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_n_1.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_n_16.mcache b/maps/pre-re/turbo_n_16.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_n_16.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_n_4.mcache b/maps/pre-re/turbo_n_4.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_n_4.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_n_8.mcache b/maps/pre-re/turbo_n_8.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/pre-re/turbo_n_8.mcache
Binary files differ
diff --git a/maps/pre-re/turbo_room.mcache b/maps/pre-re/turbo_room.mcache
new file mode 100644
index 000000000..6fdd21346
--- /dev/null
+++ b/maps/pre-re/turbo_room.mcache
Binary files differ
diff --git a/maps/pre-re/um_dun01.mcache b/maps/pre-re/um_dun01.mcache
new file mode 100644
index 000000000..ea49e8792
--- /dev/null
+++ b/maps/pre-re/um_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/um_dun02.mcache b/maps/pre-re/um_dun02.mcache
new file mode 100644
index 000000000..e99e61c00
--- /dev/null
+++ b/maps/pre-re/um_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/um_fild01.mcache b/maps/pre-re/um_fild01.mcache
new file mode 100644
index 000000000..5fbb57fff
--- /dev/null
+++ b/maps/pre-re/um_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/um_fild02.mcache b/maps/pre-re/um_fild02.mcache
new file mode 100644
index 000000000..59632d91f
--- /dev/null
+++ b/maps/pre-re/um_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/um_fild03.mcache b/maps/pre-re/um_fild03.mcache
new file mode 100644
index 000000000..407ac7649
--- /dev/null
+++ b/maps/pre-re/um_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/um_fild04.mcache b/maps/pre-re/um_fild04.mcache
new file mode 100644
index 000000000..d35d65508
--- /dev/null
+++ b/maps/pre-re/um_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/um_in.mcache b/maps/pre-re/um_in.mcache
new file mode 100644
index 000000000..41340edc1
--- /dev/null
+++ b/maps/pre-re/um_in.mcache
Binary files differ
diff --git a/maps/pre-re/umbala.mcache b/maps/pre-re/umbala.mcache
new file mode 100644
index 000000000..ddc235e34
--- /dev/null
+++ b/maps/pre-re/umbala.mcache
Binary files differ
diff --git a/maps/pre-re/valkyrie.mcache b/maps/pre-re/valkyrie.mcache
new file mode 100644
index 000000000..208d13ed9
--- /dev/null
+++ b/maps/pre-re/valkyrie.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild01.mcache b/maps/pre-re/ve_fild01.mcache
new file mode 100644
index 000000000..569e6851e
--- /dev/null
+++ b/maps/pre-re/ve_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild02.mcache b/maps/pre-re/ve_fild02.mcache
new file mode 100644
index 000000000..c08a2bddb
--- /dev/null
+++ b/maps/pre-re/ve_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild03.mcache b/maps/pre-re/ve_fild03.mcache
new file mode 100644
index 000000000..52f022ff2
--- /dev/null
+++ b/maps/pre-re/ve_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild04.mcache b/maps/pre-re/ve_fild04.mcache
new file mode 100644
index 000000000..96ddf8bfa
--- /dev/null
+++ b/maps/pre-re/ve_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild05.mcache b/maps/pre-re/ve_fild05.mcache
new file mode 100644
index 000000000..a694701e0
--- /dev/null
+++ b/maps/pre-re/ve_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild06.mcache b/maps/pre-re/ve_fild06.mcache
new file mode 100644
index 000000000..e532c3584
--- /dev/null
+++ b/maps/pre-re/ve_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/ve_fild07.mcache b/maps/pre-re/ve_fild07.mcache
new file mode 100644
index 000000000..14a98e34a
--- /dev/null
+++ b/maps/pre-re/ve_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/ve_in.mcache b/maps/pre-re/ve_in.mcache
new file mode 100644
index 000000000..9d6e51c2f
--- /dev/null
+++ b/maps/pre-re/ve_in.mcache
Binary files differ
diff --git a/maps/pre-re/ve_in02.mcache b/maps/pre-re/ve_in02.mcache
new file mode 100644
index 000000000..4c966492c
--- /dev/null
+++ b/maps/pre-re/ve_in02.mcache
Binary files differ
diff --git a/maps/pre-re/veins.mcache b/maps/pre-re/veins.mcache
new file mode 100644
index 000000000..e3f3608aa
--- /dev/null
+++ b/maps/pre-re/veins.mcache
Binary files differ
diff --git a/maps/pre-re/wizard_1-1.mcache b/maps/pre-re/wizard_1-1.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/wizard_1-1.mcache
Binary files differ
diff --git a/maps/pre-re/wizard_2-1.mcache b/maps/pre-re/wizard_2-1.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/wizard_2-1.mcache
Binary files differ
diff --git a/maps/pre-re/wizard_3-1.mcache b/maps/pre-re/wizard_3-1.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/pre-re/wizard_3-1.mcache
Binary files differ
diff --git a/maps/pre-re/xmas.mcache b/maps/pre-re/xmas.mcache
new file mode 100644
index 000000000..e20484c81
--- /dev/null
+++ b/maps/pre-re/xmas.mcache
Binary files differ
diff --git a/maps/pre-re/xmas_dun01.mcache b/maps/pre-re/xmas_dun01.mcache
new file mode 100644
index 000000000..57405fe4a
--- /dev/null
+++ b/maps/pre-re/xmas_dun01.mcache
Binary files differ
diff --git a/maps/pre-re/xmas_dun02.mcache b/maps/pre-re/xmas_dun02.mcache
new file mode 100644
index 000000000..021f52832
--- /dev/null
+++ b/maps/pre-re/xmas_dun02.mcache
Binary files differ
diff --git a/maps/pre-re/xmas_fild01.mcache b/maps/pre-re/xmas_fild01.mcache
new file mode 100644
index 000000000..9b8e4fd11
--- /dev/null
+++ b/maps/pre-re/xmas_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/xmas_in.mcache b/maps/pre-re/xmas_in.mcache
new file mode 100644
index 000000000..c02c0e71a
--- /dev/null
+++ b/maps/pre-re/xmas_in.mcache
Binary files differ
diff --git a/maps/pre-re/y_airport.mcache b/maps/pre-re/y_airport.mcache
new file mode 100644
index 000000000..ff75f0fd4
--- /dev/null
+++ b/maps/pre-re/y_airport.mcache
Binary files differ
diff --git a/maps/pre-re/yggdrasil01.mcache b/maps/pre-re/yggdrasil01.mcache
new file mode 100644
index 000000000..6a62700d4
--- /dev/null
+++ b/maps/pre-re/yggdrasil01.mcache
Binary files differ
diff --git a/maps/pre-re/yuno.mcache b/maps/pre-re/yuno.mcache
new file mode 100644
index 000000000..c145fd840
--- /dev/null
+++ b/maps/pre-re/yuno.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild01.mcache b/maps/pre-re/yuno_fild01.mcache
new file mode 100644
index 000000000..48da54791
--- /dev/null
+++ b/maps/pre-re/yuno_fild01.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild02.mcache b/maps/pre-re/yuno_fild02.mcache
new file mode 100644
index 000000000..26177170a
--- /dev/null
+++ b/maps/pre-re/yuno_fild02.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild03.mcache b/maps/pre-re/yuno_fild03.mcache
new file mode 100644
index 000000000..14444cb57
--- /dev/null
+++ b/maps/pre-re/yuno_fild03.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild04.mcache b/maps/pre-re/yuno_fild04.mcache
new file mode 100644
index 000000000..ce473f740
--- /dev/null
+++ b/maps/pre-re/yuno_fild04.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild05.mcache b/maps/pre-re/yuno_fild05.mcache
new file mode 100644
index 000000000..0e08d15e3
--- /dev/null
+++ b/maps/pre-re/yuno_fild05.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild06.mcache b/maps/pre-re/yuno_fild06.mcache
new file mode 100644
index 000000000..dd4fa4ccc
--- /dev/null
+++ b/maps/pre-re/yuno_fild06.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild07.mcache b/maps/pre-re/yuno_fild07.mcache
new file mode 100644
index 000000000..b0c147137
--- /dev/null
+++ b/maps/pre-re/yuno_fild07.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild08.mcache b/maps/pre-re/yuno_fild08.mcache
new file mode 100644
index 000000000..9e2b05bdd
--- /dev/null
+++ b/maps/pre-re/yuno_fild08.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild09.mcache b/maps/pre-re/yuno_fild09.mcache
new file mode 100644
index 000000000..fb14f1b4c
--- /dev/null
+++ b/maps/pre-re/yuno_fild09.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild10.mcache b/maps/pre-re/yuno_fild10.mcache
new file mode 100644
index 000000000..9c5775dd3
--- /dev/null
+++ b/maps/pre-re/yuno_fild10.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild11.mcache b/maps/pre-re/yuno_fild11.mcache
new file mode 100644
index 000000000..3afa65221
--- /dev/null
+++ b/maps/pre-re/yuno_fild11.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_fild12.mcache b/maps/pre-re/yuno_fild12.mcache
new file mode 100644
index 000000000..dfa05d7a3
--- /dev/null
+++ b/maps/pre-re/yuno_fild12.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_in01.mcache b/maps/pre-re/yuno_in01.mcache
new file mode 100644
index 000000000..8b1665fe4
--- /dev/null
+++ b/maps/pre-re/yuno_in01.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_in02.mcache b/maps/pre-re/yuno_in02.mcache
new file mode 100644
index 000000000..f2bf03891
--- /dev/null
+++ b/maps/pre-re/yuno_in02.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_in03.mcache b/maps/pre-re/yuno_in03.mcache
new file mode 100644
index 000000000..0f3ffeb3f
--- /dev/null
+++ b/maps/pre-re/yuno_in03.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_in04.mcache b/maps/pre-re/yuno_in04.mcache
new file mode 100644
index 000000000..321b03de4
--- /dev/null
+++ b/maps/pre-re/yuno_in04.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_in05.mcache b/maps/pre-re/yuno_in05.mcache
new file mode 100644
index 000000000..6b1e388f1
--- /dev/null
+++ b/maps/pre-re/yuno_in05.mcache
Binary files differ
diff --git a/maps/pre-re/yuno_pre.mcache b/maps/pre-re/yuno_pre.mcache
new file mode 100644
index 000000000..2f381aa24
--- /dev/null
+++ b/maps/pre-re/yuno_pre.mcache
Binary files differ
diff --git a/maps/pre-re/z_agit.mcache b/maps/pre-re/z_agit.mcache
new file mode 100644
index 000000000..208dc31a7
--- /dev/null
+++ b/maps/pre-re/z_agit.mcache
Binary files differ
diff --git a/maps/re/06guild_01.mcache b/maps/re/06guild_01.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_01.mcache
Binary files differ
diff --git a/maps/re/06guild_02.mcache b/maps/re/06guild_02.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_02.mcache
Binary files differ
diff --git a/maps/re/06guild_03.mcache b/maps/re/06guild_03.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_03.mcache
Binary files differ
diff --git a/maps/re/06guild_04.mcache b/maps/re/06guild_04.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_04.mcache
Binary files differ
diff --git a/maps/re/06guild_05.mcache b/maps/re/06guild_05.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_05.mcache
Binary files differ
diff --git a/maps/re/06guild_06.mcache b/maps/re/06guild_06.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_06.mcache
Binary files differ
diff --git a/maps/re/06guild_07.mcache b/maps/re/06guild_07.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_07.mcache
Binary files differ
diff --git a/maps/re/06guild_08.mcache b/maps/re/06guild_08.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/06guild_08.mcache
Binary files differ
diff --git a/maps/re/06guild_r.mcache b/maps/re/06guild_r.mcache
new file mode 100644
index 000000000..54574500a
--- /dev/null
+++ b/maps/re/06guild_r.mcache
Binary files differ
diff --git a/maps/re/1@cash.mcache b/maps/re/1@cash.mcache
new file mode 100644
index 000000000..b490eb124
--- /dev/null
+++ b/maps/re/1@cash.mcache
Binary files differ
diff --git a/maps/re/1@cata.mcache b/maps/re/1@cata.mcache
new file mode 100644
index 000000000..2ad1d4f08
--- /dev/null
+++ b/maps/re/1@cata.mcache
Binary files differ
diff --git a/maps/re/1@def01.mcache b/maps/re/1@def01.mcache
new file mode 100644
index 000000000..278ab038a
--- /dev/null
+++ b/maps/re/1@def01.mcache
Binary files differ
diff --git a/maps/re/1@def02.mcache b/maps/re/1@def02.mcache
new file mode 100644
index 000000000..9799bf83d
--- /dev/null
+++ b/maps/re/1@def02.mcache
Binary files differ
diff --git a/maps/re/1@def03.mcache b/maps/re/1@def03.mcache
new file mode 100644
index 000000000..ba84f8207
--- /dev/null
+++ b/maps/re/1@def03.mcache
Binary files differ
diff --git a/maps/re/1@dth1.mcache b/maps/re/1@dth1.mcache
new file mode 100644
index 000000000..2ab136d97
--- /dev/null
+++ b/maps/re/1@dth1.mcache
Binary files differ
diff --git a/maps/re/1@dth2.mcache b/maps/re/1@dth2.mcache
new file mode 100644
index 000000000..2ab136d97
--- /dev/null
+++ b/maps/re/1@dth2.mcache
Binary files differ
diff --git a/maps/re/1@dth3.mcache b/maps/re/1@dth3.mcache
new file mode 100644
index 000000000..621173b3d
--- /dev/null
+++ b/maps/re/1@dth3.mcache
Binary files differ
diff --git a/maps/re/1@ecl.mcache b/maps/re/1@ecl.mcache
new file mode 100644
index 000000000..30a68ef95
--- /dev/null
+++ b/maps/re/1@ecl.mcache
Binary files differ
diff --git a/maps/re/1@eom.mcache b/maps/re/1@eom.mcache
new file mode 100644
index 000000000..1d4f23d78
--- /dev/null
+++ b/maps/re/1@eom.mcache
Binary files differ
diff --git a/maps/re/1@face.mcache b/maps/re/1@face.mcache
new file mode 100644
index 000000000..d7a8cf9ed
--- /dev/null
+++ b/maps/re/1@face.mcache
Binary files differ
diff --git a/maps/re/1@ge_st.mcache b/maps/re/1@ge_st.mcache
new file mode 100644
index 000000000..f2865ebbb
--- /dev/null
+++ b/maps/re/1@ge_st.mcache
Binary files differ
diff --git a/maps/re/1@gef.mcache b/maps/re/1@gef.mcache
new file mode 100644
index 000000000..72d8d30f3
--- /dev/null
+++ b/maps/re/1@gef.mcache
Binary files differ
diff --git a/maps/re/1@gef_in.mcache b/maps/re/1@gef_in.mcache
new file mode 100644
index 000000000..349794fc8
--- /dev/null
+++ b/maps/re/1@gef_in.mcache
Binary files differ
diff --git a/maps/re/1@gl_k.mcache b/maps/re/1@gl_k.mcache
new file mode 100644
index 000000000..c2f7c08b3
--- /dev/null
+++ b/maps/re/1@gl_k.mcache
Binary files differ
diff --git a/maps/re/1@jtb.mcache b/maps/re/1@jtb.mcache
new file mode 100644
index 000000000..b1b3b5724
--- /dev/null
+++ b/maps/re/1@jtb.mcache
Binary files differ
diff --git a/maps/re/1@lhz.mcache b/maps/re/1@lhz.mcache
new file mode 100644
index 000000000..e8d151283
--- /dev/null
+++ b/maps/re/1@lhz.mcache
Binary files differ
diff --git a/maps/re/1@ma_b.mcache b/maps/re/1@ma_b.mcache
new file mode 100644
index 000000000..5d552d807
--- /dev/null
+++ b/maps/re/1@ma_b.mcache
Binary files differ
diff --git a/maps/re/1@ma_c.mcache b/maps/re/1@ma_c.mcache
new file mode 100644
index 000000000..bd08e2297
--- /dev/null
+++ b/maps/re/1@ma_c.mcache
Binary files differ
diff --git a/maps/re/1@ma_h.mcache b/maps/re/1@ma_h.mcache
new file mode 100644
index 000000000..c978d34ad
--- /dev/null
+++ b/maps/re/1@ma_h.mcache
Binary files differ
diff --git a/maps/re/1@mist.mcache b/maps/re/1@mist.mcache
new file mode 100644
index 000000000..d037c1a95
--- /dev/null
+++ b/maps/re/1@mist.mcache
Binary files differ
diff --git a/maps/re/1@nyd.mcache b/maps/re/1@nyd.mcache
new file mode 100644
index 000000000..4523d504a
--- /dev/null
+++ b/maps/re/1@nyd.mcache
Binary files differ
diff --git a/maps/re/1@orcs.mcache b/maps/re/1@orcs.mcache
new file mode 100644
index 000000000..d1373af5a
--- /dev/null
+++ b/maps/re/1@orcs.mcache
Binary files differ
diff --git a/maps/re/1@pump.mcache b/maps/re/1@pump.mcache
new file mode 100644
index 000000000..a050515e4
--- /dev/null
+++ b/maps/re/1@pump.mcache
Binary files differ
diff --git a/maps/re/1@rev.mcache b/maps/re/1@rev.mcache
new file mode 100644
index 000000000..6ef1bc791
--- /dev/null
+++ b/maps/re/1@rev.mcache
Binary files differ
diff --git a/maps/re/1@sara.mcache b/maps/re/1@sara.mcache
new file mode 100644
index 000000000..1e0b29606
--- /dev/null
+++ b/maps/re/1@sara.mcache
Binary files differ
diff --git a/maps/re/1@spa.mcache b/maps/re/1@spa.mcache
new file mode 100644
index 000000000..aa8a6451b
--- /dev/null
+++ b/maps/re/1@spa.mcache
Binary files differ
diff --git a/maps/re/1@tnm1.mcache b/maps/re/1@tnm1.mcache
new file mode 100644
index 000000000..57e0465ce
--- /dev/null
+++ b/maps/re/1@tnm1.mcache
Binary files differ
diff --git a/maps/re/1@tnm2.mcache b/maps/re/1@tnm2.mcache
new file mode 100644
index 000000000..50f3e2b17
--- /dev/null
+++ b/maps/re/1@tnm2.mcache
Binary files differ
diff --git a/maps/re/1@tnm3.mcache b/maps/re/1@tnm3.mcache
new file mode 100644
index 000000000..42d8c59f2
--- /dev/null
+++ b/maps/re/1@tnm3.mcache
Binary files differ
diff --git a/maps/re/1@tower.mcache b/maps/re/1@tower.mcache
new file mode 100644
index 000000000..2bf1085f7
--- /dev/null
+++ b/maps/re/1@tower.mcache
Binary files differ
diff --git a/maps/re/1@xm_d.mcache b/maps/re/1@xm_d.mcache
new file mode 100644
index 000000000..560b08599
--- /dev/null
+++ b/maps/re/1@xm_d.mcache
Binary files differ
diff --git a/maps/re/2@cata.mcache b/maps/re/2@cata.mcache
new file mode 100644
index 000000000..ff97088f7
--- /dev/null
+++ b/maps/re/2@cata.mcache
Binary files differ
diff --git a/maps/re/2@gl_k.mcache b/maps/re/2@gl_k.mcache
new file mode 100644
index 000000000..50a16b410
--- /dev/null
+++ b/maps/re/2@gl_k.mcache
Binary files differ
diff --git a/maps/re/2@nyd.mcache b/maps/re/2@nyd.mcache
new file mode 100644
index 000000000..bb1f06914
--- /dev/null
+++ b/maps/re/2@nyd.mcache
Binary files differ
diff --git a/maps/re/2@orcs.mcache b/maps/re/2@orcs.mcache
new file mode 100644
index 000000000..042edc377
--- /dev/null
+++ b/maps/re/2@orcs.mcache
Binary files differ
diff --git a/maps/re/2@pump.mcache b/maps/re/2@pump.mcache
new file mode 100644
index 000000000..165ab802a
--- /dev/null
+++ b/maps/re/2@pump.mcache
Binary files differ
diff --git a/maps/re/2@tower.mcache b/maps/re/2@tower.mcache
new file mode 100644
index 000000000..2bf1085f7
--- /dev/null
+++ b/maps/re/2@tower.mcache
Binary files differ
diff --git a/maps/re/3@tower.mcache b/maps/re/3@tower.mcache
new file mode 100644
index 000000000..2bf1085f7
--- /dev/null
+++ b/maps/re/3@tower.mcache
Binary files differ
diff --git a/maps/re/4@tower.mcache b/maps/re/4@tower.mcache
new file mode 100644
index 000000000..0c0bb0f43
--- /dev/null
+++ b/maps/re/4@tower.mcache
Binary files differ
diff --git a/maps/re/5@tower.mcache b/maps/re/5@tower.mcache
new file mode 100644
index 000000000..08f66c2f1
--- /dev/null
+++ b/maps/re/5@tower.mcache
Binary files differ
diff --git a/maps/re/6@tower.mcache b/maps/re/6@tower.mcache
new file mode 100644
index 000000000..2cc37a9ae
--- /dev/null
+++ b/maps/re/6@tower.mcache
Binary files differ
diff --git a/maps/re/abbey01.mcache b/maps/re/abbey01.mcache
new file mode 100644
index 000000000..6a7389595
--- /dev/null
+++ b/maps/re/abbey01.mcache
Binary files differ
diff --git a/maps/re/abbey02.mcache b/maps/re/abbey02.mcache
new file mode 100644
index 000000000..2d14e1814
--- /dev/null
+++ b/maps/re/abbey02.mcache
Binary files differ
diff --git a/maps/re/abbey03.mcache b/maps/re/abbey03.mcache
new file mode 100644
index 000000000..b83d92cc3
--- /dev/null
+++ b/maps/re/abbey03.mcache
Binary files differ
diff --git a/maps/re/abyss_01.mcache b/maps/re/abyss_01.mcache
new file mode 100644
index 000000000..6cec213a6
--- /dev/null
+++ b/maps/re/abyss_01.mcache
Binary files differ
diff --git a/maps/re/abyss_02.mcache b/maps/re/abyss_02.mcache
new file mode 100644
index 000000000..9a7363b52
--- /dev/null
+++ b/maps/re/abyss_02.mcache
Binary files differ
diff --git a/maps/re/abyss_03.mcache b/maps/re/abyss_03.mcache
new file mode 100644
index 000000000..758f87925
--- /dev/null
+++ b/maps/re/abyss_03.mcache
Binary files differ
diff --git a/maps/re/airplane.mcache b/maps/re/airplane.mcache
new file mode 100644
index 000000000..9c0c2edce
--- /dev/null
+++ b/maps/re/airplane.mcache
Binary files differ
diff --git a/maps/re/airplane_01.mcache b/maps/re/airplane_01.mcache
new file mode 100644
index 000000000..9c0c2edce
--- /dev/null
+++ b/maps/re/airplane_01.mcache
Binary files differ
diff --git a/maps/re/airport.mcache b/maps/re/airport.mcache
new file mode 100644
index 000000000..ff75f0fd4
--- /dev/null
+++ b/maps/re/airport.mcache
Binary files differ
diff --git a/maps/re/alb2trea.mcache b/maps/re/alb2trea.mcache
new file mode 100644
index 000000000..8a25c776d
--- /dev/null
+++ b/maps/re/alb2trea.mcache
Binary files differ
diff --git a/maps/re/alb_ship.mcache b/maps/re/alb_ship.mcache
new file mode 100644
index 000000000..1e2626d07
--- /dev/null
+++ b/maps/re/alb_ship.mcache
Binary files differ
diff --git a/maps/re/alberta.mcache b/maps/re/alberta.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/alberta.mcache
Binary files differ
diff --git a/maps/re/alberta_in.mcache b/maps/re/alberta_in.mcache
new file mode 100644
index 000000000..88bca9805
--- /dev/null
+++ b/maps/re/alberta_in.mcache
Binary files differ
diff --git a/maps/re/alde_alche.mcache b/maps/re/alde_alche.mcache
new file mode 100644
index 000000000..9460e8f93
--- /dev/null
+++ b/maps/re/alde_alche.mcache
Binary files differ
diff --git a/maps/re/alde_dun01.mcache b/maps/re/alde_dun01.mcache
new file mode 100644
index 000000000..e099e48c6
--- /dev/null
+++ b/maps/re/alde_dun01.mcache
Binary files differ
diff --git a/maps/re/alde_dun02.mcache b/maps/re/alde_dun02.mcache
new file mode 100644
index 000000000..957bb04e4
--- /dev/null
+++ b/maps/re/alde_dun02.mcache
Binary files differ
diff --git a/maps/re/alde_dun03.mcache b/maps/re/alde_dun03.mcache
new file mode 100644
index 000000000..46bcfea4f
--- /dev/null
+++ b/maps/re/alde_dun03.mcache
Binary files differ
diff --git a/maps/re/alde_dun04.mcache b/maps/re/alde_dun04.mcache
new file mode 100644
index 000000000..4afa9c862
--- /dev/null
+++ b/maps/re/alde_dun04.mcache
Binary files differ
diff --git a/maps/re/alde_gld.mcache b/maps/re/alde_gld.mcache
new file mode 100644
index 000000000..0b4cd694f
--- /dev/null
+++ b/maps/re/alde_gld.mcache
Binary files differ
diff --git a/maps/re/alde_tt02.mcache b/maps/re/alde_tt02.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/alde_tt02.mcache
Binary files differ
diff --git a/maps/re/alde_tt03.mcache b/maps/re/alde_tt03.mcache
new file mode 100644
index 000000000..6921d05bd
--- /dev/null
+++ b/maps/re/alde_tt03.mcache
Binary files differ
diff --git a/maps/re/aldeba_in.mcache b/maps/re/aldeba_in.mcache
new file mode 100644
index 000000000..dd96c3b76
--- /dev/null
+++ b/maps/re/aldeba_in.mcache
Binary files differ
diff --git a/maps/re/aldebaran.mcache b/maps/re/aldebaran.mcache
new file mode 100644
index 000000000..b1415bec1
--- /dev/null
+++ b/maps/re/aldebaran.mcache
Binary files differ
diff --git a/maps/re/aldeg_cas01.mcache b/maps/re/aldeg_cas01.mcache
new file mode 100644
index 000000000..4d96f61e3
--- /dev/null
+++ b/maps/re/aldeg_cas01.mcache
Binary files differ
diff --git a/maps/re/aldeg_cas02.mcache b/maps/re/aldeg_cas02.mcache
new file mode 100644
index 000000000..493e494b9
--- /dev/null
+++ b/maps/re/aldeg_cas02.mcache
Binary files differ
diff --git a/maps/re/aldeg_cas03.mcache b/maps/re/aldeg_cas03.mcache
new file mode 100644
index 000000000..82d4719bc
--- /dev/null
+++ b/maps/re/aldeg_cas03.mcache
Binary files differ
diff --git a/maps/re/aldeg_cas04.mcache b/maps/re/aldeg_cas04.mcache
new file mode 100644
index 000000000..324040d79
--- /dev/null
+++ b/maps/re/aldeg_cas04.mcache
Binary files differ
diff --git a/maps/re/aldeg_cas05.mcache b/maps/re/aldeg_cas05.mcache
new file mode 100644
index 000000000..8094ea0d1
--- /dev/null
+++ b/maps/re/aldeg_cas05.mcache
Binary files differ
diff --git a/maps/re/ama_dun01.mcache b/maps/re/ama_dun01.mcache
new file mode 100644
index 000000000..0cd2b4e38
--- /dev/null
+++ b/maps/re/ama_dun01.mcache
Binary files differ
diff --git a/maps/re/ama_dun02.mcache b/maps/re/ama_dun02.mcache
new file mode 100644
index 000000000..dd17db0ad
--- /dev/null
+++ b/maps/re/ama_dun02.mcache
Binary files differ
diff --git a/maps/re/ama_dun03.mcache b/maps/re/ama_dun03.mcache
new file mode 100644
index 000000000..2ad974112
--- /dev/null
+++ b/maps/re/ama_dun03.mcache
Binary files differ
diff --git a/maps/re/ama_fild01.mcache b/maps/re/ama_fild01.mcache
new file mode 100644
index 000000000..a8335d906
--- /dev/null
+++ b/maps/re/ama_fild01.mcache
Binary files differ
diff --git a/maps/re/ama_in01.mcache b/maps/re/ama_in01.mcache
new file mode 100644
index 000000000..ec9ce6316
--- /dev/null
+++ b/maps/re/ama_in01.mcache
Binary files differ
diff --git a/maps/re/ama_in02.mcache b/maps/re/ama_in02.mcache
new file mode 100644
index 000000000..0ba4aae60
--- /dev/null
+++ b/maps/re/ama_in02.mcache
Binary files differ
diff --git a/maps/re/ama_test.mcache b/maps/re/ama_test.mcache
new file mode 100644
index 000000000..ae8389469
--- /dev/null
+++ b/maps/re/ama_test.mcache
Binary files differ
diff --git a/maps/re/amatsu.mcache b/maps/re/amatsu.mcache
new file mode 100644
index 000000000..68fd1de44
--- /dev/null
+++ b/maps/re/amatsu.mcache
Binary files differ
diff --git a/maps/re/anthell01.mcache b/maps/re/anthell01.mcache
new file mode 100644
index 000000000..f0008f8be
--- /dev/null
+++ b/maps/re/anthell01.mcache
Binary files differ
diff --git a/maps/re/anthell02.mcache b/maps/re/anthell02.mcache
new file mode 100644
index 000000000..cebc93ec8
--- /dev/null
+++ b/maps/re/anthell02.mcache
Binary files differ
diff --git a/maps/re/arena_room.mcache b/maps/re/arena_room.mcache
new file mode 100644
index 000000000..123aeeee1
--- /dev/null
+++ b/maps/re/arena_room.mcache
Binary files differ
diff --git a/maps/re/aru_gld.mcache b/maps/re/aru_gld.mcache
new file mode 100644
index 000000000..e8c779747
--- /dev/null
+++ b/maps/re/aru_gld.mcache
Binary files differ
diff --git a/maps/re/arug_cas01.mcache b/maps/re/arug_cas01.mcache
new file mode 100644
index 000000000..fff355c8c
--- /dev/null
+++ b/maps/re/arug_cas01.mcache
Binary files differ
diff --git a/maps/re/arug_cas02.mcache b/maps/re/arug_cas02.mcache
new file mode 100644
index 000000000..25464c5d6
--- /dev/null
+++ b/maps/re/arug_cas02.mcache
Binary files differ
diff --git a/maps/re/arug_cas03.mcache b/maps/re/arug_cas03.mcache
new file mode 100644
index 000000000..c15ce7baa
--- /dev/null
+++ b/maps/re/arug_cas03.mcache
Binary files differ
diff --git a/maps/re/arug_cas04.mcache b/maps/re/arug_cas04.mcache
new file mode 100644
index 000000000..c15ce7baa
--- /dev/null
+++ b/maps/re/arug_cas04.mcache
Binary files differ
diff --git a/maps/re/arug_cas05.mcache b/maps/re/arug_cas05.mcache
new file mode 100644
index 000000000..c15ce7baa
--- /dev/null
+++ b/maps/re/arug_cas05.mcache
Binary files differ
diff --git a/maps/re/arug_dun01.mcache b/maps/re/arug_dun01.mcache
new file mode 100644
index 000000000..26d3ed34a
--- /dev/null
+++ b/maps/re/arug_dun01.mcache
Binary files differ
diff --git a/maps/re/arug_que01.mcache b/maps/re/arug_que01.mcache
new file mode 100644
index 000000000..560d36240
--- /dev/null
+++ b/maps/re/arug_que01.mcache
Binary files differ
diff --git a/maps/re/auction_01.mcache b/maps/re/auction_01.mcache
new file mode 100644
index 000000000..93879880f
--- /dev/null
+++ b/maps/re/auction_01.mcache
Binary files differ
diff --git a/maps/re/auction_02.mcache b/maps/re/auction_02.mcache
new file mode 100644
index 000000000..82823e9ce
--- /dev/null
+++ b/maps/re/auction_02.mcache
Binary files differ
diff --git a/maps/re/ayo_dun01.mcache b/maps/re/ayo_dun01.mcache
new file mode 100644
index 000000000..11b96a511
--- /dev/null
+++ b/maps/re/ayo_dun01.mcache
Binary files differ
diff --git a/maps/re/ayo_dun02.mcache b/maps/re/ayo_dun02.mcache
new file mode 100644
index 000000000..331546eb4
--- /dev/null
+++ b/maps/re/ayo_dun02.mcache
Binary files differ
diff --git a/maps/re/ayo_fild01.mcache b/maps/re/ayo_fild01.mcache
new file mode 100644
index 000000000..0dd9737f7
--- /dev/null
+++ b/maps/re/ayo_fild01.mcache
Binary files differ
diff --git a/maps/re/ayo_fild02.mcache b/maps/re/ayo_fild02.mcache
new file mode 100644
index 000000000..b1fce355f
--- /dev/null
+++ b/maps/re/ayo_fild02.mcache
Binary files differ
diff --git a/maps/re/ayo_in01.mcache b/maps/re/ayo_in01.mcache
new file mode 100644
index 000000000..e5f9aaccb
--- /dev/null
+++ b/maps/re/ayo_in01.mcache
Binary files differ
diff --git a/maps/re/ayo_in02.mcache b/maps/re/ayo_in02.mcache
new file mode 100644
index 000000000..fed8f3d2c
--- /dev/null
+++ b/maps/re/ayo_in02.mcache
Binary files differ
diff --git a/maps/re/ayothaya.mcache b/maps/re/ayothaya.mcache
new file mode 100644
index 000000000..dee41b1b8
--- /dev/null
+++ b/maps/re/ayothaya.mcache
Binary files differ
diff --git a/maps/re/bat_a01.mcache b/maps/re/bat_a01.mcache
new file mode 100644
index 000000000..d1d9ede7c
--- /dev/null
+++ b/maps/re/bat_a01.mcache
Binary files differ
diff --git a/maps/re/bat_a02.mcache b/maps/re/bat_a02.mcache
new file mode 100644
index 000000000..d1d9ede7c
--- /dev/null
+++ b/maps/re/bat_a02.mcache
Binary files differ
diff --git a/maps/re/bat_b01.mcache b/maps/re/bat_b01.mcache
new file mode 100644
index 000000000..7025d2d99
--- /dev/null
+++ b/maps/re/bat_b01.mcache
Binary files differ
diff --git a/maps/re/bat_b02.mcache b/maps/re/bat_b02.mcache
new file mode 100644
index 000000000..7025d2d99
--- /dev/null
+++ b/maps/re/bat_b02.mcache
Binary files differ
diff --git a/maps/re/bat_c01.mcache b/maps/re/bat_c01.mcache
new file mode 100644
index 000000000..5b3b9c44c
--- /dev/null
+++ b/maps/re/bat_c01.mcache
Binary files differ
diff --git a/maps/re/bat_c02.mcache b/maps/re/bat_c02.mcache
new file mode 100644
index 000000000..5b3b9c44c
--- /dev/null
+++ b/maps/re/bat_c02.mcache
Binary files differ
diff --git a/maps/re/bat_c03.mcache b/maps/re/bat_c03.mcache
new file mode 100644
index 000000000..5b3b9c44c
--- /dev/null
+++ b/maps/re/bat_c03.mcache
Binary files differ
diff --git a/maps/re/bat_room.mcache b/maps/re/bat_room.mcache
new file mode 100644
index 000000000..03511b9ee
--- /dev/null
+++ b/maps/re/bat_room.mcache
Binary files differ
diff --git a/maps/re/beach_dun.mcache b/maps/re/beach_dun.mcache
new file mode 100644
index 000000000..b0c3b56b6
--- /dev/null
+++ b/maps/re/beach_dun.mcache
Binary files differ
diff --git a/maps/re/beach_dun2.mcache b/maps/re/beach_dun2.mcache
new file mode 100644
index 000000000..171a1a81f
--- /dev/null
+++ b/maps/re/beach_dun2.mcache
Binary files differ
diff --git a/maps/re/beach_dun3.mcache b/maps/re/beach_dun3.mcache
new file mode 100644
index 000000000..c0f4de5bb
--- /dev/null
+++ b/maps/re/beach_dun3.mcache
Binary files differ
diff --git a/maps/re/bif_fild01.mcache b/maps/re/bif_fild01.mcache
new file mode 100644
index 000000000..1c4521922
--- /dev/null
+++ b/maps/re/bif_fild01.mcache
Binary files differ
diff --git a/maps/re/bif_fild02.mcache b/maps/re/bif_fild02.mcache
new file mode 100644
index 000000000..c5bcccab7
--- /dev/null
+++ b/maps/re/bif_fild02.mcache
Binary files differ
diff --git a/maps/re/bossnia_01.mcache b/maps/re/bossnia_01.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/re/bossnia_01.mcache
Binary files differ
diff --git a/maps/re/bossnia_02.mcache b/maps/re/bossnia_02.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/re/bossnia_02.mcache
Binary files differ
diff --git a/maps/re/bossnia_03.mcache b/maps/re/bossnia_03.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/re/bossnia_03.mcache
Binary files differ
diff --git a/maps/re/bossnia_04.mcache b/maps/re/bossnia_04.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/re/bossnia_04.mcache
Binary files differ
diff --git a/maps/re/bra_dun01.mcache b/maps/re/bra_dun01.mcache
new file mode 100644
index 000000000..a361ad0d2
--- /dev/null
+++ b/maps/re/bra_dun01.mcache
Binary files differ
diff --git a/maps/re/bra_dun02.mcache b/maps/re/bra_dun02.mcache
new file mode 100644
index 000000000..b8cf26063
--- /dev/null
+++ b/maps/re/bra_dun02.mcache
Binary files differ
diff --git a/maps/re/bra_fild01.mcache b/maps/re/bra_fild01.mcache
new file mode 100644
index 000000000..a024b900f
--- /dev/null
+++ b/maps/re/bra_fild01.mcache
Binary files differ
diff --git a/maps/re/bra_in01.mcache b/maps/re/bra_in01.mcache
new file mode 100644
index 000000000..453447803
--- /dev/null
+++ b/maps/re/bra_in01.mcache
Binary files differ
diff --git a/maps/re/brasilis.mcache b/maps/re/brasilis.mcache
new file mode 100644
index 000000000..3917230c5
--- /dev/null
+++ b/maps/re/brasilis.mcache
Binary files differ
diff --git a/maps/re/c_tower1.mcache b/maps/re/c_tower1.mcache
new file mode 100644
index 000000000..369f27205
--- /dev/null
+++ b/maps/re/c_tower1.mcache
Binary files differ
diff --git a/maps/re/c_tower2.mcache b/maps/re/c_tower2.mcache
new file mode 100644
index 000000000..123709fe0
--- /dev/null
+++ b/maps/re/c_tower2.mcache
Binary files differ
diff --git a/maps/re/c_tower2_.mcache b/maps/re/c_tower2_.mcache
new file mode 100644
index 000000000..123709fe0
--- /dev/null
+++ b/maps/re/c_tower2_.mcache
Binary files differ
diff --git a/maps/re/c_tower3.mcache b/maps/re/c_tower3.mcache
new file mode 100644
index 000000000..dbf535c66
--- /dev/null
+++ b/maps/re/c_tower3.mcache
Binary files differ
diff --git a/maps/re/c_tower3_.mcache b/maps/re/c_tower3_.mcache
new file mode 100644
index 000000000..dbf535c66
--- /dev/null
+++ b/maps/re/c_tower3_.mcache
Binary files differ
diff --git a/maps/re/c_tower4.mcache b/maps/re/c_tower4.mcache
new file mode 100644
index 000000000..f9d79d599
--- /dev/null
+++ b/maps/re/c_tower4.mcache
Binary files differ
diff --git a/maps/re/cave.mcache b/maps/re/cave.mcache
new file mode 100644
index 000000000..06f55656e
--- /dev/null
+++ b/maps/re/cave.mcache
Binary files differ
diff --git a/maps/re/cmd_fild01.mcache b/maps/re/cmd_fild01.mcache
new file mode 100644
index 000000000..b26e68c79
--- /dev/null
+++ b/maps/re/cmd_fild01.mcache
Binary files differ
diff --git a/maps/re/cmd_fild02.mcache b/maps/re/cmd_fild02.mcache
new file mode 100644
index 000000000..b543dd2c1
--- /dev/null
+++ b/maps/re/cmd_fild02.mcache
Binary files differ
diff --git a/maps/re/cmd_fild03.mcache b/maps/re/cmd_fild03.mcache
new file mode 100644
index 000000000..70bc98c73
--- /dev/null
+++ b/maps/re/cmd_fild03.mcache
Binary files differ
diff --git a/maps/re/cmd_fild04.mcache b/maps/re/cmd_fild04.mcache
new file mode 100644
index 000000000..840e58dd5
--- /dev/null
+++ b/maps/re/cmd_fild04.mcache
Binary files differ
diff --git a/maps/re/cmd_fild05.mcache b/maps/re/cmd_fild05.mcache
new file mode 100644
index 000000000..4b24e60d9
--- /dev/null
+++ b/maps/re/cmd_fild05.mcache
Binary files differ
diff --git a/maps/re/cmd_fild06.mcache b/maps/re/cmd_fild06.mcache
new file mode 100644
index 000000000..9dc5b931f
--- /dev/null
+++ b/maps/re/cmd_fild06.mcache
Binary files differ
diff --git a/maps/re/cmd_fild07.mcache b/maps/re/cmd_fild07.mcache
new file mode 100644
index 000000000..71388d661
--- /dev/null
+++ b/maps/re/cmd_fild07.mcache
Binary files differ
diff --git a/maps/re/cmd_fild08.mcache b/maps/re/cmd_fild08.mcache
new file mode 100644
index 000000000..fe6925920
--- /dev/null
+++ b/maps/re/cmd_fild08.mcache
Binary files differ
diff --git a/maps/re/cmd_fild09.mcache b/maps/re/cmd_fild09.mcache
new file mode 100644
index 000000000..0408c3239
--- /dev/null
+++ b/maps/re/cmd_fild09.mcache
Binary files differ
diff --git a/maps/re/cmd_in01.mcache b/maps/re/cmd_in01.mcache
new file mode 100644
index 000000000..737ed0471
--- /dev/null
+++ b/maps/re/cmd_in01.mcache
Binary files differ
diff --git a/maps/re/cmd_in02.mcache b/maps/re/cmd_in02.mcache
new file mode 100644
index 000000000..615df16aa
--- /dev/null
+++ b/maps/re/cmd_in02.mcache
Binary files differ
diff --git a/maps/re/comodo.mcache b/maps/re/comodo.mcache
new file mode 100644
index 000000000..eac11b2db
--- /dev/null
+++ b/maps/re/comodo.mcache
Binary files differ
diff --git a/maps/re/dali.mcache b/maps/re/dali.mcache
new file mode 100644
index 000000000..c802a1c7d
--- /dev/null
+++ b/maps/re/dali.mcache
Binary files differ
diff --git a/maps/re/dali02.mcache b/maps/re/dali02.mcache
new file mode 100644
index 000000000..c802a1c7d
--- /dev/null
+++ b/maps/re/dali02.mcache
Binary files differ
diff --git a/maps/re/dew_dun01.mcache b/maps/re/dew_dun01.mcache
new file mode 100644
index 000000000..4a391f370
--- /dev/null
+++ b/maps/re/dew_dun01.mcache
Binary files differ
diff --git a/maps/re/dew_dun02.mcache b/maps/re/dew_dun02.mcache
new file mode 100644
index 000000000..19f1fa235
--- /dev/null
+++ b/maps/re/dew_dun02.mcache
Binary files differ
diff --git a/maps/re/dew_fild01.mcache b/maps/re/dew_fild01.mcache
new file mode 100644
index 000000000..c3d625525
--- /dev/null
+++ b/maps/re/dew_fild01.mcache
Binary files differ
diff --git a/maps/re/dew_in01.mcache b/maps/re/dew_in01.mcache
new file mode 100644
index 000000000..0e8446c4d
--- /dev/null
+++ b/maps/re/dew_in01.mcache
Binary files differ
diff --git a/maps/re/dewata.mcache b/maps/re/dewata.mcache
new file mode 100644
index 000000000..d16ec5d30
--- /dev/null
+++ b/maps/re/dewata.mcache
Binary files differ
diff --git a/maps/re/dic_dun01.mcache b/maps/re/dic_dun01.mcache
new file mode 100644
index 000000000..1ae77a718
--- /dev/null
+++ b/maps/re/dic_dun01.mcache
Binary files differ
diff --git a/maps/re/dic_dun02.mcache b/maps/re/dic_dun02.mcache
new file mode 100644
index 000000000..765b4b756
--- /dev/null
+++ b/maps/re/dic_dun02.mcache
Binary files differ
diff --git a/maps/re/dic_dun03.mcache b/maps/re/dic_dun03.mcache
new file mode 100644
index 000000000..765b4b756
--- /dev/null
+++ b/maps/re/dic_dun03.mcache
Binary files differ
diff --git a/maps/re/dic_fild01.mcache b/maps/re/dic_fild01.mcache
new file mode 100644
index 000000000..3b24b6025
--- /dev/null
+++ b/maps/re/dic_fild01.mcache
Binary files differ
diff --git a/maps/re/dic_fild02.mcache b/maps/re/dic_fild02.mcache
new file mode 100644
index 000000000..51314624d
--- /dev/null
+++ b/maps/re/dic_fild02.mcache
Binary files differ
diff --git a/maps/re/dic_in01.mcache b/maps/re/dic_in01.mcache
new file mode 100644
index 000000000..56717c50b
--- /dev/null
+++ b/maps/re/dic_in01.mcache
Binary files differ
diff --git a/maps/re/dicastes01.mcache b/maps/re/dicastes01.mcache
new file mode 100644
index 000000000..da84af440
--- /dev/null
+++ b/maps/re/dicastes01.mcache
Binary files differ
diff --git a/maps/re/dicastes02.mcache b/maps/re/dicastes02.mcache
new file mode 100644
index 000000000..fcfec592d
--- /dev/null
+++ b/maps/re/dicastes02.mcache
Binary files differ
diff --git a/maps/re/e_tower.mcache b/maps/re/e_tower.mcache
new file mode 100644
index 000000000..95e46c5d9
--- /dev/null
+++ b/maps/re/e_tower.mcache
Binary files differ
diff --git a/maps/re/ecl_fild01.mcache b/maps/re/ecl_fild01.mcache
new file mode 100644
index 000000000..defc02358
--- /dev/null
+++ b/maps/re/ecl_fild01.mcache
Binary files differ
diff --git a/maps/re/ecl_hub01.mcache b/maps/re/ecl_hub01.mcache
new file mode 100644
index 000000000..f484f889d
--- /dev/null
+++ b/maps/re/ecl_hub01.mcache
Binary files differ
diff --git a/maps/re/ecl_in01.mcache b/maps/re/ecl_in01.mcache
new file mode 100644
index 000000000..2f827d6ca
--- /dev/null
+++ b/maps/re/ecl_in01.mcache
Binary files differ
diff --git a/maps/re/ecl_in02.mcache b/maps/re/ecl_in02.mcache
new file mode 100644
index 000000000..b05037719
--- /dev/null
+++ b/maps/re/ecl_in02.mcache
Binary files differ
diff --git a/maps/re/ecl_in03.mcache b/maps/re/ecl_in03.mcache
new file mode 100644
index 000000000..f62ec45c1
--- /dev/null
+++ b/maps/re/ecl_in03.mcache
Binary files differ
diff --git a/maps/re/ecl_in04.mcache b/maps/re/ecl_in04.mcache
new file mode 100644
index 000000000..2261bc8f7
--- /dev/null
+++ b/maps/re/ecl_in04.mcache
Binary files differ
diff --git a/maps/re/ecl_tdun01.mcache b/maps/re/ecl_tdun01.mcache
new file mode 100644
index 000000000..814786557
--- /dev/null
+++ b/maps/re/ecl_tdun01.mcache
Binary files differ
diff --git a/maps/re/ecl_tdun02.mcache b/maps/re/ecl_tdun02.mcache
new file mode 100644
index 000000000..bf1e078bc
--- /dev/null
+++ b/maps/re/ecl_tdun02.mcache
Binary files differ
diff --git a/maps/re/ecl_tdun03.mcache b/maps/re/ecl_tdun03.mcache
new file mode 100644
index 000000000..d41be2bdc
--- /dev/null
+++ b/maps/re/ecl_tdun03.mcache
Binary files differ
diff --git a/maps/re/ecl_tdun04.mcache b/maps/re/ecl_tdun04.mcache
new file mode 100644
index 000000000..763331f2a
--- /dev/null
+++ b/maps/re/ecl_tdun04.mcache
Binary files differ
diff --git a/maps/re/eclage.mcache b/maps/re/eclage.mcache
new file mode 100644
index 000000000..da637db44
--- /dev/null
+++ b/maps/re/eclage.mcache
Binary files differ
diff --git a/maps/re/ein_dun01.mcache b/maps/re/ein_dun01.mcache
new file mode 100644
index 000000000..1c5e03593
--- /dev/null
+++ b/maps/re/ein_dun01.mcache
Binary files differ
diff --git a/maps/re/ein_dun02.mcache b/maps/re/ein_dun02.mcache
new file mode 100644
index 000000000..ccdfd65ed
--- /dev/null
+++ b/maps/re/ein_dun02.mcache
Binary files differ
diff --git a/maps/re/ein_fild01.mcache b/maps/re/ein_fild01.mcache
new file mode 100644
index 000000000..997794512
--- /dev/null
+++ b/maps/re/ein_fild01.mcache
Binary files differ
diff --git a/maps/re/ein_fild02.mcache b/maps/re/ein_fild02.mcache
new file mode 100644
index 000000000..d75b8e4f0
--- /dev/null
+++ b/maps/re/ein_fild02.mcache
Binary files differ
diff --git a/maps/re/ein_fild03.mcache b/maps/re/ein_fild03.mcache
new file mode 100644
index 000000000..d73adb11e
--- /dev/null
+++ b/maps/re/ein_fild03.mcache
Binary files differ
diff --git a/maps/re/ein_fild04.mcache b/maps/re/ein_fild04.mcache
new file mode 100644
index 000000000..31a4b325c
--- /dev/null
+++ b/maps/re/ein_fild04.mcache
Binary files differ
diff --git a/maps/re/ein_fild05.mcache b/maps/re/ein_fild05.mcache
new file mode 100644
index 000000000..ac28ff888
--- /dev/null
+++ b/maps/re/ein_fild05.mcache
Binary files differ
diff --git a/maps/re/ein_fild06.mcache b/maps/re/ein_fild06.mcache
new file mode 100644
index 000000000..014bd685c
--- /dev/null
+++ b/maps/re/ein_fild06.mcache
Binary files differ
diff --git a/maps/re/ein_fild07.mcache b/maps/re/ein_fild07.mcache
new file mode 100644
index 000000000..28d7059a7
--- /dev/null
+++ b/maps/re/ein_fild07.mcache
Binary files differ
diff --git a/maps/re/ein_fild08.mcache b/maps/re/ein_fild08.mcache
new file mode 100644
index 000000000..d3c6bb754
--- /dev/null
+++ b/maps/re/ein_fild08.mcache
Binary files differ
diff --git a/maps/re/ein_fild09.mcache b/maps/re/ein_fild09.mcache
new file mode 100644
index 000000000..fc5e2c7c2
--- /dev/null
+++ b/maps/re/ein_fild09.mcache
Binary files differ
diff --git a/maps/re/ein_fild10.mcache b/maps/re/ein_fild10.mcache
new file mode 100644
index 000000000..80776201a
--- /dev/null
+++ b/maps/re/ein_fild10.mcache
Binary files differ
diff --git a/maps/re/ein_in01.mcache b/maps/re/ein_in01.mcache
new file mode 100644
index 000000000..d5218dc9c
--- /dev/null
+++ b/maps/re/ein_in01.mcache
Binary files differ
diff --git a/maps/re/einbech.mcache b/maps/re/einbech.mcache
new file mode 100644
index 000000000..f48882174
--- /dev/null
+++ b/maps/re/einbech.mcache
Binary files differ
diff --git a/maps/re/einbroch.mcache b/maps/re/einbroch.mcache
new file mode 100644
index 000000000..adb422207
--- /dev/null
+++ b/maps/re/einbroch.mcache
Binary files differ
diff --git a/maps/re/evt_bomb.mcache b/maps/re/evt_bomb.mcache
new file mode 100644
index 000000000..36424c23f
--- /dev/null
+++ b/maps/re/evt_bomb.mcache
Binary files differ
diff --git a/maps/re/evt_mobroom.mcache b/maps/re/evt_mobroom.mcache
new file mode 100644
index 000000000..7d3c46952
--- /dev/null
+++ b/maps/re/evt_mobroom.mcache
Binary files differ
diff --git a/maps/re/force_1-1.mcache b/maps/re/force_1-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/re/force_1-1.mcache
Binary files differ
diff --git a/maps/re/force_1-2.mcache b/maps/re/force_1-2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/re/force_1-2.mcache
Binary files differ
diff --git a/maps/re/force_1-3.mcache b/maps/re/force_1-3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/re/force_1-3.mcache
Binary files differ
diff --git a/maps/re/force_2-1.mcache b/maps/re/force_2-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/re/force_2-1.mcache
Binary files differ
diff --git a/maps/re/force_2-2.mcache b/maps/re/force_2-2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/re/force_2-2.mcache
Binary files differ
diff --git a/maps/re/force_2-3.mcache b/maps/re/force_2-3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/re/force_2-3.mcache
Binary files differ
diff --git a/maps/re/force_3-1.mcache b/maps/re/force_3-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/re/force_3-1.mcache
Binary files differ
diff --git a/maps/re/force_3-2.mcache b/maps/re/force_3-2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/re/force_3-2.mcache
Binary files differ
diff --git a/maps/re/force_3-3.mcache b/maps/re/force_3-3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/re/force_3-3.mcache
Binary files differ
diff --git a/maps/re/force_4-1.mcache b/maps/re/force_4-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/re/force_4-1.mcache
Binary files differ
diff --git a/maps/re/force_5-1.mcache b/maps/re/force_5-1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/re/force_5-1.mcache
Binary files differ
diff --git a/maps/re/force_map1.mcache b/maps/re/force_map1.mcache
new file mode 100644
index 000000000..0405ac793
--- /dev/null
+++ b/maps/re/force_map1.mcache
Binary files differ
diff --git a/maps/re/force_map2.mcache b/maps/re/force_map2.mcache
new file mode 100644
index 000000000..23a2827c5
--- /dev/null
+++ b/maps/re/force_map2.mcache
Binary files differ
diff --git a/maps/re/force_map3.mcache b/maps/re/force_map3.mcache
new file mode 100644
index 000000000..8afc95d79
--- /dev/null
+++ b/maps/re/force_map3.mcache
Binary files differ
diff --git a/maps/re/g_room1-1.mcache b/maps/re/g_room1-1.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/re/g_room1-1.mcache
Binary files differ
diff --git a/maps/re/g_room1-2.mcache b/maps/re/g_room1-2.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/re/g_room1-2.mcache
Binary files differ
diff --git a/maps/re/g_room1-3.mcache b/maps/re/g_room1-3.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/re/g_room1-3.mcache
Binary files differ
diff --git a/maps/re/g_room2.mcache b/maps/re/g_room2.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/re/g_room2.mcache
Binary files differ
diff --git a/maps/re/gef_dun00.mcache b/maps/re/gef_dun00.mcache
new file mode 100644
index 000000000..682eb2ce6
--- /dev/null
+++ b/maps/re/gef_dun00.mcache
Binary files differ
diff --git a/maps/re/gef_dun01.mcache b/maps/re/gef_dun01.mcache
new file mode 100644
index 000000000..050a70c65
--- /dev/null
+++ b/maps/re/gef_dun01.mcache
Binary files differ
diff --git a/maps/re/gef_dun02.mcache b/maps/re/gef_dun02.mcache
new file mode 100644
index 000000000..95eabec82
--- /dev/null
+++ b/maps/re/gef_dun02.mcache
Binary files differ
diff --git a/maps/re/gef_dun03.mcache b/maps/re/gef_dun03.mcache
new file mode 100644
index 000000000..f6198814b
--- /dev/null
+++ b/maps/re/gef_dun03.mcache
Binary files differ
diff --git a/maps/re/gef_fild00.mcache b/maps/re/gef_fild00.mcache
new file mode 100644
index 000000000..158321931
--- /dev/null
+++ b/maps/re/gef_fild00.mcache
Binary files differ
diff --git a/maps/re/gef_fild01.mcache b/maps/re/gef_fild01.mcache
new file mode 100644
index 000000000..52042dbcc
--- /dev/null
+++ b/maps/re/gef_fild01.mcache
Binary files differ
diff --git a/maps/re/gef_fild02.mcache b/maps/re/gef_fild02.mcache
new file mode 100644
index 000000000..c20df945f
--- /dev/null
+++ b/maps/re/gef_fild02.mcache
Binary files differ
diff --git a/maps/re/gef_fild03.mcache b/maps/re/gef_fild03.mcache
new file mode 100644
index 000000000..809e54809
--- /dev/null
+++ b/maps/re/gef_fild03.mcache
Binary files differ
diff --git a/maps/re/gef_fild04.mcache b/maps/re/gef_fild04.mcache
new file mode 100644
index 000000000..d08e64cf8
--- /dev/null
+++ b/maps/re/gef_fild04.mcache
Binary files differ
diff --git a/maps/re/gef_fild05.mcache b/maps/re/gef_fild05.mcache
new file mode 100644
index 000000000..72f050a49
--- /dev/null
+++ b/maps/re/gef_fild05.mcache
Binary files differ
diff --git a/maps/re/gef_fild06.mcache b/maps/re/gef_fild06.mcache
new file mode 100644
index 000000000..a9003f922
--- /dev/null
+++ b/maps/re/gef_fild06.mcache
Binary files differ
diff --git a/maps/re/gef_fild07.mcache b/maps/re/gef_fild07.mcache
new file mode 100644
index 000000000..e56f091c6
--- /dev/null
+++ b/maps/re/gef_fild07.mcache
Binary files differ
diff --git a/maps/re/gef_fild08.mcache b/maps/re/gef_fild08.mcache
new file mode 100644
index 000000000..671438ac3
--- /dev/null
+++ b/maps/re/gef_fild08.mcache
Binary files differ
diff --git a/maps/re/gef_fild09.mcache b/maps/re/gef_fild09.mcache
new file mode 100644
index 000000000..d4a9d5644
--- /dev/null
+++ b/maps/re/gef_fild09.mcache
Binary files differ
diff --git a/maps/re/gef_fild10.mcache b/maps/re/gef_fild10.mcache
new file mode 100644
index 000000000..ed9b3d6fc
--- /dev/null
+++ b/maps/re/gef_fild10.mcache
Binary files differ
diff --git a/maps/re/gef_fild11.mcache b/maps/re/gef_fild11.mcache
new file mode 100644
index 000000000..4c7e4d700
--- /dev/null
+++ b/maps/re/gef_fild11.mcache
Binary files differ
diff --git a/maps/re/gef_fild12.mcache b/maps/re/gef_fild12.mcache
new file mode 100644
index 000000000..1d18a1421
--- /dev/null
+++ b/maps/re/gef_fild12.mcache
Binary files differ
diff --git a/maps/re/gef_fild13.mcache b/maps/re/gef_fild13.mcache
new file mode 100644
index 000000000..e7243c1ad
--- /dev/null
+++ b/maps/re/gef_fild13.mcache
Binary files differ
diff --git a/maps/re/gef_fild14.mcache b/maps/re/gef_fild14.mcache
new file mode 100644
index 000000000..c9bc47e6d
--- /dev/null
+++ b/maps/re/gef_fild14.mcache
Binary files differ
diff --git a/maps/re/gef_tower.mcache b/maps/re/gef_tower.mcache
new file mode 100644
index 000000000..893e8d1ff
--- /dev/null
+++ b/maps/re/gef_tower.mcache
Binary files differ
diff --git a/maps/re/gefenia01.mcache b/maps/re/gefenia01.mcache
new file mode 100644
index 000000000..347332bab
--- /dev/null
+++ b/maps/re/gefenia01.mcache
Binary files differ
diff --git a/maps/re/gefenia02.mcache b/maps/re/gefenia02.mcache
new file mode 100644
index 000000000..3ac05d055
--- /dev/null
+++ b/maps/re/gefenia02.mcache
Binary files differ
diff --git a/maps/re/gefenia03.mcache b/maps/re/gefenia03.mcache
new file mode 100644
index 000000000..ac86014ba
--- /dev/null
+++ b/maps/re/gefenia03.mcache
Binary files differ
diff --git a/maps/re/gefenia04.mcache b/maps/re/gefenia04.mcache
new file mode 100644
index 000000000..8e7a53f32
--- /dev/null
+++ b/maps/re/gefenia04.mcache
Binary files differ
diff --git a/maps/re/geffen.mcache b/maps/re/geffen.mcache
new file mode 100644
index 000000000..72d8d30f3
--- /dev/null
+++ b/maps/re/geffen.mcache
Binary files differ
diff --git a/maps/re/geffen_in.mcache b/maps/re/geffen_in.mcache
new file mode 100644
index 000000000..6f8ded6aa
--- /dev/null
+++ b/maps/re/geffen_in.mcache
Binary files differ
diff --git a/maps/re/gefg_cas01.mcache b/maps/re/gefg_cas01.mcache
new file mode 100644
index 000000000..fcc51f76d
--- /dev/null
+++ b/maps/re/gefg_cas01.mcache
Binary files differ
diff --git a/maps/re/gefg_cas02.mcache b/maps/re/gefg_cas02.mcache
new file mode 100644
index 000000000..4c9ed620c
--- /dev/null
+++ b/maps/re/gefg_cas02.mcache
Binary files differ
diff --git a/maps/re/gefg_cas03.mcache b/maps/re/gefg_cas03.mcache
new file mode 100644
index 000000000..ce0c0b5e2
--- /dev/null
+++ b/maps/re/gefg_cas03.mcache
Binary files differ
diff --git a/maps/re/gefg_cas04.mcache b/maps/re/gefg_cas04.mcache
new file mode 100644
index 000000000..644ae4732
--- /dev/null
+++ b/maps/re/gefg_cas04.mcache
Binary files differ
diff --git a/maps/re/gefg_cas05.mcache b/maps/re/gefg_cas05.mcache
new file mode 100644
index 000000000..01eb7e0b4
--- /dev/null
+++ b/maps/re/gefg_cas05.mcache
Binary files differ
diff --git a/maps/re/gl_cas01.mcache b/maps/re/gl_cas01.mcache
new file mode 100644
index 000000000..8b21d8863
--- /dev/null
+++ b/maps/re/gl_cas01.mcache
Binary files differ
diff --git a/maps/re/gl_cas02.mcache b/maps/re/gl_cas02.mcache
new file mode 100644
index 000000000..76fc00c96
--- /dev/null
+++ b/maps/re/gl_cas02.mcache
Binary files differ
diff --git a/maps/re/gl_cas02_.mcache b/maps/re/gl_cas02_.mcache
new file mode 100644
index 000000000..76fc00c96
--- /dev/null
+++ b/maps/re/gl_cas02_.mcache
Binary files differ
diff --git a/maps/re/gl_church.mcache b/maps/re/gl_church.mcache
new file mode 100644
index 000000000..3e3a881e0
--- /dev/null
+++ b/maps/re/gl_church.mcache
Binary files differ
diff --git a/maps/re/gl_chyard.mcache b/maps/re/gl_chyard.mcache
new file mode 100644
index 000000000..f38b51ef9
--- /dev/null
+++ b/maps/re/gl_chyard.mcache
Binary files differ
diff --git a/maps/re/gl_chyard_.mcache b/maps/re/gl_chyard_.mcache
new file mode 100644
index 000000000..f38b51ef9
--- /dev/null
+++ b/maps/re/gl_chyard_.mcache
Binary files differ
diff --git a/maps/re/gl_dun01.mcache b/maps/re/gl_dun01.mcache
new file mode 100644
index 000000000..abe4f0783
--- /dev/null
+++ b/maps/re/gl_dun01.mcache
Binary files differ
diff --git a/maps/re/gl_dun02.mcache b/maps/re/gl_dun02.mcache
new file mode 100644
index 000000000..9fbc24dca
--- /dev/null
+++ b/maps/re/gl_dun02.mcache
Binary files differ
diff --git a/maps/re/gl_in01.mcache b/maps/re/gl_in01.mcache
new file mode 100644
index 000000000..a49f299d3
--- /dev/null
+++ b/maps/re/gl_in01.mcache
Binary files differ
diff --git a/maps/re/gl_knt01.mcache b/maps/re/gl_knt01.mcache
new file mode 100644
index 000000000..521698b12
--- /dev/null
+++ b/maps/re/gl_knt01.mcache
Binary files differ
diff --git a/maps/re/gl_knt02.mcache b/maps/re/gl_knt02.mcache
new file mode 100644
index 000000000..1b399e506
--- /dev/null
+++ b/maps/re/gl_knt02.mcache
Binary files differ
diff --git a/maps/re/gl_prison.mcache b/maps/re/gl_prison.mcache
new file mode 100644
index 000000000..019e06253
--- /dev/null
+++ b/maps/re/gl_prison.mcache
Binary files differ
diff --git a/maps/re/gl_prison1.mcache b/maps/re/gl_prison1.mcache
new file mode 100644
index 000000000..a2347a9e8
--- /dev/null
+++ b/maps/re/gl_prison1.mcache
Binary files differ
diff --git a/maps/re/gl_sew01.mcache b/maps/re/gl_sew01.mcache
new file mode 100644
index 000000000..27df90681
--- /dev/null
+++ b/maps/re/gl_sew01.mcache
Binary files differ
diff --git a/maps/re/gl_sew02.mcache b/maps/re/gl_sew02.mcache
new file mode 100644
index 000000000..ce47f81c1
--- /dev/null
+++ b/maps/re/gl_sew02.mcache
Binary files differ
diff --git a/maps/re/gl_sew03.mcache b/maps/re/gl_sew03.mcache
new file mode 100644
index 000000000..1e74e3f22
--- /dev/null
+++ b/maps/re/gl_sew03.mcache
Binary files differ
diff --git a/maps/re/gl_sew04.mcache b/maps/re/gl_sew04.mcache
new file mode 100644
index 000000000..e1d17fea3
--- /dev/null
+++ b/maps/re/gl_sew04.mcache
Binary files differ
diff --git a/maps/re/gl_step.mcache b/maps/re/gl_step.mcache
new file mode 100644
index 000000000..1783be8e3
--- /dev/null
+++ b/maps/re/gl_step.mcache
Binary files differ
diff --git a/maps/re/glast_01.mcache b/maps/re/glast_01.mcache
new file mode 100644
index 000000000..5317424c2
--- /dev/null
+++ b/maps/re/glast_01.mcache
Binary files differ
diff --git a/maps/re/gld2_ald.mcache b/maps/re/gld2_ald.mcache
new file mode 100644
index 000000000..d3c817716
--- /dev/null
+++ b/maps/re/gld2_ald.mcache
Binary files differ
diff --git a/maps/re/gld2_gef.mcache b/maps/re/gld2_gef.mcache
new file mode 100644
index 000000000..52cf7c354
--- /dev/null
+++ b/maps/re/gld2_gef.mcache
Binary files differ
diff --git a/maps/re/gld2_pay.mcache b/maps/re/gld2_pay.mcache
new file mode 100644
index 000000000..b7f4a485d
--- /dev/null
+++ b/maps/re/gld2_pay.mcache
Binary files differ
diff --git a/maps/re/gld2_prt.mcache b/maps/re/gld2_prt.mcache
new file mode 100644
index 000000000..890b34ac7
--- /dev/null
+++ b/maps/re/gld2_prt.mcache
Binary files differ
diff --git a/maps/re/gld_dun01.mcache b/maps/re/gld_dun01.mcache
new file mode 100644
index 000000000..725b334a0
--- /dev/null
+++ b/maps/re/gld_dun01.mcache
Binary files differ
diff --git a/maps/re/gld_dun01_2.mcache b/maps/re/gld_dun01_2.mcache
new file mode 100644
index 000000000..725b334a0
--- /dev/null
+++ b/maps/re/gld_dun01_2.mcache
Binary files differ
diff --git a/maps/re/gld_dun02.mcache b/maps/re/gld_dun02.mcache
new file mode 100644
index 000000000..4feff8774
--- /dev/null
+++ b/maps/re/gld_dun02.mcache
Binary files differ
diff --git a/maps/re/gld_dun02_2.mcache b/maps/re/gld_dun02_2.mcache
new file mode 100644
index 000000000..4feff8774
--- /dev/null
+++ b/maps/re/gld_dun02_2.mcache
Binary files differ
diff --git a/maps/re/gld_dun03.mcache b/maps/re/gld_dun03.mcache
new file mode 100644
index 000000000..44c528bc2
--- /dev/null
+++ b/maps/re/gld_dun03.mcache
Binary files differ
diff --git a/maps/re/gld_dun03_2.mcache b/maps/re/gld_dun03_2.mcache
new file mode 100644
index 000000000..44c528bc2
--- /dev/null
+++ b/maps/re/gld_dun03_2.mcache
Binary files differ
diff --git a/maps/re/gld_dun04.mcache b/maps/re/gld_dun04.mcache
new file mode 100644
index 000000000..953b7d375
--- /dev/null
+++ b/maps/re/gld_dun04.mcache
Binary files differ
diff --git a/maps/re/gld_dun04_2.mcache b/maps/re/gld_dun04_2.mcache
new file mode 100644
index 000000000..953b7d375
--- /dev/null
+++ b/maps/re/gld_dun04_2.mcache
Binary files differ
diff --git a/maps/re/gon_dun01.mcache b/maps/re/gon_dun01.mcache
new file mode 100644
index 000000000..d6250c57d
--- /dev/null
+++ b/maps/re/gon_dun01.mcache
Binary files differ
diff --git a/maps/re/gon_dun02.mcache b/maps/re/gon_dun02.mcache
new file mode 100644
index 000000000..8c40622ae
--- /dev/null
+++ b/maps/re/gon_dun02.mcache
Binary files differ
diff --git a/maps/re/gon_dun03.mcache b/maps/re/gon_dun03.mcache
new file mode 100644
index 000000000..2f1e77961
--- /dev/null
+++ b/maps/re/gon_dun03.mcache
Binary files differ
diff --git a/maps/re/gon_fild01.mcache b/maps/re/gon_fild01.mcache
new file mode 100644
index 000000000..2d3a56939
--- /dev/null
+++ b/maps/re/gon_fild01.mcache
Binary files differ
diff --git a/maps/re/gon_in.mcache b/maps/re/gon_in.mcache
new file mode 100644
index 000000000..a015b8899
--- /dev/null
+++ b/maps/re/gon_in.mcache
Binary files differ
diff --git a/maps/re/gon_test.mcache b/maps/re/gon_test.mcache
new file mode 100644
index 000000000..0147bed4a
--- /dev/null
+++ b/maps/re/gon_test.mcache
Binary files differ
diff --git a/maps/re/gonryun.mcache b/maps/re/gonryun.mcache
new file mode 100644
index 000000000..1f8b8414c
--- /dev/null
+++ b/maps/re/gonryun.mcache
Binary files differ
diff --git a/maps/re/guild_room.mcache b/maps/re/guild_room.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/re/guild_room.mcache
Binary files differ
diff --git a/maps/re/guild_vs1-1.mcache b/maps/re/guild_vs1-1.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/re/guild_vs1-1.mcache
Binary files differ
diff --git a/maps/re/guild_vs1-2.mcache b/maps/re/guild_vs1-2.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/re/guild_vs1-2.mcache
Binary files differ
diff --git a/maps/re/guild_vs1-3.mcache b/maps/re/guild_vs1-3.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/re/guild_vs1-3.mcache
Binary files differ
diff --git a/maps/re/guild_vs1-4.mcache b/maps/re/guild_vs1-4.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/re/guild_vs1-4.mcache
Binary files differ
diff --git a/maps/re/guild_vs1.mcache b/maps/re/guild_vs1.mcache
new file mode 100644
index 000000000..39328031c
--- /dev/null
+++ b/maps/re/guild_vs1.mcache
Binary files differ
diff --git a/maps/re/guild_vs2-1.mcache b/maps/re/guild_vs2-1.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/guild_vs2-1.mcache
Binary files differ
diff --git a/maps/re/guild_vs2-2.mcache b/maps/re/guild_vs2-2.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/guild_vs2-2.mcache
Binary files differ
diff --git a/maps/re/guild_vs2.mcache b/maps/re/guild_vs2.mcache
new file mode 100644
index 000000000..d4ce6262e
--- /dev/null
+++ b/maps/re/guild_vs2.mcache
Binary files differ
diff --git a/maps/re/guild_vs3.mcache b/maps/re/guild_vs3.mcache
new file mode 100644
index 000000000..32615fe48
--- /dev/null
+++ b/maps/re/guild_vs3.mcache
Binary files differ
diff --git a/maps/re/guild_vs4.mcache b/maps/re/guild_vs4.mcache
new file mode 100644
index 000000000..d3d7f545f
--- /dev/null
+++ b/maps/re/guild_vs4.mcache
Binary files differ
diff --git a/maps/re/guild_vs5.mcache b/maps/re/guild_vs5.mcache
new file mode 100644
index 000000000..d529f8a76
--- /dev/null
+++ b/maps/re/guild_vs5.mcache
Binary files differ
diff --git a/maps/re/himinn.mcache b/maps/re/himinn.mcache
new file mode 100644
index 000000000..208d13ed9
--- /dev/null
+++ b/maps/re/himinn.mcache
Binary files differ
diff --git a/maps/re/hu_fild01.mcache b/maps/re/hu_fild01.mcache
new file mode 100644
index 000000000..6608d7ded
--- /dev/null
+++ b/maps/re/hu_fild01.mcache
Binary files differ
diff --git a/maps/re/hu_fild02.mcache b/maps/re/hu_fild02.mcache
new file mode 100644
index 000000000..35716719d
--- /dev/null
+++ b/maps/re/hu_fild02.mcache
Binary files differ
diff --git a/maps/re/hu_fild03.mcache b/maps/re/hu_fild03.mcache
new file mode 100644
index 000000000..dd41b8ed3
--- /dev/null
+++ b/maps/re/hu_fild03.mcache
Binary files differ
diff --git a/maps/re/hu_fild04.mcache b/maps/re/hu_fild04.mcache
new file mode 100644
index 000000000..4658b3d4a
--- /dev/null
+++ b/maps/re/hu_fild04.mcache
Binary files differ
diff --git a/maps/re/hu_fild05.mcache b/maps/re/hu_fild05.mcache
new file mode 100644
index 000000000..5b145894f
--- /dev/null
+++ b/maps/re/hu_fild05.mcache
Binary files differ
diff --git a/maps/re/hu_fild06.mcache b/maps/re/hu_fild06.mcache
new file mode 100644
index 000000000..420460fdd
--- /dev/null
+++ b/maps/re/hu_fild06.mcache
Binary files differ
diff --git a/maps/re/hu_fild07.mcache b/maps/re/hu_fild07.mcache
new file mode 100644
index 000000000..82aaf0b2a
--- /dev/null
+++ b/maps/re/hu_fild07.mcache
Binary files differ
diff --git a/maps/re/hu_in01.mcache b/maps/re/hu_in01.mcache
new file mode 100644
index 000000000..e56450467
--- /dev/null
+++ b/maps/re/hu_in01.mcache
Binary files differ
diff --git a/maps/re/hugel.mcache b/maps/re/hugel.mcache
new file mode 100644
index 000000000..e350349bb
--- /dev/null
+++ b/maps/re/hugel.mcache
Binary files differ
diff --git a/maps/re/hunter_1-1.mcache b/maps/re/hunter_1-1.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/hunter_1-1.mcache
Binary files differ
diff --git a/maps/re/hunter_2-1.mcache b/maps/re/hunter_2-1.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/hunter_2-1.mcache
Binary files differ
diff --git a/maps/re/hunter_3-1.mcache b/maps/re/hunter_3-1.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/hunter_3-1.mcache
Binary files differ
diff --git a/maps/re/ice_dun01.mcache b/maps/re/ice_dun01.mcache
new file mode 100644
index 000000000..8f7fedeac
--- /dev/null
+++ b/maps/re/ice_dun01.mcache
Binary files differ
diff --git a/maps/re/ice_dun02.mcache b/maps/re/ice_dun02.mcache
new file mode 100644
index 000000000..5d3f7205a
--- /dev/null
+++ b/maps/re/ice_dun02.mcache
Binary files differ
diff --git a/maps/re/ice_dun03.mcache b/maps/re/ice_dun03.mcache
new file mode 100644
index 000000000..7600452d4
--- /dev/null
+++ b/maps/re/ice_dun03.mcache
Binary files differ
diff --git a/maps/re/ice_dun04.mcache b/maps/re/ice_dun04.mcache
new file mode 100644
index 000000000..ffee28527
--- /dev/null
+++ b/maps/re/ice_dun04.mcache
Binary files differ
diff --git a/maps/re/in_hunter.mcache b/maps/re/in_hunter.mcache
new file mode 100644
index 000000000..797d74456
--- /dev/null
+++ b/maps/re/in_hunter.mcache
Binary files differ
diff --git a/maps/re/in_moc_16.mcache b/maps/re/in_moc_16.mcache
new file mode 100644
index 000000000..70290570b
--- /dev/null
+++ b/maps/re/in_moc_16.mcache
Binary files differ
diff --git a/maps/re/in_orcs01.mcache b/maps/re/in_orcs01.mcache
new file mode 100644
index 000000000..c7d3dac4d
--- /dev/null
+++ b/maps/re/in_orcs01.mcache
Binary files differ
diff --git a/maps/re/in_rogue.mcache b/maps/re/in_rogue.mcache
new file mode 100644
index 000000000..7eabc9922
--- /dev/null
+++ b/maps/re/in_rogue.mcache
Binary files differ
diff --git a/maps/re/in_sphinx1.mcache b/maps/re/in_sphinx1.mcache
new file mode 100644
index 000000000..f18547ed7
--- /dev/null
+++ b/maps/re/in_sphinx1.mcache
Binary files differ
diff --git a/maps/re/in_sphinx2.mcache b/maps/re/in_sphinx2.mcache
new file mode 100644
index 000000000..8884f8d34
--- /dev/null
+++ b/maps/re/in_sphinx2.mcache
Binary files differ
diff --git a/maps/re/in_sphinx3.mcache b/maps/re/in_sphinx3.mcache
new file mode 100644
index 000000000..be610a8bf
--- /dev/null
+++ b/maps/re/in_sphinx3.mcache
Binary files differ
diff --git a/maps/re/in_sphinx4.mcache b/maps/re/in_sphinx4.mcache
new file mode 100644
index 000000000..bcb095f83
--- /dev/null
+++ b/maps/re/in_sphinx4.mcache
Binary files differ
diff --git a/maps/re/in_sphinx5.mcache b/maps/re/in_sphinx5.mcache
new file mode 100644
index 000000000..3779ca02d
--- /dev/null
+++ b/maps/re/in_sphinx5.mcache
Binary files differ
diff --git a/maps/re/int_land.mcache b/maps/re/int_land.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/re/int_land.mcache
Binary files differ
diff --git a/maps/re/int_land01.mcache b/maps/re/int_land01.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/re/int_land01.mcache
Binary files differ
diff --git a/maps/re/int_land02.mcache b/maps/re/int_land02.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/re/int_land02.mcache
Binary files differ
diff --git a/maps/re/int_land03.mcache b/maps/re/int_land03.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/re/int_land03.mcache
Binary files differ
diff --git a/maps/re/int_land04.mcache b/maps/re/int_land04.mcache
new file mode 100644
index 000000000..86e79ee75
--- /dev/null
+++ b/maps/re/int_land04.mcache
Binary files differ
diff --git a/maps/re/itemmall.mcache b/maps/re/itemmall.mcache
new file mode 100644
index 000000000..93879880f
--- /dev/null
+++ b/maps/re/itemmall.mcache
Binary files differ
diff --git a/maps/re/iz_ac01.mcache b/maps/re/iz_ac01.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/re/iz_ac01.mcache
Binary files differ
diff --git a/maps/re/iz_ac01_a.mcache b/maps/re/iz_ac01_a.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/re/iz_ac01_a.mcache
Binary files differ
diff --git a/maps/re/iz_ac01_b.mcache b/maps/re/iz_ac01_b.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/re/iz_ac01_b.mcache
Binary files differ
diff --git a/maps/re/iz_ac01_c.mcache b/maps/re/iz_ac01_c.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/re/iz_ac01_c.mcache
Binary files differ
diff --git a/maps/re/iz_ac01_d.mcache b/maps/re/iz_ac01_d.mcache
new file mode 100644
index 000000000..3cca8d8e0
--- /dev/null
+++ b/maps/re/iz_ac01_d.mcache
Binary files differ
diff --git a/maps/re/iz_ac02.mcache b/maps/re/iz_ac02.mcache
new file mode 100644
index 000000000..c939a1315
--- /dev/null
+++ b/maps/re/iz_ac02.mcache
Binary files differ
diff --git a/maps/re/iz_ac02_a.mcache b/maps/re/iz_ac02_a.mcache
new file mode 100644
index 000000000..c939a1315
--- /dev/null
+++ b/maps/re/iz_ac02_a.mcache
Binary files differ
diff --git a/maps/re/iz_ac02_b.mcache b/maps/re/iz_ac02_b.mcache
new file mode 100644
index 000000000..c939a1315
--- /dev/null
+++ b/maps/re/iz_ac02_b.mcache
Binary files differ
diff --git a/maps/re/iz_ac02_c.mcache b/maps/re/iz_ac02_c.mcache
new file mode 100644
index 000000000..c939a1315
--- /dev/null
+++ b/maps/re/iz_ac02_c.mcache
Binary files differ
diff --git a/maps/re/iz_ac02_d.mcache b/maps/re/iz_ac02_d.mcache
new file mode 100644
index 000000000..c939a1315
--- /dev/null
+++ b/maps/re/iz_ac02_d.mcache
Binary files differ
diff --git a/maps/re/iz_dun00.mcache b/maps/re/iz_dun00.mcache
new file mode 100644
index 000000000..448c90de6
--- /dev/null
+++ b/maps/re/iz_dun00.mcache
Binary files differ
diff --git a/maps/re/iz_dun01.mcache b/maps/re/iz_dun01.mcache
new file mode 100644
index 000000000..a00173a75
--- /dev/null
+++ b/maps/re/iz_dun01.mcache
Binary files differ
diff --git a/maps/re/iz_dun02.mcache b/maps/re/iz_dun02.mcache
new file mode 100644
index 000000000..ef21c8b77
--- /dev/null
+++ b/maps/re/iz_dun02.mcache
Binary files differ
diff --git a/maps/re/iz_dun03.mcache b/maps/re/iz_dun03.mcache
new file mode 100644
index 000000000..6dfc8bd38
--- /dev/null
+++ b/maps/re/iz_dun03.mcache
Binary files differ
diff --git a/maps/re/iz_dun04.mcache b/maps/re/iz_dun04.mcache
new file mode 100644
index 000000000..2487067a9
--- /dev/null
+++ b/maps/re/iz_dun04.mcache
Binary files differ
diff --git a/maps/re/iz_dun05.mcache b/maps/re/iz_dun05.mcache
new file mode 100644
index 000000000..7c411a5c4
--- /dev/null
+++ b/maps/re/iz_dun05.mcache
Binary files differ
diff --git a/maps/re/iz_int.mcache b/maps/re/iz_int.mcache
new file mode 100644
index 000000000..c4547573e
--- /dev/null
+++ b/maps/re/iz_int.mcache
Binary files differ
diff --git a/maps/re/iz_int01.mcache b/maps/re/iz_int01.mcache
new file mode 100644
index 000000000..c4547573e
--- /dev/null
+++ b/maps/re/iz_int01.mcache
Binary files differ
diff --git a/maps/re/iz_int02.mcache b/maps/re/iz_int02.mcache
new file mode 100644
index 000000000..c4547573e
--- /dev/null
+++ b/maps/re/iz_int02.mcache
Binary files differ
diff --git a/maps/re/iz_int03.mcache b/maps/re/iz_int03.mcache
new file mode 100644
index 000000000..c4547573e
--- /dev/null
+++ b/maps/re/iz_int03.mcache
Binary files differ
diff --git a/maps/re/iz_int04.mcache b/maps/re/iz_int04.mcache
new file mode 100644
index 000000000..c4547573e
--- /dev/null
+++ b/maps/re/iz_int04.mcache
Binary files differ
diff --git a/maps/re/iz_ng01.mcache b/maps/re/iz_ng01.mcache
new file mode 100644
index 000000000..e0905abbc
--- /dev/null
+++ b/maps/re/iz_ng01.mcache
Binary files differ
diff --git a/maps/re/izlu2dun.mcache b/maps/re/izlu2dun.mcache
new file mode 100644
index 000000000..69818e218
--- /dev/null
+++ b/maps/re/izlu2dun.mcache
Binary files differ
diff --git a/maps/re/izlude.mcache b/maps/re/izlude.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/izlude.mcache
Binary files differ
diff --git a/maps/re/izlude_a.mcache b/maps/re/izlude_a.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/izlude_a.mcache
Binary files differ
diff --git a/maps/re/izlude_b.mcache b/maps/re/izlude_b.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/izlude_b.mcache
Binary files differ
diff --git a/maps/re/izlude_c.mcache b/maps/re/izlude_c.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/izlude_c.mcache
Binary files differ
diff --git a/maps/re/izlude_d.mcache b/maps/re/izlude_d.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/izlude_d.mcache
Binary files differ
diff --git a/maps/re/izlude_in.mcache b/maps/re/izlude_in.mcache
new file mode 100644
index 000000000..b2e04aaf4
--- /dev/null
+++ b/maps/re/izlude_in.mcache
Binary files differ
diff --git a/maps/re/jawaii.mcache b/maps/re/jawaii.mcache
new file mode 100644
index 000000000..71b73455c
--- /dev/null
+++ b/maps/re/jawaii.mcache
Binary files differ
diff --git a/maps/re/jawaii_in.mcache b/maps/re/jawaii_in.mcache
new file mode 100644
index 000000000..1062ddabb
--- /dev/null
+++ b/maps/re/jawaii_in.mcache
Binary files differ
diff --git a/maps/re/job3_arch01.mcache b/maps/re/job3_arch01.mcache
new file mode 100644
index 000000000..ba9b44e08
--- /dev/null
+++ b/maps/re/job3_arch01.mcache
Binary files differ
diff --git a/maps/re/job3_arch02.mcache b/maps/re/job3_arch02.mcache
new file mode 100644
index 000000000..cd8315d99
--- /dev/null
+++ b/maps/re/job3_arch02.mcache
Binary files differ
diff --git a/maps/re/job3_arch03.mcache b/maps/re/job3_arch03.mcache
new file mode 100644
index 000000000..ba9b44e08
--- /dev/null
+++ b/maps/re/job3_arch03.mcache
Binary files differ
diff --git a/maps/re/job3_gen01.mcache b/maps/re/job3_gen01.mcache
new file mode 100644
index 000000000..63f2b8624
--- /dev/null
+++ b/maps/re/job3_gen01.mcache
Binary files differ
diff --git a/maps/re/job3_guil01.mcache b/maps/re/job3_guil01.mcache
new file mode 100644
index 000000000..b54f4d168
--- /dev/null
+++ b/maps/re/job3_guil01.mcache
Binary files differ
diff --git a/maps/re/job3_guil02.mcache b/maps/re/job3_guil02.mcache
new file mode 100644
index 000000000..1da7a382d
--- /dev/null
+++ b/maps/re/job3_guil02.mcache
Binary files differ
diff --git a/maps/re/job3_guil03.mcache b/maps/re/job3_guil03.mcache
new file mode 100644
index 000000000..5cef8124b
--- /dev/null
+++ b/maps/re/job3_guil03.mcache
Binary files differ
diff --git a/maps/re/job3_rang01.mcache b/maps/re/job3_rang01.mcache
new file mode 100644
index 000000000..929a32d82
--- /dev/null
+++ b/maps/re/job3_rang01.mcache
Binary files differ
diff --git a/maps/re/job3_rang02.mcache b/maps/re/job3_rang02.mcache
new file mode 100644
index 000000000..613668187
--- /dev/null
+++ b/maps/re/job3_rang02.mcache
Binary files differ
diff --git a/maps/re/job3_rune01.mcache b/maps/re/job3_rune01.mcache
new file mode 100644
index 000000000..d7682d4ad
--- /dev/null
+++ b/maps/re/job3_rune01.mcache
Binary files differ
diff --git a/maps/re/job3_rune02.mcache b/maps/re/job3_rune02.mcache
new file mode 100644
index 000000000..3484ed56e
--- /dev/null
+++ b/maps/re/job3_rune02.mcache
Binary files differ
diff --git a/maps/re/job3_rune03.mcache b/maps/re/job3_rune03.mcache
new file mode 100644
index 000000000..3484ed56e
--- /dev/null
+++ b/maps/re/job3_rune03.mcache
Binary files differ
diff --git a/maps/re/job3_sha01.mcache b/maps/re/job3_sha01.mcache
new file mode 100644
index 000000000..d9e2da13b
--- /dev/null
+++ b/maps/re/job3_sha01.mcache
Binary files differ
diff --git a/maps/re/job3_war01.mcache b/maps/re/job3_war01.mcache
new file mode 100644
index 000000000..2b8277e4a
--- /dev/null
+++ b/maps/re/job3_war01.mcache
Binary files differ
diff --git a/maps/re/job3_war02.mcache b/maps/re/job3_war02.mcache
new file mode 100644
index 000000000..2b8277e4a
--- /dev/null
+++ b/maps/re/job3_war02.mcache
Binary files differ
diff --git a/maps/re/job_cru.mcache b/maps/re/job_cru.mcache
new file mode 100644
index 000000000..208dc31a7
--- /dev/null
+++ b/maps/re/job_cru.mcache
Binary files differ
diff --git a/maps/re/job_duncer.mcache b/maps/re/job_duncer.mcache
new file mode 100644
index 000000000..d8bff67e0
--- /dev/null
+++ b/maps/re/job_duncer.mcache
Binary files differ
diff --git a/maps/re/job_hunte.mcache b/maps/re/job_hunte.mcache
new file mode 100644
index 000000000..471db33ae
--- /dev/null
+++ b/maps/re/job_hunte.mcache
Binary files differ
diff --git a/maps/re/job_hunter.mcache b/maps/re/job_hunter.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/job_hunter.mcache
Binary files differ
diff --git a/maps/re/job_knight.mcache b/maps/re/job_knight.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/job_knight.mcache
Binary files differ
diff --git a/maps/re/job_knt.mcache b/maps/re/job_knt.mcache
new file mode 100644
index 000000000..15ce2586a
--- /dev/null
+++ b/maps/re/job_knt.mcache
Binary files differ
diff --git a/maps/re/job_ko.mcache b/maps/re/job_ko.mcache
new file mode 100644
index 000000000..24ada6df1
--- /dev/null
+++ b/maps/re/job_ko.mcache
Binary files differ
diff --git a/maps/re/job_monk.mcache b/maps/re/job_monk.mcache
new file mode 100644
index 000000000..dede5a9c2
--- /dev/null
+++ b/maps/re/job_monk.mcache
Binary files differ
diff --git a/maps/re/job_priest.mcache b/maps/re/job_priest.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/job_priest.mcache
Binary files differ
diff --git a/maps/re/job_prist.mcache b/maps/re/job_prist.mcache
new file mode 100644
index 000000000..208dc31a7
--- /dev/null
+++ b/maps/re/job_prist.mcache
Binary files differ
diff --git a/maps/re/job_sage.mcache b/maps/re/job_sage.mcache
new file mode 100644
index 000000000..9456f3795
--- /dev/null
+++ b/maps/re/job_sage.mcache
Binary files differ
diff --git a/maps/re/job_soul.mcache b/maps/re/job_soul.mcache
new file mode 100644
index 000000000..d48f37a50
--- /dev/null
+++ b/maps/re/job_soul.mcache
Binary files differ
diff --git a/maps/re/job_star.mcache b/maps/re/job_star.mcache
new file mode 100644
index 000000000..92057f58f
--- /dev/null
+++ b/maps/re/job_star.mcache
Binary files differ
diff --git a/maps/re/job_sword1.mcache b/maps/re/job_sword1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/re/job_sword1.mcache
Binary files differ
diff --git a/maps/re/job_thief1.mcache b/maps/re/job_thief1.mcache
new file mode 100644
index 000000000..ea4d5a2d4
--- /dev/null
+++ b/maps/re/job_thief1.mcache
Binary files differ
diff --git a/maps/re/job_wiz.mcache b/maps/re/job_wiz.mcache
new file mode 100644
index 000000000..9456f3795
--- /dev/null
+++ b/maps/re/job_wiz.mcache
Binary files differ
diff --git a/maps/re/job_wizard.mcache b/maps/re/job_wizard.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/job_wizard.mcache
Binary files differ
diff --git a/maps/re/jupe_area1.mcache b/maps/re/jupe_area1.mcache
new file mode 100644
index 000000000..1c7e0707c
--- /dev/null
+++ b/maps/re/jupe_area1.mcache
Binary files differ
diff --git a/maps/re/jupe_area2.mcache b/maps/re/jupe_area2.mcache
new file mode 100644
index 000000000..378dddd1b
--- /dev/null
+++ b/maps/re/jupe_area2.mcache
Binary files differ
diff --git a/maps/re/jupe_cave.mcache b/maps/re/jupe_cave.mcache
new file mode 100644
index 000000000..a21a22c8a
--- /dev/null
+++ b/maps/re/jupe_cave.mcache
Binary files differ
diff --git a/maps/re/jupe_core.mcache b/maps/re/jupe_core.mcache
new file mode 100644
index 000000000..2d9cc99e4
--- /dev/null
+++ b/maps/re/jupe_core.mcache
Binary files differ
diff --git a/maps/re/jupe_core2.mcache b/maps/re/jupe_core2.mcache
new file mode 100644
index 000000000..2d9cc99e4
--- /dev/null
+++ b/maps/re/jupe_core2.mcache
Binary files differ
diff --git a/maps/re/jupe_ele.mcache b/maps/re/jupe_ele.mcache
new file mode 100644
index 000000000..ec326e92b
--- /dev/null
+++ b/maps/re/jupe_ele.mcache
Binary files differ
diff --git a/maps/re/jupe_ele_r.mcache b/maps/re/jupe_ele_r.mcache
new file mode 100644
index 000000000..614aa48a0
--- /dev/null
+++ b/maps/re/jupe_ele_r.mcache
Binary files differ
diff --git a/maps/re/jupe_gate.mcache b/maps/re/jupe_gate.mcache
new file mode 100644
index 000000000..3ba62bf77
--- /dev/null
+++ b/maps/re/jupe_gate.mcache
Binary files differ
diff --git a/maps/re/juperos_01.mcache b/maps/re/juperos_01.mcache
new file mode 100644
index 000000000..35d86a746
--- /dev/null
+++ b/maps/re/juperos_01.mcache
Binary files differ
diff --git a/maps/re/juperos_02.mcache b/maps/re/juperos_02.mcache
new file mode 100644
index 000000000..6135fbb7e
--- /dev/null
+++ b/maps/re/juperos_02.mcache
Binary files differ
diff --git a/maps/re/kh_dun01.mcache b/maps/re/kh_dun01.mcache
new file mode 100644
index 000000000..253a31f28
--- /dev/null
+++ b/maps/re/kh_dun01.mcache
Binary files differ
diff --git a/maps/re/kh_dun02.mcache b/maps/re/kh_dun02.mcache
new file mode 100644
index 000000000..033ff067e
--- /dev/null
+++ b/maps/re/kh_dun02.mcache
Binary files differ
diff --git a/maps/re/kh_kiehl01.mcache b/maps/re/kh_kiehl01.mcache
new file mode 100644
index 000000000..cf636187c
--- /dev/null
+++ b/maps/re/kh_kiehl01.mcache
Binary files differ
diff --git a/maps/re/kh_kiehl02.mcache b/maps/re/kh_kiehl02.mcache
new file mode 100644
index 000000000..f37292670
--- /dev/null
+++ b/maps/re/kh_kiehl02.mcache
Binary files differ
diff --git a/maps/re/kh_mansion.mcache b/maps/re/kh_mansion.mcache
new file mode 100644
index 000000000..7c6290e6c
--- /dev/null
+++ b/maps/re/kh_mansion.mcache
Binary files differ
diff --git a/maps/re/kh_rossi.mcache b/maps/re/kh_rossi.mcache
new file mode 100644
index 000000000..f5d3694cb
--- /dev/null
+++ b/maps/re/kh_rossi.mcache
Binary files differ
diff --git a/maps/re/kh_school.mcache b/maps/re/kh_school.mcache
new file mode 100644
index 000000000..f7a5472dd
--- /dev/null
+++ b/maps/re/kh_school.mcache
Binary files differ
diff --git a/maps/re/kh_vila.mcache b/maps/re/kh_vila.mcache
new file mode 100644
index 000000000..3b1aaa619
--- /dev/null
+++ b/maps/re/kh_vila.mcache
Binary files differ
diff --git a/maps/re/knight_1-1.mcache b/maps/re/knight_1-1.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/knight_1-1.mcache
Binary files differ
diff --git a/maps/re/knight_2-1.mcache b/maps/re/knight_2-1.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/knight_2-1.mcache
Binary files differ
diff --git a/maps/re/knight_3-1.mcache b/maps/re/knight_3-1.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/knight_3-1.mcache
Binary files differ
diff --git a/maps/re/lhz_airport.mcache b/maps/re/lhz_airport.mcache
new file mode 100644
index 000000000..ff75f0fd4
--- /dev/null
+++ b/maps/re/lhz_airport.mcache
Binary files differ
diff --git a/maps/re/lhz_cube.mcache b/maps/re/lhz_cube.mcache
new file mode 100644
index 000000000..aea70b220
--- /dev/null
+++ b/maps/re/lhz_cube.mcache
Binary files differ
diff --git a/maps/re/lhz_dun01.mcache b/maps/re/lhz_dun01.mcache
new file mode 100644
index 000000000..f4aaa536c
--- /dev/null
+++ b/maps/re/lhz_dun01.mcache
Binary files differ
diff --git a/maps/re/lhz_dun02.mcache b/maps/re/lhz_dun02.mcache
new file mode 100644
index 000000000..27dea3a1a
--- /dev/null
+++ b/maps/re/lhz_dun02.mcache
Binary files differ
diff --git a/maps/re/lhz_dun03.mcache b/maps/re/lhz_dun03.mcache
new file mode 100644
index 000000000..21c5a0777
--- /dev/null
+++ b/maps/re/lhz_dun03.mcache
Binary files differ
diff --git a/maps/re/lhz_dun04.mcache b/maps/re/lhz_dun04.mcache
new file mode 100644
index 000000000..390f1cfdc
--- /dev/null
+++ b/maps/re/lhz_dun04.mcache
Binary files differ
diff --git a/maps/re/lhz_fild01.mcache b/maps/re/lhz_fild01.mcache
new file mode 100644
index 000000000..da09232e0
--- /dev/null
+++ b/maps/re/lhz_fild01.mcache
Binary files differ
diff --git a/maps/re/lhz_fild02.mcache b/maps/re/lhz_fild02.mcache
new file mode 100644
index 000000000..e2b2a173e
--- /dev/null
+++ b/maps/re/lhz_fild02.mcache
Binary files differ
diff --git a/maps/re/lhz_fild03.mcache b/maps/re/lhz_fild03.mcache
new file mode 100644
index 000000000..fc0f780b9
--- /dev/null
+++ b/maps/re/lhz_fild03.mcache
Binary files differ
diff --git a/maps/re/lhz_in01.mcache b/maps/re/lhz_in01.mcache
new file mode 100644
index 000000000..2157cbfdf
--- /dev/null
+++ b/maps/re/lhz_in01.mcache
Binary files differ
diff --git a/maps/re/lhz_in02.mcache b/maps/re/lhz_in02.mcache
new file mode 100644
index 000000000..697a72dec
--- /dev/null
+++ b/maps/re/lhz_in02.mcache
Binary files differ
diff --git a/maps/re/lhz_in03.mcache b/maps/re/lhz_in03.mcache
new file mode 100644
index 000000000..212d47dd9
--- /dev/null
+++ b/maps/re/lhz_in03.mcache
Binary files differ
diff --git a/maps/re/lhz_que01.mcache b/maps/re/lhz_que01.mcache
new file mode 100644
index 000000000..9a88496da
--- /dev/null
+++ b/maps/re/lhz_que01.mcache
Binary files differ
diff --git a/maps/re/lighthalzen.mcache b/maps/re/lighthalzen.mcache
new file mode 100644
index 000000000..9fa7e2d55
--- /dev/null
+++ b/maps/re/lighthalzen.mcache
Binary files differ
diff --git a/maps/re/lou_dun01.mcache b/maps/re/lou_dun01.mcache
new file mode 100644
index 000000000..bfef8e06a
--- /dev/null
+++ b/maps/re/lou_dun01.mcache
Binary files differ
diff --git a/maps/re/lou_dun02.mcache b/maps/re/lou_dun02.mcache
new file mode 100644
index 000000000..218820a8a
--- /dev/null
+++ b/maps/re/lou_dun02.mcache
Binary files differ
diff --git a/maps/re/lou_dun03.mcache b/maps/re/lou_dun03.mcache
new file mode 100644
index 000000000..dffe3027c
--- /dev/null
+++ b/maps/re/lou_dun03.mcache
Binary files differ
diff --git a/maps/re/lou_fild01.mcache b/maps/re/lou_fild01.mcache
new file mode 100644
index 000000000..e50f0cbc0
--- /dev/null
+++ b/maps/re/lou_fild01.mcache
Binary files differ
diff --git a/maps/re/lou_in01.mcache b/maps/re/lou_in01.mcache
new file mode 100644
index 000000000..f5beb6a85
--- /dev/null
+++ b/maps/re/lou_in01.mcache
Binary files differ
diff --git a/maps/re/lou_in02.mcache b/maps/re/lou_in02.mcache
new file mode 100644
index 000000000..599ce2a91
--- /dev/null
+++ b/maps/re/lou_in02.mcache
Binary files differ
diff --git a/maps/re/louyang.mcache b/maps/re/louyang.mcache
new file mode 100644
index 000000000..2fc2771c7
--- /dev/null
+++ b/maps/re/louyang.mcache
Binary files differ
diff --git a/maps/re/ma_dun01.mcache b/maps/re/ma_dun01.mcache
new file mode 100644
index 000000000..08e14d31d
--- /dev/null
+++ b/maps/re/ma_dun01.mcache
Binary files differ
diff --git a/maps/re/ma_fild01.mcache b/maps/re/ma_fild01.mcache
new file mode 100644
index 000000000..533ae6f76
--- /dev/null
+++ b/maps/re/ma_fild01.mcache
Binary files differ
diff --git a/maps/re/ma_fild02.mcache b/maps/re/ma_fild02.mcache
new file mode 100644
index 000000000..0a3a30139
--- /dev/null
+++ b/maps/re/ma_fild02.mcache
Binary files differ
diff --git a/maps/re/ma_in01.mcache b/maps/re/ma_in01.mcache
new file mode 100644
index 000000000..fd575eb05
--- /dev/null
+++ b/maps/re/ma_in01.mcache
Binary files differ
diff --git a/maps/re/ma_scene01.mcache b/maps/re/ma_scene01.mcache
new file mode 100644
index 000000000..5a72418c2
--- /dev/null
+++ b/maps/re/ma_scene01.mcache
Binary files differ
diff --git a/maps/re/ma_zif01.mcache b/maps/re/ma_zif01.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif01.mcache
Binary files differ
diff --git a/maps/re/ma_zif02.mcache b/maps/re/ma_zif02.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif02.mcache
Binary files differ
diff --git a/maps/re/ma_zif03.mcache b/maps/re/ma_zif03.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif03.mcache
Binary files differ
diff --git a/maps/re/ma_zif04.mcache b/maps/re/ma_zif04.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif04.mcache
Binary files differ
diff --git a/maps/re/ma_zif05.mcache b/maps/re/ma_zif05.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif05.mcache
Binary files differ
diff --git a/maps/re/ma_zif06.mcache b/maps/re/ma_zif06.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif06.mcache
Binary files differ
diff --git a/maps/re/ma_zif07.mcache b/maps/re/ma_zif07.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif07.mcache
Binary files differ
diff --git a/maps/re/ma_zif08.mcache b/maps/re/ma_zif08.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif08.mcache
Binary files differ
diff --git a/maps/re/ma_zif09.mcache b/maps/re/ma_zif09.mcache
new file mode 100644
index 000000000..f92a833d1
--- /dev/null
+++ b/maps/re/ma_zif09.mcache
Binary files differ
diff --git a/maps/re/mag_dun01.mcache b/maps/re/mag_dun01.mcache
new file mode 100644
index 000000000..f7b105384
--- /dev/null
+++ b/maps/re/mag_dun01.mcache
Binary files differ
diff --git a/maps/re/mag_dun02.mcache b/maps/re/mag_dun02.mcache
new file mode 100644
index 000000000..f431b1be4
--- /dev/null
+++ b/maps/re/mag_dun02.mcache
Binary files differ
diff --git a/maps/re/mal_dun01.mcache b/maps/re/mal_dun01.mcache
new file mode 100644
index 000000000..5e6c8cac0
--- /dev/null
+++ b/maps/re/mal_dun01.mcache
Binary files differ
diff --git a/maps/re/mal_in01.mcache b/maps/re/mal_in01.mcache
new file mode 100644
index 000000000..ad09b6b31
--- /dev/null
+++ b/maps/re/mal_in01.mcache
Binary files differ
diff --git a/maps/re/mal_in02.mcache b/maps/re/mal_in02.mcache
new file mode 100644
index 000000000..e1de349d5
--- /dev/null
+++ b/maps/re/mal_in02.mcache
Binary files differ
diff --git a/maps/re/malangdo.mcache b/maps/re/malangdo.mcache
new file mode 100644
index 000000000..58d7f415e
--- /dev/null
+++ b/maps/re/malangdo.mcache
Binary files differ
diff --git a/maps/re/malaya.mcache b/maps/re/malaya.mcache
new file mode 100644
index 000000000..f96dcb859
--- /dev/null
+++ b/maps/re/malaya.mcache
Binary files differ
diff --git a/maps/re/man_fild01.mcache b/maps/re/man_fild01.mcache
new file mode 100644
index 000000000..38084c1a1
--- /dev/null
+++ b/maps/re/man_fild01.mcache
Binary files differ
diff --git a/maps/re/man_fild02.mcache b/maps/re/man_fild02.mcache
new file mode 100644
index 000000000..39df537f9
--- /dev/null
+++ b/maps/re/man_fild02.mcache
Binary files differ
diff --git a/maps/re/man_fild03.mcache b/maps/re/man_fild03.mcache
new file mode 100644
index 000000000..59450915a
--- /dev/null
+++ b/maps/re/man_fild03.mcache
Binary files differ
diff --git a/maps/re/man_in01.mcache b/maps/re/man_in01.mcache
new file mode 100644
index 000000000..0263fd518
--- /dev/null
+++ b/maps/re/man_in01.mcache
Binary files differ
diff --git a/maps/re/manuk.mcache b/maps/re/manuk.mcache
new file mode 100644
index 000000000..3dde06f18
--- /dev/null
+++ b/maps/re/manuk.mcache
Binary files differ
diff --git a/maps/re/mid_camp.mcache b/maps/re/mid_camp.mcache
new file mode 100644
index 000000000..8927c2b0c
--- /dev/null
+++ b/maps/re/mid_camp.mcache
Binary files differ
diff --git a/maps/re/mid_campin.mcache b/maps/re/mid_campin.mcache
new file mode 100644
index 000000000..f1a91e0f2
--- /dev/null
+++ b/maps/re/mid_campin.mcache
Binary files differ
diff --git a/maps/re/mjo_dun01.mcache b/maps/re/mjo_dun01.mcache
new file mode 100644
index 000000000..463ff9391
--- /dev/null
+++ b/maps/re/mjo_dun01.mcache
Binary files differ
diff --git a/maps/re/mjo_dun02.mcache b/maps/re/mjo_dun02.mcache
new file mode 100644
index 000000000..783a6168c
--- /dev/null
+++ b/maps/re/mjo_dun02.mcache
Binary files differ
diff --git a/maps/re/mjo_dun03.mcache b/maps/re/mjo_dun03.mcache
new file mode 100644
index 000000000..85e9d8c86
--- /dev/null
+++ b/maps/re/mjo_dun03.mcache
Binary files differ
diff --git a/maps/re/mjolnir_01.mcache b/maps/re/mjolnir_01.mcache
new file mode 100644
index 000000000..a7e82b8c9
--- /dev/null
+++ b/maps/re/mjolnir_01.mcache
Binary files differ
diff --git a/maps/re/mjolnir_02.mcache b/maps/re/mjolnir_02.mcache
new file mode 100644
index 000000000..dd4106bca
--- /dev/null
+++ b/maps/re/mjolnir_02.mcache
Binary files differ
diff --git a/maps/re/mjolnir_03.mcache b/maps/re/mjolnir_03.mcache
new file mode 100644
index 000000000..fcf3f2fcd
--- /dev/null
+++ b/maps/re/mjolnir_03.mcache
Binary files differ
diff --git a/maps/re/mjolnir_04.mcache b/maps/re/mjolnir_04.mcache
new file mode 100644
index 000000000..7ec6bb4e3
--- /dev/null
+++ b/maps/re/mjolnir_04.mcache
Binary files differ
diff --git a/maps/re/mjolnir_05.mcache b/maps/re/mjolnir_05.mcache
new file mode 100644
index 000000000..36399ad50
--- /dev/null
+++ b/maps/re/mjolnir_05.mcache
Binary files differ
diff --git a/maps/re/mjolnir_06.mcache b/maps/re/mjolnir_06.mcache
new file mode 100644
index 000000000..b701e8d48
--- /dev/null
+++ b/maps/re/mjolnir_06.mcache
Binary files differ
diff --git a/maps/re/mjolnir_07.mcache b/maps/re/mjolnir_07.mcache
new file mode 100644
index 000000000..3f58fad46
--- /dev/null
+++ b/maps/re/mjolnir_07.mcache
Binary files differ
diff --git a/maps/re/mjolnir_08.mcache b/maps/re/mjolnir_08.mcache
new file mode 100644
index 000000000..14ed36043
--- /dev/null
+++ b/maps/re/mjolnir_08.mcache
Binary files differ
diff --git a/maps/re/mjolnir_09.mcache b/maps/re/mjolnir_09.mcache
new file mode 100644
index 000000000..a0a2e7850
--- /dev/null
+++ b/maps/re/mjolnir_09.mcache
Binary files differ
diff --git a/maps/re/mjolnir_10.mcache b/maps/re/mjolnir_10.mcache
new file mode 100644
index 000000000..6798feeef
--- /dev/null
+++ b/maps/re/mjolnir_10.mcache
Binary files differ
diff --git a/maps/re/mjolnir_11.mcache b/maps/re/mjolnir_11.mcache
new file mode 100644
index 000000000..a531be2e5
--- /dev/null
+++ b/maps/re/mjolnir_11.mcache
Binary files differ
diff --git a/maps/re/mjolnir_12.mcache b/maps/re/mjolnir_12.mcache
new file mode 100644
index 000000000..263826474
--- /dev/null
+++ b/maps/re/mjolnir_12.mcache
Binary files differ
diff --git a/maps/re/moc_castle.mcache b/maps/re/moc_castle.mcache
new file mode 100644
index 000000000..df2f98364
--- /dev/null
+++ b/maps/re/moc_castle.mcache
Binary files differ
diff --git a/maps/re/moc_fild01.mcache b/maps/re/moc_fild01.mcache
new file mode 100644
index 000000000..9d5248ede
--- /dev/null
+++ b/maps/re/moc_fild01.mcache
Binary files differ
diff --git a/maps/re/moc_fild02.mcache b/maps/re/moc_fild02.mcache
new file mode 100644
index 000000000..4e8823539
--- /dev/null
+++ b/maps/re/moc_fild02.mcache
Binary files differ
diff --git a/maps/re/moc_fild03.mcache b/maps/re/moc_fild03.mcache
new file mode 100644
index 000000000..30fe9a339
--- /dev/null
+++ b/maps/re/moc_fild03.mcache
Binary files differ
diff --git a/maps/re/moc_fild04.mcache b/maps/re/moc_fild04.mcache
new file mode 100644
index 000000000..425ef02c8
--- /dev/null
+++ b/maps/re/moc_fild04.mcache
Binary files differ
diff --git a/maps/re/moc_fild05.mcache b/maps/re/moc_fild05.mcache
new file mode 100644
index 000000000..7a7c17fea
--- /dev/null
+++ b/maps/re/moc_fild05.mcache
Binary files differ
diff --git a/maps/re/moc_fild06.mcache b/maps/re/moc_fild06.mcache
new file mode 100644
index 000000000..adc69992a
--- /dev/null
+++ b/maps/re/moc_fild06.mcache
Binary files differ
diff --git a/maps/re/moc_fild07.mcache b/maps/re/moc_fild07.mcache
new file mode 100644
index 000000000..c5b871572
--- /dev/null
+++ b/maps/re/moc_fild07.mcache
Binary files differ
diff --git a/maps/re/moc_fild08.mcache b/maps/re/moc_fild08.mcache
new file mode 100644
index 000000000..90be6a00a
--- /dev/null
+++ b/maps/re/moc_fild08.mcache
Binary files differ
diff --git a/maps/re/moc_fild09.mcache b/maps/re/moc_fild09.mcache
new file mode 100644
index 000000000..92333b843
--- /dev/null
+++ b/maps/re/moc_fild09.mcache
Binary files differ
diff --git a/maps/re/moc_fild10.mcache b/maps/re/moc_fild10.mcache
new file mode 100644
index 000000000..a2ca0c310
--- /dev/null
+++ b/maps/re/moc_fild10.mcache
Binary files differ
diff --git a/maps/re/moc_fild11.mcache b/maps/re/moc_fild11.mcache
new file mode 100644
index 000000000..3990f7f2c
--- /dev/null
+++ b/maps/re/moc_fild11.mcache
Binary files differ
diff --git a/maps/re/moc_fild12.mcache b/maps/re/moc_fild12.mcache
new file mode 100644
index 000000000..d3cc8492b
--- /dev/null
+++ b/maps/re/moc_fild12.mcache
Binary files differ
diff --git a/maps/re/moc_fild13.mcache b/maps/re/moc_fild13.mcache
new file mode 100644
index 000000000..8897412ce
--- /dev/null
+++ b/maps/re/moc_fild13.mcache
Binary files differ
diff --git a/maps/re/moc_fild14.mcache b/maps/re/moc_fild14.mcache
new file mode 100644
index 000000000..6d2c5273b
--- /dev/null
+++ b/maps/re/moc_fild14.mcache
Binary files differ
diff --git a/maps/re/moc_fild15.mcache b/maps/re/moc_fild15.mcache
new file mode 100644
index 000000000..3e4822215
--- /dev/null
+++ b/maps/re/moc_fild15.mcache
Binary files differ
diff --git a/maps/re/moc_fild16.mcache b/maps/re/moc_fild16.mcache
new file mode 100644
index 000000000..cbcc87c09
--- /dev/null
+++ b/maps/re/moc_fild16.mcache
Binary files differ
diff --git a/maps/re/moc_fild17.mcache b/maps/re/moc_fild17.mcache
new file mode 100644
index 000000000..d3482c025
--- /dev/null
+++ b/maps/re/moc_fild17.mcache
Binary files differ
diff --git a/maps/re/moc_fild18.mcache b/maps/re/moc_fild18.mcache
new file mode 100644
index 000000000..11c5c87e9
--- /dev/null
+++ b/maps/re/moc_fild18.mcache
Binary files differ
diff --git a/maps/re/moc_fild19.mcache b/maps/re/moc_fild19.mcache
new file mode 100644
index 000000000..b2120a479
--- /dev/null
+++ b/maps/re/moc_fild19.mcache
Binary files differ
diff --git a/maps/re/moc_fild20.mcache b/maps/re/moc_fild20.mcache
new file mode 100644
index 000000000..b6114b4fd
--- /dev/null
+++ b/maps/re/moc_fild20.mcache
Binary files differ
diff --git a/maps/re/moc_fild21.mcache b/maps/re/moc_fild21.mcache
new file mode 100644
index 000000000..81960cb34
--- /dev/null
+++ b/maps/re/moc_fild21.mcache
Binary files differ
diff --git a/maps/re/moc_fild22.mcache b/maps/re/moc_fild22.mcache
new file mode 100644
index 000000000..3ee6cdb98
--- /dev/null
+++ b/maps/re/moc_fild22.mcache
Binary files differ
diff --git a/maps/re/moc_fild22b.mcache b/maps/re/moc_fild22b.mcache
new file mode 100644
index 000000000..401a147a7
--- /dev/null
+++ b/maps/re/moc_fild22b.mcache
Binary files differ
diff --git a/maps/re/moc_para01.mcache b/maps/re/moc_para01.mcache
new file mode 100644
index 000000000..75a96162b
--- /dev/null
+++ b/maps/re/moc_para01.mcache
Binary files differ
diff --git a/maps/re/moc_pryd01.mcache b/maps/re/moc_pryd01.mcache
new file mode 100644
index 000000000..9f63b5199
--- /dev/null
+++ b/maps/re/moc_pryd01.mcache
Binary files differ
diff --git a/maps/re/moc_pryd02.mcache b/maps/re/moc_pryd02.mcache
new file mode 100644
index 000000000..99edf571c
--- /dev/null
+++ b/maps/re/moc_pryd02.mcache
Binary files differ
diff --git a/maps/re/moc_pryd03.mcache b/maps/re/moc_pryd03.mcache
new file mode 100644
index 000000000..1fd2c3334
--- /dev/null
+++ b/maps/re/moc_pryd03.mcache
Binary files differ
diff --git a/maps/re/moc_pryd04.mcache b/maps/re/moc_pryd04.mcache
new file mode 100644
index 000000000..df0b9e8b8
--- /dev/null
+++ b/maps/re/moc_pryd04.mcache
Binary files differ
diff --git a/maps/re/moc_pryd05.mcache b/maps/re/moc_pryd05.mcache
new file mode 100644
index 000000000..055734937
--- /dev/null
+++ b/maps/re/moc_pryd05.mcache
Binary files differ
diff --git a/maps/re/moc_pryd06.mcache b/maps/re/moc_pryd06.mcache
new file mode 100644
index 000000000..11470d0e9
--- /dev/null
+++ b/maps/re/moc_pryd06.mcache
Binary files differ
diff --git a/maps/re/moc_prydb1.mcache b/maps/re/moc_prydb1.mcache
new file mode 100644
index 000000000..dcab86b5d
--- /dev/null
+++ b/maps/re/moc_prydb1.mcache
Binary files differ
diff --git a/maps/re/moc_prydn1.mcache b/maps/re/moc_prydn1.mcache
new file mode 100644
index 000000000..055734937
--- /dev/null
+++ b/maps/re/moc_prydn1.mcache
Binary files differ
diff --git a/maps/re/moc_prydn2.mcache b/maps/re/moc_prydn2.mcache
new file mode 100644
index 000000000..11470d0e9
--- /dev/null
+++ b/maps/re/moc_prydn2.mcache
Binary files differ
diff --git a/maps/re/moc_ruins.mcache b/maps/re/moc_ruins.mcache
new file mode 100644
index 000000000..01f4238d5
--- /dev/null
+++ b/maps/re/moc_ruins.mcache
Binary files differ
diff --git a/maps/re/monk_in.mcache b/maps/re/monk_in.mcache
new file mode 100644
index 000000000..95894520b
--- /dev/null
+++ b/maps/re/monk_in.mcache
Binary files differ
diff --git a/maps/re/monk_test.mcache b/maps/re/monk_test.mcache
new file mode 100644
index 000000000..c9c05a35e
--- /dev/null
+++ b/maps/re/monk_test.mcache
Binary files differ
diff --git a/maps/re/mora.mcache b/maps/re/mora.mcache
new file mode 100644
index 000000000..62fef21db
--- /dev/null
+++ b/maps/re/mora.mcache
Binary files differ
diff --git a/maps/re/moro_cav.mcache b/maps/re/moro_cav.mcache
new file mode 100644
index 000000000..5c0a300c7
--- /dev/null
+++ b/maps/re/moro_cav.mcache
Binary files differ
diff --git a/maps/re/moro_vol.mcache b/maps/re/moro_vol.mcache
new file mode 100644
index 000000000..12c80874e
--- /dev/null
+++ b/maps/re/moro_vol.mcache
Binary files differ
diff --git a/maps/re/morocc.mcache b/maps/re/morocc.mcache
new file mode 100644
index 000000000..c75137c9f
--- /dev/null
+++ b/maps/re/morocc.mcache
Binary files differ
diff --git a/maps/re/morocc_in.mcache b/maps/re/morocc_in.mcache
new file mode 100644
index 000000000..048478ec6
--- /dev/null
+++ b/maps/re/morocc_in.mcache
Binary files differ
diff --git a/maps/re/moscovia.mcache b/maps/re/moscovia.mcache
new file mode 100644
index 000000000..b1dc3cc65
--- /dev/null
+++ b/maps/re/moscovia.mcache
Binary files differ
diff --git a/maps/re/mosk_dun01.mcache b/maps/re/mosk_dun01.mcache
new file mode 100644
index 000000000..4ac6743a2
--- /dev/null
+++ b/maps/re/mosk_dun01.mcache
Binary files differ
diff --git a/maps/re/mosk_dun02.mcache b/maps/re/mosk_dun02.mcache
new file mode 100644
index 000000000..e506eb7f4
--- /dev/null
+++ b/maps/re/mosk_dun02.mcache
Binary files differ
diff --git a/maps/re/mosk_dun03.mcache b/maps/re/mosk_dun03.mcache
new file mode 100644
index 000000000..b1f422919
--- /dev/null
+++ b/maps/re/mosk_dun03.mcache
Binary files differ
diff --git a/maps/re/mosk_fild01.mcache b/maps/re/mosk_fild01.mcache
new file mode 100644
index 000000000..d2a243439
--- /dev/null
+++ b/maps/re/mosk_fild01.mcache
Binary files differ
diff --git a/maps/re/mosk_fild02.mcache b/maps/re/mosk_fild02.mcache
new file mode 100644
index 000000000..5f41071fe
--- /dev/null
+++ b/maps/re/mosk_fild02.mcache
Binary files differ
diff --git a/maps/re/mosk_in.mcache b/maps/re/mosk_in.mcache
new file mode 100644
index 000000000..bc9b95245
--- /dev/null
+++ b/maps/re/mosk_in.mcache
Binary files differ
diff --git a/maps/re/mosk_que.mcache b/maps/re/mosk_que.mcache
new file mode 100644
index 000000000..2bd62ef91
--- /dev/null
+++ b/maps/re/mosk_que.mcache
Binary files differ
diff --git a/maps/re/mosk_ship.mcache b/maps/re/mosk_ship.mcache
new file mode 100644
index 000000000..b00b89476
--- /dev/null
+++ b/maps/re/mosk_ship.mcache
Binary files differ
diff --git a/maps/re/n_castle.mcache b/maps/re/n_castle.mcache
new file mode 100644
index 000000000..21addf51b
--- /dev/null
+++ b/maps/re/n_castle.mcache
Binary files differ
diff --git a/maps/re/nameless_i.mcache b/maps/re/nameless_i.mcache
new file mode 100644
index 000000000..61ebdf476
--- /dev/null
+++ b/maps/re/nameless_i.mcache
Binary files differ
diff --git a/maps/re/nameless_in.mcache b/maps/re/nameless_in.mcache
new file mode 100644
index 000000000..c7e3e7ade
--- /dev/null
+++ b/maps/re/nameless_in.mcache
Binary files differ
diff --git a/maps/re/nameless_n.mcache b/maps/re/nameless_n.mcache
new file mode 100644
index 000000000..f1d0e03b9
--- /dev/null
+++ b/maps/re/nameless_n.mcache
Binary files differ
diff --git a/maps/re/new_1-1.mcache b/maps/re/new_1-1.mcache
new file mode 100644
index 000000000..342ae6117
--- /dev/null
+++ b/maps/re/new_1-1.mcache
Binary files differ
diff --git a/maps/re/new_1-2.mcache b/maps/re/new_1-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/re/new_1-2.mcache
Binary files differ
diff --git a/maps/re/new_1-3.mcache b/maps/re/new_1-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/re/new_1-3.mcache
Binary files differ
diff --git a/maps/re/new_1-4.mcache b/maps/re/new_1-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/re/new_1-4.mcache
Binary files differ
diff --git a/maps/re/new_2-1.mcache b/maps/re/new_2-1.mcache
new file mode 100644
index 000000000..342ae6117
--- /dev/null
+++ b/maps/re/new_2-1.mcache
Binary files differ
diff --git a/maps/re/new_2-2.mcache b/maps/re/new_2-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/re/new_2-2.mcache
Binary files differ
diff --git a/maps/re/new_2-3.mcache b/maps/re/new_2-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/re/new_2-3.mcache
Binary files differ
diff --git a/maps/re/new_2-4.mcache b/maps/re/new_2-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/re/new_2-4.mcache
Binary files differ
diff --git a/maps/re/new_3-1.mcache b/maps/re/new_3-1.mcache
new file mode 100644
index 000000000..342ae6117
--- /dev/null
+++ b/maps/re/new_3-1.mcache
Binary files differ
diff --git a/maps/re/new_3-2.mcache b/maps/re/new_3-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/re/new_3-2.mcache
Binary files differ
diff --git a/maps/re/new_3-3.mcache b/maps/re/new_3-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/re/new_3-3.mcache
Binary files differ
diff --git a/maps/re/new_3-4.mcache b/maps/re/new_3-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/re/new_3-4.mcache
Binary files differ
diff --git a/maps/re/new_4-1.mcache b/maps/re/new_4-1.mcache
new file mode 100644
index 000000000..342ae6117
--- /dev/null
+++ b/maps/re/new_4-1.mcache
Binary files differ
diff --git a/maps/re/new_4-2.mcache b/maps/re/new_4-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/re/new_4-2.mcache
Binary files differ
diff --git a/maps/re/new_4-3.mcache b/maps/re/new_4-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/re/new_4-3.mcache
Binary files differ
diff --git a/maps/re/new_4-4.mcache b/maps/re/new_4-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/re/new_4-4.mcache
Binary files differ
diff --git a/maps/re/new_5-1.mcache b/maps/re/new_5-1.mcache
new file mode 100644
index 000000000..342ae6117
--- /dev/null
+++ b/maps/re/new_5-1.mcache
Binary files differ
diff --git a/maps/re/new_5-2.mcache b/maps/re/new_5-2.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/re/new_5-2.mcache
Binary files differ
diff --git a/maps/re/new_5-3.mcache b/maps/re/new_5-3.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/re/new_5-3.mcache
Binary files differ
diff --git a/maps/re/new_5-4.mcache b/maps/re/new_5-4.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/re/new_5-4.mcache
Binary files differ
diff --git a/maps/re/new_zone01.mcache b/maps/re/new_zone01.mcache
new file mode 100644
index 000000000..342ae6117
--- /dev/null
+++ b/maps/re/new_zone01.mcache
Binary files differ
diff --git a/maps/re/new_zone02.mcache b/maps/re/new_zone02.mcache
new file mode 100644
index 000000000..d85a6ff9f
--- /dev/null
+++ b/maps/re/new_zone02.mcache
Binary files differ
diff --git a/maps/re/new_zone03.mcache b/maps/re/new_zone03.mcache
new file mode 100644
index 000000000..2cb424ba0
--- /dev/null
+++ b/maps/re/new_zone03.mcache
Binary files differ
diff --git a/maps/re/new_zone04.mcache b/maps/re/new_zone04.mcache
new file mode 100644
index 000000000..3cfc66817
--- /dev/null
+++ b/maps/re/new_zone04.mcache
Binary files differ
diff --git a/maps/re/nguild_alde.mcache b/maps/re/nguild_alde.mcache
new file mode 100644
index 000000000..4d96f61e3
--- /dev/null
+++ b/maps/re/nguild_alde.mcache
Binary files differ
diff --git a/maps/re/nguild_gef.mcache b/maps/re/nguild_gef.mcache
new file mode 100644
index 000000000..fcc51f76d
--- /dev/null
+++ b/maps/re/nguild_gef.mcache
Binary files differ
diff --git a/maps/re/nguild_pay.mcache b/maps/re/nguild_pay.mcache
new file mode 100644
index 000000000..dd8f3e46f
--- /dev/null
+++ b/maps/re/nguild_pay.mcache
Binary files differ
diff --git a/maps/re/nguild_prt.mcache b/maps/re/nguild_prt.mcache
new file mode 100644
index 000000000..1e01f48a7
--- /dev/null
+++ b/maps/re/nguild_prt.mcache
Binary files differ
diff --git a/maps/re/nif_fild01.mcache b/maps/re/nif_fild01.mcache
new file mode 100644
index 000000000..70373e9c1
--- /dev/null
+++ b/maps/re/nif_fild01.mcache
Binary files differ
diff --git a/maps/re/nif_fild02.mcache b/maps/re/nif_fild02.mcache
new file mode 100644
index 000000000..7aa820023
--- /dev/null
+++ b/maps/re/nif_fild02.mcache
Binary files differ
diff --git a/maps/re/nif_in.mcache b/maps/re/nif_in.mcache
new file mode 100644
index 000000000..3ab7e945a
--- /dev/null
+++ b/maps/re/nif_in.mcache
Binary files differ
diff --git a/maps/re/niflheim.mcache b/maps/re/niflheim.mcache
new file mode 100644
index 000000000..3d2def292
--- /dev/null
+++ b/maps/re/niflheim.mcache
Binary files differ
diff --git a/maps/re/nyd_dun01.mcache b/maps/re/nyd_dun01.mcache
new file mode 100644
index 000000000..c29cebe1a
--- /dev/null
+++ b/maps/re/nyd_dun01.mcache
Binary files differ
diff --git a/maps/re/nyd_dun02.mcache b/maps/re/nyd_dun02.mcache
new file mode 100644
index 000000000..a8ef4a685
--- /dev/null
+++ b/maps/re/nyd_dun02.mcache
Binary files differ
diff --git a/maps/re/odin_tem01.mcache b/maps/re/odin_tem01.mcache
new file mode 100644
index 000000000..4339dd605
--- /dev/null
+++ b/maps/re/odin_tem01.mcache
Binary files differ
diff --git a/maps/re/odin_tem02.mcache b/maps/re/odin_tem02.mcache
new file mode 100644
index 000000000..1003a8c08
--- /dev/null
+++ b/maps/re/odin_tem02.mcache
Binary files differ
diff --git a/maps/re/odin_tem03.mcache b/maps/re/odin_tem03.mcache
new file mode 100644
index 000000000..9f3307aef
--- /dev/null
+++ b/maps/re/odin_tem03.mcache
Binary files differ
diff --git a/maps/re/orcsdun01.mcache b/maps/re/orcsdun01.mcache
new file mode 100644
index 000000000..3b3951498
--- /dev/null
+++ b/maps/re/orcsdun01.mcache
Binary files differ
diff --git a/maps/re/orcsdun02.mcache b/maps/re/orcsdun02.mcache
new file mode 100644
index 000000000..004256991
--- /dev/null
+++ b/maps/re/orcsdun02.mcache
Binary files differ
diff --git a/maps/re/ordeal_1-1.mcache b/maps/re/ordeal_1-1.mcache
new file mode 100644
index 000000000..3a0270fbe
--- /dev/null
+++ b/maps/re/ordeal_1-1.mcache
Binary files differ
diff --git a/maps/re/ordeal_1-2.mcache b/maps/re/ordeal_1-2.mcache
new file mode 100644
index 000000000..e2b64784d
--- /dev/null
+++ b/maps/re/ordeal_1-2.mcache
Binary files differ
diff --git a/maps/re/ordeal_2-1.mcache b/maps/re/ordeal_2-1.mcache
new file mode 100644
index 000000000..3a0270fbe
--- /dev/null
+++ b/maps/re/ordeal_2-1.mcache
Binary files differ
diff --git a/maps/re/ordeal_2-2.mcache b/maps/re/ordeal_2-2.mcache
new file mode 100644
index 000000000..e2b64784d
--- /dev/null
+++ b/maps/re/ordeal_2-2.mcache
Binary files differ
diff --git a/maps/re/ordeal_3-1.mcache b/maps/re/ordeal_3-1.mcache
new file mode 100644
index 000000000..3a0270fbe
--- /dev/null
+++ b/maps/re/ordeal_3-1.mcache
Binary files differ
diff --git a/maps/re/ordeal_3-2.mcache b/maps/re/ordeal_3-2.mcache
new file mode 100644
index 000000000..e2b64784d
--- /dev/null
+++ b/maps/re/ordeal_3-2.mcache
Binary files differ
diff --git a/maps/re/p_track01.mcache b/maps/re/p_track01.mcache
new file mode 100644
index 000000000..c521d1a2f
--- /dev/null
+++ b/maps/re/p_track01.mcache
Binary files differ
diff --git a/maps/re/p_track02.mcache b/maps/re/p_track02.mcache
new file mode 100644
index 000000000..c521d1a2f
--- /dev/null
+++ b/maps/re/p_track02.mcache
Binary files differ
diff --git a/maps/re/pay_arche.mcache b/maps/re/pay_arche.mcache
new file mode 100644
index 000000000..5ff2bc766
--- /dev/null
+++ b/maps/re/pay_arche.mcache
Binary files differ
diff --git a/maps/re/pay_dun00.mcache b/maps/re/pay_dun00.mcache
new file mode 100644
index 000000000..ed867896b
--- /dev/null
+++ b/maps/re/pay_dun00.mcache
Binary files differ
diff --git a/maps/re/pay_dun01.mcache b/maps/re/pay_dun01.mcache
new file mode 100644
index 000000000..212935951
--- /dev/null
+++ b/maps/re/pay_dun01.mcache
Binary files differ
diff --git a/maps/re/pay_dun02.mcache b/maps/re/pay_dun02.mcache
new file mode 100644
index 000000000..c0241aa2d
--- /dev/null
+++ b/maps/re/pay_dun02.mcache
Binary files differ
diff --git a/maps/re/pay_dun03.mcache b/maps/re/pay_dun03.mcache
new file mode 100644
index 000000000..b0a2e4dea
--- /dev/null
+++ b/maps/re/pay_dun03.mcache
Binary files differ
diff --git a/maps/re/pay_dun04.mcache b/maps/re/pay_dun04.mcache
new file mode 100644
index 000000000..d143327aa
--- /dev/null
+++ b/maps/re/pay_dun04.mcache
Binary files differ
diff --git a/maps/re/pay_fild01.mcache b/maps/re/pay_fild01.mcache
new file mode 100644
index 000000000..e18c4ae1c
--- /dev/null
+++ b/maps/re/pay_fild01.mcache
Binary files differ
diff --git a/maps/re/pay_fild02.mcache b/maps/re/pay_fild02.mcache
new file mode 100644
index 000000000..ea3929609
--- /dev/null
+++ b/maps/re/pay_fild02.mcache
Binary files differ
diff --git a/maps/re/pay_fild03.mcache b/maps/re/pay_fild03.mcache
new file mode 100644
index 000000000..2c1411fb8
--- /dev/null
+++ b/maps/re/pay_fild03.mcache
Binary files differ
diff --git a/maps/re/pay_fild04.mcache b/maps/re/pay_fild04.mcache
new file mode 100644
index 000000000..9380cb3f5
--- /dev/null
+++ b/maps/re/pay_fild04.mcache
Binary files differ
diff --git a/maps/re/pay_fild05.mcache b/maps/re/pay_fild05.mcache
new file mode 100644
index 000000000..476c6f9a2
--- /dev/null
+++ b/maps/re/pay_fild05.mcache
Binary files differ
diff --git a/maps/re/pay_fild06.mcache b/maps/re/pay_fild06.mcache
new file mode 100644
index 000000000..295db1acb
--- /dev/null
+++ b/maps/re/pay_fild06.mcache
Binary files differ
diff --git a/maps/re/pay_fild07.mcache b/maps/re/pay_fild07.mcache
new file mode 100644
index 000000000..7b72778f4
--- /dev/null
+++ b/maps/re/pay_fild07.mcache
Binary files differ
diff --git a/maps/re/pay_fild08.mcache b/maps/re/pay_fild08.mcache
new file mode 100644
index 000000000..65ae31131
--- /dev/null
+++ b/maps/re/pay_fild08.mcache
Binary files differ
diff --git a/maps/re/pay_fild09.mcache b/maps/re/pay_fild09.mcache
new file mode 100644
index 000000000..2b2fd9936
--- /dev/null
+++ b/maps/re/pay_fild09.mcache
Binary files differ
diff --git a/maps/re/pay_fild10.mcache b/maps/re/pay_fild10.mcache
new file mode 100644
index 000000000..22e021de3
--- /dev/null
+++ b/maps/re/pay_fild10.mcache
Binary files differ
diff --git a/maps/re/pay_fild11.mcache b/maps/re/pay_fild11.mcache
new file mode 100644
index 000000000..455f4773d
--- /dev/null
+++ b/maps/re/pay_fild11.mcache
Binary files differ
diff --git a/maps/re/pay_gld.mcache b/maps/re/pay_gld.mcache
new file mode 100644
index 000000000..7ee389aa9
--- /dev/null
+++ b/maps/re/pay_gld.mcache
Binary files differ
diff --git a/maps/re/payg_cas01.mcache b/maps/re/payg_cas01.mcache
new file mode 100644
index 000000000..dd8f3e46f
--- /dev/null
+++ b/maps/re/payg_cas01.mcache
Binary files differ
diff --git a/maps/re/payg_cas02.mcache b/maps/re/payg_cas02.mcache
new file mode 100644
index 000000000..08bfdf4c6
--- /dev/null
+++ b/maps/re/payg_cas02.mcache
Binary files differ
diff --git a/maps/re/payg_cas03.mcache b/maps/re/payg_cas03.mcache
new file mode 100644
index 000000000..241303db7
--- /dev/null
+++ b/maps/re/payg_cas03.mcache
Binary files differ
diff --git a/maps/re/payg_cas04.mcache b/maps/re/payg_cas04.mcache
new file mode 100644
index 000000000..4a24ce972
--- /dev/null
+++ b/maps/re/payg_cas04.mcache
Binary files differ
diff --git a/maps/re/payg_cas05.mcache b/maps/re/payg_cas05.mcache
new file mode 100644
index 000000000..cd0c46764
--- /dev/null
+++ b/maps/re/payg_cas05.mcache
Binary files differ
diff --git a/maps/re/payon.mcache b/maps/re/payon.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/payon.mcache
Binary files differ
diff --git a/maps/re/payon_in01.mcache b/maps/re/payon_in01.mcache
new file mode 100644
index 000000000..7615d0ba8
--- /dev/null
+++ b/maps/re/payon_in01.mcache
Binary files differ
diff --git a/maps/re/payon_in02.mcache b/maps/re/payon_in02.mcache
new file mode 100644
index 000000000..930ca08f0
--- /dev/null
+++ b/maps/re/payon_in02.mcache
Binary files differ
diff --git a/maps/re/payon_in03.mcache b/maps/re/payon_in03.mcache
new file mode 100644
index 000000000..4021bd697
--- /dev/null
+++ b/maps/re/payon_in03.mcache
Binary files differ
diff --git a/maps/re/poring_w01.mcache b/maps/re/poring_w01.mcache
new file mode 100644
index 000000000..42a9b8bcd
--- /dev/null
+++ b/maps/re/poring_w01.mcache
Binary files differ
diff --git a/maps/re/poring_w02.mcache b/maps/re/poring_w02.mcache
new file mode 100644
index 000000000..728073980
--- /dev/null
+++ b/maps/re/poring_w02.mcache
Binary files differ
diff --git a/maps/re/priest_1-1.mcache b/maps/re/priest_1-1.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/priest_1-1.mcache
Binary files differ
diff --git a/maps/re/priest_2-1.mcache b/maps/re/priest_2-1.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/priest_2-1.mcache
Binary files differ
diff --git a/maps/re/priest_3-1.mcache b/maps/re/priest_3-1.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/priest_3-1.mcache
Binary files differ
diff --git a/maps/re/prontera.mcache b/maps/re/prontera.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/prontera.mcache
Binary files differ
diff --git a/maps/re/prt_are01.mcache b/maps/re/prt_are01.mcache
new file mode 100644
index 000000000..2ebcad3d5
--- /dev/null
+++ b/maps/re/prt_are01.mcache
Binary files differ
diff --git a/maps/re/prt_are_in.mcache b/maps/re/prt_are_in.mcache
new file mode 100644
index 000000000..03216ff8b
--- /dev/null
+++ b/maps/re/prt_are_in.mcache
Binary files differ
diff --git a/maps/re/prt_castle.mcache b/maps/re/prt_castle.mcache
new file mode 100644
index 000000000..26144c9e2
--- /dev/null
+++ b/maps/re/prt_castle.mcache
Binary files differ
diff --git a/maps/re/prt_church.mcache b/maps/re/prt_church.mcache
new file mode 100644
index 000000000..4b4d45b73
--- /dev/null
+++ b/maps/re/prt_church.mcache
Binary files differ
diff --git a/maps/re/prt_fild00.mcache b/maps/re/prt_fild00.mcache
new file mode 100644
index 000000000..0727f12dd
--- /dev/null
+++ b/maps/re/prt_fild00.mcache
Binary files differ
diff --git a/maps/re/prt_fild01.mcache b/maps/re/prt_fild01.mcache
new file mode 100644
index 000000000..bdd466efc
--- /dev/null
+++ b/maps/re/prt_fild01.mcache
Binary files differ
diff --git a/maps/re/prt_fild02.mcache b/maps/re/prt_fild02.mcache
new file mode 100644
index 000000000..9e256cff8
--- /dev/null
+++ b/maps/re/prt_fild02.mcache
Binary files differ
diff --git a/maps/re/prt_fild03.mcache b/maps/re/prt_fild03.mcache
new file mode 100644
index 000000000..c0c96b87b
--- /dev/null
+++ b/maps/re/prt_fild03.mcache
Binary files differ
diff --git a/maps/re/prt_fild04.mcache b/maps/re/prt_fild04.mcache
new file mode 100644
index 000000000..bf80badac
--- /dev/null
+++ b/maps/re/prt_fild04.mcache
Binary files differ
diff --git a/maps/re/prt_fild05.mcache b/maps/re/prt_fild05.mcache
new file mode 100644
index 000000000..28b96509c
--- /dev/null
+++ b/maps/re/prt_fild05.mcache
Binary files differ
diff --git a/maps/re/prt_fild06.mcache b/maps/re/prt_fild06.mcache
new file mode 100644
index 000000000..01061becf
--- /dev/null
+++ b/maps/re/prt_fild06.mcache
Binary files differ
diff --git a/maps/re/prt_fild07.mcache b/maps/re/prt_fild07.mcache
new file mode 100644
index 000000000..bf985211e
--- /dev/null
+++ b/maps/re/prt_fild07.mcache
Binary files differ
diff --git a/maps/re/prt_fild08.mcache b/maps/re/prt_fild08.mcache
new file mode 100644
index 000000000..5f7ad926f
--- /dev/null
+++ b/maps/re/prt_fild08.mcache
Binary files differ
diff --git a/maps/re/prt_fild08a.mcache b/maps/re/prt_fild08a.mcache
new file mode 100644
index 000000000..5f7ad926f
--- /dev/null
+++ b/maps/re/prt_fild08a.mcache
Binary files differ
diff --git a/maps/re/prt_fild08b.mcache b/maps/re/prt_fild08b.mcache
new file mode 100644
index 000000000..5f7ad926f
--- /dev/null
+++ b/maps/re/prt_fild08b.mcache
Binary files differ
diff --git a/maps/re/prt_fild08c.mcache b/maps/re/prt_fild08c.mcache
new file mode 100644
index 000000000..5f7ad926f
--- /dev/null
+++ b/maps/re/prt_fild08c.mcache
Binary files differ
diff --git a/maps/re/prt_fild08d.mcache b/maps/re/prt_fild08d.mcache
new file mode 100644
index 000000000..5f7ad926f
--- /dev/null
+++ b/maps/re/prt_fild08d.mcache
Binary files differ
diff --git a/maps/re/prt_fild09.mcache b/maps/re/prt_fild09.mcache
new file mode 100644
index 000000000..e82e16b53
--- /dev/null
+++ b/maps/re/prt_fild09.mcache
Binary files differ
diff --git a/maps/re/prt_fild10.mcache b/maps/re/prt_fild10.mcache
new file mode 100644
index 000000000..4a75d4436
--- /dev/null
+++ b/maps/re/prt_fild10.mcache
Binary files differ
diff --git a/maps/re/prt_fild11.mcache b/maps/re/prt_fild11.mcache
new file mode 100644
index 000000000..eefc95413
--- /dev/null
+++ b/maps/re/prt_fild11.mcache
Binary files differ
diff --git a/maps/re/prt_gld.mcache b/maps/re/prt_gld.mcache
new file mode 100644
index 000000000..6f2c0b38e
--- /dev/null
+++ b/maps/re/prt_gld.mcache
Binary files differ
diff --git a/maps/re/prt_in.mcache b/maps/re/prt_in.mcache
new file mode 100644
index 000000000..7e877da3c
--- /dev/null
+++ b/maps/re/prt_in.mcache
Binary files differ
diff --git a/maps/re/prt_maze01.mcache b/maps/re/prt_maze01.mcache
new file mode 100644
index 000000000..c3ebc6cb8
--- /dev/null
+++ b/maps/re/prt_maze01.mcache
Binary files differ
diff --git a/maps/re/prt_maze02.mcache b/maps/re/prt_maze02.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/prt_maze02.mcache
Binary files differ
diff --git a/maps/re/prt_maze03.mcache b/maps/re/prt_maze03.mcache
new file mode 100644
index 000000000..19206a004
--- /dev/null
+++ b/maps/re/prt_maze03.mcache
Binary files differ
diff --git a/maps/re/prt_monk.mcache b/maps/re/prt_monk.mcache
new file mode 100644
index 000000000..dede5a9c2
--- /dev/null
+++ b/maps/re/prt_monk.mcache
Binary files differ
diff --git a/maps/re/prt_sewb1.mcache b/maps/re/prt_sewb1.mcache
new file mode 100644
index 000000000..9321818f6
--- /dev/null
+++ b/maps/re/prt_sewb1.mcache
Binary files differ
diff --git a/maps/re/prt_sewb2.mcache b/maps/re/prt_sewb2.mcache
new file mode 100644
index 000000000..312bac4b3
--- /dev/null
+++ b/maps/re/prt_sewb2.mcache
Binary files differ
diff --git a/maps/re/prt_sewb3.mcache b/maps/re/prt_sewb3.mcache
new file mode 100644
index 000000000..373c2ecea
--- /dev/null
+++ b/maps/re/prt_sewb3.mcache
Binary files differ
diff --git a/maps/re/prt_sewb4.mcache b/maps/re/prt_sewb4.mcache
new file mode 100644
index 000000000..010cc1808
--- /dev/null
+++ b/maps/re/prt_sewb4.mcache
Binary files differ
diff --git a/maps/re/prtg_cas01.mcache b/maps/re/prtg_cas01.mcache
new file mode 100644
index 000000000..1e01f48a7
--- /dev/null
+++ b/maps/re/prtg_cas01.mcache
Binary files differ
diff --git a/maps/re/prtg_cas02.mcache b/maps/re/prtg_cas02.mcache
new file mode 100644
index 000000000..90ba580fa
--- /dev/null
+++ b/maps/re/prtg_cas02.mcache
Binary files differ
diff --git a/maps/re/prtg_cas03.mcache b/maps/re/prtg_cas03.mcache
new file mode 100644
index 000000000..25f9fd86a
--- /dev/null
+++ b/maps/re/prtg_cas03.mcache
Binary files differ
diff --git a/maps/re/prtg_cas04.mcache b/maps/re/prtg_cas04.mcache
new file mode 100644
index 000000000..66f12ad53
--- /dev/null
+++ b/maps/re/prtg_cas04.mcache
Binary files differ
diff --git a/maps/re/prtg_cas05.mcache b/maps/re/prtg_cas05.mcache
new file mode 100644
index 000000000..e57e5e886
--- /dev/null
+++ b/maps/re/prtg_cas05.mcache
Binary files differ
diff --git a/maps/re/pvp_2vs2.mcache b/maps/re/pvp_2vs2.mcache
new file mode 100644
index 000000000..c0043ec27
--- /dev/null
+++ b/maps/re/pvp_2vs2.mcache
Binary files differ
diff --git a/maps/re/pvp_c_room.mcache b/maps/re/pvp_c_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/re/pvp_c_room.mcache
Binary files differ
diff --git a/maps/re/pvp_n_1-1.mcache b/maps/re/pvp_n_1-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_1-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_1-2.mcache b/maps/re/pvp_n_1-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_1-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_1-3.mcache b/maps/re/pvp_n_1-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_1-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_1-4.mcache b/maps/re/pvp_n_1-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_1-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_1-5.mcache b/maps/re/pvp_n_1-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_1-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_2-1.mcache b/maps/re/pvp_n_2-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_2-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_2-2.mcache b/maps/re/pvp_n_2-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_2-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_2-3.mcache b/maps/re/pvp_n_2-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_2-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_2-4.mcache b/maps/re/pvp_n_2-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_2-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_2-5.mcache b/maps/re/pvp_n_2-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_2-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_3-1.mcache b/maps/re/pvp_n_3-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_3-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_3-2.mcache b/maps/re/pvp_n_3-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_3-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_3-3.mcache b/maps/re/pvp_n_3-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_3-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_3-4.mcache b/maps/re/pvp_n_3-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_3-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_3-5.mcache b/maps/re/pvp_n_3-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_3-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_4-1.mcache b/maps/re/pvp_n_4-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_4-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_4-2.mcache b/maps/re/pvp_n_4-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_4-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_4-3.mcache b/maps/re/pvp_n_4-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_4-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_4-4.mcache b/maps/re/pvp_n_4-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_4-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_4-5.mcache b/maps/re/pvp_n_4-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_4-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_5-1.mcache b/maps/re/pvp_n_5-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_5-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_5-2.mcache b/maps/re/pvp_n_5-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_5-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_5-3.mcache b/maps/re/pvp_n_5-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_5-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_5-4.mcache b/maps/re/pvp_n_5-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_5-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_5-5.mcache b/maps/re/pvp_n_5-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_5-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_6-1.mcache b/maps/re/pvp_n_6-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_6-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_6-2.mcache b/maps/re/pvp_n_6-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_6-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_6-3.mcache b/maps/re/pvp_n_6-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_6-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_6-4.mcache b/maps/re/pvp_n_6-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_6-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_6-5.mcache b/maps/re/pvp_n_6-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_6-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_7-1.mcache b/maps/re/pvp_n_7-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_7-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_7-2.mcache b/maps/re/pvp_n_7-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_7-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_7-3.mcache b/maps/re/pvp_n_7-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_7-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_7-4.mcache b/maps/re/pvp_n_7-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_7-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_7-5.mcache b/maps/re/pvp_n_7-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_7-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_8-1.mcache b/maps/re/pvp_n_8-1.mcache
new file mode 100644
index 000000000..ebc1a6dbe
--- /dev/null
+++ b/maps/re/pvp_n_8-1.mcache
Binary files differ
diff --git a/maps/re/pvp_n_8-2.mcache b/maps/re/pvp_n_8-2.mcache
new file mode 100644
index 000000000..abcc992ef
--- /dev/null
+++ b/maps/re/pvp_n_8-2.mcache
Binary files differ
diff --git a/maps/re/pvp_n_8-3.mcache b/maps/re/pvp_n_8-3.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/pvp_n_8-3.mcache
Binary files differ
diff --git a/maps/re/pvp_n_8-4.mcache b/maps/re/pvp_n_8-4.mcache
new file mode 100644
index 000000000..739890497
--- /dev/null
+++ b/maps/re/pvp_n_8-4.mcache
Binary files differ
diff --git a/maps/re/pvp_n_8-5.mcache b/maps/re/pvp_n_8-5.mcache
new file mode 100644
index 000000000..fb2c8faa6
--- /dev/null
+++ b/maps/re/pvp_n_8-5.mcache
Binary files differ
diff --git a/maps/re/pvp_n_room.mcache b/maps/re/pvp_n_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/re/pvp_n_room.mcache
Binary files differ
diff --git a/maps/re/pvp_room.mcache b/maps/re/pvp_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/re/pvp_room.mcache
Binary files differ
diff --git a/maps/re/pvp_y_1-1.mcache b/maps/re/pvp_y_1-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_1-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_1-2.mcache b/maps/re/pvp_y_1-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_1-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_1-3.mcache b/maps/re/pvp_y_1-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_1-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_1-4.mcache b/maps/re/pvp_y_1-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_1-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_1-5.mcache b/maps/re/pvp_y_1-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_1-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_2-1.mcache b/maps/re/pvp_y_2-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_2-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_2-2.mcache b/maps/re/pvp_y_2-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_2-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_2-3.mcache b/maps/re/pvp_y_2-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_2-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_2-4.mcache b/maps/re/pvp_y_2-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_2-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_2-5.mcache b/maps/re/pvp_y_2-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_2-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_3-1.mcache b/maps/re/pvp_y_3-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_3-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_3-2.mcache b/maps/re/pvp_y_3-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_3-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_3-3.mcache b/maps/re/pvp_y_3-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_3-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_3-4.mcache b/maps/re/pvp_y_3-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_3-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_3-5.mcache b/maps/re/pvp_y_3-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_3-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_4-1.mcache b/maps/re/pvp_y_4-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_4-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_4-2.mcache b/maps/re/pvp_y_4-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_4-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_4-3.mcache b/maps/re/pvp_y_4-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_4-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_4-4.mcache b/maps/re/pvp_y_4-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_4-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_4-5.mcache b/maps/re/pvp_y_4-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_4-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_5-1.mcache b/maps/re/pvp_y_5-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_5-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_5-2.mcache b/maps/re/pvp_y_5-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_5-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_5-3.mcache b/maps/re/pvp_y_5-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_5-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_5-4.mcache b/maps/re/pvp_y_5-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_5-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_5-5.mcache b/maps/re/pvp_y_5-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_5-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_6-1.mcache b/maps/re/pvp_y_6-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_6-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_6-2.mcache b/maps/re/pvp_y_6-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_6-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_6-3.mcache b/maps/re/pvp_y_6-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_6-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_6-4.mcache b/maps/re/pvp_y_6-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_6-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_6-5.mcache b/maps/re/pvp_y_6-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_6-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_7-1.mcache b/maps/re/pvp_y_7-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_7-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_7-2.mcache b/maps/re/pvp_y_7-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_7-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_7-3.mcache b/maps/re/pvp_y_7-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_7-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_7-4.mcache b/maps/re/pvp_y_7-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_7-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_7-5.mcache b/maps/re/pvp_y_7-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_7-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_8-1.mcache b/maps/re/pvp_y_8-1.mcache
new file mode 100644
index 000000000..440c18e90
--- /dev/null
+++ b/maps/re/pvp_y_8-1.mcache
Binary files differ
diff --git a/maps/re/pvp_y_8-2.mcache b/maps/re/pvp_y_8-2.mcache
new file mode 100644
index 000000000..e0424c286
--- /dev/null
+++ b/maps/re/pvp_y_8-2.mcache
Binary files differ
diff --git a/maps/re/pvp_y_8-3.mcache b/maps/re/pvp_y_8-3.mcache
new file mode 100644
index 000000000..ae5b1f404
--- /dev/null
+++ b/maps/re/pvp_y_8-3.mcache
Binary files differ
diff --git a/maps/re/pvp_y_8-4.mcache b/maps/re/pvp_y_8-4.mcache
new file mode 100644
index 000000000..7ddabf270
--- /dev/null
+++ b/maps/re/pvp_y_8-4.mcache
Binary files differ
diff --git a/maps/re/pvp_y_8-5.mcache b/maps/re/pvp_y_8-5.mcache
new file mode 100644
index 000000000..9f7637c09
--- /dev/null
+++ b/maps/re/pvp_y_8-5.mcache
Binary files differ
diff --git a/maps/re/pvp_y_room.mcache b/maps/re/pvp_y_room.mcache
new file mode 100644
index 000000000..b1c4ea857
--- /dev/null
+++ b/maps/re/pvp_y_room.mcache
Binary files differ
diff --git a/maps/re/que_avan01.mcache b/maps/re/que_avan01.mcache
new file mode 100644
index 000000000..51cef085a
--- /dev/null
+++ b/maps/re/que_avan01.mcache
Binary files differ
diff --git a/maps/re/que_ba.mcache b/maps/re/que_ba.mcache
new file mode 100644
index 000000000..837b899e8
--- /dev/null
+++ b/maps/re/que_ba.mcache
Binary files differ
diff --git a/maps/re/que_bingo.mcache b/maps/re/que_bingo.mcache
new file mode 100644
index 000000000..dbb24a106
--- /dev/null
+++ b/maps/re/que_bingo.mcache
Binary files differ
diff --git a/maps/re/que_dan01.mcache b/maps/re/que_dan01.mcache
new file mode 100644
index 000000000..b65d1e480
--- /dev/null
+++ b/maps/re/que_dan01.mcache
Binary files differ
diff --git a/maps/re/que_dan02.mcache b/maps/re/que_dan02.mcache
new file mode 100644
index 000000000..ec41374dd
--- /dev/null
+++ b/maps/re/que_dan02.mcache
Binary files differ
diff --git a/maps/re/que_god01.mcache b/maps/re/que_god01.mcache
new file mode 100644
index 000000000..10adf6241
--- /dev/null
+++ b/maps/re/que_god01.mcache
Binary files differ
diff --git a/maps/re/que_god02.mcache b/maps/re/que_god02.mcache
new file mode 100644
index 000000000..11530ecb4
--- /dev/null
+++ b/maps/re/que_god02.mcache
Binary files differ
diff --git a/maps/re/que_house_s.mcache b/maps/re/que_house_s.mcache
new file mode 100644
index 000000000..3c3cdb3bd
--- /dev/null
+++ b/maps/re/que_house_s.mcache
Binary files differ
diff --git a/maps/re/que_hugel.mcache b/maps/re/que_hugel.mcache
new file mode 100644
index 000000000..57e944d7c
--- /dev/null
+++ b/maps/re/que_hugel.mcache
Binary files differ
diff --git a/maps/re/que_job01.mcache b/maps/re/que_job01.mcache
new file mode 100644
index 000000000..a6ae0a3e8
--- /dev/null
+++ b/maps/re/que_job01.mcache
Binary files differ
diff --git a/maps/re/que_job02.mcache b/maps/re/que_job02.mcache
new file mode 100644
index 000000000..368ce1682
--- /dev/null
+++ b/maps/re/que_job02.mcache
Binary files differ
diff --git a/maps/re/que_job03.mcache b/maps/re/que_job03.mcache
new file mode 100644
index 000000000..368ce1682
--- /dev/null
+++ b/maps/re/que_job03.mcache
Binary files differ
diff --git a/maps/re/que_lhz.mcache b/maps/re/que_lhz.mcache
new file mode 100644
index 000000000..4f1ec7242
--- /dev/null
+++ b/maps/re/que_lhz.mcache
Binary files differ
diff --git a/maps/re/que_moc_16.mcache b/maps/re/que_moc_16.mcache
new file mode 100644
index 000000000..70290570b
--- /dev/null
+++ b/maps/re/que_moc_16.mcache
Binary files differ
diff --git a/maps/re/que_moon.mcache b/maps/re/que_moon.mcache
new file mode 100644
index 000000000..92057f58f
--- /dev/null
+++ b/maps/re/que_moon.mcache
Binary files differ
diff --git a/maps/re/que_ng.mcache b/maps/re/que_ng.mcache
new file mode 100644
index 000000000..3a5e9f818
--- /dev/null
+++ b/maps/re/que_ng.mcache
Binary files differ
diff --git a/maps/re/que_qaru01.mcache b/maps/re/que_qaru01.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qaru01.mcache
Binary files differ
diff --git a/maps/re/que_qaru02.mcache b/maps/re/que_qaru02.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qaru02.mcache
Binary files differ
diff --git a/maps/re/que_qaru03.mcache b/maps/re/que_qaru03.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qaru03.mcache
Binary files differ
diff --git a/maps/re/que_qaru04.mcache b/maps/re/que_qaru04.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qaru04.mcache
Binary files differ
diff --git a/maps/re/que_qaru05.mcache b/maps/re/que_qaru05.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qaru05.mcache
Binary files differ
diff --git a/maps/re/que_qsch01.mcache b/maps/re/que_qsch01.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qsch01.mcache
Binary files differ
diff --git a/maps/re/que_qsch02.mcache b/maps/re/que_qsch02.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qsch02.mcache
Binary files differ
diff --git a/maps/re/que_qsch03.mcache b/maps/re/que_qsch03.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qsch03.mcache
Binary files differ
diff --git a/maps/re/que_qsch04.mcache b/maps/re/que_qsch04.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qsch04.mcache
Binary files differ
diff --git a/maps/re/que_qsch05.mcache b/maps/re/que_qsch05.mcache
new file mode 100644
index 000000000..e99c8ed02
--- /dev/null
+++ b/maps/re/que_qsch05.mcache
Binary files differ
diff --git a/maps/re/que_rachel.mcache b/maps/re/que_rachel.mcache
new file mode 100644
index 000000000..1e333b6d9
--- /dev/null
+++ b/maps/re/que_rachel.mcache
Binary files differ
diff --git a/maps/re/que_san04.mcache b/maps/re/que_san04.mcache
new file mode 100644
index 000000000..d52e3959d
--- /dev/null
+++ b/maps/re/que_san04.mcache
Binary files differ
diff --git a/maps/re/que_sign01.mcache b/maps/re/que_sign01.mcache
new file mode 100644
index 000000000..19d57d7c8
--- /dev/null
+++ b/maps/re/que_sign01.mcache
Binary files differ
diff --git a/maps/re/que_sign02.mcache b/maps/re/que_sign02.mcache
new file mode 100644
index 000000000..7aa820023
--- /dev/null
+++ b/maps/re/que_sign02.mcache
Binary files differ
diff --git a/maps/re/que_temsky.mcache b/maps/re/que_temsky.mcache
new file mode 100644
index 000000000..8d0f12699
--- /dev/null
+++ b/maps/re/que_temsky.mcache
Binary files differ
diff --git a/maps/re/que_thor.mcache b/maps/re/que_thor.mcache
new file mode 100644
index 000000000..27d5fe8f9
--- /dev/null
+++ b/maps/re/que_thor.mcache
Binary files differ
diff --git a/maps/re/quiz_00.mcache b/maps/re/quiz_00.mcache
new file mode 100644
index 000000000..abc576e2e
--- /dev/null
+++ b/maps/re/quiz_00.mcache
Binary files differ
diff --git a/maps/re/quiz_01.mcache b/maps/re/quiz_01.mcache
new file mode 100644
index 000000000..205f0efd6
--- /dev/null
+++ b/maps/re/quiz_01.mcache
Binary files differ
diff --git a/maps/re/quiz_02.mcache b/maps/re/quiz_02.mcache
new file mode 100644
index 000000000..8f68e3446
--- /dev/null
+++ b/maps/re/quiz_02.mcache
Binary files differ
diff --git a/maps/re/quiz_test.mcache b/maps/re/quiz_test.mcache
new file mode 100644
index 000000000..c9c05a35e
--- /dev/null
+++ b/maps/re/quiz_test.mcache
Binary files differ
diff --git a/maps/re/ra_fild01.mcache b/maps/re/ra_fild01.mcache
new file mode 100644
index 000000000..ef2598b19
--- /dev/null
+++ b/maps/re/ra_fild01.mcache
Binary files differ
diff --git a/maps/re/ra_fild02.mcache b/maps/re/ra_fild02.mcache
new file mode 100644
index 000000000..372aca88b
--- /dev/null
+++ b/maps/re/ra_fild02.mcache
Binary files differ
diff --git a/maps/re/ra_fild03.mcache b/maps/re/ra_fild03.mcache
new file mode 100644
index 000000000..f280f4ad3
--- /dev/null
+++ b/maps/re/ra_fild03.mcache
Binary files differ
diff --git a/maps/re/ra_fild04.mcache b/maps/re/ra_fild04.mcache
new file mode 100644
index 000000000..e3a9483ee
--- /dev/null
+++ b/maps/re/ra_fild04.mcache
Binary files differ
diff --git a/maps/re/ra_fild05.mcache b/maps/re/ra_fild05.mcache
new file mode 100644
index 000000000..ef9d5f155
--- /dev/null
+++ b/maps/re/ra_fild05.mcache
Binary files differ
diff --git a/maps/re/ra_fild06.mcache b/maps/re/ra_fild06.mcache
new file mode 100644
index 000000000..5b62c13e0
--- /dev/null
+++ b/maps/re/ra_fild06.mcache
Binary files differ
diff --git a/maps/re/ra_fild07.mcache b/maps/re/ra_fild07.mcache
new file mode 100644
index 000000000..7a74eeaaf
--- /dev/null
+++ b/maps/re/ra_fild07.mcache
Binary files differ
diff --git a/maps/re/ra_fild08.mcache b/maps/re/ra_fild08.mcache
new file mode 100644
index 000000000..c066078e6
--- /dev/null
+++ b/maps/re/ra_fild08.mcache
Binary files differ
diff --git a/maps/re/ra_fild09.mcache b/maps/re/ra_fild09.mcache
new file mode 100644
index 000000000..bb5c8babd
--- /dev/null
+++ b/maps/re/ra_fild09.mcache
Binary files differ
diff --git a/maps/re/ra_fild10.mcache b/maps/re/ra_fild10.mcache
new file mode 100644
index 000000000..9b1342ba2
--- /dev/null
+++ b/maps/re/ra_fild10.mcache
Binary files differ
diff --git a/maps/re/ra_fild11.mcache b/maps/re/ra_fild11.mcache
new file mode 100644
index 000000000..a4430163b
--- /dev/null
+++ b/maps/re/ra_fild11.mcache
Binary files differ
diff --git a/maps/re/ra_fild12.mcache b/maps/re/ra_fild12.mcache
new file mode 100644
index 000000000..05b5d2c21
--- /dev/null
+++ b/maps/re/ra_fild12.mcache
Binary files differ
diff --git a/maps/re/ra_fild13.mcache b/maps/re/ra_fild13.mcache
new file mode 100644
index 000000000..78361c01b
--- /dev/null
+++ b/maps/re/ra_fild13.mcache
Binary files differ
diff --git a/maps/re/ra_in01.mcache b/maps/re/ra_in01.mcache
new file mode 100644
index 000000000..7994371ff
--- /dev/null
+++ b/maps/re/ra_in01.mcache
Binary files differ
diff --git a/maps/re/ra_san01.mcache b/maps/re/ra_san01.mcache
new file mode 100644
index 000000000..de911bae5
--- /dev/null
+++ b/maps/re/ra_san01.mcache
Binary files differ
diff --git a/maps/re/ra_san02.mcache b/maps/re/ra_san02.mcache
new file mode 100644
index 000000000..3ddc0c860
--- /dev/null
+++ b/maps/re/ra_san02.mcache
Binary files differ
diff --git a/maps/re/ra_san03.mcache b/maps/re/ra_san03.mcache
new file mode 100644
index 000000000..a3a26391b
--- /dev/null
+++ b/maps/re/ra_san03.mcache
Binary files differ
diff --git a/maps/re/ra_san04.mcache b/maps/re/ra_san04.mcache
new file mode 100644
index 000000000..d52e3959d
--- /dev/null
+++ b/maps/re/ra_san04.mcache
Binary files differ
diff --git a/maps/re/ra_san05.mcache b/maps/re/ra_san05.mcache
new file mode 100644
index 000000000..f6192e106
--- /dev/null
+++ b/maps/re/ra_san05.mcache
Binary files differ
diff --git a/maps/re/ra_temin.mcache b/maps/re/ra_temin.mcache
new file mode 100644
index 000000000..635ac463d
--- /dev/null
+++ b/maps/re/ra_temin.mcache
Binary files differ
diff --git a/maps/re/ra_temple.mcache b/maps/re/ra_temple.mcache
new file mode 100644
index 000000000..1463713b3
--- /dev/null
+++ b/maps/re/ra_temple.mcache
Binary files differ
diff --git a/maps/re/ra_temsky.mcache b/maps/re/ra_temsky.mcache
new file mode 100644
index 000000000..8d0f12699
--- /dev/null
+++ b/maps/re/ra_temsky.mcache
Binary files differ
diff --git a/maps/re/rachel.mcache b/maps/re/rachel.mcache
new file mode 100644
index 000000000..9571494ea
--- /dev/null
+++ b/maps/re/rachel.mcache
Binary files differ
diff --git a/maps/re/s_atelier.mcache b/maps/re/s_atelier.mcache
new file mode 100644
index 000000000..d09bcb250
--- /dev/null
+++ b/maps/re/s_atelier.mcache
Binary files differ
diff --git a/maps/re/sch_gld.mcache b/maps/re/sch_gld.mcache
new file mode 100644
index 000000000..7398be4c2
--- /dev/null
+++ b/maps/re/sch_gld.mcache
Binary files differ
diff --git a/maps/re/schg_cas01.mcache b/maps/re/schg_cas01.mcache
new file mode 100644
index 000000000..21db06c29
--- /dev/null
+++ b/maps/re/schg_cas01.mcache
Binary files differ
diff --git a/maps/re/schg_cas02.mcache b/maps/re/schg_cas02.mcache
new file mode 100644
index 000000000..5232cedab
--- /dev/null
+++ b/maps/re/schg_cas02.mcache
Binary files differ
diff --git a/maps/re/schg_cas03.mcache b/maps/re/schg_cas03.mcache
new file mode 100644
index 000000000..5c85b2530
--- /dev/null
+++ b/maps/re/schg_cas03.mcache
Binary files differ
diff --git a/maps/re/schg_cas04.mcache b/maps/re/schg_cas04.mcache
new file mode 100644
index 000000000..21db06c29
--- /dev/null
+++ b/maps/re/schg_cas04.mcache
Binary files differ
diff --git a/maps/re/schg_cas05.mcache b/maps/re/schg_cas05.mcache
new file mode 100644
index 000000000..21db06c29
--- /dev/null
+++ b/maps/re/schg_cas05.mcache
Binary files differ
diff --git a/maps/re/schg_dun01.mcache b/maps/re/schg_dun01.mcache
new file mode 100644
index 000000000..7911c2db1
--- /dev/null
+++ b/maps/re/schg_dun01.mcache
Binary files differ
diff --git a/maps/re/schg_que01.mcache b/maps/re/schg_que01.mcache
new file mode 100644
index 000000000..560d36240
--- /dev/null
+++ b/maps/re/schg_que01.mcache
Binary files differ
diff --git a/maps/re/sec_in01.mcache b/maps/re/sec_in01.mcache
new file mode 100644
index 000000000..b19147a22
--- /dev/null
+++ b/maps/re/sec_in01.mcache
Binary files differ
diff --git a/maps/re/sec_in02.mcache b/maps/re/sec_in02.mcache
new file mode 100644
index 000000000..e5d6be474
--- /dev/null
+++ b/maps/re/sec_in02.mcache
Binary files differ
diff --git a/maps/re/sec_pri.mcache b/maps/re/sec_pri.mcache
new file mode 100644
index 000000000..e3fbc45cc
--- /dev/null
+++ b/maps/re/sec_pri.mcache
Binary files differ
diff --git a/maps/re/siege_test.mcache b/maps/re/siege_test.mcache
new file mode 100644
index 000000000..8ddd58b6b
--- /dev/null
+++ b/maps/re/siege_test.mcache
Binary files differ
diff --git a/maps/re/silk_lair.mcache b/maps/re/silk_lair.mcache
new file mode 100644
index 000000000..b490eb124
--- /dev/null
+++ b/maps/re/silk_lair.mcache
Binary files differ
diff --git a/maps/re/spl_fild01.mcache b/maps/re/spl_fild01.mcache
new file mode 100644
index 000000000..d6c9d470b
--- /dev/null
+++ b/maps/re/spl_fild01.mcache
Binary files differ
diff --git a/maps/re/spl_fild02.mcache b/maps/re/spl_fild02.mcache
new file mode 100644
index 000000000..af881cea5
--- /dev/null
+++ b/maps/re/spl_fild02.mcache
Binary files differ
diff --git a/maps/re/spl_fild03.mcache b/maps/re/spl_fild03.mcache
new file mode 100644
index 000000000..84bd4b4cb
--- /dev/null
+++ b/maps/re/spl_fild03.mcache
Binary files differ
diff --git a/maps/re/spl_in01.mcache b/maps/re/spl_in01.mcache
new file mode 100644
index 000000000..5bbfcf515
--- /dev/null
+++ b/maps/re/spl_in01.mcache
Binary files differ
diff --git a/maps/re/spl_in02.mcache b/maps/re/spl_in02.mcache
new file mode 100644
index 000000000..2261bc8f7
--- /dev/null
+++ b/maps/re/spl_in02.mcache
Binary files differ
diff --git a/maps/re/splendide.mcache b/maps/re/splendide.mcache
new file mode 100644
index 000000000..b67155e85
--- /dev/null
+++ b/maps/re/splendide.mcache
Binary files differ
diff --git a/maps/re/sword_1-1.mcache b/maps/re/sword_1-1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/re/sword_1-1.mcache
Binary files differ
diff --git a/maps/re/sword_2-1.mcache b/maps/re/sword_2-1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/re/sword_2-1.mcache
Binary files differ
diff --git a/maps/re/sword_3-1.mcache b/maps/re/sword_3-1.mcache
new file mode 100644
index 000000000..695bece61
--- /dev/null
+++ b/maps/re/sword_3-1.mcache
Binary files differ
diff --git a/maps/re/te_alde_gld.mcache b/maps/re/te_alde_gld.mcache
new file mode 100644
index 000000000..0b4cd694f
--- /dev/null
+++ b/maps/re/te_alde_gld.mcache
Binary files differ
diff --git a/maps/re/te_aldecas1.mcache b/maps/re/te_aldecas1.mcache
new file mode 100644
index 000000000..4d96f61e3
--- /dev/null
+++ b/maps/re/te_aldecas1.mcache
Binary files differ
diff --git a/maps/re/te_aldecas2.mcache b/maps/re/te_aldecas2.mcache
new file mode 100644
index 000000000..493e494b9
--- /dev/null
+++ b/maps/re/te_aldecas2.mcache
Binary files differ
diff --git a/maps/re/te_aldecas3.mcache b/maps/re/te_aldecas3.mcache
new file mode 100644
index 000000000..82d4719bc
--- /dev/null
+++ b/maps/re/te_aldecas3.mcache
Binary files differ
diff --git a/maps/re/te_aldecas4.mcache b/maps/re/te_aldecas4.mcache
new file mode 100644
index 000000000..324040d79
--- /dev/null
+++ b/maps/re/te_aldecas4.mcache
Binary files differ
diff --git a/maps/re/te_aldecas5.mcache b/maps/re/te_aldecas5.mcache
new file mode 100644
index 000000000..8094ea0d1
--- /dev/null
+++ b/maps/re/te_aldecas5.mcache
Binary files differ
diff --git a/maps/re/te_prt_gld.mcache b/maps/re/te_prt_gld.mcache
new file mode 100644
index 000000000..6f2c0b38e
--- /dev/null
+++ b/maps/re/te_prt_gld.mcache
Binary files differ
diff --git a/maps/re/te_prtcas01.mcache b/maps/re/te_prtcas01.mcache
new file mode 100644
index 000000000..1e01f48a7
--- /dev/null
+++ b/maps/re/te_prtcas01.mcache
Binary files differ
diff --git a/maps/re/te_prtcas02.mcache b/maps/re/te_prtcas02.mcache
new file mode 100644
index 000000000..90ba580fa
--- /dev/null
+++ b/maps/re/te_prtcas02.mcache
Binary files differ
diff --git a/maps/re/te_prtcas03.mcache b/maps/re/te_prtcas03.mcache
new file mode 100644
index 000000000..25f9fd86a
--- /dev/null
+++ b/maps/re/te_prtcas03.mcache
Binary files differ
diff --git a/maps/re/te_prtcas04.mcache b/maps/re/te_prtcas04.mcache
new file mode 100644
index 000000000..66f12ad53
--- /dev/null
+++ b/maps/re/te_prtcas04.mcache
Binary files differ
diff --git a/maps/re/te_prtcas05.mcache b/maps/re/te_prtcas05.mcache
new file mode 100644
index 000000000..e57e5e886
--- /dev/null
+++ b/maps/re/te_prtcas05.mcache
Binary files differ
diff --git a/maps/re/teg_dun01.mcache b/maps/re/teg_dun01.mcache
new file mode 100644
index 000000000..44c528bc2
--- /dev/null
+++ b/maps/re/teg_dun01.mcache
Binary files differ
diff --git a/maps/re/teg_dun02.mcache b/maps/re/teg_dun02.mcache
new file mode 100644
index 000000000..4feff8774
--- /dev/null
+++ b/maps/re/teg_dun02.mcache
Binary files differ
diff --git a/maps/re/tha_scene01.mcache b/maps/re/tha_scene01.mcache
new file mode 100644
index 000000000..2a55d531a
--- /dev/null
+++ b/maps/re/tha_scene01.mcache
Binary files differ
diff --git a/maps/re/tha_t01.mcache b/maps/re/tha_t01.mcache
new file mode 100644
index 000000000..386d9cb5d
--- /dev/null
+++ b/maps/re/tha_t01.mcache
Binary files differ
diff --git a/maps/re/tha_t02.mcache b/maps/re/tha_t02.mcache
new file mode 100644
index 000000000..e7685c06e
--- /dev/null
+++ b/maps/re/tha_t02.mcache
Binary files differ
diff --git a/maps/re/tha_t03.mcache b/maps/re/tha_t03.mcache
new file mode 100644
index 000000000..0975f06f6
--- /dev/null
+++ b/maps/re/tha_t03.mcache
Binary files differ
diff --git a/maps/re/tha_t04.mcache b/maps/re/tha_t04.mcache
new file mode 100644
index 000000000..db8d386db
--- /dev/null
+++ b/maps/re/tha_t04.mcache
Binary files differ
diff --git a/maps/re/tha_t05.mcache b/maps/re/tha_t05.mcache
new file mode 100644
index 000000000..589075e58
--- /dev/null
+++ b/maps/re/tha_t05.mcache
Binary files differ
diff --git a/maps/re/tha_t06.mcache b/maps/re/tha_t06.mcache
new file mode 100644
index 000000000..223baf5f8
--- /dev/null
+++ b/maps/re/tha_t06.mcache
Binary files differ
diff --git a/maps/re/tha_t07.mcache b/maps/re/tha_t07.mcache
new file mode 100644
index 000000000..ab820b420
--- /dev/null
+++ b/maps/re/tha_t07.mcache
Binary files differ
diff --git a/maps/re/tha_t08.mcache b/maps/re/tha_t08.mcache
new file mode 100644
index 000000000..18389fba6
--- /dev/null
+++ b/maps/re/tha_t08.mcache
Binary files differ
diff --git a/maps/re/tha_t09.mcache b/maps/re/tha_t09.mcache
new file mode 100644
index 000000000..1a55d3474
--- /dev/null
+++ b/maps/re/tha_t09.mcache
Binary files differ
diff --git a/maps/re/tha_t10.mcache b/maps/re/tha_t10.mcache
new file mode 100644
index 000000000..67fde65a8
--- /dev/null
+++ b/maps/re/tha_t10.mcache
Binary files differ
diff --git a/maps/re/tha_t11.mcache b/maps/re/tha_t11.mcache
new file mode 100644
index 000000000..2593d6ad1
--- /dev/null
+++ b/maps/re/tha_t11.mcache
Binary files differ
diff --git a/maps/re/tha_t12.mcache b/maps/re/tha_t12.mcache
new file mode 100644
index 000000000..25ad4c2fc
--- /dev/null
+++ b/maps/re/tha_t12.mcache
Binary files differ
diff --git a/maps/re/thana_boss.mcache b/maps/re/thana_boss.mcache
new file mode 100644
index 000000000..e58d1f6d1
--- /dev/null
+++ b/maps/re/thana_boss.mcache
Binary files differ
diff --git a/maps/re/thana_step.mcache b/maps/re/thana_step.mcache
new file mode 100644
index 000000000..d7c6837fd
--- /dev/null
+++ b/maps/re/thana_step.mcache
Binary files differ
diff --git a/maps/re/thor_camp.mcache b/maps/re/thor_camp.mcache
new file mode 100644
index 000000000..fec5deb8b
--- /dev/null
+++ b/maps/re/thor_camp.mcache
Binary files differ
diff --git a/maps/re/thor_v01.mcache b/maps/re/thor_v01.mcache
new file mode 100644
index 000000000..2471e1854
--- /dev/null
+++ b/maps/re/thor_v01.mcache
Binary files differ
diff --git a/maps/re/thor_v02.mcache b/maps/re/thor_v02.mcache
new file mode 100644
index 000000000..c3b1e240f
--- /dev/null
+++ b/maps/re/thor_v02.mcache
Binary files differ
diff --git a/maps/re/thor_v03.mcache b/maps/re/thor_v03.mcache
new file mode 100644
index 000000000..9951cd423
--- /dev/null
+++ b/maps/re/thor_v03.mcache
Binary files differ
diff --git a/maps/re/treasure01.mcache b/maps/re/treasure01.mcache
new file mode 100644
index 000000000..8a3f25c6a
--- /dev/null
+++ b/maps/re/treasure01.mcache
Binary files differ
diff --git a/maps/re/treasure02.mcache b/maps/re/treasure02.mcache
new file mode 100644
index 000000000..e83bb6906
--- /dev/null
+++ b/maps/re/treasure02.mcache
Binary files differ
diff --git a/maps/re/treasure_n1.mcache b/maps/re/treasure_n1.mcache
new file mode 100644
index 000000000..8a3f25c6a
--- /dev/null
+++ b/maps/re/treasure_n1.mcache
Binary files differ
diff --git a/maps/re/treasure_n2.mcache b/maps/re/treasure_n2.mcache
new file mode 100644
index 000000000..e83bb6906
--- /dev/null
+++ b/maps/re/treasure_n2.mcache
Binary files differ
diff --git a/maps/re/tur_dun01.mcache b/maps/re/tur_dun01.mcache
new file mode 100644
index 000000000..ede11d905
--- /dev/null
+++ b/maps/re/tur_dun01.mcache
Binary files differ
diff --git a/maps/re/tur_dun02.mcache b/maps/re/tur_dun02.mcache
new file mode 100644
index 000000000..3e951e3ed
--- /dev/null
+++ b/maps/re/tur_dun02.mcache
Binary files differ
diff --git a/maps/re/tur_dun03.mcache b/maps/re/tur_dun03.mcache
new file mode 100644
index 000000000..0f0c190cc
--- /dev/null
+++ b/maps/re/tur_dun03.mcache
Binary files differ
diff --git a/maps/re/tur_dun04.mcache b/maps/re/tur_dun04.mcache
new file mode 100644
index 000000000..eddf597f9
--- /dev/null
+++ b/maps/re/tur_dun04.mcache
Binary files differ
diff --git a/maps/re/tur_dun05.mcache b/maps/re/tur_dun05.mcache
new file mode 100644
index 000000000..2b9a523d5
--- /dev/null
+++ b/maps/re/tur_dun05.mcache
Binary files differ
diff --git a/maps/re/tur_dun06.mcache b/maps/re/tur_dun06.mcache
new file mode 100644
index 000000000..32ea2aa7f
--- /dev/null
+++ b/maps/re/tur_dun06.mcache
Binary files differ
diff --git a/maps/re/turbo_e_16.mcache b/maps/re/turbo_e_16.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_e_16.mcache
Binary files differ
diff --git a/maps/re/turbo_e_4.mcache b/maps/re/turbo_e_4.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_e_4.mcache
Binary files differ
diff --git a/maps/re/turbo_e_8.mcache b/maps/re/turbo_e_8.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_e_8.mcache
Binary files differ
diff --git a/maps/re/turbo_n_1.mcache b/maps/re/turbo_n_1.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_n_1.mcache
Binary files differ
diff --git a/maps/re/turbo_n_16.mcache b/maps/re/turbo_n_16.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_n_16.mcache
Binary files differ
diff --git a/maps/re/turbo_n_4.mcache b/maps/re/turbo_n_4.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_n_4.mcache
Binary files differ
diff --git a/maps/re/turbo_n_8.mcache b/maps/re/turbo_n_8.mcache
new file mode 100644
index 000000000..2dd27fb49
--- /dev/null
+++ b/maps/re/turbo_n_8.mcache
Binary files differ
diff --git a/maps/re/turbo_room.mcache b/maps/re/turbo_room.mcache
new file mode 100644
index 000000000..6fdd21346
--- /dev/null
+++ b/maps/re/turbo_room.mcache
Binary files differ
diff --git a/maps/re/um_dun01.mcache b/maps/re/um_dun01.mcache
new file mode 100644
index 000000000..ea49e8792
--- /dev/null
+++ b/maps/re/um_dun01.mcache
Binary files differ
diff --git a/maps/re/um_dun02.mcache b/maps/re/um_dun02.mcache
new file mode 100644
index 000000000..e99e61c00
--- /dev/null
+++ b/maps/re/um_dun02.mcache
Binary files differ
diff --git a/maps/re/um_fild01.mcache b/maps/re/um_fild01.mcache
new file mode 100644
index 000000000..5fbb57fff
--- /dev/null
+++ b/maps/re/um_fild01.mcache
Binary files differ
diff --git a/maps/re/um_fild02.mcache b/maps/re/um_fild02.mcache
new file mode 100644
index 000000000..59632d91f
--- /dev/null
+++ b/maps/re/um_fild02.mcache
Binary files differ
diff --git a/maps/re/um_fild03.mcache b/maps/re/um_fild03.mcache
new file mode 100644
index 000000000..407ac7649
--- /dev/null
+++ b/maps/re/um_fild03.mcache
Binary files differ
diff --git a/maps/re/um_fild04.mcache b/maps/re/um_fild04.mcache
new file mode 100644
index 000000000..d35d65508
--- /dev/null
+++ b/maps/re/um_fild04.mcache
Binary files differ
diff --git a/maps/re/um_in.mcache b/maps/re/um_in.mcache
new file mode 100644
index 000000000..41340edc1
--- /dev/null
+++ b/maps/re/um_in.mcache
Binary files differ
diff --git a/maps/re/umbala.mcache b/maps/re/umbala.mcache
new file mode 100644
index 000000000..ddc235e34
--- /dev/null
+++ b/maps/re/umbala.mcache
Binary files differ
diff --git a/maps/re/valkyrie.mcache b/maps/re/valkyrie.mcache
new file mode 100644
index 000000000..208d13ed9
--- /dev/null
+++ b/maps/re/valkyrie.mcache
Binary files differ
diff --git a/maps/re/ve_fild01.mcache b/maps/re/ve_fild01.mcache
new file mode 100644
index 000000000..569e6851e
--- /dev/null
+++ b/maps/re/ve_fild01.mcache
Binary files differ
diff --git a/maps/re/ve_fild02.mcache b/maps/re/ve_fild02.mcache
new file mode 100644
index 000000000..c08a2bddb
--- /dev/null
+++ b/maps/re/ve_fild02.mcache
Binary files differ
diff --git a/maps/re/ve_fild03.mcache b/maps/re/ve_fild03.mcache
new file mode 100644
index 000000000..52f022ff2
--- /dev/null
+++ b/maps/re/ve_fild03.mcache
Binary files differ
diff --git a/maps/re/ve_fild04.mcache b/maps/re/ve_fild04.mcache
new file mode 100644
index 000000000..96ddf8bfa
--- /dev/null
+++ b/maps/re/ve_fild04.mcache
Binary files differ
diff --git a/maps/re/ve_fild05.mcache b/maps/re/ve_fild05.mcache
new file mode 100644
index 000000000..a694701e0
--- /dev/null
+++ b/maps/re/ve_fild05.mcache
Binary files differ
diff --git a/maps/re/ve_fild06.mcache b/maps/re/ve_fild06.mcache
new file mode 100644
index 000000000..e532c3584
--- /dev/null
+++ b/maps/re/ve_fild06.mcache
Binary files differ
diff --git a/maps/re/ve_fild07.mcache b/maps/re/ve_fild07.mcache
new file mode 100644
index 000000000..14a98e34a
--- /dev/null
+++ b/maps/re/ve_fild07.mcache
Binary files differ
diff --git a/maps/re/ve_in.mcache b/maps/re/ve_in.mcache
new file mode 100644
index 000000000..9d6e51c2f
--- /dev/null
+++ b/maps/re/ve_in.mcache
Binary files differ
diff --git a/maps/re/ve_in02.mcache b/maps/re/ve_in02.mcache
new file mode 100644
index 000000000..4c966492c
--- /dev/null
+++ b/maps/re/ve_in02.mcache
Binary files differ
diff --git a/maps/re/veins.mcache b/maps/re/veins.mcache
new file mode 100644
index 000000000..e3f3608aa
--- /dev/null
+++ b/maps/re/veins.mcache
Binary files differ
diff --git a/maps/re/wizard_1-1.mcache b/maps/re/wizard_1-1.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/wizard_1-1.mcache
Binary files differ
diff --git a/maps/re/wizard_2-1.mcache b/maps/re/wizard_2-1.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/wizard_2-1.mcache
Binary files differ
diff --git a/maps/re/wizard_3-1.mcache b/maps/re/wizard_3-1.mcache
new file mode 100644
index 000000000..820e98d3e
--- /dev/null
+++ b/maps/re/wizard_3-1.mcache
Binary files differ
diff --git a/maps/re/xmas.mcache b/maps/re/xmas.mcache
new file mode 100644
index 000000000..e20484c81
--- /dev/null
+++ b/maps/re/xmas.mcache
Binary files differ
diff --git a/maps/re/xmas_dun01.mcache b/maps/re/xmas_dun01.mcache
new file mode 100644
index 000000000..57405fe4a
--- /dev/null
+++ b/maps/re/xmas_dun01.mcache
Binary files differ
diff --git a/maps/re/xmas_dun02.mcache b/maps/re/xmas_dun02.mcache
new file mode 100644
index 000000000..021f52832
--- /dev/null
+++ b/maps/re/xmas_dun02.mcache
Binary files differ
diff --git a/maps/re/xmas_fild01.mcache b/maps/re/xmas_fild01.mcache
new file mode 100644
index 000000000..9b8e4fd11
--- /dev/null
+++ b/maps/re/xmas_fild01.mcache
Binary files differ
diff --git a/maps/re/xmas_in.mcache b/maps/re/xmas_in.mcache
new file mode 100644
index 000000000..c02c0e71a
--- /dev/null
+++ b/maps/re/xmas_in.mcache
Binary files differ
diff --git a/maps/re/y_airport.mcache b/maps/re/y_airport.mcache
new file mode 100644
index 000000000..ff75f0fd4
--- /dev/null
+++ b/maps/re/y_airport.mcache
Binary files differ
diff --git a/maps/re/yggdrasil01.mcache b/maps/re/yggdrasil01.mcache
new file mode 100644
index 000000000..6a62700d4
--- /dev/null
+++ b/maps/re/yggdrasil01.mcache
Binary files differ
diff --git a/maps/re/yuno.mcache b/maps/re/yuno.mcache
new file mode 100644
index 000000000..c145fd840
--- /dev/null
+++ b/maps/re/yuno.mcache
Binary files differ
diff --git a/maps/re/yuno_fild01.mcache b/maps/re/yuno_fild01.mcache
new file mode 100644
index 000000000..48da54791
--- /dev/null
+++ b/maps/re/yuno_fild01.mcache
Binary files differ
diff --git a/maps/re/yuno_fild02.mcache b/maps/re/yuno_fild02.mcache
new file mode 100644
index 000000000..26177170a
--- /dev/null
+++ b/maps/re/yuno_fild02.mcache
Binary files differ
diff --git a/maps/re/yuno_fild03.mcache b/maps/re/yuno_fild03.mcache
new file mode 100644
index 000000000..14444cb57
--- /dev/null
+++ b/maps/re/yuno_fild03.mcache
Binary files differ
diff --git a/maps/re/yuno_fild04.mcache b/maps/re/yuno_fild04.mcache
new file mode 100644
index 000000000..ce473f740
--- /dev/null
+++ b/maps/re/yuno_fild04.mcache
Binary files differ
diff --git a/maps/re/yuno_fild05.mcache b/maps/re/yuno_fild05.mcache
new file mode 100644
index 000000000..0e08d15e3
--- /dev/null
+++ b/maps/re/yuno_fild05.mcache
Binary files differ
diff --git a/maps/re/yuno_fild06.mcache b/maps/re/yuno_fild06.mcache
new file mode 100644
index 000000000..dd4fa4ccc
--- /dev/null
+++ b/maps/re/yuno_fild06.mcache
Binary files differ
diff --git a/maps/re/yuno_fild07.mcache b/maps/re/yuno_fild07.mcache
new file mode 100644
index 000000000..b0c147137
--- /dev/null
+++ b/maps/re/yuno_fild07.mcache
Binary files differ
diff --git a/maps/re/yuno_fild08.mcache b/maps/re/yuno_fild08.mcache
new file mode 100644
index 000000000..9e2b05bdd
--- /dev/null
+++ b/maps/re/yuno_fild08.mcache
Binary files differ
diff --git a/maps/re/yuno_fild09.mcache b/maps/re/yuno_fild09.mcache
new file mode 100644
index 000000000..fb14f1b4c
--- /dev/null
+++ b/maps/re/yuno_fild09.mcache
Binary files differ
diff --git a/maps/re/yuno_fild10.mcache b/maps/re/yuno_fild10.mcache
new file mode 100644
index 000000000..9c5775dd3
--- /dev/null
+++ b/maps/re/yuno_fild10.mcache
Binary files differ
diff --git a/maps/re/yuno_fild11.mcache b/maps/re/yuno_fild11.mcache
new file mode 100644
index 000000000..3afa65221
--- /dev/null
+++ b/maps/re/yuno_fild11.mcache
Binary files differ
diff --git a/maps/re/yuno_fild12.mcache b/maps/re/yuno_fild12.mcache
new file mode 100644
index 000000000..dfa05d7a3
--- /dev/null
+++ b/maps/re/yuno_fild12.mcache
Binary files differ
diff --git a/maps/re/yuno_in01.mcache b/maps/re/yuno_in01.mcache
new file mode 100644
index 000000000..8b1665fe4
--- /dev/null
+++ b/maps/re/yuno_in01.mcache
Binary files differ
diff --git a/maps/re/yuno_in02.mcache b/maps/re/yuno_in02.mcache
new file mode 100644
index 000000000..f2bf03891
--- /dev/null
+++ b/maps/re/yuno_in02.mcache
Binary files differ
diff --git a/maps/re/yuno_in03.mcache b/maps/re/yuno_in03.mcache
new file mode 100644
index 000000000..0f3ffeb3f
--- /dev/null
+++ b/maps/re/yuno_in03.mcache
Binary files differ
diff --git a/maps/re/yuno_in04.mcache b/maps/re/yuno_in04.mcache
new file mode 100644
index 000000000..321b03de4
--- /dev/null
+++ b/maps/re/yuno_in04.mcache
Binary files differ
diff --git a/maps/re/yuno_in05.mcache b/maps/re/yuno_in05.mcache
new file mode 100644
index 000000000..6b1e388f1
--- /dev/null
+++ b/maps/re/yuno_in05.mcache
Binary files differ
diff --git a/maps/re/yuno_pre.mcache b/maps/re/yuno_pre.mcache
new file mode 100644
index 000000000..2f381aa24
--- /dev/null
+++ b/maps/re/yuno_pre.mcache
Binary files differ
diff --git a/maps/re/z_agit.mcache b/maps/re/z_agit.mcache
new file mode 100644
index 000000000..208dc31a7
--- /dev/null
+++ b/maps/re/z_agit.mcache
Binary files differ
diff --git a/npc/instances/NydhoggsNest.txt b/npc/instances/NydhoggsNest.txt
index 19627e6a0..46ffdaef3 100644
--- a/npc/instances/NydhoggsNest.txt
+++ b/npc/instances/NydhoggsNest.txt
@@ -35,1497 +35,1508 @@
nyd_dun02,100,201,3 script Yggdrasil Gatekeeper HIDDEN_NPC,8,8,{
if (ins_nyd == 0) {
- mes "A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.";
- next;
- mes "Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.";
- next;
- switch(select("Move closer to look more carefully.", "Step back.")) {
+ mes("A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.");
+ next();
+ mes("Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.");
+ next();
+ switch (select("Move closer to look more carefully.", "Step back.")) {
case 1:
specialeffect(EF_HOLYHIT, AREA, playerattached());
- pushpc 3,3;
+ pushpc(3, 3);
if (ep13_1_edq == 14)
ep13_1_edq = 15;
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
+ mes("A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...");
+ next();
+ mes("Perhaps there's a great hidden secret beyond the gate, beyond expectation.");
+ next();
+ mes("It would be better to go back to camp and inform the others and ask for help.");
if (ep13_1_edq != 15) {
- next;
- mes "You'll have to obtain the others trust in the expendition camp by working hard.";
+ next();
+ mes("You'll have to obtain the others trust in the expendition camp by working hard.");
}
ins_nyd = 1;
- close;
+ close();
case 2:
- close;
+ close();
}
} else if (ins_nyd == 1) {
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
+ mes("A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...");
+ next();
+ mes("Perhaps there's a great hidden secret beyond the gate, beyond expectation.");
+ next();
+ mes("It would be better to go back to camp and inform the others and ask for help.");
if (ep13_1_edq == 14 || ep13_1_edq == 15) {
ep13_1_edq = 15;
- close;
+ close();
}
- next;
- mes "You'll have to obtain the others trust in the expendition camp by working hard.";
- close;
+ next();
+ mes("You'll have to obtain the others trust in the expendition camp by working hard.");
+ close();
} else if (ins_nyd == 111 || ins_nyd == 112) {
specialeffect(EF_CHANGECOLD, AREA, playerattached());
- mes "The strange sensation surrounding your body has disappeared";
- next;
- mes "When you touch the stone gate, you hear a commanding voice.";
- next;
- mes "[??????]";
- mes "Wingless one... Our promised words...";
- next;
- switch(select("'Guardian's spell'!", "Take a step back.")) {
+ mes("The strange sensation surrounding your body has disappeared");
+ next();
+ mes("When you touch the stone gate, you hear a commanding voice.");
+ next();
+ mes("[??????]");
+ mes("Wingless one... Our promised words...");
+ next();
+ switch (select("'Guardian's spell'!", "Take a step back.")) {
case 1:
- mes "[??????]";
- mes "Promised words... Guardian's spell... proof of their existence.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "In the name of Yggdrasiliad, I will accept you as a servant of the Guardian.";
- next;
+ mes("[??????]");
+ mes("Promised words... Guardian's spell... proof of their existence.");
+ next();
+ mes("[Yggdrasil Gatekeeper]");
+ mes("In the name of Yggdrasiliad, I will accept you as a servant of the Guardian.");
+ next();
specialeffect(EF_CHANGECOLD, AREA, playerattached());
ins_nyd = 200;
- mes "[Yggdrasil Gatekeeper]";
- mes "I accept your entrance through the Guardian's gate. You are now considered a faithful servant of the Guardian Nidhoggur.";
- next;
- mes "The voice has disappeared, and the dark power is calming down from behind the stone gate.";
- close;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("I accept your entrance through the Guardian's gate. You are now considered a faithful servant of the Guardian Nidhoggur.");
+ next();
+ mes("The voice has disappeared, and the dark power is calming down from behind the stone gate.");
+ close();
case 2:
- close;
+ close();
}
} else if (ins_nyd == 131 || ins_nyd == 132 || ins_nyd > 199) {
.@party_id = getcharid(CHAR_ID_PARTY);
- .@md_name$ = "Nidhoggur's Nest";
+ .@md_name$ = _("Nidhoggur's Nest");
- .@ins_nyd_check = questprogress(3135,PLAYTIME); // 3 Day cooldown
- .@ins_nyd_check2 = questprogress(3136,PLAYTIME); // 4 Hour play limit
+ .@ins_nyd_check = questprogress(3135, PLAYTIME); // 3 Day cooldown
+ .@ins_nyd_check2 = questprogress(3136, PLAYTIME); // 4 Hour play limit
- mes "As I put my hands on the stone gate, a voice sounded from the depth of my heart.";
- next;
+ mes("As I put my hands on the stone gate, a voice sounded from the depth of my heart.");
+ next();
if (!.@ins_nyd_check && !.@ins_nyd_check2) {
- if (!instance_check_party(.@party_id,2,70)) {
- mes "[Yggdrasil Gatekeeper]";
- mes "Where are the other servants, so you can work together? Each servant cannot be admitted here individually...";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "Come with at least 1 more servant... Only party leaders can accept admission to Nidhoggur's Nest.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "And only 1 representative of you needs to talk to me, so don't annoy me...";
- close;
+ if (!instance_check_party(.@party_id, 2, 70)) {
+ mes("[Yggdrasil Gatekeeper]");
+ mes("Where are the other servants, so you can work together? Each servant cannot be admitted here individually...");
+ next();
+ mes("[Yggdrasil Gatekeeper]");
+ mes("Come with at least 1 more servant... Only party leaders can accept admission to Nidhoggur's Nest.");
+ next();
+ mes("[Yggdrasil Gatekeeper]");
+ mes("And only 1 representative of you needs to talk to me, so don't annoy me...");
+ close();
}
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2)) {
- mes "[Yggdrasil Gatekeeper]";
- mes "The loyal servants of the Guardian... what can I do for you?";
- next;
- switch(select("Please allow me to enter.", "I want to go in.", "I want to leave.")) {
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) {
+ mes("[Yggdrasil Gatekeeper]");
+ mes("The loyal servants of the Guardian... what can I do for you?");
+ next();
+ switch (select("Please allow me to enter.", "I want to go in.", "I want to leave.")) {
case 1:
.@instance = instance_create(.@md_name$, .@party_id);
if (.@instance < 0) {
- mes "[Yggdrasil Gatekeeper]";
- mes "The Guardian seems to wish to be alone. I will go in and check, please wait out here.";
- close;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("The Guardian seems to wish to be alone. I will go in and check, please wait out here.");
+ close();
}
for (.@i = 1; .@i <= 2; ++.@i) {
- if( instance_attachmap(.@i + "@nyd", .@instance) == "" )
+ if (instance_attachmap(.@i + "@nyd", .@instance) == "")
break;
}
- if( .@i < 2 ) {
+ if (.@i < 2) {
instance_destroy(.@instance);
- close;
+ close();
}
- instance_set_timeout 144000,300,.@instance;
+ instance_set_timeout(144000, 300, .@instance);
instance_init(.@instance);
- mes "[Yggdrasil Gatekeeper]";
- mes "I've recorded your request, are you ready to go inside?";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "If you are ready, I will allow you to enter.";
- close;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("I've recorded your request, are you ready to go inside?");
+ next();
+ mes("[Yggdrasil Gatekeeper]");
+ mes("If you are ready, I will allow you to enter.");
+ close();
case 2:
- callsub L_Enter;
+ callsub(L_Enter);
case 3:
- close;
+ close();
}
}
- mes "[Yggdrasil Gatekeeper]";
- mes "If you have the dungeon generated already, you can enter it.";
- next;
- if(select("I want to go in.", "I want to leave.") == 2)
- close;
- callsub L_Enter;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("If you have the dungeon generated already, you can enter it.");
+ next();
+ if (select("I want to go in.", "I want to leave.") == 2)
+ close();
+ callsub(L_Enter);
} else {
.@instance = has_instance2("1@nyd");
- if (.@instance >= 0) {
+ if (.@instance >= 0)
instance_attach(.@instance);
- }
if (.@ins_nyd_check == 1) {
if ('ins_nyd2 == 3 || 'ins_nyd2 == 4) {
- mes "[Yggdrasil Gatekeeper]";
- mes "With the defeat of Nidhoggur's Shadow, the roots of the World Tree Yggdrasil are also affected.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "After Nidhoggur's Shadow disappears, at least 3 days is needed for stabilizing.";
- close;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("With the defeat of Nidhoggur's Shadow, the roots of the World Tree Yggdrasil are also affected.");
+ next();
+ mes("[Yggdrasil Gatekeeper]");
+ mes("After Nidhoggur's Shadow disappears, at least 3 days is needed for stabilizing.");
+ close();
}
- mes "[Yggdrasil Gatekeeper]";
- mes "If you have the dungeon generated already, you can enter it.";
- next;
- if(select("I want to go in.", "I want to leave.") == 2)
- close;
- callsub L_Enter;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("If you have the dungeon generated already, you can enter it.");
+ next();
+ if (select("I want to go in.", "I want to leave.") == 2)
+ close();
+ callsub(L_Enter);
} else if (.@ins_nyd_check == 2) {
if (.@ins_nyd_check2 == 1) {
- mes "[Yggdrasil Gatekeeper]";
- mes "The time limit to enter the dungeon has expired. You must wait for the World Tree to stabilize its power before trying to re-enter.";
- close;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("The time limit to enter the dungeon has expired. You must wait for the World Tree to stabilize its power before trying to re-enter.");
+ close();
} else if (.@ins_nyd_check2 == 2) {
- mes "[Yggdrasil Gatekeeper]";
- mes "The World Tree Yggdrasil has stabilized. Would you like to enter Nidhoggur's Nest again?";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "If you would like to enter again, please register with me.";
- erasequest 3135;
- erasequest 3136;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("The World Tree Yggdrasil has stabilized. Would you like to enter Nidhoggur's Nest again?");
+ next();
+ mes("[Yggdrasil Gatekeeper]");
+ mes("If you would like to enter again, please register with me.");
+ erasequest(3135);
+ erasequest(3136);
'ins_nyd2 = 0;
- close;
+ close();
}
}
}
- close;
+ close();
} else {
- mes "A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.";
- next;
- mes "Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.";
- next;
- switch(select("Move closer to look more carefully.", "Step back.")) {
+ mes("A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.");
+ next();
+ mes("Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.");
+ next();
+ switch (select("Move closer to look more carefully.", "Step back.")) {
case 1:
specialeffect(EF_HOLYHIT, AREA, playerattached());
- pushpc 3,3;
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- close;
+ pushpc(3, 3);
+ mes("A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...");
+ next();
+ mes("Perhaps there's a great hidden secret beyond the gate, beyond expectation.");
+ close();
case 2:
- close;
+ close();
}
}
- close;
+ close();
L_Enter:
if (has_instance("1@nyd") == "") {
- mes "[Yggdrasil Gatekeeper]";
- mes "You did not request for entrance. Please let your leader request entrance.";
- close;
+ mes("[Yggdrasil Gatekeeper]");
+ mes("You did not request for entrance. Please let your leader request entrance.");
+ close();
} else {
- mapannounce "nyd_dun02", getpartyname(getcharid(CHAR_ID_PARTY))+"'s party member "+strcharinfo(PC_NAME)+" has entered Nidhoggur's Nest.",bc_map,"0x00ff99";
- if (!questprogress(3135)) setquest 3135;
- if (!questprogress(3136)) setquest 3136;
- warp "1@nyd",32,37;
- close;
+ mapannounce("nyd_dun02", sprintf(_$("%s's party member %s has entered Nidhoggur's Nest."), getpartyname(getcharid(CHAR_ID_PARTY)), strcharinfo(PC_NAME)), bc_map, C_SPRINGGREEN);
+ if (!questprogress(3135))
+ setquest(3135);
+ if (!questprogress(3136))
+ setquest(3136);
+ warp("1@nyd", 32, 37);
+ close();
}
OnTouch_:
if (ins_nyd == 0) {
specialeffect(EF_CHANGECOLD, AREA, playerattached());
- specialeffect EF_CHANGECOLD;
+ specialeffect(EF_CHANGECOLD);
}
end;
}
mid_camp,271,299,3 script Historian Magnifier#edq 4_M_SAGE_C,3,3,{
- mes "[Historian Magniffer]";
+ mes("[Historian Magniffer]");
if (ins_nyd == 1) {
- mes "Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.";
- next;
- mes "[Historian Magniffer]";
- mes "Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..";
- next;
- mes "[Historian Magniffer]";
- mes "How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.";
- next;
- mes "[Historian Magniffer]";
- mes "We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.";
- close;
+ mes("Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.");
+ next();
+ mes("[Historian Magniffer]");
+ mes("Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..");
+ next();
+ mes("[Historian Magniffer]");
+ mes("How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.");
+ next();
+ mes("[Historian Magniffer]");
+ mes("We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.");
+ close();
} else if (ins_nyd == 2) {
- mes "Does Commander Agip want to talk to me? Let's listen to his story.";
- next;
- mes "[Historian Magniffer]";
- mes "Did you find the cave that the fairy tribes treat as a holy place? You are a really tough cookie. What did you find?";
- next;
- mes "[Historian Magnifier]";
- mes "...";
- next;
- mes "... ...";
- next;
- mes "[Historian Magnifier]";
- mes "Wait a second... I have a brilliant idea.";
- next;
- mes "[Historian Magnifier]";
- mes "Let's see... This book... No... this one...? Hmm... Maybe this...";
- next;
- mes "[Historian Magnifier]";
- mes "...";
- next;
- mes "[Historian Magnifier]";
- mes "... ...";
- next;
- mes "[Historian Magnifier]";
- mes "Oh, here it is! World Tree Yggdrasil and God's tribes... This is their book!";
- next;
- mes "[Historian Magnifier]";
- mes "Maybe you found the central line to enter into the World Tree Yggdrasil!";
- next;
- mes "[Historian Magnifier]";
- mes "If that's true, you've found the greatest discovery since the harnessing of mana. Isn't this exciting?";
- next;
- mes "[Historian Magnifier]";
- mes "But we need a lot more information... Are they refusing you admission?";
- next;
- mes "[Historian Magnifier]";
- mes "I will send a message to my assistant who is in the Prontera Library. So, help her find more information.";
- next;
- mes "[Historian Magnifier]";
- mes "I will definitely help you find a way to enter the World Tree directly so, just believe in me! Okay~!!";
+ mes("Does Commander Agip want to talk to me? Let's listen to his story.");
+ next();
+ mes("[Historian Magniffer]");
+ mes("Did you find the cave that the fairy tribes treat as a holy place? You are a really tough cookie. What did you find?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("...");
+ next();
+ mes("... ...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Wait a second... I have a brilliant idea.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Let's see... This book... No... this one...? Hmm... Maybe this...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("... ...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Oh, here it is! World Tree Yggdrasil and God's tribes... This is their book!");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Maybe you found the central line to enter into the World Tree Yggdrasil!");
+ next();
+ mes("[Historian Magnifier]");
+ mes("If that's true, you've found the greatest discovery since the harnessing of mana. Isn't this exciting?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("But we need a lot more information... Are they refusing you admission?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I will send a message to my assistant who is in the Prontera Library. So, help her find more information.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I will definitely help you find a way to enter the World Tree directly so, just believe in me! Okay~!!");
ins_nyd = 3;
- close;
+ close();
} else if (ins_nyd == 3) {
- mes "Why are you standing there? Go to my assistant in the Prontera Library!";
- close;
+ mes("Why are you standing there? Go to my assistant in the Prontera Library!");
+ close();
} else if (ins_nyd == 4) {
- mes "You've come back... Good, how's Naomi? Actually, I don't need to worry about her. She is always cheerful. Haha.";
- next;
- mes "[Historian Magnifier]";
- mes "You look like you have a lot on your mind... Your face is full of curiosity and questions.";
- next;
- mes "[Historian Magnifier]";
- mes "So, did you read the whole story that I have prepared?";
- next;
- switch(select("Not yet.", "I read all the stories.")) {
+ mes("You've come back... Good, how's Naomi? Actually, I don't need to worry about her. She is always cheerful. Haha.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("You look like you have a lot on your mind... Your face is full of curiosity and questions.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("So, did you read the whole story that I have prepared?");
+ next();
+ switch (select("Not yet.", "I read all the stories.")) {
case 1:
- mes "[Historian Magnifier]";
- mes "Sheesh~ I prepared these stories for you carefully, but you didn't bother to check anything out did you?";
- next;
- mes "[Historian Magnifier]";
- mes "It would be better if you returned after reading all of them. That's very basic data of what we should do for the future.";
- close;
+ mes("[Historian Magnifier]");
+ mes("Sheesh~ I prepared these stories for you carefully, but you didn't bother to check anything out did you?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("It would be better if you returned after reading all of them. That's very basic data of what we should do for the future.");
+ close();
case 2:
- mes "[Historian Magnifier]";
- mes "Hm, good job. Maybe I don't need to check anything else, right?";
- next;
- mes "[Historian Magnifier]";
- mes "I sent you to figure out which basic materials will be needed for the jobs ahead of us. You should bring research reports...";
- next;
- mes "[Historian Magnifier]";
- mes "You might complain about why I didn't bring any myself... That's because I trust your abilities, don't ever take anything for granted.";
- next;
- mes "[Historian Magnifier]";
- mes "But a while ago, while you were tranferring reports from Commander Agip to the mainland, you lost those reports... remember?";
- next;
- mes "[Historian Magnifier]";
- mes "So far, nothing's come up... Was it that somebody attacked you?";
- next;
- mes "[Historian Magnifier]";
- mes "Somehow, the truth will come out, but we should be careful of shocking the natives if we go there unannounced and they're not prepared for our arrival.";
- next;
- mes "[Historian Magnifier]";
- mes "I've talked too much... Anyway, as you know through my report, you've found a great thing!";
- next;
- mes "[Historian Magnifier]";
- mes "Firstly, we should find out more about the place. I expect we can, but... we can't do much without help from others.";
- next;
- mes "[Historian Magnifier]";
- mes "I have heard about recent expeditions of adventurers that have tried to contact the tribes... Have you heard anything about this?";
- next;
- mes "[Historian Magnifier]";
- mes "Anyway, let's try to contact them first, to be clear about any caves or treasures.";
- next;
- mes "[Historian Magnifier]";
- mes "For now, you try to contact the Sapha and Laphine tribes, and try to extract information from them.";
- next;
- mes "[Historian Magnifier]";
- mes "I'll also keep searching here. If you find anything, come back and let me know.";
+ mes("[Historian Magnifier]");
+ mes("Hm, good job. Maybe I don't need to check anything else, right?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I sent you to figure out which basic materials will be needed for the jobs ahead of us. You should bring research reports...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("You might complain about why I didn't bring any myself... That's because I trust your abilities, don't ever take anything for granted.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("But a while ago, while you were tranferring reports from Commander Agip to the mainland, you lost those reports... remember?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("So far, nothing's come up... Was it that somebody attacked you?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Somehow, the truth will come out, but we should be careful of shocking the natives if we go there unannounced and they're not prepared for our arrival.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I've talked too much... Anyway, as you know through my report, you've found a great thing!");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Firstly, we should find out more about the place. I expect we can, but... we can't do much without help from others.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I have heard about recent expeditions of adventurers that have tried to contact the tribes... Have you heard anything about this?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Anyway, let's try to contact them first, to be clear about any caves or treasures.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("For now, you try to contact the Sapha and Laphine tribes, and try to extract information from them.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I'll also keep searching here. If you find anything, come back and let me know.");
ins_nyd = 5;
- close;
+ close();
}
- } else if ((ins_nyd == 5) || (ins_nyd == 51) || (ins_nyd == 52)) {
- mes "Okay, let's try to contact them first, to be clear about any caves or treasures.";
- next;
- mes "[Historian Magnifier]";
- mes "For now, you try to contact the Sapha and Laphine tribes, and try to extract more information.";
- next;
- mes "[Historian Magnifier]";
- mes "I'll also keep searching here. If you find anything, come back and let me know.";
- close;
- } else if ((ins_nyd == 61) || (ins_nyd == 62)) {
- mes "Ah, you've come at a proper time. I found a curious thing while looking for reports from Arunafeltz.";
- next;
- mes "[Historian Magnifier]";
- mes "Right now, we are standing on part of one of the roots of the World Tree Yggdrasil.";
- next;
- mes "[Historian Magnifier]";
- mes "This spot is connected to World Tree by the root. I think we can expect confrontations between the Sapha and Laphine here eventually, don't you think?";
- next;
- mes "[Historian Magnifier]";
- mes "As I expected, the cave is the entrance to go to one of Yggdrasil's roots...";
- next;
- mes "[Historian Magnifier]";
- mes "Did you find anything about the Sapha and Laphine?";
- next;
- mes "...";
- next;
- mes "... ...";
- next;
- mes "[Historian Magnifier]";
- mes "Both sides act ambiguously, so... I'm getting worried...";
- next;
- mes "[Historian Magnifier]";
- mes "The two tribes have some trouble amongst their top leaders. It's not anything official, but...";
- next;
- mes "[Historian Magnifier]";
- mes "Let's report to Commander Agip about the situation so far. Then, we wait on his decision.";
+ } else if (ins_nyd == 5 || ins_nyd == 51 || ins_nyd == 52) {
+ mes("Okay, let's try to contact them first, to be clear about any caves or treasures.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("For now, you try to contact the Sapha and Laphine tribes, and try to extract more information.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("I'll also keep searching here. If you find anything, come back and let me know.");
+ close();
+ } else if (ins_nyd == 61 || ins_nyd == 62) {
+ mes("Ah, you've come at a proper time. I found a curious thing while looking for reports from Arunafeltz.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Right now, we are standing on part of one of the roots of the World Tree Yggdrasil.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("This spot is connected to World Tree by the root. I think we can expect confrontations between the Sapha and Laphine here eventually, don't you think?");
+ next();
+ mes("[Historian Magnifier]");
+ mes("As I expected, the cave is the entrance to go to one of Yggdrasil's roots...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Did you find anything about the Sapha and Laphine?");
+ next();
+ mes("...");
+ next();
+ mes("... ...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Both sides act ambiguously, so... I'm getting worried...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("The two tribes have some trouble amongst their top leaders. It's not anything official, but...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Let's report to Commander Agip about the situation so far. Then, we wait on his decision.");
ins_nyd = 7;
- close;
- } else if ((ins_nyd == 7) || (ins_nyd == 8)) {
- mes "Report to Commander Hibba Agip about what we have discovered, since time is dependent on his decision.";
- close;
- } else if ((ins_nyd == 121) || (ins_nyd == 122) || (ins_nyd == 131) || (ins_nyd == 132) || (ins_nyd ==14)) {
- mes "So that's how it is... we were right about some parts of it... it's called the Guardian's Nest.";
- next;
- mes "[Historian Magnifier]";
- mes "We have gained a large amount of knowledge today, but...";
- next;
- mes "[Historian Magnifier]";
- mes "What we have figured out... how is it going to influence mankind? It's so unpredictable...";
- next;
- mes "[Historian Magnifier]";
- mes "This is only the beginning...we will be quite busy from now on.";
- next;
- mes "[Historian Magnifier]";
- mes "First, report to Commander Agip, then act according to the situation. Let me organize my research findings...";
- close;
+ close();
+ } else if (ins_nyd == 7 || ins_nyd == 8) {
+ mes("Report to Commander Hibba Agip about what we have discovered, since time is dependent on his decision.");
+ close();
+ } else if (ins_nyd == 121 || ins_nyd == 122 || ins_nyd == 131 || ins_nyd == 132 || ins_nyd == 14) {
+ mes("So that's how it is... we were right about some parts of it... it's called the Guardian's Nest.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("We have gained a large amount of knowledge today, but...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("What we have figured out... how is it going to influence mankind? It's so unpredictable...");
+ next();
+ mes("[Historian Magnifier]");
+ mes("This is only the beginning...we will be quite busy from now on.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("First, report to Commander Agip, then act according to the situation. Let me organize my research findings...");
+ close();
} else {
- mes "Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.";
- next;
- mes "[Historian Magnifier]";
- mes "Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..";
- next;
- mes "[Historian Magnifier]";
- mes "How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.";
- next;
- mes "[Historian Magnifier]";
- mes "We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.";
- close;
+ mes("Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..");
+ next();
+ mes("[Historian Magnifier]");
+ mes("How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.");
+ next();
+ mes("[Historian Magnifier]");
+ mes("We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.");
+ close();
}
}
prt_in,171,94,3 script Assistant Naomi#edq 4_F_HUWOMAN,3,3,{
- mes "[Assistant Naomi]";
+ mes("[Assistant Naomi]");
.@name$ = strcharinfo(PC_NAME);
if (ins_nyd == 3) {
- mes "The doctor never ever tries to come back, and there're too many things to do... How can I do it all...";
- next;
- mes "[Assistant Naomi]";
- mes "Hey, you. Please move these books. Put them into shelf 3 row B.";
- next;
- mes "["+.@name$+"]";
- mes "Ah...um..I...am...";
- next;
- mes "[Assistant Naomi]";
- mes "Don't you see I am too busy? Don't hesitate. Just do it.";
- next;
- switch(select("Look busy, and take a step back.", "Help her just this once.")) {
+ mes("The doctor never ever tries to come back, and there're too many things to do... How can I do it all...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Hey, you. Please move these books. Put them into shelf 3 row B.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("Ah...um..I...am...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Don't you see I am too busy? Don't hesitate. Just do it.");
+ next();
+ switch (select("Look busy, and take a step back.", "Help her just this once.")) {
case 1:
- mes "[Assistant Naomi]";
- mes "Gosh! Where is-? Where did-? Ugh! It's so difficult!";
- close;
+ mes("[Assistant Naomi]");
+ mes("Gosh! Where is-? Where did-? Ugh! It's so difficult!");
+ close();
case 2:
- mes "[Assistant Naomi]";
- mes "Ah... if you're done moving those, then these should go in shelf 3 row B.";
- next;
- mes "["+.@name$+"]";
- mes "Ah...I...see...";
- next;
- mes "[Assistant Naomi]";
- mes "Now, I am almost done... Who are you? Are you a new assistant to Dr. Magnifier?";
- next;
- mes "["+.@name$+"]";
- mes "He asked me to bring some reports. Didn't he say anything?";
- next;
- mes "[Assistant Naomi]";
- mes "Hmm... I haven't seen him in over a year! What's he doing now?";
- next;
- mes "["+.@name$+"]";
- mes "He said that he would send a message to you... didn't you get it?";
- next;
- mes "[Assistant Naomi]";
- mes "Message? ...Let's see... I never expected him to write a message...";
- next;
- mes "[Assistant Naomi]";
- mes "I will check the mailbox, wait a minute. If you get bored read those books.";
- next;
- mes "...";
- next;
- mes "... ...";
- next;
- mes "It's too messy due to lots of stacked books and files. Dr. Magnifier looks like he has a ton of reports.";
- next;
- mes "["+.@name$+"]";
- mes "'Birth of the World', 'The Fiction of Odin's Myth', 'God's Battle Then After', 'Dreams of the Tribes'. There are a variety of books...";
- next;
- mes "...";
- next;
- mes "[Assistant Naomi]";
- mes "Oh, sorry I took so long. There was too much mail, so it took me a while to find stuff.";
- next;
- mes "[Assistant Naomi]";
- mes "He has sent me mail over 20 times. I did not know that...";
- next;
- mes "[Assistant Naomi]";
- mes "Ah, here's the message about you. He's said to share the information on research and reports.";
- next;
- mes "["+.@name$+"]";
- mes "What is the Doctor's area of expertise?";
- next;
- mes "[Assistant Naomi]";
- mes "Ever since 5 years ago, he has been curious about how the world started, and so he began his search for the God of creation.";
- next;
- mes "[Assistant Naomi]";
- mes "He researches combat between Odin and the Gods, and about the Gods' origins and life.";
- next;
- mes "["+.@name$+"]";
- mes "So, did he already know that the Rebirth of Satan Morocc has occured before?";
- next;
- mes "[Assistant Naomi]";
- mes "I can't be sure, but he thought someday it would occur. It broke out earlier than he expected though.";
- next;
- mes "["+.@name$+"]";
- mes "But Rune-Midgarts approved this research?";
- next;
- mes "[Assistant Naomi]";
- mes "Our academics are not a religion. And they too have curiosity about this world's history.";
- next;
- mes "[Assistant Naomi]";
- mes "The combat of Odin vs. the Gods, and the God's sons and their purpose... The Doctor has researched this his whole life.";
- next;
- mes "["+.@name$+"]";
- mes "But those reports haven't come out yet. Have they?";
- next;
- mes "[Assistant Naomi]";
- mes "That's why he sent you here. By the way, this isn't the first time I've heard this.";
- next;
- mes "[Assistant Naomi]";
- mes "After the establishment of the Rune-Midgarts Kingdom and Arunafeltz, the rumors have spread in secret about their tribes, myths, etc.";
- next;
- mes "[Assistant Naomi]";
- mes "Anyway, I should make sure that you read all these books, and I'll just keep doing my work.";
- next;
- mes "["+.@name$+"]";
- mes "Shouldn't I have filed the books?";
- next;
- mes "[Assistant Naomi]";
- mes "The Doctor said he will pick up the books through another person. Besides, don't you need the basic information on what to do?";
- next;
- mes "[Assistant Naomi]";
- mes "Before you go back to the Doctor, you had better read these books. So, I will go back to work.";
+ mes("[Assistant Naomi]");
+ mes("Ah... if you're done moving those, then these should go in shelf 3 row B.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("Ah...I...see...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Now, I am almost done... Who are you? Are you a new assistant to Dr. Magnifier?");
+ next();
+ mesf("[%s]", .@name$);
+ mes("He asked me to bring some reports. Didn't he say anything?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Hmm... I haven't seen him in over a year! What's he doing now?");
+ next();
+ mesf("[%s]", .@name$);
+ mes("He said that he would send a message to you... didn't you get it?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Message? ...Let's see... I never expected him to write a message...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("I will check the mailbox, wait a minute. If you get bored read those books.");
+ next();
+ mes("...");
+ next();
+ mes("... ...");
+ next();
+ mes("It's too messy due to lots of stacked books and files. Dr. Magnifier looks like he has a ton of reports.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("'Birth of the World', 'The Fiction of Odin's Myth', 'God's Battle Then After', 'Dreams of the Tribes'. There are a variety of books...");
+ next();
+ mes("...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Oh, sorry I took so long. There was too much mail, so it took me a while to find stuff.");
+ next();
+ mes("[Assistant Naomi]");
+ mes("He has sent me mail over 20 times. I did not know that...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Ah, here's the message about you. He's said to share the information on research and reports.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("What is the Doctor's area of expertise?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Ever since 5 years ago, he has been curious about how the world started, and so he began his search for the God of creation.");
+ next();
+ mes("[Assistant Naomi]");
+ mes("He researches combat between Odin and the Gods, and about the Gods' origins and life.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("So, did he already know that the Rebirth of Satan Morocc has occured before?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("I can't be sure, but he thought someday it would occur. It broke out earlier than he expected though.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("But Rune-Midgarts approved this research?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Our academics are not a religion. And they too have curiosity about this world's history.");
+ next();
+ mes("[Assistant Naomi]");
+ mes("The combat of Odin vs. the Gods, and the God's sons and their purpose... The Doctor has researched this his whole life.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("But those reports haven't come out yet. Have they?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("That's why he sent you here. By the way, this isn't the first time I've heard this.");
+ next();
+ mes("[Assistant Naomi]");
+ mes("After the establishment of the Rune-Midgarts Kingdom and Arunafeltz, the rumors have spread in secret about their tribes, myths, etc.");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Anyway, I should make sure that you read all these books, and I'll just keep doing my work.");
+ next();
+ mesf("[%s]", .@name$);
+ mes("Shouldn't I have filed the books?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("The Doctor said he will pick up the books through another person. Besides, don't you need the basic information on what to do?");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Before you go back to the Doctor, you had better read these books. So, I will go back to work.");
ins_nyd = 4;
- close;
+ close();
}
} else if (ins_nyd == 4) {
- mes "Browse around, to take a look at the books.";
- next;
- switch(select("Discovery of Heterogeneity", "Report of Indigenous Tribes")) {
+ mes("Browse around, to take a look at the books.");
+ next();
+ switch (select("Discovery of Heterogeneity", "Report of Indigenous Tribes")) {
case 1:
- mes "Satan Morocc has known that he didn't resurrect normally or by himself.";
- next;
- mes "Continuously, adventurers from Rune-Midgarts have attacked him and he is slowly losing his power. He would need more time to resurrect completely.";
- next;
- mes "Satan Morroc stopped to destroy the city of Morroc, turning it into a ruined desert, then started to rip the world apart.";
- next;
- mes "Satan Morroc was worried about those who would give chase, so he created Morocc clones to keep watch behind him.";
- next;
- mes "Modeled after Morocc, their appearance made it difficult to go around the time-space gap.";
- next;
- mes "Still the adventurers gave chase. They came from all over the world, trying to approach the Dimensional Gorge.";
- next;
- mes "The reports of these adventurers have been sent to representatives of all kingdoms, and an expedition team has been created to find out more information.";
- next;
- mes "The scientists of Schwartzwalt created a combination metal, using fragments of metals found in the dimensional gorge.";
- next;
- mes "The Schwaltzvalt Republic requested approval to find the source of the new metal, and since Rune-Midgart couldn't complete the test themselves, they finally accepted.";
- next;
- mes "They associated together to gather volunteers. The Assassin Guild was the first to volunteer.";
- next;
- mes "The Assassins have a terrible past with Satan Morroc, so they gathered 18 members to chase him down.";
- next;
- mes "About 3 hours later, all 18 members returned without any problem, and each man and woman shared the information that they had collected.";
- next;
- mes "They had discovered another world with a definitively different nature and environment. And indeed, people could also live there.";
- next;
- mes "The most surprising thing is the flow of time. The 18 assassins had stayed for about 2 weeks in there, yet they returned within 3 hours after departing.";
- next;
- mes "The last thing to be tested... was to send adventurers who volunteered to explore the new world.";
- next;
- mes "There was a flood of adventurer applications. Lots of volunteers disappeared over the dimensional gorge, and they brought back new data.";
- next;
- mes "The new world could support 3 completely different eco-systems dependant upon the race of people that lived there.";
- next;
- mes "The heterogenous phenomenon needed to be studied thoroughly and carefully in order to under the relationship between thair world and ours.";
- next;
- mes "Just when it was expected to be impossible to travel into a different world, the first page of a new chapter was opened.";
- close;
+ mes("Satan Morocc has known that he didn't resurrect normally or by himself.");
+ next();
+ mes("Continuously, adventurers from Rune-Midgarts have attacked him and he is slowly losing his power. He would need more time to resurrect completely.");
+ next();
+ mes("Satan Morroc stopped to destroy the city of Morroc, turning it into a ruined desert, then started to rip the world apart.");
+ next();
+ mes("Satan Morroc was worried about those who would give chase, so he created Morocc clones to keep watch behind him.");
+ next();
+ mes("Modeled after Morocc, their appearance made it difficult to go around the time-space gap.");
+ next();
+ mes("Still the adventurers gave chase. They came from all over the world, trying to approach the Dimensional Gorge.");
+ next();
+ mes("The reports of these adventurers have been sent to representatives of all kingdoms, and an expedition team has been created to find out more information.");
+ next();
+ mes("The scientists of Schwartzwalt created a combination metal, using fragments of metals found in the dimensional gorge.");
+ next();
+ mes("The Schwaltzvalt Republic requested approval to find the source of the new metal, and since Rune-Midgart couldn't complete the test themselves, they finally accepted.");
+ next();
+ mes("They associated together to gather volunteers. The Assassin Guild was the first to volunteer.");
+ next();
+ mes("The Assassins have a terrible past with Satan Morroc, so they gathered 18 members to chase him down.");
+ next();
+ mes("About 3 hours later, all 18 members returned without any problem, and each man and woman shared the information that they had collected.");
+ next();
+ mes("They had discovered another world with a definitively different nature and environment. And indeed, people could also live there.");
+ next();
+ mes("The most surprising thing is the flow of time. The 18 assassins had stayed for about 2 weeks in there, yet they returned within 3 hours after departing.");
+ next();
+ mes("The last thing to be tested... was to send adventurers who volunteered to explore the new world.");
+ next();
+ mes("There was a flood of adventurer applications. Lots of volunteers disappeared over the dimensional gorge, and they brought back new data.");
+ next();
+ mes("The new world could support 3 completely different eco-systems dependant upon the race of people that lived there.");
+ next();
+ mes("The heterogenous phenomenon needed to be studied thoroughly and carefully in order to under the relationship between thair world and ours.");
+ next();
+ mes("Just when it was expected to be impossible to travel into a different world, the first page of a new chapter was opened.");
+ close();
case 2:
- mes "Long ago, there wasn't a sun, moon, or stars; just empty earth... and Ymir was born. Then, by making sons, Ymir grew.";
- next;
- mes "But, his sons grew as well and he was killed by Odin, Vili, and Ve; 3 brothers, Gods, that attacked from different sides.";
- next;
- mes "At that time of Ymir's fall his blood flooded the world... killing all in it's path.";
- next;
- mes "Only Hvergelmir of the Sapha tribe escaped from this flooding of blood. And he swore vengeance in Jotunheim, which is covered with foggy snow.";
- next;
- mes "Currently, one of the Sapha tribe has been discovered from beyond the Dimensional Gorge.";
- next;
- mes "Other than the Sapha tribe, there was another tribe beyond the time-space gap, known as the Laphine.";
- next;
- mes "The Laphine tribes gathered as well for an expedition to explore the time-space gap and figure out the World Tree's strange symptoms and perharps a cure method.";
- next;
- mes "The Laphine tribe was charged with the management of Yggdrasil, to establish their lands close to Asgard, and to protect the balance of Yggdrasil's magic power.";
- next;
- mes "The Laphine tribe has never contacted anyone outside of Asgard. But since they found that Yggdrasil's power if weakening...";
- next;
- mes "They have declared they will attend to the high courts for the first time in 1000 human years, since the end of the battles of Gods vs. Magicians.";
- close;
+ mes("Long ago, there wasn't a sun, moon, or stars; just empty earth... and Ymir was born. Then, by making sons, Ymir grew.");
+ next();
+ mes("But, his sons grew as well and he was killed by Odin, Vili, and Ve; 3 brothers, Gods, that attacked from different sides.");
+ next();
+ mes("At that time of Ymir's fall his blood flooded the world... killing all in it's path.");
+ next();
+ mes("Only Hvergelmir of the Sapha tribe escaped from this flooding of blood. And he swore vengeance in Jotunheim, which is covered with foggy snow.");
+ next();
+ mes("Currently, one of the Sapha tribe has been discovered from beyond the Dimensional Gorge.");
+ next();
+ mes("Other than the Sapha tribe, there was another tribe beyond the time-space gap, known as the Laphine.");
+ next();
+ mes("The Laphine tribes gathered as well for an expedition to explore the time-space gap and figure out the World Tree's strange symptoms and perharps a cure method.");
+ next();
+ mes("The Laphine tribe was charged with the management of Yggdrasil, to establish their lands close to Asgard, and to protect the balance of Yggdrasil's magic power.");
+ next();
+ mes("The Laphine tribe has never contacted anyone outside of Asgard. But since they found that Yggdrasil's power if weakening...");
+ next();
+ mes("They have declared they will attend to the high courts for the first time in 1000 human years, since the end of the battles of Gods vs. Magicians.");
+ close();
}
} else {
- mes "The doctor never ever tries to come back, and there're too many things to do... How can I do it all...";
- next;
- mes "[Assistant Naomi]";
- mes "Don't you see that I'm too busy? Don't dawdle, just go!";
- close;
+ mes("The doctor never ever tries to come back, and there're too many things to do... How can I do it all...");
+ next();
+ mes("[Assistant Naomi]");
+ mes("Don't you see that I'm too busy? Don't dawdle, just go!");
+ close();
}
}
splendide,198,178,3 script Grumbling Soldier#edq 4_M_FAIRYSOLDIER,3,3,{
- mes "[Grumbling Soldier]";
- if (isequipped(2782) == 1) {
- mes "Nowadays, the world has turned unstable. I can't even fly comfortably anymore.";
- next;
+ mes("[Grumbling Soldier]");
+ if (isequipped(Ring_Of_Wise_King) == 1) {
+ mes("Nowadays, the world has turned unstable. I can't even fly comfortably anymore.");
+ next();
if (ins_nyd == 5) {
- switch(select("What's with the cave up north?", "Who are the Sapha tribesmen?", "Hmm. We can talk later.")) {
+ switch (select("What's with the cave up north?", "Who are the Sapha tribesmen?", "Hmm. We can talk later.")) {
case 1:
- mes "[Grumbling Soldier]";
- mes "What? If you wander around there... you might return with injuries.";
- next;
- mes "[Grumbling Soldier]";
- mes "I don't know exactly how to explain it, but it's like it has a bad mood. There are lots of terrible monsters there.";
- next;
- mes "[Grumbling Soldier]";
- mes "They whisper to each other, so... something is there... But I don't care...";
- next;
- mes "[Grumbling Soldier]";
- mes "Might be... those Sapha tribesmen have dug in the cave before... They do have a special talent for digging.";
+ mes("[Grumbling Soldier]");
+ mes("What? If you wander around there... you might return with injuries.");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("I don't know exactly how to explain it, but it's like it has a bad mood. There are lots of terrible monsters there.");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("They whisper to each other, so... something is there... But I don't care...");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("Might be... those Sapha tribesmen have dug in the cave before... They do have a special talent for digging.");
ins_nyd = 51;
- close;
+ close();
case 2:
- mes "[Grumbling Soldier]";
- mes "Oh! It is because of them that we have been living here, a lowdown and dirty city, for over one hundred years.";
- next;
- mes "[Grumbling Soldier]";
- mes "They don't care if there's trouble with the Yggdrasil.";
- next;
- mes "[Grumbling Soldier]";
- mes "They are surely full of bad ideas, so... they have destroyed the Yggdrasil's root.";
- next;
- mes "[Grumbling Soldier]";
- mes "We are here to make sure that the Sapha don't make things worse.";
- close;
+ mes("[Grumbling Soldier]");
+ mes("Oh! It is because of them that we have been living here, a lowdown and dirty city, for over one hundred years.");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("They don't care if there's trouble with the Yggdrasil.");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("They are surely full of bad ideas, so... they have destroyed the Yggdrasil's root.");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("We are here to make sure that the Sapha don't make things worse.");
+ close();
case 3:
- close;
+ close();
}
} else {
- mes "[Grumbling Soldier]";
- mes "Nowadays, the world has turned unstable. I can't even fly comfortably anymore.";
- next;
- mes "[Grumbling Soldier]";
- mes "What can you expect when Manuk giants start to dig into the world to destroy the Yggdrasil...";
- next;
- mes "[Grumbling Soldier]";
- mes "And the worst thing is... that strange things are strutting along the streets of the towns...";
- next;
- mes "[Grumbling Soldier]";
- mes "Yes, you... What do you think about the way the government is handling this...?";
- next;
- mes "[Grumbling Soldier]";
- mes "Although they ignore your track record, still, one should be careful...";
- close;
+ mes("[Grumbling Soldier]");
+ mes("Nowadays, the world has turned unstable. I can't even fly comfortably anymore.");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("What can you expect when Manuk giants start to dig into the world to destroy the Yggdrasil...");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("And the worst thing is... that strange things are strutting along the streets of the towns...");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("Yes, you... What do you think about the way the government is handling this...?");
+ next();
+ mes("[Grumbling Soldier]");
+ mes("Although they ignore your track record, still, one should be careful...");
+ close();
}
} else {
- mes "SeLarsmar Di marThusVil U SeMushVohl";
- close;
+ mes("SeLarsmar Di marThusVil U SeMushVohl");
+ close();
}
}
splendide,240,164,3 script Sighing Soldier#edq 4_M_FAIRYSOLDIER2,3,3,{
- mes "[Sighing Soldier]";
- if (isequipped(2782) == 1) {
- mes "When will we be finished with this combat with the Sapha? Ugghhhh...";
- next;
+ mes("[Sighing Soldier]");
+ if (isequipped(Ring_Of_Wise_King) == 1) {
+ mes("When will we be finished with this combat with the Sapha? Ugghhhh...");
+ next();
if (ins_nyd == 5) {
- switch(select("What's with the cave up north?", "Who are the Sapha tribesmen?", "Hmm. We can talk later.")) {
+ switch (select("What's with the cave up north?", "Who are the Sapha tribesmen?", "Hmm. We can talk later.")) {
case 1:
- mes "[Sighing Soldier]";
- mes "Well... I'm not sure, but we have avoided going to that area.";
- next;
- mes "[Sighing Soldier]";
- mes "Sometimes, the dispatched researchers hang around here... I feel bad that there's nothing to see... without any reason...";
- next;
- mes "[Sighing Soldier]";
- mes "But the command officers make sure that there's something hidden in there.";
- next;
- mes "[Sighing Soldier]";
- mes "We don't know if the monsters there are strong, so we never checked it out. But on a personal level, nobody wants to go there...";
+ mes("[Sighing Soldier]");
+ mes("Well... I'm not sure, but we have avoided going to that area.");
+ next();
+ mes("[Sighing Soldier]");
+ mes("Sometimes, the dispatched researchers hang around here... I feel bad that there's nothing to see... without any reason...");
+ next();
+ mes("[Sighing Soldier]");
+ mes("But the command officers make sure that there's something hidden in there.");
+ next();
+ mes("[Sighing Soldier]");
+ mes("We don't know if the monsters there are strong, so we never checked it out. But on a personal level, nobody wants to go there...");
ins_nyd = 51;
- close;
+ close();
case 2:
- mes "[Sighing Soldier]";
- mes "I don't know what others think about it... but we've had some trouble with our attitude against the Sapha tribes.";
- next;
- mes "[Sighing Soldier]";
- mes "We didn't try to solve the problems with talk. We attacked them first.";
- next;
- mes "[Sighing Soldier]";
- mes "Maybe... our command officers don't want to accept other species different than us...";
- next;
- mes "[Sighing Soldier]";
- mes "Don't misunderstand... Recently, we have talked about your particular species and our commanders feel grateful to you.";
- next;
- mes "[Sighing Soldier]";
- mes "Anyway... I'm just exhausted during this useless and nerve-wracking situation... Sigh.";
- close;
+ mes("[Sighing Soldier]");
+ mes("I don't know what others think about it... but we've had some trouble with our attitude against the Sapha tribes.");
+ next();
+ mes("[Sighing Soldier]");
+ mes("We didn't try to solve the problems with talk. We attacked them first.");
+ next();
+ mes("[Sighing Soldier]");
+ mes("Maybe... our command officers don't want to accept other species different than us...");
+ next();
+ mes("[Sighing Soldier]");
+ mes("Don't misunderstand... Recently, we have talked about your particular species and our commanders feel grateful to you.");
+ next();
+ mes("[Sighing Soldier]");
+ mes("Anyway... I'm just exhausted during this useless and nerve-wracking situation... Sigh.");
+ close();
case 3:
- close;
+ close();
}
} else {
- mes "[Sighing Soldier]";
- mes "When will we be finished with this combat with the Sapha? Ugghhhh...";
- next;
- mes "[Sighing Soldier]";
- mes "Frankly, I don't think of you or any Sapha is our enemy. Sigh...";
- next;
- mes "[Sighing Soldier]";
- mes "Is there no way to resolve this by communicating? There's no meaning in useless combat! Geez.";
- close;
+ mes("[Sighing Soldier]");
+ mes("When will we be finished with this combat with the Sapha? Ugghhhh...");
+ next();
+ mes("[Sighing Soldier]");
+ mes("Frankly, I don't think of you or any Sapha is our enemy. Sigh...");
+ next();
+ mes("[Sighing Soldier]");
+ mes("Is there no way to resolve this by communicating? There's no meaning in useless combat! Geez.");
+ close();
}
} else {
- mes "VohlLarsmar Ha DielCyatas";
- close;
+ mes("VohlLarsmar Ha DielCyatas");
+ close();
}
}
spl_in01,109,60,3 script Commander Lebiordirr#edq 4_F_FAIRY,3,3,{
- mes "[Commander Lebiordirr]";
- if (isequipped(2782) == 1) {
+ mes("[Commander Lebiordirr]");
+ if (isequipped(Ring_Of_Wise_King) == 1) {
if (ins_nyd == 51) {
- mes "Are you...? Are you the one collecting information from my soldiers...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "You should be cautious. Our tribe has respected the existence of you humans but...";
- next;
- mes "[Commander Lebiordirr]";
- mes "I've taken a great risk in allowing you in here. So be wary.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Don't attract too much attention because that would make your people look bad.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Now, we don't need to talk much about this, so just go back where you came from.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Unless you have any messages for me...? Your face says you do...";
- next;
- if(select("No. Nothing. We can talk later.", "I intend to stay. For good reasons.")==1) close;
- mes "[Splendide Guard]";
- mes "Sir, I can drag this pest out right now.";
- next;
- mes "[Commander Lebiordirr]";
- mes "No. Let's hear an explanation. Good? Now, if you want...";
- next;
- mes "[Commander Lebiordirr]";
- mes "I have known that, recently, time has broken... so, you're here exploring for a solution, no?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Our tribe has respected you, so just forget about the searching and exploring around here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "I heard that you are to search for any treasure in the closed cave to the north.";
- next;
- mes "[Commander Lebiordirr]";
- mes "That place is banned by order of the Laphine tribe. So, people can't just go there without permission.";
- next;
- mes "[Commander Lebiordirr]";
- mes "If you can't follow this rule, I will stop associating with you and ban all of your people from here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Now, if you understand this, inform your friends.";
+ mes("Are you...? Are you the one collecting information from my soldiers...?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("You should be cautious. Our tribe has respected the existence of you humans but...");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("I've taken a great risk in allowing you in here. So be wary.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Don't attract too much attention because that would make your people look bad.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Now, we don't need to talk much about this, so just go back where you came from.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Unless you have any messages for me...? Your face says you do...");
+ next();
+ if (select("No. Nothing. We can talk later.", "I intend to stay. For good reasons.") == 1)
+ close();
+ mes("[Splendide Guard]");
+ mes("Sir, I can drag this pest out right now.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("No. Let's hear an explanation. Good? Now, if you want...");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("I have known that, recently, time has broken... so, you're here exploring for a solution, no?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Our tribe has respected you, so just forget about the searching and exploring around here.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("I heard that you are to search for any treasure in the closed cave to the north.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("That place is banned by order of the Laphine tribe. So, people can't just go there without permission.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("If you can't follow this rule, I will stop associating with you and ban all of your people from here.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Now, if you understand this, inform your friends.");
ins_nyd = 61;
- close;
+ close();
} else if (ins_nyd == 61) {
- mes "If you can't follow this rule, I will stop associating with you and ban all of your people from here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Now, if you understand this, inform your friends.";
- close;
+ mes("If you can't follow this rule, I will stop associating with you and ban all of your people from here.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Now, if you understand this, inform your friends.");
+ close();
} else if (ins_nyd == 81) {
- mes "Why have you come back, outsider?";
- next;
+ mes("Why have you come back, outsider?");
+ next();
select("To ask the Laphines about exploring...");
- mes "[Commander Lebiordirr]";
- mes "Exploring what? Choose your words wisely?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Do we not understand each other? What do you want?";
- next;
+ mes("[Commander Lebiordirr]");
+ mes("Exploring what? Choose your words wisely?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Do we not understand each other? What do you want?");
+ next();
select("I must explore the cave.");
- mes "[Commander Lebiordirr]";
- mes "That means... that you are ignoring my warning? Is this your decision or are you just following orders?";
- next;
+ mes("[Commander Lebiordirr]");
+ mes("That means... that you are ignoring my warning? Is this your decision or are you just following orders?");
+ next();
select("I'm just following orders");
- mes "[Commander Lebiordirr]";
- mes "Are you trying to insult me on purpose, outsider?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Why do you want to explore? It better be a very good reason.";
- next;
+ mes("[Commander Lebiordirr]");
+ mes("Are you trying to insult me on purpose, outsider?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Why do you want to explore? It better be a very good reason.");
+ next();
select("It's about Dr. Magnifier's report...");
- mes "[Commander Lebiordirr]";
- mes "So... What do I care about an outsider's report?";
- next;
- mes "[Commander Lebiordirr]";
- mes "To protect the Yggdrasil! That's the Laphine's fate. Can you say that about yourself?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Do you have any proof of your birth with Odin and Yggdrasil's blessings?";
- next;
- mes "[Commander Lebiordirr]";
- mes "I shouldn't say anymore. Please don't take this as being rude but, please go now!";
- next;
+ mes("[Commander Lebiordirr]");
+ mes("So... What do I care about an outsider's report?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("To protect the Yggdrasil! That's the Laphine's fate. Can you say that about yourself?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Do you have any proof of your birth with Odin and Yggdrasil's blessings?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("I shouldn't say anymore. Please don't take this as being rude but, please go now!");
+ next();
select("Then I'll ask the Sapha for help.");
- mes "[Commander Lebiordirr]";
- mes "What are you talking about, outsider?";
- next;
- mes "[Splendide Guard]";
- mes "Sir, I can get rid of this rude outsider if you wish?";
- next;
- mes "[Commander Lebiordirr]";
- mes "No, wait... The Sapha tribesmen know the meaning of that place? Did you ask to associate with them?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Ah... How tricky... Are you testing us?";
- next;
- mes "[Splendide Guard]";
- mes "Calm down, sir. I will throw this outsider into prison.";
- next;
- mes "[Commander Lebiordirr]";
- mes "No... No, wait. Ok, I will accept it. I can accept your admission into the Holy Sekos.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Okay. If you are a servant of the Yggdrasil as you claim to be, I will allow you admission. But I am not responsible for your actions.";
- next;
- mes "[Commander Lebiordirr]";
- mes "And make sure that if you find anything out of the ordinary in there, that you share it with us!";
- next;
+ mes("[Commander Lebiordirr]");
+ mes("What are you talking about, outsider?");
+ next();
+ mes("[Splendide Guard]");
+ mes("Sir, I can get rid of this rude outsider if you wish?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("No, wait... The Sapha tribesmen know the meaning of that place? Did you ask to associate with them?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Ah... How tricky... Are you testing us?");
+ next();
+ mes("[Splendide Guard]");
+ mes("Calm down, sir. I will throw this outsider into prison.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("No... No, wait. Ok, I will accept it. I can accept your admission into the Holy Sekos.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Okay. If you are a servant of the Yggdrasil as you claim to be, I will allow you admission. But I am not responsible for your actions.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("And make sure that if you find anything out of the ordinary in there, that you share it with us!");
+ next();
select("But of course!");
- mes "[Commander Lebiordirr]";
- mes "So... since I have agreed to allow your exploration... Arioss, help them, and take the results.";
- next;
- mes "[Aide Arioss]";
- mes "Sir... are you sure? This is an invasion of the Holy Sekos...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Invasion is a harsh word. I am allowing them entrance. Better them than a dirty giant. It might just save our lives...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Here, outsider. Arioss will explain the situation with the giants. Talk with him...";
+ mes("[Commander Lebiordirr]");
+ mes("So... since I have agreed to allow your exploration... Arioss, help them, and take the results.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Sir... are you sure? This is an invasion of the Holy Sekos...");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Invasion is a harsh word. I am allowing them entrance. Better them than a dirty giant. It might just save our lives...");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Here, outsider. Arioss will explain the situation with the giants. Talk with him...");
ins_nyd = 91;
- close;
- } else if ((ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
- mes "Outsider. Arioss here will explain the situation with the giants, talk with him...";
- close;
- } else if ((ins_nyd == 72) || (ins_nyd == 82) || (ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112) || (ins_nyd == 122) || (ins_nyd == 132)) {
- mes "Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.";
- next;
- mes "[Commander Lebiordirr]";
- mes "If you are cautious with your actions, I won't place any harm on you. Fare well.";
- close;
+ close();
+ } else if (ins_nyd == 91 || ins_nyd == 101 || ins_nyd == 111 || ins_nyd == 200 || ins_nyd == 201 || ins_nyd == 202) {
+ mes("Outsider. Arioss here will explain the situation with the giants, talk with him...");
+ close();
+ } else if (ins_nyd == 72 || ins_nyd == 82 || ins_nyd == 92 || ins_nyd == 102 || ins_nyd == 112 || ins_nyd == 122 || ins_nyd == 132) {
+ mes("Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("If you are cautious with your actions, I won't place any harm on you. Fare well.");
+ close();
} else if (ins_nyd == 203) {
- mes "I was waiting for you. You came back safe, that's good news. Did you find anything?";
- next;
+ mes("I was waiting for you. You came back safe, that's good news. Did you find anything?");
+ next();
select("Explain about the guardian Nidhoggur's leave.");
- mes "[Commander Lebiordirr]";
- mes "What? The Guardian is not in his nest...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "And because of his disppearance, the Guardian's Shadow is currently destorying the roots of the World Tree...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "That's unbelievable. You must be insulting the Guardian's and our pride. I did not provide you with our help for that.";
- next;
- mes "[Aide Arioss]";
- mes "It's not like that, Commander, they speak the truth.";
- next;
- mes "[Commander Lebiordirr]";
- mes "What are you saying? Arioss, do not forget your place as the Guardian's priest.";
- next;
- mes "[Aide Arioss]";
- mes "Even though I have not seen it with my own eyes, this does explain why we lost communication with the great World Tree Yggdrasil.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Do not speak of His Highness, the World Tree Yggdrasil's name so lightly.";
- next;
+ mes("[Commander Lebiordirr]");
+ mes("What? The Guardian is not in his nest...?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("And because of his disppearance, the Guardian's Shadow is currently destorying the roots of the World Tree...?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("That's unbelievable. You must be insulting the Guardian's and our pride. I did not provide you with our help for that.");
+ next();
+ mes("[Aide Arioss]");
+ mes("It's not like that, Commander, they speak the truth.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("What are you saying? Arioss, do not forget your place as the Guardian's priest.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Even though I have not seen it with my own eyes, this does explain why we lost communication with the great World Tree Yggdrasil.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Do not speak of His Highness, the World Tree Yggdrasil's name so lightly.");
+ next();
select("Pass along World Tree Yggdrasil's words.");
- mes "[Commander Lebiordirr]";
- mes "His Highness, the World Tree Yggdrasil, said that?";
- next;
- mes "[Commander Lebiordirr]";
- mes "The reason behind all of this... is not because of the Sapha tribe, but because of the sudden leave of the Guardian? And the Guaridan has given up on his identity?";
- next;
- mes "[Commander Lebiordirr]";
- mes "This must be reported... reported to the High Priest of Alfheim... Unbelievable.";
- next;
- mes "[Aide Arioss]";
- mes "Commander... do we need to alert the rest of the tribe...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "You don't need to worry about this, Arioss. As commander, I will handle it. You just pretend nothing happened...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Strange one, thank you for your cooperation in such situations... Please forget what has happened today...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Arioss, please compensate this strange one for the help. I need to go rest...";
- next;
- mes "[Aide Arioss]";
- mes "Commander...";
+ mes("[Commander Lebiordirr]");
+ mes("His Highness, the World Tree Yggdrasil, said that?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("The reason behind all of this... is not because of the Sapha tribe, but because of the sudden leave of the Guardian? And the Guaridan has given up on his identity?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("This must be reported... reported to the High Priest of Alfheim... Unbelievable.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Commander... do we need to alert the rest of the tribe...?");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("You don't need to worry about this, Arioss. As commander, I will handle it. You just pretend nothing happened...");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Strange one, thank you for your cooperation in such situations... Please forget what has happened today...");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Arioss, please compensate this strange one for the help. I need to go rest...");
+ next();
+ mes("[Aide Arioss]");
+ mes("Commander...");
ins_nyd = 121;
- close;
- } else if ((ins_nyd == 121) || (ins_nyd == 131)) {
- mes "Strange one, thank you for your cooperation in such situations... Please forget what has happened today...";
- close;
+ close();
+ } else if (ins_nyd == 121 || ins_nyd == 131) {
+ mes("Strange one, thank you for your cooperation in such situations... Please forget what has happened today...");
+ close();
} else {
- mes "Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.";
- next;
- mes "[Commander Lebiordirr]";
- mes "If you are cautious with your actions, I won't place any harm on you. Fare well.";
- close;
+ mes("Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.");
+ next();
+ mes("[Commander Lebiordirr]");
+ mes("If you are cautious with your actions, I won't place any harm on you. Fare well.");
+ close();
}
} else {
- mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee...";
- close;
+ mes("ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee...");
+ close();
}
}
spl_in01,104,56,3 script Aide Arioss#edq 4_F_FAIRYKID2,3,3,{
- mes "[Aide Arioss]";
- if (isequipped(2782) == 1) {
+ mes("[Aide Arioss]");
+ if (isequipped(Ring_Of_Wise_King) == 1) {
if (ins_nyd == 91) {
- mes "Sigh, since it's Commander Lebiordirr's wish, I will cooperate with you...";
- next;
- mes "[Aide Arioss]";
- mes "You want to go there to find out exactly what that place is?";
- next;
- mes "[Aide Arioss]";
- mes "Alright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.";
- next;
+ mes("Sigh, since it's Commander Lebiordirr's wish, I will cooperate with you...");
+ next();
+ mes("[Aide Arioss]");
+ mes("You want to go there to find out exactly what that place is?");
+ next();
+ mes("[Aide Arioss]");
+ mes("Alright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.");
+ next();
select("Guardian's Nest?");
- mes "[Aide Arioss]";
- mes "Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...";
- next;
- mes "[Aide Arioss]";
- mes "Only a marked guardian's servant from the Laphine tribe is allowed to enter.";
- next;
- mes "[Aide Arioss]";
- mes "That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...";
- next;
- mes "[Aide Arioss]";
- mes "To obtain more minerals, they started to dig with madness.";
- next;
- mes "[Aide Arioss]";
- mes "In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.";
- next;
- mes "[Aide Arioss]";
- mes "After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.";
- next;
- mes "[Aide Arioss]";
- mes "Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.";
- next;
- mes "[Aide Arioss]";
- mes "During this time, your people have travelled through the space-time gap to this land.";
- next;
- mes "[Aide Arioss]";
- mes "Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...";
- next;
- mes "[Aide Arioss]";
- mes "Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.";
- next;
- mes "[Aide Arioss]";
- mes "It's very insulting to our pride... but if you can help us enter that place again, and speak to the Guardian, maybe we can find a solution...";
- next;
- mes "[Aide Arioss]";
- mes "Then we'll leave it to you. As for your request, I will do my best to cooperate.";
- next;
- mes "[Aide Arioss]";
- mes "I have already told you what you wanted to know... If you need anything else, just let me know.";
+ mes("[Aide Arioss]");
+ mes("Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...");
+ next();
+ mes("[Aide Arioss]");
+ mes("Only a marked guardian's servant from the Laphine tribe is allowed to enter.");
+ next();
+ mes("[Aide Arioss]");
+ mes("That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...");
+ next();
+ mes("[Aide Arioss]");
+ mes("To obtain more minerals, they started to dig with madness.");
+ next();
+ mes("[Aide Arioss]");
+ mes("In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.");
+ next();
+ mes("[Aide Arioss]");
+ mes("After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.");
+ next();
+ mes("[Aide Arioss]");
+ mes("During this time, your people have travelled through the space-time gap to this land.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...");
+ next();
+ mes("[Aide Arioss]");
+ mes("Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.");
+ next();
+ mes("[Aide Arioss]");
+ mes("It's very insulting to our pride... but if you can help us enter that place again, and speak to the Guardian, maybe we can find a solution...");
+ next();
+ mes("[Aide Arioss]");
+ mes("Then we'll leave it to you. As for your request, I will do my best to cooperate.");
+ next();
+ mes("[Aide Arioss]");
+ mes("I have already told you what you wanted to know... If you need anything else, just let me know.");
ins_nyd = 101;
- close;
+ close();
} else if (ins_nyd == 101) {
- mes "Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?";
- next;
- mes "[Aide Arioss]";
- mes "That's because only the ones chosen by the Guardian may enter.";
- next;
- mes "[Aide Arioss]";
- mes "We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.";
- next;
- mes "[Aide Arioss]";
- mes "Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.";
- next;
- mes "[Aide Arioss]";
- mes "One was killed in our last war with the Sapha tribe... and the other has been taken captive.";
- next;
- mes "[Aide Arioss]";
- mes "I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.";
+ mes("Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?");
+ next();
+ mes("[Aide Arioss]");
+ mes("That's because only the ones chosen by the Guardian may enter.");
+ next();
+ mes("[Aide Arioss]");
+ mes("We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.");
+ next();
+ mes("[Aide Arioss]");
+ mes("One was killed in our last war with the Sapha tribe... and the other has been taken captive.");
+ next();
+ mes("[Aide Arioss]");
+ mes("I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.");
specialeffect(EF_HOLYHIT, AREA, playerattached());
- next;
- mes "[Aide Arioss]";
- mes "Also, remember this spell, it's needed to open the gate of the Guardian.";
- next;
- mes "[Aide Arioss]";
- mes "AnomarDu Ha OdesUdenVer Ie ";
- next;
- mes "[Aide Arioss]";
- mes "remuAlaAsh Mu ModtasAn Yu Dur";
- next;
- mes "[Aide Arioss]";
- mes "TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ";
- next;
- mes "[Aide Arioss]";
- mes "Go find the fairy guarding the gate, and say this spell.";
- next;
- mes "[Aide Arioss]";
- mes "The proof and the spell will confirm that you are one of the Guardian's servants.";
- next;
- mes "[Aide Arioss]";
- mes "Please meet the Guardian, and come back with an answer to everything. I believe in you.";
+ next();
+ mes("[Aide Arioss]");
+ mes("Also, remember this spell, it's needed to open the gate of the Guardian.");
+ next();
+ mes("[Aide Arioss]");
+ mes("AnomarDu Ha OdesUdenVer Ie ");
+ next();
+ mes("[Aide Arioss]");
+ mes("remuAlaAsh Mu ModtasAn Yu Dur");
+ next();
+ mes("[Aide Arioss]");
+ mes("TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ");
+ next();
+ mes("[Aide Arioss]");
+ mes("Go find the fairy guarding the gate, and say this spell.");
+ next();
+ mes("[Aide Arioss]");
+ mes("The proof and the spell will confirm that you are one of the Guardian's servants.");
+ next();
+ mes("[Aide Arioss]");
+ mes("Please meet the Guardian, and come back with an answer to everything. I believe in you.");
ins_nyd = 111;
- close;
- } else if ((ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
- mes "Please meet with the Guardian and take a wise answer from him. I will trust you.";
- close;
- } else if ((ins_nyd == 72) || (ins_nyd == 82) || (ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112)) {
- mes "... ...";
- next;
- mes "Not even caring about this a single bit? What a stupid woman...";
- close;
+ close();
+ } else if (ins_nyd == 101 || ins_nyd == 111 || ins_nyd == 200 || ins_nyd == 201 || ins_nyd == 202) {
+ mes("Please meet with the Guardian and take a wise answer from him. I will trust you.");
+ close();
+ } else if (ins_nyd == 72 || ins_nyd == 82 || ins_nyd == 92 || ins_nyd == 102 || ins_nyd == 112) {
+ mes("... ...");
+ next();
+ mes("Not even caring about this a single bit? What a stupid woman...");
+ close();
} else if (ins_nyd == 121) {
- mes "Things have actually become like this... as priests of the Guardian, it's our responsibility...";
- next;
- mes "[Aide Arioss]";
- mes "I represent the entire Laphine tribe, and show you our gratitude. This must all be very hard for our commander...";
- next;
- mes "[Aide Arioss]";
- mes "It can't compare with the effort you have put in for us... but please accept our token of friendship.";
- getexp 1500000,350000;
- getitem Splendide_Coin,10;
+ mes("Things have actually become like this... as priests of the Guardian, it's our responsibility...");
+ next();
+ mes("[Aide Arioss]");
+ mes("I represent the entire Laphine tribe, and show you our gratitude. This must all be very hard for our commander...");
+ next();
+ mes("[Aide Arioss]");
+ mes("It can't compare with the effort you have put in for us... but please accept our token of friendship.");
+ getexp(1500000, 350000);
+ getitem(Splendide_Coin, 10);
ins_nyd = 131;
- mes "[Aide Arioss]";
- mes "If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.";
- close;
+ mes("[Aide Arioss]");
+ mes("If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.");
+ close();
} else if (ins_nyd == 131) {
- mes "If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.";
- close;
+ mes("If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.");
+ close();
} else {
- mes "... ...";
- next;
- mes "Never give attention to... um... a blunt woman...";
- close;
+ mes("... ...");
+ next();
+ mes("Never give attention to... um... a blunt woman...");
+ close();
}
} else {
- mes "AmanVilShar Ie DorLuShar Mu Re";
- close;
+ mes("AmanVilShar Ie DorLuShar Mu Re");
+ close();
}
}
spl_in01,110,21,0 script trap#s_edq FAKE_NPC,10,10,{
OnTouch_:
- if ((isequipped(2782) == 1) && (ins_nyd == 51)) {
- mes "[Splendide Guard]";
- mes "That man is currently under arrest.";
- next;
- mes "[Splendide Guard]";
- mes "You'd better behave, Aide Arioss says that different races shall be treated the same way.";
- warp "spl_in01",109,58;
- close;
+ if (isequipped(Ring_Of_Wise_King) == 1 && ins_nyd == 51) {
+ mes("[Splendide Guard]");
+ mes("That man is currently under arrest.");
+ next();
+ mes("[Splendide Guard]");
+ mes("You'd better behave, Aide Arioss says that different races shall be treated the same way.");
+ warp("spl_in01", 109, 58);
+ close();
}
end;
}
spl_in01,101,52,5 script Splendide Guard#1_edq 4_M_FAIRYSOLDIER,1,1,{
- mes "[Splendide Guard]";
- if (isequipped(2782) == 1) mes "This is the Splendide office. Don't act impolitely.";
- else mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ";
- close;
+ mes("[Splendide Guard]");
+ if (isequipped(Ring_Of_Wise_King) == 1)
+ mes("This is the Splendide office. Don't act impolitely.");
+ else
+ mes("ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ");
+ close();
}
spl_in01,118,52,3 script Splendide Guard#2_edq 4_M_FAIRYSOLDIER,1,1,{
- mes "[Splendide Guard]";
- if (isequipped(2782) == 1) mes "This is the Splendide office. Don't act impolitely.";
- else mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ";
- close;
+ mes("[Splendide Guard]");
+ if (isequipped(Ring_Of_Wise_King) == 1)
+ mes("This is the Splendide office. Don't act impolitely.");
+ else
+ mes("ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ");
+ close();
}
man_in01,311,57,3 script Neat Etorr#edq 4_MAN_NITT,3,3,{
- mes "[Neat Etorr]";
- if (isequipped(2782) == 1) {
+ mes("[Neat Etorr]");
+ if (isequipped(Ring_Of_Wise_King) == 1) {
if (ins_nyd == 52) {
- mes "Guest from the other world, please excuse our rudeness...";
- next;
- mes "[Neat Etorr]";
- mes "As the leader of the Sapha tribe, I have something very important to tell you. That is why I asked for you...";
- next;
- mes "[Neat Etorr]";
- mes "Your race has come to this land not long ago through the space-time gap.";
- next;
- mes "[Neat Etorr]";
- mes "You should have already seen what is going on. We have been at war with the Laphine tribe for a very long time.";
- next;
- mes "[Neat Etorr]";
- mes "Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.";
- next;
- mes "[Neat Etorr]";
- mes "I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.";
- next;
- if(select("Leave quietly.", "Don't know what he's talking about, and ask for details.")==1) close;
- mes "[Manuk Field Elite Soldier]";
- mes "Are we really just letting these people go after they have stirred up problems on our land?";
- next;
- mes "[Neat Etorr]";
- mes "After what happened, I don't think they know what else they can do. Let me explain.";
- next;
- mes "[Neat Etorr]";
- mes "For now, we have acknowledged your race, and have been tolerant towards your activities.";
- next;
- mes "[Neat Etorr]";
- mes "But we have recently started to suspect you of being the Laphine tribe's eyes and ears.";
- next;
- mes "[Neat Etorr]";
- mes "Not long ago, We have heard that you have found remains in an abandoned cave in the north, and have been conducting investigations and researches regarding it.";
- next;
- mes "[Neat Etorr]";
- mes "We have captured a Laphine tribe priest during the last war, and we have heard that you have had contact with said captive.";
- next;
- mes "[Neat Etorr]";
- mes "That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.";
- next;
- mes "[Neat Etorr]";
- mes "For your people, who have no direct connections, it is not a place satisfy your curiosity. I hope that you stop your investigations, and mind your own business.";
- next;
- mes "[Neat Etorr]";
- mes "If you don't accept our request, then do not expect any cooperations between our races in the future.";
- next;
- mes "[Neat Etorr]";
- mes "Because of the war against the Laphine tribe, everything is a mess. But even then, we cannot allow a foreign race to interfere.";
- next;
- mes "[Neat Etorr]";
- mes "You have heard it all, now please report back to your race.";
+ mes("Guest from the other world, please excuse our rudeness...");
+ next();
+ mes("[Neat Etorr]");
+ mes("As the leader of the Sapha tribe, I have something very important to tell you. That is why I asked for you...");
+ next();
+ mes("[Neat Etorr]");
+ mes("Your race has come to this land not long ago through the space-time gap.");
+ next();
+ mes("[Neat Etorr]");
+ mes("You should have already seen what is going on. We have been at war with the Laphine tribe for a very long time.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.");
+ next();
+ mes("[Neat Etorr]");
+ mes("I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.");
+ next();
+ if (select("Leave quietly.", "Don't know what he's talking about, and ask for details.") == 1)
+ close();
+ mes("[Manuk Field Elite Soldier]");
+ mes("Are we really just letting these people go after they have stirred up problems on our land?");
+ next();
+ mes("[Neat Etorr]");
+ mes("After what happened, I don't think they know what else they can do. Let me explain.");
+ next();
+ mes("[Neat Etorr]");
+ mes("For now, we have acknowledged your race, and have been tolerant towards your activities.");
+ next();
+ mes("[Neat Etorr]");
+ mes("But we have recently started to suspect you of being the Laphine tribe's eyes and ears.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Not long ago, We have heard that you have found remains in an abandoned cave in the north, and have been conducting investigations and researches regarding it.");
+ next();
+ mes("[Neat Etorr]");
+ mes("We have captured a Laphine tribe priest during the last war, and we have heard that you have had contact with said captive.");
+ next();
+ mes("[Neat Etorr]");
+ mes("That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.");
+ next();
+ mes("[Neat Etorr]");
+ mes("For your people, who have no direct connections, it is not a place satisfy your curiosity. I hope that you stop your investigations, and mind your own business.");
+ next();
+ mes("[Neat Etorr]");
+ mes("If you don't accept our request, then do not expect any cooperations between our races in the future.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Because of the war against the Laphine tribe, everything is a mess. But even then, we cannot allow a foreign race to interfere.");
+ next();
+ mes("[Neat Etorr]");
+ mes("You have heard it all, now please report back to your race.");
ins_nyd = 62;
- close;
+ close();
} else if (ins_nyd == 62) {
- mes "That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.";
- next;
- mes "[Neat Etorr]";
- mes "For your people, who have no direct connections, it is not a place to satisfy your curiosity. I hope that you stop your investigations, and mind your own business.";
- next;
- mes "[Neat Etorr]";
- mes "If you don't accept our request, then do not expect any cooperations between our races in the future.";
- close;
+ mes("That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.");
+ next();
+ mes("[Neat Etorr]");
+ mes("For your people, who have no direct connections, it is not a place to satisfy your curiosity. I hope that you stop your investigations, and mind your own business.");
+ next();
+ mes("[Neat Etorr]");
+ mes("If you don't accept our request, then do not expect any cooperations between our races in the future.");
+ close();
} else if (ins_nyd == 72) {
- mes "Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.";
- next;
- mes "[Neat Etorr]";
- mes "I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.";
- close;
+ mes("Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.");
+ next();
+ mes("[Neat Etorr]");
+ mes("I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.");
+ close();
} else if (ins_nyd == 82) {
- mes "Do you need me for something, strange one?";
- next;
+ mes("Do you need me for something, strange one?");
+ next();
select("Received invitation from the Sapha tribe to cooperate and investigate.");
- mes "[Neat Etorr]";
- mes "Cooperate and investigate? What do you mean?";
- next;
- mes "[Neat Etorr]";
- mes "It seems like you did not understand what I said. What are you thinking?";
- next;
+ mes("[Neat Etorr]");
+ mes("Cooperate and investigate? What do you mean?");
+ next();
+ mes("[Neat Etorr]");
+ mes("It seems like you did not understand what I said. What are you thinking?");
+ next();
select("Please allow me to investigate the cave.");
- mes "[Neat Etorr]";
- mes "From what I can tell, you are disrespecting my request. Is this your intention, or your people's intention?";
- next;
+ mes("[Neat Etorr]");
+ mes("From what I can tell, you are disrespecting my request. Is this your intention, or your people's intention?");
+ next();
select("It's our intention.");
- mes "[Neat Etorr]";
- mes "Ah, it is not an easy decision. You frighten me.";
- next;
- mes "[Neat Etorr]";
- mes "But may I ask why you want to do this?";
- next;
+ mes("[Neat Etorr]");
+ mes("Ah, it is not an easy decision. You frighten me.");
+ next();
+ mes("[Neat Etorr]");
+ mes("But may I ask why you want to do this?");
+ next();
select("Explain Professor Magnifier's theory.");
- mes "[Neat Etorr]";
- mes "It's surprising that you are able to obtain such results. We also have a similar theory.";
- next;
- mes "[Neat Etorr]";
- mes "At least we also think that we must use the Laphine prisoner to get information.";
- next;
- mes "[Neat Etorr]";
- mes "This problem has been the root of our conflicts with the Laphine tribe. Of course, it may also be an opportunity to resolve them.";
- next;
- mes "[Neat Etorr]";
- mes "Therefore, it's more of a reason to depend on our own powers. There is no room for you to interfere. Please give up.";
- next;
+ mes("[Neat Etorr]");
+ mes("It's surprising that you are able to obtain such results. We also have a similar theory.");
+ next();
+ mes("[Neat Etorr]");
+ mes("At least we also think that we must use the Laphine prisoner to get information.");
+ next();
+ mes("[Neat Etorr]");
+ mes("This problem has been the root of our conflicts with the Laphine tribe. Of course, it may also be an opportunity to resolve them.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Therefore, it's more of a reason to depend on our own powers. There is no room for you to interfere. Please give up.");
+ next();
select("Give up request, and ask Laphine tribe for help instead.");
- mes "[Manuk Field Elite Soldier]";
- mes "You finally showed your true face. I knew you were a spy from the Laphine tribe!";
- next;
- mes "[Neat Etorr]";
- mes "Ah...you'd go as far as saying that. What good will it do for you, helping the Laphine tribe?";
- next;
- mes "[Neat Etorr]";
- mes "Those obnoxious dwarves offended our right of living, and are trying to get rid of us.";
- next;
- mes "[Neat Etorr]";
- mes "The reason we don't allow anyone to enter that site is because it's full of suspicions.";
- next;
- mes "[Neat Etorr]";
- mes "Alright, I'll approve of your request, and let you investigate the secret the Laphine tribe has hidden inside the cave.";
- next;
- mes "[Neat Etorr]";
- mes "If you promise to share all of your research results and findings, we will accept your request.";
- next;
+ mes("[Manuk Field Elite Soldier]");
+ mes("You finally showed your true face. I knew you were a spy from the Laphine tribe!");
+ next();
+ mes("[Neat Etorr]");
+ mes("Ah...you'd go as far as saying that. What good will it do for you, helping the Laphine tribe?");
+ next();
+ mes("[Neat Etorr]");
+ mes("Those obnoxious dwarves offended our right of living, and are trying to get rid of us.");
+ next();
+ mes("[Neat Etorr]");
+ mes("The reason we don't allow anyone to enter that site is because it's full of suspicions.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Alright, I'll approve of your request, and let you investigate the secret the Laphine tribe has hidden inside the cave.");
+ next();
+ mes("[Neat Etorr]");
+ mes("If you promise to share all of your research results and findings, we will accept your request.");
+ next();
select("Of course.");
- mes "[Neat Etorr]";
- mes "Alright, from now on, we will cooperate with you, and allow you to directly communicate with the Laphine prisoner.";
- next;
- mes "[Manuk Field Elite Soldier]";
- mes "Commander...are you sure of this? We don't even know if they're friend or foe...";
- next;
- mes "[Neat Etorr]";
- mes "With just our powers, it's impossible to figure out what the Laphine is up to. I think the past has proven that.";
- next;
- mes "[Neat Etorr]";
- mes "What they're doing right now could potentially lead us to a solution.";
- next;
- mes "[Neat Etorr]";
- mes "Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.";
+ mes("[Neat Etorr]");
+ mes("Alright, from now on, we will cooperate with you, and allow you to directly communicate with the Laphine prisoner.");
+ next();
+ mes("[Manuk Field Elite Soldier]");
+ mes("Commander...are you sure of this? We don't even know if they're friend or foe...");
+ next();
+ mes("[Neat Etorr]");
+ mes("With just our powers, it's impossible to figure out what the Laphine is up to. I think the past has proven that.");
+ next();
+ mes("[Neat Etorr]");
+ mes("What they're doing right now could potentially lead us to a solution.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.");
ins_nyd = 92;
- close;
- } else if ((ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
- mes "Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.";
- close;
- } else if ((ins_nyd == 71) || (ins_nyd == 81) || (ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 121) || (ins_nyd == 131)) {
- mes "Outsider. Welcome to Manuk, the village of the Sapha. I am its representative, Neat Etorr.";
- next;
- mes "[Neat Etorr]";
- mes "We are just a small village, nothing special... but rest comfortably.";
- close;
+ close();
+ } else if (ins_nyd == 92 || ins_nyd == 102 || ins_nyd == 112 || ins_nyd == 200 || ins_nyd == 201 || ins_nyd == 202) {
+ mes("Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.");
+ close();
+ } else if (ins_nyd == 71 || ins_nyd == 81 || ins_nyd == 91 || ins_nyd == 101 || ins_nyd == 111 || ins_nyd == 121 || ins_nyd == 131) {
+ mes("Outsider. Welcome to Manuk, the village of the Sapha. I am its representative, Neat Etorr.");
+ next();
+ mes("[Neat Etorr]");
+ mes("We are just a small village, nothing special... but rest comfortably.");
+ close();
} else if (ins_nyd == 203) {
- mes "I was waiting for you. It's good that you're safe. Did you find anything?";
- next;
+ mes("I was waiting for you. It's good that you're safe. Did you find anything?");
+ next();
select("Explain the sudden leave of the Guardian.");
- mes "[Neat Etorr]";
- mes "So... that's the nest of the Guardian of the World Tree, the sacred grounds for the Laphine tribe.";
- next;
- mes "[Neat Etorr]";
- mes "But because of the angry leave of the Guardian, his shadow is wreaking havoc on the World Tree?";
- next;
- mes "[Neat Etorr]";
- mes "If what you're saying is true, then there is no more reason for us to continue fighting the Laphine tribe...";
- next;
- mes "[Neat Etorr]";
- mes "What a huge discovery... So Nidhoggur is no longer the Guardian of the World Tree...?";
- next;
- mes "[Neat Etorr]";
- mes "Nidhoggur's Shadow came to exist in this world, and harmed the roots of the World Tree... what a disaster.";
- next;
+ mes("[Neat Etorr]");
+ mes("So... that's the nest of the Guardian of the World Tree, the sacred grounds for the Laphine tribe.");
+ next();
+ mes("[Neat Etorr]");
+ mes("But because of the angry leave of the Guardian, his shadow is wreaking havoc on the World Tree?");
+ next();
+ mes("[Neat Etorr]");
+ mes("If what you're saying is true, then there is no more reason for us to continue fighting the Laphine tribe...");
+ next();
+ mes("[Neat Etorr]");
+ mes("What a huge discovery... So Nidhoggur is no longer the Guardian of the World Tree...?");
+ next();
+ mes("[Neat Etorr]");
+ mes("Nidhoggur's Shadow came to exist in this world, and harmed the roots of the World Tree... what a disaster.");
+ next();
select("Pass along the World Tree Yggdrasil's message.");
- mes "[Neat Etorr]";
- mes "Is that what the priest of the Guardian said?";
- next;
- mes "[Neat Etorr]";
- mes "From now on, we need to talk about this with the Laphine tribe.";
- next;
- mes "[Neat Etorr]";
- mes "But of course...we don't know if they're reasonable enough...hehe.";
- next;
- mes "[Neat Etorr]";
- mes "This is all we needed from you...What is left is business between us and the Laphine tribe.";
- next;
- mes "[Neat Etorr]";
- mes "Thank you for helping us with such a huge problem. You may forget about it now.";
- next;
- mes "[Neat Etorr]";
- mes "It's not a lot, but please this as a token of our appreciation.";
- getexp 1500000,350000;
- getitem Manuk_Coin,10;
+ mes("[Neat Etorr]");
+ mes("Is that what the priest of the Guardian said?");
+ next();
+ mes("[Neat Etorr]");
+ mes("From now on, we need to talk about this with the Laphine tribe.");
+ next();
+ mes("[Neat Etorr]");
+ mes("But of course...we don't know if they're reasonable enough...hehe.");
+ next();
+ mes("[Neat Etorr]");
+ mes("This is all we needed from you...What is left is business between us and the Laphine tribe.");
+ next();
+ mes("[Neat Etorr]");
+ mes("Thank you for helping us with such a huge problem. You may forget about it now.");
+ next();
+ mes("[Neat Etorr]");
+ mes("It's not a lot, but please this as a token of our appreciation.");
+ getexp(1500000, 350000);
+ getitem(Manuk_Coin, 10);
ins_nyd = 132;
- close;
+ close();
} else if (ins_nyd == 132) {
- mes "Strange one, thank you for helping us in the time of need. I will never forget your kindness.";
- close;
+ mes("Strange one, thank you for helping us in the time of need. I will never forget your kindness.");
+ close();
} else {
- mes "Outsider. Welcome to the Manuk village of Sapha. I am its representative, Neat Etorr.";
- next;
- mes "[Neat Etorr]";
- mes "We are just a small village, nothing special... but rest comfortably.";
- close;
+ mes("Outsider. Welcome to the Manuk village of Sapha. I am its representative, Neat Etorr.");
+ next();
+ mes("[Neat Etorr]");
+ mes("We are just a small village, nothing special... but rest comfortably.");
+ close();
}
} else {
- mes "Tkeh likek Ohek QekhlHkl PkedlioH.";
- close;
+ mes("Tkeh likek Ohek QekhlHkl PkedlioH.");
+ close();
}
}
man_in01,286,61,5 script Manuk Guard#1_edq 4_MAN_GALTUN,1,1,{
- mes "[Manuk Guard]";
- if (isequipped(2782) == 1) mes "I'm guarding this Laphine prisoner. Leave me alone.";
- else mes "Klekod Oi Thekd Pheid Okei.";
- close;
+ mes("[Manuk Guard]");
+ if (isequipped(Ring_Of_Wise_King) == 1)
+ mes("I'm guarding this Laphine prisoner. Leave me alone.");
+ else
+ mes("Klekod Oi Thekd Pheid Okei.");
+ close();
}
man_in01,295,61,3 script Manuk Guard#2_edq 4_MAN_GALTUN,1,1,{
- mes "[Manuk Guard]";
- if (isequipped(2782) == 1) mes "I'm guarding this Laphine prisoner. Leave me alone.";
- else mes "Liek QUekdk Ohei Vue.";
- close;
+ mes("[Manuk Guard]");
+ if (isequipped(Ring_Of_Wise_King) == 1)
+ mes("I'm guarding this Laphine prisoner. Leave me alone.");
+ else
+ mes("Liek QUekdk Ohei Vue.");
+ close();
}
man_in01,291,62,3 script Laphine Prisoner#edq 4_F_FAIRYKID2,3,3,{
- mes "[Laphine Prisoner]";
- if (isequipped(2782) == 1) {
+ mes("[Laphine Prisoner]");
+ if (isequipped(Ring_Of_Wise_King) == 1) {
if (ins_nyd == 5) {
- mes "You... are not of the Sapha tribe... Are you... an outsider?";
- next;
- mes "[Laphine Prisoner]";
- mes "Have you ever come in contact with the Laphine tribe? Have you ever been to Splendide?";
- next;
- mes "[Laphine Prisoner]";
- mes "Please, talk to my people in Splendide. They will come to help me.";
- next;
- switch(select("What happened to you?", "What's in the cave to the north?", "Tell me about your tribe.", "I will leave you alone.")) {
+ mes("You... are not of the Sapha tribe... Are you... an outsider?");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Have you ever come in contact with the Laphine tribe? Have you ever been to Splendide?");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Please, talk to my people in Splendide. They will come to help me.");
+ next();
+ switch (select("What happened to you?", "What's in the cave to the north?", "Tell me about your tribe.", "I will leave you alone.")) {
case 1:
- mes "[Laphine Prisoner]";
- mes "During out last battle with the Sapha tribe... they caught me and took me prisoner.";
- next;
- mes "[Laphine Prisoner]";
- mes "The Sapha tribe attacked first. They are destroying the World Tree.";
- next;
- mes "[Laphine Prisoner]";
- mes "That's why the war started. But I don't want to fight with the Sapha tribe anymore...";
- next;
- mes "[Laphine Prisoner]";
- mes "If it wasn't for that... I wouldn't survive here...";
- next;
- mes "[Laphine Prisoner]";
- mes "Please. Bring this news to all of Splendide. Send someone to save me... or they might kill me.";
- close;
+ mes("[Laphine Prisoner]");
+ mes("During out last battle with the Sapha tribe... they caught me and took me prisoner.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("The Sapha tribe attacked first. They are destroying the World Tree.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("That's why the war started. But I don't want to fight with the Sapha tribe anymore...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("If it wasn't for that... I wouldn't survive here...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Please. Bring this news to all of Splendide. Send someone to save me... or they might kill me.");
+ close();
case 2:
- mes "[Laphine Prisoner]";
- mes "There is...";
- next;
- mes "[Laphine Prisoner]";
- mes "No... I can't tell you... It's the secret of our tribe...";
- next;
- mes "[Laphine Prisoner]";
- mes "I just want to say this...if the Sapha tribe intrude that place, we will never forgive them!";
+ mes("[Laphine Prisoner]");
+ mes("There is...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("No... I can't tell you... It's the secret of our tribe...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("I just want to say this...if the Sapha tribe intrude that place, we will never forgive them!");
ins_nyd = 52;
- close;
+ close();
case 3:
- mes "[Laphine Prisoner]";
- mes "The Laphines have protected the Yggdrasil World Tree for generations.";
- next;
- mes "[Laphine Prisoner]";
- mes "We live in a... different time, different land... we came for an expedition.";
- next;
- mes "[Laphine Prisoner]";
- mes "After we received reports from our spy about the World Tree's strange symptoms, we recgnized the Manuk's existence.";
- next;
- mes "[Laphine Prisoner]";
- mes "They are mining metal, and in so doing, destroying the World Tree's roots...";
- next;
- mes "[Laphine Prisoner]";
- mes "So we dispatched an expedition here. Soonafter, the war with the Sapha began...";
- close;
+ mes("[Laphine Prisoner]");
+ mes("The Laphines have protected the Yggdrasil World Tree for generations.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("We live in a... different time, different land... we came for an expedition.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("After we received reports from our spy about the World Tree's strange symptoms, we recgnized the Manuk's existence.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("They are mining metal, and in so doing, destroying the World Tree's roots...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("So we dispatched an expedition here. Soonafter, the war with the Sapha began...");
+ close();
case 4:
- close;
+ close();
}
} else if (ins_nyd == 92) {
- mes "The sapha tribe went as far as cooperating with an unknown race?";
- next;
- mes "[Laphine Prisoner]";
- mes "What is your purpose? Why do you want to know what that place is?";
- next;
- mes "[Laphine Prisoner]";
- mes "lright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.";
- next;
+ mes("The sapha tribe went as far as cooperating with an unknown race?");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("What is your purpose? Why do you want to know what that place is?");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("lright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.");
+ next();
select("Guardian's Nest?");
- mes "[Laphine Prisoner]";
- mes "Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...";
- next;
- mes "[Laphine Prisoner]";
- mes "Only a marked guardian's servant from the Laphine tribe is allowed to enter.";
- next;
- mes "[Laphine Prisoner]";
- mes "That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...";
- next;
- mes "[Laphine Prisoner]";
- mes "To obtain more minerals, they started to dig with madness.";
- next;
- mes "[Laphine Prisoner]";
- mes "In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.";
- next;
- mes "[Laphine Prisoner]";
- mes "After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.";
- next;
- mes "[Laphine Prisoner]";
- mes "Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.";
- next;
- mes "[Laphine Prisoner]";
- mes "During this time, your people have travelled through the space-time gap to this land.";
- next;
- mes "[Laphine Prisoner]";
- mes "Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...";
- next;
- mes "[Laphine Prisoner]";
- mes "Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.";
- next;
- mes "[Laphine Prisoner]";
- mes "Hmph...even if I don't cooperate, I know you will find other means to get in...";
- next;
- mes "[Laphine Prisoner]";
- mes "Looking at the current situation of the Laphine tribe, we do not have enough power to surround the Manuk fields, and chase the giants away.";
- next;
- mes "[Laphine Prisoner]";
- mes "Okay, if it has already become like this, I will help you. There are no dead-ends. If you keep going, you will find a solution.";
- next;
- mes "[Laphine Prisoner]";
- mes "Even if I don't say anything, my situation will not change.";
- next;
- mes "[Laphine Prisoner]";
- mes "I have already told you everything you wanted to hear. If you have any other requests, please let me know.";
+ mes("[Laphine Prisoner]");
+ mes("Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Only a marked guardian's servant from the Laphine tribe is allowed to enter.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("To obtain more minerals, they started to dig with madness.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("During this time, your people have travelled through the space-time gap to this land.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Hmph...even if I don't cooperate, I know you will find other means to get in...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Looking at the current situation of the Laphine tribe, we do not have enough power to surround the Manuk fields, and chase the giants away.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Okay, if it has already become like this, I will help you. There are no dead-ends. If you keep going, you will find a solution.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Even if I don't say anything, my situation will not change.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("I have already told you everything you wanted to hear. If you have any other requests, please let me know.");
ins_nyd = 102;
- close;
+ close();
} else if (ins_nyd == 102) {
- mes "Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?";
- next;
- mes "[Laphine Prisoner]";
- mes "That's because only the ones chosen by the Guardian may enter.";
- next;
- mes "[Laphine Prisoner]";
- mes "We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.";
- next;
- mes "[Laphine Prisoner]";
- mes "Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.";
- next;
- mes "[Laphine Prisoner]";
- mes "One was killed in our last war with the Sapha tribe...and I have been taken captive.";
- next;
- mes "[Laphine Prisoner]";
- mes "I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.";
+ mes("Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("That's because only the ones chosen by the Guardian may enter.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("One was killed in our last war with the Sapha tribe...and I have been taken captive.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.");
specialeffect(EF_HOLYHIT, AREA, playerattached());
- next;
- mes "[Laphine Prisoner]";
- mes "Also, remember this spell, it's needed to open the gate of the Guardian.";
- next;
- mes "[Laphine Prisoner]";
- mes "AnomarDu Ha OdesUdenVer Ie ";
- next;
- mes "[Laphine Prisoner]";
- mes "remuAlaAsh Mu ModtasAn Yu Dur";
- next;
- mes "[Laphine Prisoner]";
- mes "TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ";
- next;
- mes "[Laphine Prisoner]";
- mes "Go find the fairy guarding the gate, and say this spell.";
- next;
- mes "[Laphine Prisoner]";
- mes "he proof and the spell will confirm that you are one of the Guardian's servants.";
- next;
- mes "[Laphine Prisoner]";
- mes "Please meet the Guardian, and come back with an answer to everything. And tell the answer to...";
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Also, remember this spell, it's needed to open the gate of the Guardian.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("AnomarDu Ha OdesUdenVer Ie ");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("remuAlaAsh Mu ModtasAn Yu Dur");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Go find the fairy guarding the gate, and say this spell.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("he proof and the spell will confirm that you are one of the Guardian's servants.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Please meet the Guardian, and come back with an answer to everything. And tell the answer to...");
ins_nyd = 112;
- close;
- } else if ((ins_nyd == 71) || (ins_nyd == 81) || (ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 121) || (ins_nyd == 131)) {
- mes "... ...";
- next;
- mes "[Manuk Guard]";
- mes "Hey, outsider! Step away from the prisoner!";
- close;
+ close();
+ } else if (ins_nyd == 71 || ins_nyd == 81 || ins_nyd == 91 || ins_nyd == 101 || ins_nyd == 111 || ins_nyd == 121 || ins_nyd == 131) {
+ mes("... ...");
+ next();
+ mes("[Manuk Guard]");
+ mes("Hey, outsider! Step away from the prisoner!");
+ close();
} else if (ins_nyd == 112) {
- mes "Please meet the Guardian, and come back with an answer to everything. And tell the answer to...";
- close;
+ mes("Please meet the Guardian, and come back with an answer to everything. And tell the answer to...");
+ close();
} else if (ins_nyd == 132) {
- mes "Yes...I heard your conversation with the Sapha tribe...";
- next;
- mes "[Laphine Prisoner]";
- mes "If our tribe were to really trust in the Sapha tribe...I don't know.";
- next;
- mes "[Laphine Prisoner]";
- mes "Our hatred towards them has already reached an abnormal level...";
- next;
- mes "[Laphine Prisoner]";
- mes "Those giants...can they really be trusted?";
- next;
- mes "[Laphine Prisoner]";
- mes "It's...it's better if you don't believe the one called Etorr...the minds of the Sapha tribe is unpredictable.";
- close;
+ mes("Yes...I heard your conversation with the Sapha tribe...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("If our tribe were to really trust in the Sapha tribe...I don't know.");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Our hatred towards them has already reached an abnormal level...");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("Those giants...can they really be trusted?");
+ next();
+ mes("[Laphine Prisoner]");
+ mes("It's...it's better if you don't believe the one called Etorr...the minds of the Sapha tribe is unpredictable.");
+ close();
} else {
- mes "... ...";
- next;
- mes "[Manuk Guard]";
- mes "Hey, outsider! Step away from the prisoner!";
- close;
+ mes("... ...");
+ next();
+ mes("[Manuk Guard]");
+ mes("Hey, outsider! Step away from the prisoner!");
+ close();
}
} else {
- mes "AmanVilShar Ie DorLuShar Mu Re";
- close;
+ mes("AmanVilShar Ie DorLuShar Mu Re");
+ close();
}
}
man_in01,282,42,0 script trap#edq2 FAKE_NPC,10,10,{
OnTouch_:
- if ((isequipped(2782) == 1) && (ins_nyd == 52)) {
- mes "[Manuk Field Elite Soldier]";
- mes "This is Neat Etorr's order. Please come with us to see him.";
- next;
- mes "[Manuk Field Elite Soldier]";
- mes "Bring him to Neat Etorr. All soldiers be prepared.";
- warp "man_in01",311,54;
- close;
+ if (isequipped(Ring_Of_Wise_King) == 1 && ins_nyd == 52) {
+ mes("[Manuk Field Elite Soldier]");
+ mes("This is Neat Etorr's order. Please come with us to see him.");
+ next();
+ mes("[Manuk Field Elite Soldier]");
+ mes("Bring him to Neat Etorr. All soldiers be prepared.");
+ warp("man_in01", 311, 54);
+ close();
}
end;
}
@@ -1533,149 +1544,150 @@ OnTouch_:
//== First floor ===========================================
1@nyd,213,277,5 script Murdered Yggdrasilid#1F 4_F_FAIRYKID2,5,5,{
if ('ins_nyd2 == 0) {
- mes "When a faint light enters your heart, a voice sounds in your head.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "It's all over... servants of the Guardian... Hurry up and leave this place.";
- next;
- while(1) {
- switch(select("Who are you?", "What do you mean?")) {
+ mes("When a faint light enters your heart, a voice sounds in your head.");
+ next();
+ mes("[World Tree World Tree Yggdrasil]");
+ mes("It's all over... servants of the Guardian... Hurry up and leave this place.");
+ next();
+ while (true) {
+ switch (select("Who are you?", "What do you mean?")) {
case 1:
- mes "[World Tree World Tree Yggdrasil]";
- mes "I... I am the World Tree Yggdrasil, servant of the Guardian of Nidhoggur, as well as the High Priest leading the Laphine Tribe.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "So you're not priestess of the Laphine Tribe... How did you get in? No, there's no time to answer that.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "Hurry... and leave... leave this place before it's too late.";
- next;
+ mes("[World Tree World Tree Yggdrasil]");
+ mes("I... I am the World Tree Yggdrasil, servant of the Guardian of Nidhoggur, as well as the High Priest leading the Laphine Tribe.");
+ next();
+ mes("[World Tree World Tree Yggdrasil]");
+ mes("So you're not priestess of the Laphine Tribe... How did you get in? No, there's no time to answer that.");
+ next();
+ mes("[World Tree World Tree Yggdrasil]");
+ mes("Hurry... and leave... leave this place before it's too late.");
+ next();
break;
case 2:
- mes "[World Tree World Tree Yggdrasil]";
- mes "The guardian... something's wrong with the guardian. I don't know what made him like this.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "This... this is no longer the nest of the Guardian of the World Tree Yggdrasil.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Darkness took over the Guardian and destroyed all living things... now this place has become the cursed home of monsters.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Now the vile Nidhoggur's Shadow is wreaking havoc here...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Now's not too late, hurry and get out... tell the Laphine Tribe about this... tell the commanders of Alfheim...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "My soul... it has been trapped here. You're the only ones I can trust now.";
- next;
+ mes("[World Tree World Tree Yggdrasil]");
+ mes("The guardian... something's wrong with the guardian. I don't know what made him like this.");
+ next();
+ mes("[World Tree World Tree Yggdrasil]");
+ mes("This... this is no longer the nest of the Guardian of the World Tree Yggdrasil.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Darkness took over the Guardian and destroyed all living things... now this place has become the cursed home of monsters.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Now the vile Nidhoggur's Shadow is wreaking havoc here...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Now's not too late, hurry and get out... tell the Laphine Tribe about this... tell the commanders of Alfheim...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("My soul... it has been trapped here. You're the only ones I can trust now.");
+ next();
.@exit = 1;
}
- if (.@exit) break;
+ if (.@exit)
+ break;
}
select("Nidhoggur's Shadow?");
- mes "[World Tree Yggdrasil]";
- mes "The Guardian Nidhoggur... he's not in the nest.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "He...for some reason abandoned his own shadow, and left.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "All that's left, is the ugly Shadow of the Guardian of Nidhoggur...the Shadow that is going mad.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The Shadow sucked all the nutrients from the World Tree Yggdrasil, and has gone mad when there is nothing more left to obtain. Now, he wants this land.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Once the ugly Shadow leaves here to steal power from the other World Yggdrasil Trees, there will be great destruction. This world will become hell.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "You must... tell the commanders of Alfheim about this, and come up with a plan. Only them...";
- next;
+ mes("[World Tree Yggdrasil]");
+ mes("The Guardian Nidhoggur... he's not in the nest.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("He...for some reason abandoned his own shadow, and left.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("All that's left, is the ugly Shadow of the Guardian of Nidhoggur...the Shadow that is going mad.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("The Shadow sucked all the nutrients from the World Tree Yggdrasil, and has gone mad when there is nothing more left to obtain. Now, he wants this land.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Once the ugly Shadow leaves here to steal power from the other World Yggdrasil Trees, there will be great destruction. This world will become hell.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("You must... tell the commanders of Alfheim about this, and come up with a plan. Only them...");
+ next();
select("Is there nothing else we can do?");
- mes "[World Tree Yggdrasil]";
- mes "With our current powers...it is impossible to defeat the Guardian.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "But the one going mad is not the Guardian, but his dark Shadow...maybe we can trap him here...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Are you willing to accept this mission? Even if it means to pay with your life?";
- next;
- if(select("Leave it to us.", "We can't do it.") == 2)
- close;
- mes "[World Tree Yggdrasil]";
- mes "I thank you deeply for your decision. I will use what is left of my powers to open up the path towards the Guardian's Nest.";
- next;
- mes "[World Tree Yggdrasil]";
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms of the Sanctuary will start immediately.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "30 minutes... that's the limit of my powers. Please hurry.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "And... Be careful... Be careful of the shadow's power.";
+ mes("[World Tree Yggdrasil]");
+ mes("With our current powers...it is impossible to defeat the Guardian.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("But the one going mad is not the Guardian, but his dark Shadow...maybe we can trap him here...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Are you willing to accept this mission? Even if it means to pay with your life?");
+ next();
+ if (select("Leave it to us.", "We can't do it.") == 2)
+ close();
+ mes("[World Tree Yggdrasil]");
+ mes("I thank you deeply for your decision. I will use what is left of my powers to open up the path towards the Guardian's Nest.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ mes("The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms of the Sanctuary will start immediately.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("30 minutes... that's the limit of my powers. Please hurry.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("And... Be careful... Be careful of the shadow's power.");
'ins_nyd2 = 1;
- donpcevent instance_npcname("ins_nyd_1f_timer")+"::OnEnable";
- donpcevent instance_npcname("nyd_call_mon_1")+"::OnEnable";
- close;
+ donpcevent(instance_npcname("ins_nyd_1f_timer")+"::OnEnable");
+ donpcevent(instance_npcname("nyd_call_mon_1")+"::OnEnable");
+ close();
} else {
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "30 minutes... that's the limit of my powers. Please hurry.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "And... Be careful... Be careful of the shadow's power.";
- close;
+ mes("The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("30 minutes... that's the limit of my powers. Please hurry.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("And... Be careful... Be careful of the shadow's power.");
+ close();
}
} else if ('ins_nyd2 == 1) {
- mes "[World Tree Yggdrasil]";
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The gate will open soon. Go defeat all of the guardians.";
- close;
+ mes("[World Tree Yggdrasil]");
+ mes("The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("The gate will open soon. Go defeat all of the guardians.");
+ close();
} else if ('ins_nyd2 == 2) {
- mes "[World Tree Yggdrasil]";
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Use your powers... and destroy the vile Shadow...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "This is... all I can do for you...";
- close;
+ mes("[World Tree Yggdrasil]");
+ mes("The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Use your powers... and destroy the vile Shadow...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("This is... all I can do for you...");
+ close();
} else {
- mes "[World Tree Yggdrasil]";
- mes "Those who want to taint the sacred Sanctuary of the Guardian... Get out.";
- warp "mid_camp",100,100;
+ mes("[World Tree Yggdrasil]");
+ mes("Those who want to taint the sacred Sanctuary of the Guardian... Get out.");
+ warp("mid_camp", 100, 100);
}
end;
OnTouch:
if ('ins_nyd2 == 0) {
- mes "What's a woman from the Laphine Tribe doing here...";
- next;
- mes "What's happening? Let's go check it out.";
- close;
+ mes("What's a woman from the Laphine Tribe doing here...");
+ next();
+ mes("What's happening? Let's go check it out.");
+ close();
}
end;
@@ -1686,38 +1698,38 @@ OnInstanceInit: // Temporary fix for @reloadscript.
1@nyd,1,1,0 script nyd_call_mon_1 FAKE_NPC,{
OnInstanceInit:
- enablenpc instance_npcname("nyd_call_mon_1");
+ enablenpc(instance_npcname("nyd_call_mon_1"));
end;
OnEnable:
.@map$ = instance_mapname("1@nyd");
- monster .@map$,220,250,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,220,252,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,240,270,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,240,272,"Nidhoggur's Guardian#4",2020,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,200,200,"Nidhoggur's Guardian#5",2020,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,210,210,"Nidhoggur's Guardian#6",2020,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,225,265,"Nidhoggur's Guardian#7",2021,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,225,270,"Nidhoggur's Guardian#8",2021,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,245,235,"Nidhoggur's Guardian#9",2021,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,255,255,"Nidhoggur's Guardian#10",2021,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,225,245,"Nidhoggur's Guardian#11",2021,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- monster .@map$,230,280,"Nidhoggur's Guardian#12",2021,1,instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- mapannounce .@map$, "Nidhoggur's Guardian : Protect the Guardian's Sanctuary. Get rid of the intruders.",bc_map,"0x00ff99";
+ monster(.@map$, 220, 250, _("Nidhoggur's Guardian#1"), RHYNCHO, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 220, 252, _("Nidhoggur's Guardian#2"), RHYNCHO, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 240, 270, _("Nidhoggur's Guardian#3"), RHYNCHO, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 240, 272, _("Nidhoggur's Guardian#4"), RHYNCHO, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 200, 200, _("Nidhoggur's Guardian#5"), RHYNCHO, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 210, 210, _("Nidhoggur's Guardian#6"), RHYNCHO, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 225, 265, _("Nidhoggur's Guardian#7"), PHYLLA, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 225, 270, _("Nidhoggur's Guardian#8"), PHYLLA, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 245, 235, _("Nidhoggur's Guardian#9"), PHYLLA, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 255, 255, _("Nidhoggur's Guardian#10"), PHYLLA, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 225, 245, _("Nidhoggur's Guardian#11"), PHYLLA, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ monster(.@map$, 230, 280, _("Nidhoggur's Guardian#12"), PHYLLA, 1, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ mapannounce(.@map$, _("Nidhoggur's Guardian : Protect the Guardian's Sanctuary. Get rid of the intruders."), bc_map, C_SPRINGGREEN);
end;
OnDisable:
- killmonster instance_mapname("1@nyd"),instance_npcname("nyd_call_mon_1")+"::OnMyMobDead";
- disablenpc instance_npcname("nyd_call_mon_1");
+ killmonster(instance_mapname("1@nyd"), instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
+ disablenpc(instance_npcname("nyd_call_mon_1"));
end;
OnMyMobDead:
.@map$ = instance_mapname("1@nyd");
.@mob_dead_num = mobcount(.@map$, instance_npcname("nyd_call_mon_1")+"::OnMyMobDead");
if (.@mob_dead_num < 1) {
- mapannounce .@map$, "All of Nidhoggur's Guardians have been defeated!",bc_map,"0x00ff99";
- donpcevent instance_npcname("ins_nyd_1f_timer")+"::OnDisable";
- donpcevent instance_npcname("nyd_to2f_warp")+"::OnEnable";
+ mapannounce(.@map$, _("All of Nidhoggur's Guardians have been defeated!"), bc_map, C_SPRINGGREEN);
+ donpcevent(instance_npcname("ins_nyd_1f_timer")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_to2f_warp")+"::OnEnable");
'ins_nyd2 = 2;
}
end;
@@ -1725,145 +1737,145 @@ OnMyMobDead:
1@nyd,1,2,0 script ins_nyd_1f_timer FAKE_NPC,{
OnInstanceInit:
- disablenpc instance_npcname("ins_nyd_1f_timer");
+ disablenpc(instance_npcname("ins_nyd_1f_timer"));
end;
OnEnable:
- enablenpc instance_npcname("ins_nyd_1f_timer");
- initnpctimer;
+ enablenpc(instance_npcname("ins_nyd_1f_timer"));
+ initnpctimer();
end;
OnDisable:
- disablenpc instance_npcname("ins_nyd_1f_timer");
- stopnpctimer;
- killmonsterall instance_mapname("1@nyd");
+ disablenpc(instance_npcname("ins_nyd_1f_timer"));
+ stopnpctimer();
+ killmonsterall(instance_mapname("1@nyd"));
end;
OnTimer900000:
- mapannounce instance_mapname("1@nyd"), "World Tree Yggdrasil : There's not much time left. Please hurry.",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("1@nyd"), _("World Tree Yggdrasil : There's not much time left. Please hurry."), bc_map, C_YELLOW);
end;
OnTimer1200000:
- mapannounce instance_mapname("1@nyd"), "World Tree Yggdrasil : My powers are slowly disappearing. Please hurry.",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("1@nyd"), _("World Tree Yggdrasil : My powers are slowly disappearing. Please hurry."), bc_map, C_YELLOW);
end;
OnTimer1500000:
- mapannounce instance_mapname("1@nyd"), "World Tree Yggdrasil : I'm... almost at my limit... please hurry up.",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("1@nyd"), _("World Tree Yggdrasil : I'm... almost at my limit... please hurry up."), bc_map, C_YELLOW);
end;
OnTimer1800000:
- mapannounce instance_mapname("1@nyd"), "World Tree Yggdrasil : You've failed... but I will use what power I have left... to send you out of here.",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("1@nyd"), _("World Tree Yggdrasil : You've failed... but I will use what power I have left... to send you out of here."), bc_map, C_YELLOW);
end;
OnTimer1830000:
- mapannounce instance_mapname("1@nyd"), "Opening of the Gate has failed.",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("1@nyd"), _("Opening of the Gate has failed."), bc_map, C_YELLOW);
end;
OnTimer1850000:
- donpcevent instance_npcname("ins_nyd_1f_timer")+"::OnDisable";
- donpcevent instance_npcname("nyd_call_mon_1")+"::OnDisable";
- instance_warpall "mid_camp",310,150;
- stopnpctimer;
+ donpcevent(instance_npcname("ins_nyd_1f_timer")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_call_mon_1")+"::OnDisable");
+ instance_warpall("mid_camp", 310, 150);
+ stopnpctimer();
end;
}
1@nyd,195,320,0 script nyd_to2f_warp WARPNPC,5,5,{
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname("nyd_to2f_warp");
+ disablenpc(instance_npcname("nyd_to2f_warp"));
end;
OnEnable:
- enablenpc instance_npcname("nyd_to2f_warp");
+ enablenpc(instance_npcname("nyd_to2f_warp"));
end;
OnTouch:
'ins_nyd2 = 3;
- warp instance_mapname("2@nyd"),200,10;
+ warp(instance_mapname("2@nyd"), 200, 10);
end;
}
1@nyd,1,1,0 script ins_nyd1_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("1@nyd");
- monster .@map$,0,0,"Ancient Tree",2019,40,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyTreeDead";
- monster .@map$,0,0,"Rhyncho",2020,30,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyRhynDead";
- monster .@map$,0,0,"Phylla",2021,30,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPhyDead";
- monster .@map$,0,0,"Aqua Elemental",2016,30,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyAquaDead";
- monster .@map$,0,0,"Dark Pinguicula",2015,30,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPingDead";
+ monster(.@map$, 0, 0, _("Ancient Tree"), ANCIENT_TREE, 40, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyTreeDead");
+ monster(.@map$, 0, 0, _("Rhyncho"), RHYNCHO, 30, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyRhynDead");
+ monster(.@map$, 0, 0, _("Phylla"), PHYLLA, 30, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPhyDead");
+ monster(.@map$, 0, 0, _("Aqua Elemental"), AQUA_ELEMENTAL, 30, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyAquaDead");
+ monster(.@map$, 0, 0, _("Dark Pinguicula"), PINGUICULA_D, 30, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPingDead");
end;
OnMyTreeDead:
- monster instance_mapname("1@nyd"),0,0,"Ancient Tree",2019,1,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyTreeDead";
+ monster(instance_mapname("1@nyd"), 0, 0, _("Ancient Tree"), ANCIENT_TREE, 1, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyTreeDead");
end;
OnMyRhynDead:
- monster instance_mapname("1@nyd"),0,0,"Rhyncho",2020,1,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyRhynDead";
+ monster(instance_mapname("1@nyd"), 0, 0, _("Rhyncho"), RHYNCHO, 1, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyRhynDead");
end;
OnMyPhyDead:
- monster instance_mapname("1@nyd"),0,0,"Phylla",2021,1,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPhyDead";
+ monster(instance_mapname("1@nyd"), 0, 0, _("Phylla"), PHYLLA, 1, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPhyDead");
end;
OnMyAquaDead:
- monster instance_mapname("1@nyd"),0,0,"Aqua Elemental",2016,1,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyAquaDead";
+ monster(instance_mapname("1@nyd"), 0, 0, _("Aqua Elemental"), AQUA_ELEMENTAL, 1, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyAquaDead");
end;
OnMyPingDead:
- monster instance_mapname("1@nyd"),0,0,"Dark Pinguicula",2015,1,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPingDead";
+ monster(instance_mapname("1@nyd"), 0, 0, _("Dark Pinguicula"), PINGUICULA_D, 1, instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyPingDead");
end;
}
//== Second Floor ==========================================
2@nyd,200,14,0 script nyd_2f_enter FAKE_NPC,6,6,{
OnTouch_:
- donpcevent instance_npcname("nyd_2f_enter_broad")+"::OnEnable";
- disablenpc instance_npcname("nyd_2f_enter");
+ donpcevent(instance_npcname("nyd_2f_enter_broad")+"::OnEnable");
+ disablenpc(instance_npcname("nyd_2f_enter"));
end;
}
2@nyd,1,1,0 script nyd_2f_enter_broad FAKE_NPC,{
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname("nyd_2f_enter_broad");
+ disablenpc(instance_npcname("nyd_2f_enter_broad"));
end;
OnEnable:
- enablenpc instance_npcname("nyd_2f_enter_broad");
- initnpctimer;
+ enablenpc(instance_npcname("nyd_2f_enter_broad"));
+ initnpctimer();
end;
OnTimer12000:
- mapannounce instance_mapname("2@nyd"), "Nidhoggur's Shadow : No more... I can't stand this anymore...",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("2@nyd"), _("Nidhoggur's Shadow : No more... I can't stand this anymore..."), bc_map, C_YELLOW);
end;
OnTimer15000:
- mapannounce instance_mapname("2@nyd"), "Nidhoggur's Shadow : I need... I need the World Tree Yggdrasil's powers...",bc_map,"0xFFFF00";
+ mapannounce(instance_mapname("2@nyd"), _("Nidhoggur's Shadow : I need... I need the World Tree Yggdrasil's powers..."), bc_map, C_YELLOW);
end;
OnTimer18000:
- mapannounce instance_mapname("2@nyd"), "Nidhoggur's Shadow : Destroy... everything...",bc_map,"0xFFFF00";
- stopnpctimer;
- disablenpc instance_npcname("nyd_2f_enter_broad");
+ mapannounce(instance_mapname("2@nyd"), _("Nidhoggur's Shadow : Destroy... everything..."), bc_map, C_YELLOW);
+ stopnpctimer();
+ disablenpc(instance_npcname("nyd_2f_enter_broad"));
end;
}
2@nyd,199,178,0 script nyd_2f_ddr_control FAKE_NPC,6,6,{
OnTouch:
specialeffect(EF_HOLYHIT, AREA, playerattached());
- mes "From below the gorgeous stones, a strange breeze is forming.";
- next;
- mes "The strange power slowly surrounds your body, the dimension is starting to shift.";
- close2;
- warp instance_mapname("2@nyd"),199,255;
+ mes("From below the gorgeous stones, a strange breeze is forming.");
+ next();
+ mes("The strange power slowly surrounds your body, the dimension is starting to shift.");
+ close2();
+ warp(instance_mapname("2@nyd"), 199, 255);
end;
}
2@nyd,199,268,0 script nyd_2f_boss_enter FAKE_NPC,8,8,{
OnTouch_:
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- donpcevent instance_npcname("nyd_2f_boss_enter_call")+"::OnEnable";
- disablenpc instance_npcname("nyd_2f_boss_enter");
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ donpcevent(instance_npcname("nyd_2f_boss_enter_call")+"::OnEnable");
+ disablenpc(instance_npcname("nyd_2f_boss_enter"));
end;
}
end;
@@ -1871,74 +1883,74 @@ OnTouch_:
2@nyd,2,2,0 script nyd_2f_boss_enter_call FAKE_NPC,{
OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_boss_enter_call");
+ disablenpc(instance_npcname("nyd_2f_boss_enter_call"));
end;
OnEnable:
- enablenpc instance_npcname("nyd_2f_boss_enter_call");
+ enablenpc(instance_npcname("nyd_2f_boss_enter_call"));
.@map$ = instance_mapname("2@nyd");
- monster .@map$,199,327,"Nidhoggur's Shadow",2022,1,instance_npcname("nyd_2f_boss_enter_call")+"::OnMyMobDead";
- mapannounce .@map$, "Nidhoggur's Shadow : I will devour all of you... you and the World Tree Yggdrasil.",bc_map,"0x00ff99";
- //donpcevent instance_npcname("nyd_2f_boss_enter_call")+"::OnGo";
- initnpctimer;
+ monster(.@map$, 199, 327, _("Nidhoggur's Shadow"), S_NYDHOG, 1, instance_npcname("nyd_2f_boss_enter_call")+"::OnMyMobDead");
+ mapannounce(.@map$, _("Nidhoggur's Shadow : I will devour all of you... you and the World Tree Yggdrasil."), bc_map, C_SPRINGGREEN);
+ //donpcevent(instance_npcname("nyd_2f_boss_enter_call")+"::OnGo");
+ initnpctimer();
end;
OnDisable:
- killmonster instance_mapname("2@nyd"),instance_npcname("nyd_2f_boss_enter_call")+"::OnMyMobDead";
- disablenpc instance_npcname("nyd_2f_boss_enter_call");
+ killmonster(instance_mapname("2@nyd"), instance_npcname("nyd_2f_boss_enter_call")+"::OnMyMobDead");
+ disablenpc(instance_npcname("nyd_2f_boss_enter_call"));
end;
OnTimer180000:
- stopnpctimer;
+ stopnpctimer();
OnWarpColor:
.@map$ = instance_mapname("2@nyd");
- switch(rand(1,4)) {
+ switch (rand(1, 4)) {
case 1:
- mapannounce .@map$, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red")+"::OnEnable";
- instance_warpall .@map$,115,278;
+ mapannounce(.@map$, _("Nidhoggur's Shadow : In this chaos... your blood is just what I need."), bc_map, C_YELLOW);
+ donpcevent(instance_npcname("nyd_2f_white")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_yellow")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_green")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_red")+"::OnEnable");
+ instance_warpall(.@map$, 115, 278);
end;
case 2:
- mapannounce .@map$, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white")+"::OnEnable";
- instance_warpall .@map$,115,373;
+ mapannounce(.@map$, _("Nidhoggur's Shadow : I will freeze every last drop of your blood."), bc_map, C_YELLOW);
+ donpcevent(instance_npcname("nyd_2f_red")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_yellow")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_green")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_white")+"::OnEnable");
+ instance_warpall(.@map$, 115, 373);
end;
case 3:
- mapannounce .@map$, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow")+"::OnEnable";
- instance_warpall .@map$,284,278;
+ mapannounce(.@map$, _("Nidhoggur's Shadow : Sleep for eternity in an empty illusion."), bc_map, C_YELLOW);
+ donpcevent(instance_npcname("nyd_2f_red")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_white")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_green")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_yellow")+"::OnEnable");
+ instance_warpall(.@map$, 284, 278);
end;
case 4:
- mapannounce .@map$, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green")+"::OnEnable";
- instance_warpall .@map$,284,374;
+ mapannounce(.@map$, _("Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly."), bc_map, C_YELLOW);
+ donpcevent(instance_npcname("nyd_2f_red")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_white")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_yellow")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_green")+"::OnEnable");
+ instance_warpall(.@map$, 284, 374);
end;
}
end;
OnMyMobDead:
.@map$ = instance_mapname("2@nyd");
- if (mobcount(.@map$,instance_npcname("nyd_2f_boss_enter_call")+"::OnMyMobDead") < 1) {
- mapannounce .@map$, "Nidhoggur's Shadow : World Tree Yggdrasil's guardian... his powers are disappearing...",bc_map,"0x00ff99";
- donpcevent instance_npcname("World Tree Yggdrasil#2F")+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_boss_enter_call")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red_c")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white_c")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow_c")+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green_c")+"::OnDisable";
+ if (mobcount(.@map$, instance_npcname("nyd_2f_boss_enter_call")+"::OnMyMobDead") < 1) {
+ mapannounce(.@map$, _("Nidhoggur's Shadow : World Tree Yggdrasil's guardian... his powers are disappearing..."), bc_map, C_SPRINGGREEN);
+ donpcevent(instance_npcname("World Tree Yggdrasil#2F")+"::OnEnable");
+ donpcevent(instance_npcname("nyd_2f_boss_enter_call")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_boss_enter_logic")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_red_c")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_white_c")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_yellow_c")+"::OnDisable");
+ donpcevent(instance_npcname("nyd_2f_green_c")+"::OnDisable");
'ins_nyd2 = 4;
end;
}
@@ -1947,203 +1959,203 @@ OnMyMobDead:
2@nyd,2,4,0 script nyd_2f_boss_enter_logic FAKE_NPC,{
OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_boss_enter_logic");
+ disablenpc(instance_npcname("nyd_2f_boss_enter_logic"));
end;
OnEnable:
- stopnpctimer;
- initnpctimer;
+ stopnpctimer();
+ initnpctimer();
end;
OnDisable:
- stopnpctimer;
- disablenpc instance_npcname("nyd_2f_boss_enter_logic");
+ stopnpctimer();
+ disablenpc(instance_npcname("nyd_2f_boss_enter_logic"));
end;
OnTimer180000:
- stopnpctimer;
- donpcevent instance_npcname("nyd_2f_boss_enter_call")+"::OnWarpColor";
+ stopnpctimer();
+ donpcevent(instance_npcname("nyd_2f_boss_enter_call")+"::OnWarpColor");
end;
}
2@nyd,202,324,5 script World Tree Yggdrasil#2F 4_F_FAIRYKID2,3,3,{
- mes "[World Tree Yggdrasil]";
- mes "Thank you. You're the saviour of humans and the Laphine Tribe.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "You've defeated Nidhoggur's Shadow. But...It's not gone for good. Its powers are merely put to sleep.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "But you have won us plenty of time. This is great.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Please go and report this to those in charge of Splendide and Manuk.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "As you have seen, neither the Sapha tribe nor the Laphine tribe is at fault for the weakening of the World Tree. It's all because of the Guardian's Shadow...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The Guardian's insanity...is caused by powers unknown to us... You must tell this to everyone.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Now... Allow me to escort you out of the cursed nest.";
- next;
- switch(select("Please let me out.", "I want to look around for a while.")) {
+ mes("[World Tree Yggdrasil]");
+ mes("Thank you. You're the saviour of humans and the Laphine Tribe.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("You've defeated Nidhoggur's Shadow. But...It's not gone for good. Its powers are merely put to sleep.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("But you have won us plenty of time. This is great.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Please go and report this to those in charge of Splendide and Manuk.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("As you have seen, neither the Sapha tribe nor the Laphine tribe is at fault for the weakening of the World Tree. It's all because of the Guardian's Shadow...");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("The Guardian's insanity...is caused by powers unknown to us... You must tell this to everyone.");
+ next();
+ mes("[World Tree Yggdrasil]");
+ mes("Now... Allow me to escort you out of the cursed nest.");
+ next();
+ switch (select("Please let me out.", "I want to look around for a while.")) {
case 1:
'ins_nyd2 = 0;
ins_nyd = 203;
- //setquest 3135;
- warp "nyd_dun02",98,196;
+ //setquest(3135);
+ warp("nyd_dun02", 98, 196);
end;
case 2:
- mes "[World Tree Yggdrasil]";
- mes "Is that so... I'll be around if you want to leave.";
- close;
+ mes("[World Tree Yggdrasil]");
+ mes("Is that so... I'll be around if you want to leave.");
+ close();
}
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname("World Tree Yggdrasil#2F");
+ disablenpc(instance_npcname("World Tree Yggdrasil#2F"));
end;
OnEnable:
- enablenpc instance_npcname("World Tree Yggdrasil#2F");
- mapannounce instance_mapname("2@nyd"), "World Tree Yggdrasil : You did good. Have everyone go to the Magic Circle in the middle, and get ready for the destruction of the nest.",bc_map,"0x00ff99";
+ enablenpc(instance_npcname("World Tree Yggdrasil#2F"));
+ mapannounce(instance_mapname("2@nyd"), _("World Tree Yggdrasil : You did good. Have everyone go to the Magic Circle in the middle, and get ready for the destruction of the nest."), bc_map, C_SPRINGGREEN);
end;
}
2@nyd,115,278,0 script nyd_2f_red FAKE_NPC,5,5,{
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- enablenpc instance_npcname(strnpcinfo(NPC_NAME));
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_warp1")+"::OnEnable";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_warp2")+"::OnEnable";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_warp3")+"::OnEnable";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_c")+"::OnEnable";
- initnpctimer;
+ enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_warp1")+"::OnEnable");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_warp2")+"::OnEnable");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_warp3")+"::OnEnable");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_c")+"::OnEnable");
+ initnpctimer();
end;
OnDisable:
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_warp1")+"::OnDisable";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_warp2")+"::OnDisable";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME)+"_warp3")+"::OnDisable";
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_warp1")+"::OnDisable");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_warp2")+"::OnDisable");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME)+"_warp3")+"::OnDisable");
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnTouch:
- if (compare(strnpcinfo(NPC_NAME),"red")) {
- percentheal -50,0;
- percentheal -30,0;
- sc_start SC_BLOODING,60000,0;
- } else if (compare(strnpcinfo(NPC_NAME),"white")) {
- percentheal -50,0;
- sc_start SC_FREEZE,20000,0;
- } else if (compare(strnpcinfo(NPC_NAME),"yellow")) {
- percentheal 0,-50;
- sc_start SC_SLEEP,20000,0;
- sc_start SC_CONFUSION,60000,0;
- } else if (compare(strnpcinfo(NPC_NAME),"green")) {
- percentheal -50,-50;
- sc_start SC_POISON,60000,0;
+ if (compare(strnpcinfo(NPC_NAME), "red")) {
+ percentheal(-50, 0);
+ percentheal(-30, 0);
+ sc_start(SC_BLOODING, 60000, 0);
+ } else if (compare(strnpcinfo(NPC_NAME), "white")) {
+ percentheal(-50, 0);
+ sc_start(SC_FREEZE, 20000, 0);
+ } else if (compare(strnpcinfo(NPC_NAME), "yellow")) {
+ percentheal(0, -50);
+ sc_start(SC_SLEEP, 20000, 0);
+ sc_start(SC_CONFUSION, 60000, 0);
+ } else if (compare(strnpcinfo(NPC_NAME), "green")) {
+ percentheal(-50, -50);
+ sc_start(SC_POISON, 60000, 0);
}
end;
OnTimer10000:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
- stopnpctimer;
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ stopnpctimer();
end;
}
2@nyd,6,6,0 script nyd_2f_red_c FAKE_NPC,{
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- enablenpc instance_npcname(strnpcinfo(NPC_NAME));
- initnpctimer;
+ enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ initnpctimer();
.@map$ = instance_mapname("2@nyd");
.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
- if (compare(strnpcinfo(NPC_NAME),"red")) {
- monster .@map$,120,285,"Nidhoggur's Guardian#1",2020,1,.@label$;
- monster .@map$,119,286,"Nidhoggur's Guardian#2",2020,1,.@label$;
- monster .@map$,120,270,"Nidhoggur's Guardian#3",2020,1,.@label$;
- monster .@map$,119,269,"Nidhoggur's Guardian#4",2021,1,.@label$;
- monster .@map$,118,270,"Nidhoggur's Guardian#5",2021,1,.@label$;
- } else if (compare(strnpcinfo(NPC_NAME),"white")) {
- monster .@map$,120,380,"Nidhoggur's Guardian#1",2020,1,.@label$;
- monster .@map$,119,381,"Nidhoggur's Guardian#2",2020,1,.@label$;
- monster .@map$,120,367,"Nidhoggur's Guardian#3",2020,1,.@label$;
- monster .@map$,119,366,"Nidhoggur's Guardian#4",2021,1,.@label$;
- monster .@map$,118,365,"Nidhoggur's Guardian#5",2021,1,.@label$;
- } else if (compare(strnpcinfo(NPC_NAME),"yellow")) {
- monster .@map$,282,284,"Nidhoggur's Guardian#1",2020,1,.@label$;
- monster .@map$,283,283,"Nidhoggur's Guardian#2",2020,1,.@label$;
- monster .@map$,280,275,"Nidhoggur's Guardian#3",2020,1,.@label$;
- monster .@map$,281,276,"Nidhoggur's Guardian#4",2021,1,.@label$;
- monster .@map$,281,277,"Nidhoggur's Guardian#5",2021,1,.@label$;
- } else if (compare(strnpcinfo(NPC_NAME),"green")) {
- monster .@map$,282,378,"Nidhoggur's Guardian#1",2020,1,.@label$;
- monster .@map$,283,377,"Nidhoggur's Guardian#2",2020,1,.@label$;
- monster .@map$,280,368,"Nidhoggur's Guardian#3",2020,1,.@label$;
- monster .@map$,281,368,"Nidhoggur's Guardian#4",2021,1,.@label$;
- monster .@map$,281,367,"Nidhoggur's Guardian#5",2021,1,.@label$;
+ if (compare(strnpcinfo(NPC_NAME), "red")) {
+ monster(.@map$, 120, 285, _("Nidhoggur's Guardian#1"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 119, 286, _("Nidhoggur's Guardian#2"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 120, 270, _("Nidhoggur's Guardian#3"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 119, 269, _("Nidhoggur's Guardian#4"), PHYLLA, 1, .@label$);
+ monster(.@map$, 118, 270, _("Nidhoggur's Guardian#5"), PHYLLA, 1, .@label$);
+ } else if (compare(strnpcinfo(NPC_NAME), "white")) {
+ monster(.@map$, 120, 380, _("Nidhoggur's Guardian#1"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 119, 381, _("Nidhoggur's Guardian#2"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 120, 367, _("Nidhoggur's Guardian#3"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 119, 366, _("Nidhoggur's Guardian#4"), PHYLLA, 1, .@label$);
+ monster(.@map$, 118, 365, _("Nidhoggur's Guardian#5"), PHYLLA, 1, .@label$);
+ } else if (compare(strnpcinfo(NPC_NAME), "yellow")) {
+ monster(.@map$, 282, 284, _("Nidhoggur's Guardian#1"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 283, 283, _("Nidhoggur's Guardian#2"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 280, 275, _("Nidhoggur's Guardian#3"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 281, 276, _("Nidhoggur's Guardian#4"), PHYLLA, 1, .@label$);
+ monster(.@map$, 281, 277, _("Nidhoggur's Guardian#5"), PHYLLA, 1, .@label$);
+ } else if (compare(strnpcinfo(NPC_NAME), "green")) {
+ monster(.@map$, 282, 378, _("Nidhoggur's Guardian#1"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 283, 377, _("Nidhoggur's Guardian#2"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 280, 368, _("Nidhoggur's Guardian#3"), RHYNCHO, 1, .@label$);
+ monster(.@map$, 281, 368, _("Nidhoggur's Guardian#4"), PHYLLA, 1, .@label$);
+ monster(.@map$, 281, 367, _("Nidhoggur's Guardian#5"), PHYLLA, 1, .@label$);
}
end;
OnMyMobDead:
.@map$ = instance_mapname("2@nyd");
- if (mobcount(.@map$,instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) {
- mapannounce .@map$, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic")+"::OnEnable";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable";
+ if (mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) {
+ mapannounce(.@map$, _("Nidhoggur's Shadow : You're not bad... but I will be your opponent this time."), bc_map, C_SPRINGGREEN);
+ donpcevent(instance_npcname("nyd_2f_boss_enter_logic")+"::OnEnable");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable");
end;
}
end;
/*
OnReset: // Label not called.
- killmonster instance_mapname("2@nyd"),instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable";
+ killmonster(instance_mapname("2@nyd"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable");
end;
*/
OnDisable:
- stopnpctimer;
- killmonster instance_mapname("2@nyd"),instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"; //custom
- donpcevent instance_npcname(substr(strnpcinfo(NPC_NAME),0,getstrlen(strnpcinfo(NPC_NAME))-3))+"::OnDisable";
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ stopnpctimer();
+ killmonster(instance_mapname("2@nyd"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); //custom
+ donpcevent(instance_npcname(substr(strnpcinfo(NPC_NAME), 0, getstrlen(strnpcinfo(NPC_NAME)) - 3))+"::OnDisable");
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnTimer180000:
- killmonster instance_mapname("2@nyd"),instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
- stopnpctimer;
- donpcevent instance_npcname("nyd_2f_boss_enter_call")+"::OnWarpColor";
+ killmonster(instance_mapname("2@nyd"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead");
+ stopnpctimer();
+ donpcevent(instance_npcname("nyd_2f_boss_enter_call")+"::OnWarpColor");
end;
}
2@nyd,130,298,0 script nyd_2f_red_warp1 FAKE_NPC,6,6,{
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- enablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnTouch:
- if (compare(strnpcinfo(NPC_NAME),"red"))
- warp instance_mapname("2@nyd"),115,278;
- else if (compare(strnpcinfo(NPC_NAME),"white"))
- warp instance_mapname("2@nyd"),115,373;
- else if (compare(strnpcinfo(NPC_NAME),"yellow"))
- warp instance_mapname("2@nyd"),284,278;
- else if (compare(strnpcinfo(NPC_NAME),"green"))
- warp instance_mapname("2@nyd"),284,374;
+ if (compare(strnpcinfo(NPC_NAME), "red"))
+ warp(instance_mapname("2@nyd"), 115, 278);
+ else if (compare(strnpcinfo(NPC_NAME), "white"))
+ warp(instance_mapname("2@nyd"), 115, 373);
+ else if (compare(strnpcinfo(NPC_NAME), "yellow"))
+ warp(instance_mapname("2@nyd"), 284, 278);
+ else if (compare(strnpcinfo(NPC_NAME), "green"))
+ warp(instance_mapname("2@nyd"), 284, 374);
end;
}
2@nyd,142,296,0 duplicate(nyd_2f_red_warp1) nyd_2f_red_warp2 FAKE_NPC,6,6
@@ -2170,129 +2182,133 @@ OnTouch:
2@nyd,1,1,0 script ins_nyd2_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("2@nyd"); //temp fix since all mobs spawn on the same (inaccessable) area
- areamonster .@map$,14,20,382,180,"Rhyncho",2020,40,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyRhynDead";
- areamonster .@map$,14,20,382,180,"Phylla",2021,40,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPhyDead";
- areamonster .@map$,14,20,382,180,"Dark Shadow",2023,40,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyDarkshaDead";
- areamonster .@map$,14,20,382,180,"Dark Pinguicula",2015,40,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPingDead";
+ areamonster(.@map$, 14, 20, 382, 180, _("Rhyncho"), RHYNCHO, 40, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyRhynDead");
+ areamonster(.@map$, 14, 20, 382, 180, _("Phylla"), PHYLLA, 40, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPhyDead");
+ areamonster(.@map$, 14, 20, 382, 180, _("Dark Shadow"), DARK_SHADOW, 40, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyDarkshaDead");
+ areamonster(.@map$, 14, 20, 382, 180, _("Dark Pinguicula"), PINGUICULA_D, 40, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPingDead");
end;
OnMyRhynDead:
- areamonster instance_mapname("2@nyd"),14,20,382,180,"Rhyncho",2020,1,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyRhynDead";
+ areamonster(instance_mapname("2@nyd"), 14, 20, 382, 180, _("Rhyncho"), RHYNCHO, 1, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyRhynDead");
end;
OnMyPhyDead:
- areamonster instance_mapname("2@nyd"),14,20,382,180,"Phylla",2021,1,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPhyDead";
+ areamonster(instance_mapname("2@nyd"), 14, 20, 382, 180, _("Phylla"), PHYLLA, 1, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPhyDead");
end;
OnMyDarkshaDead:
- areamonster instance_mapname("2@nyd"),14,20,382,180,"Dark Shadow",2023,1,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyDarkshaDead";
+ areamonster(instance_mapname("2@nyd"), 14, 20, 382, 180, _("Dark Shadow"), DARK_SHADOW, 1, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyDarkshaDead");
end;
OnMyPingDead:
- areamonster instance_mapname("2@nyd"),14,20,382,180,"Dark Pinguicula",2015,1,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPingDead";
+ areamonster(instance_mapname("2@nyd"), 14, 20, 382, 180, _("Dark Pinguicula") , PINGUICULA_D, 1, instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyPingDead");
end;
}
//== GM Management NPCs ====================================
sec_in02,36,167,3 script Nidhoggur Manager 4_M_FAIRYSOLDIER,1,1,{
- callfunc "F_GM_NPC";
- mes "Enter the password.";
- next;
- if (callfunc("F_GM_NPC","1854",1) == 0) {
- mes "Incorrect password.";
- close;
+ callfunc("F_GM_NPC");
+ mes("Enter the password.");
+ next();
+ if (callfunc("F_GM_NPC", "1854", 1) == 0) {
+ mes("Incorrect password.");
+ close();
}
- mes "What do you need to do?";
- next;
- switch(select("Reset variables to allow entrance to Nidhoggur", "change variable 'ins_nyd'", "Remove 3 day timer 3135", "Confirm variable number")) {
+ mes("What do you need to do?");
+ next();
+ switch (select("Reset variables to allow entrance to Nidhoggur", "change variable 'ins_nyd'", "Remove 3 day timer 3135", "Confirm variable number")) {
case 1:
ins_nyd = 200;
ins_nyd2 = 0;
- erasequest 3135;
- mes "ins_nyd set to 200 ins_nyd2 set to 0";
- mes "quest 3135 erased.";
- close;
+ erasequest(3135);
+ mes("ins_nyd set to 200 ins_nyd2 set to 0");
+ mes("quest 3135 erased.");
+ close();
case 2:
- mes "Which variable do you want to change?";
- next;
- switch(select("ins_nyd", "ins_nyd2")) {
- case 1: .@var$ = "ins_nyd"; break;
- case 2: .@var$ = "ins_nyd2"; break;
+ mes("Which variable do you want to change?");
+ next();
+ switch (select("ins_nyd", "ins_nyd2")) {
+ case 1:
+ .@var$ = "ins_nyd";
+ break;
+ case 2:
+ .@var$ = "ins_nyd2";
+ break;
}
- mes "Input the variable number";
- next;
- input .@input;
- setd .@var$, .@input;
- mes .@var$+" has been set to "+.@input+" .";
- close;
+ mes("Input the variable number");
+ next();
+ input(.@input);
+ setd(.@var$, .@input);
+ mesf("%s has been set to %d.", .@var$, .@input);
+ close();
case 3:
- mes "The 3 day timer will be removed when you close this dialog.";
- next;
- erasequest 3135;
- mes "Finished removing Quest Timer.";
- close;
+ mes("The 3 day timer will be removed when you close this dialog.");
+ next();
+ erasequest(3135);
+ mes("Finished removing Quest Timer.");
+ close();
case 4:
- mes "ins_nyd is at "+ins_nyd+".";
- mes "ins_nyd2 is at "+ins_nyd2+".";
- close;
+ mesf("ins_nyd is at %d.", ins_nyd);
+ mesf("ins_nyd2 is at %d.", ins_nyd2);
+ close();
}
}
nyd_dun02,7,7,2 script Purification Admin#nyd2 CLEAR_NPC,2,0,{
- callfunc "F_GM_NPC";
- mes "Please enter the password";
- .@i = callfunc("F_GM_NPC","dragonslayer",1);
- next;
+ callfunc("F_GM_NPC");
+ mes("Please enter the password");
+ .@i = callfunc("F_GM_NPC", "dragonslayer", 1);
+ next();
if (.@i == 0) {
- mes "Enter the password exactly.";
- close;
+ mes("Enter the password exactly.");
+ close();
}
- switch(select("Generate Purification Stone", "Remove Purification Stone", "Turn Entrance NPC OFF", "Turn Entrance NPC On", "Cancel")) {
+ switch (select("Generate Purification Stone", "Remove Purification Stone", "Turn Entrance NPC OFF", "Turn Entrance NPC On", "Cancel")) {
case 1:
- mes "Purification stone has been created and will stay on for 30 minutes.";
- donpcevent "Purification Stone#nyd2::OnEnable";
- close;
+ mes("Purification stone has been created and will stay on for 30 minutes.");
+ donpcevent("Purification Stone#nyd2::OnEnable");
+ close();
case 2:
- mes "The Purification Stone has been destroyed.";
- donpcevent "Purification Stone#nyd2::OnDisable";
- close;
+ mes("The Purification Stone has been destroyed.");
+ donpcevent("Purification Stone#nyd2::OnDisable");
+ close();
case 3:
- mes "The Yggdrasil Gatekeeper at nyd_dun02 100 201 is now OFF.";
- disablenpc "Yggdrasil Gatekeeper";
- close;
+ mes("The Yggdrasil Gatekeeper at nyd_dun02 100 201 is now OFF.");
+ disablenpc("Yggdrasil Gatekeeper");
+ close();
case 4:
- mes "The Yggdrasil Gatekeeper at nyd_dun02 100 201 is now On.";
- enablenpc "Yggdrasil Gatekeeper";
- close;
+ mes("The Yggdrasil Gatekeeper at nyd_dun02 100 201 is now On.");
+ enablenpc("Yggdrasil Gatekeeper");
+ close();
case 5:
- close;
+ close();
}
}
nyd_dun02,88,195,4 script Purification Stone#nyd2 2_MONEMUS,{
- erasequest 3135;
- erasequest 3136;
+ erasequest(3135);
+ erasequest(3136);
ins_nyd = 200;
ins_nyd2 = 0;
- mes "^0000FFThe records and after-effect related to the Nidhoggur's Nest have been removed. You can generate and enter the dungeon again.^000000";
- close;
+ mes("^0000FFThe records and after-effect related to the Nidhoggur's Nest have been removed. You can generate and enter the dungeon again.^000000");
+ close();
OnInit:
- disablenpc "Purification Stone#nyd2";
+ disablenpc("Purification Stone#nyd2");
end;
OnEnable:
- initnpctimer;
+ initnpctimer();
end;
OnDisable:
- stopnpctimer;
- disablenpc "Purification Stone#nyd2";
+ stopnpctimer();
+ disablenpc("Purification Stone#nyd2");
end;
OnTimer1000:
- enablenpc "Purification Stone#nyd2";
+ enablenpc("Purification Stone#nyd2");
end;
OnTimer1740000:
- mapannounce "nyd_dun02","The Purification Stone will be destroyed in one minute.",bc_map,"0x00FF99",FW_NORMAL,12;
+ mapannounce("nyd_dun02", _("The Purification Stone will be destroyed in one minute."), bc_map, C_SPRINGGREEN, FW_NORMAL, 12);
end;
OnTimer1800000:
- disablenpc "Purification Stone#nyd2";
+ disablenpc("Purification Stone#nyd2");
end;
}
diff --git a/npc/re/instances/BakonawaLake.txt b/npc/re/instances/BakonawaLake.txt
index 2868cc589..65622171b 100644
--- a/npc/re/instances/BakonawaLake.txt
+++ b/npc/re/instances/BakonawaLake.txt
@@ -34,223 +34,234 @@
//=========================================================================
ma_scene01,174,179,4 script Taho 4_M_DEWZATIMAN,{
- disable_items;
- if (checkweight(Knife,1) == 0) {
- mes "You are carrying too many items. Come back after taking off some of them.";
- close;
+ disable_items();
+ if (checkweight(Knife, 1) == 0) {
+ mes("You are carrying too many items. Come back after taking off some of them.");
+ close();
}
if (MaxWeight - Weight < 10000) {
- mes "You are carrying too much weight. Come back after reducing the weight.";
- close;
+ mes("You are carrying too much weight. Come back after reducing the weight.");
+ close();
}
if (BaseLevel < 140) {
- mes "[Taho]";
- mes "Hey. This is too dangerous a place for you. You cannot keep yourself safe. Get out of here and go to the village right now!";
- close;
+ mes("[Taho]");
+ mes("Hey. This is too dangerous a place for you. You cannot keep yourself safe. Get out of here and go to the village right now!");
+ close();
}
if (malaya_bakona1 < 7 && malaya_bakona2 < 15) {
- mes "[Taho]";
- mes "We are gonna be killed all by that Bakonawa. Ah, we must slay him but unfortunately we are not prepared.";
- close;
+ mes("[Taho]");
+ mes("We are gonna be killed all by that Bakonawa. Ah, we must slay him but unfortunately we are not prepared.");
+ close();
}
.@party_id = getcharid(CHAR_ID_PARTY);
- .@md_name$ = "Bakonawa Lake";
+ .@md_name$ = _("Bakonawa Lake");
- .@baku_time = questprogress(12278,PLAYTIME);
+ .@baku_time = questprogress(12278, PLAYTIME);
if (!.@baku_time) {
- if (!questprogress(12279)) setquest 12279;
+ if (!questprogress(12279))
+ setquest(12279);
}
if (!.@party_id) {
- mes "[Taho]";
- mes "Isn't there any company who can go with you? Or even if you wanna go alone, come after organizing a party.";
- close;
+ mes("[Taho]");
+ mes("Isn't there any company who can go with you? Or even if you wanna go alone, come after organizing a party.");
+ close();
}
if (!.@baku_time) {
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2)) {
- mes "[Taho]";
- mes "Are you the leader of the Bakonawa slayers? The road is not well so we have to go down the cliff with a rope, is that OK?";
- next;
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) {
+ mes("[Taho]");
+ mes("Are you the leader of the Bakonawa slayers? The road is not well so we have to go down the cliff with a rope, is that OK?");
+ next();
.@i = select("Please weave a rope.", "Now I will go down.", "Cancel.");
} else {
- mes "[Taho]";
- mes "You came for slaying Bakonawa. The leader of your party has to help me weaving the rope for going down.";
- next;
+ mes("[Taho]");
+ mes("You came for slaying Bakonawa. The leader of your party has to help me weaving the rope for going down.");
+ next();
.@i = select("", "Now I will go down.", "Cancel.");
}
- switch(.@i) {
+ switch (.@i) {
case 1:
- .@instance = instance_create(.@md_name$,.@party_id);
+ .@instance = instance_create(.@md_name$, .@party_id);
if (.@instance < 0) {
- mes "[Taho]";
- mes "Oh, the rope got dropped. I have to make a new one.";
- close;
+ mes("[Taho]");
+ mes("Oh, the rope got dropped. I have to make a new one.");
+ close();
}
- if (instance_attachmap("1@ma_b",.@instance) == "") {
- mes "^0000ff"+.@md_name$+"^000000 - Reservation Failed!";
+ if (instance_attachmap("1@ma_b", .@instance) == "") {
+ mesf("^0000ff%s^000000 - Reservation Failed!", .@md_name$);
instance_destroy(.@instance);
- close;
+ close();
}
- instance_set_timeout 7200,300,.@instance;
+ instance_set_timeout(7200, 300, .@instance);
instance_init(.@instance);
- mes "[Taho]";
- mes "Now I'm weaving, so you can go down when I'm done.";
- close;
+ mes("[Taho]");
+ mes("Now I'm weaving, so you can go down when I'm done.");
+ close();
case 2:
- if( has_instance("1@ma_b") == "" ) {
- mes "The memorial dungeon "+.@md_name$+" does not exist.";
- mes "The party leader did not generate the dungeon yet.";
- close;
+ if (has_instance("1@ma_b") == "") {
+ mesf("The memorial dungeon %s does not exist.", .@md_name$);
+ mes("The party leader did not generate the dungeon yet.");
+ close();
} else {
- mapannounce "ma_scene01","A party member, "+strcharinfo(PC_NAME)+" of the party "+getpartyname(.@party_id)+" is entering the dungeon, "+.@md_name$+".",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
- setquest 12278;
- warp "1@ma_b",64,51;
+ mapannounce("ma_scene01", sprintf(_$("A party member, %s of the party %s is entering the dungeon, %s."), strcharinfo(PC_NAME), getpartyname(.@party_id), .@md_name$), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
+ setquest(12278);
+ warp("1@ma_b", 64, 51);
end;
}
case 3:
- close;
+ close();
}
} else if (.@baku_time == 1) {
- mes "[Taho]";
- mes "The rope used for getting to the Lake is already broken. We are now cleaning up the surroundings so come back after some time.";
- close;
+ mes("[Taho]");
+ mes("The rope used for getting to the Lake is already broken. We are now cleaning up the surroundings so come back after some time.");
+ close();
} else if (.@baku_time == 2) {
- mes "[Taho]";
- mes "It's all cleaned up around here. Now you can go down again after getting a rope.";
- erasequest 12278;
- close;
+ mes("[Taho]");
+ mes("It's all cleaned up around here. Now you can go down again after getting a rope.");
+ erasequest(12278);
+ close();
}
}
sec_in02,26,26,4 script Bakonawa's Rage 4_M_DEWZATIMAN,{
- callfunc "F_GM_NPC";
- mes "[Taho]";
- mes "My name is Minky.";
- if (callfunc("F_GM_NPC",1854,0) == 1) {
- erasequest 12278;
- erasequest 12279;
+ callfunc("F_GM_NPC");
+ mes("[Taho]");
+ mes("My name is Minky.");
+ if (callfunc("F_GM_NPC", 1854, 0) == 1) {
+ erasequest(12278);
+ erasequest(12279);
malaya_bakona1 = 7;
malaya_bakona2 = 15;
}
- close;
+ close();
}
1@ma_b,62,52,4 script Taho#nf 4_M_DEWZATIMAN,{
- mes "[Taho]";
- mes "Heehee, I could join the Bakonawa hunt, but I'd rather hide behind that rock and cheer you guys on.";
- next;
- mes "[Taho]";
- mes "Bakonawa becomes invincible at some point. When that time comes, listen to my guides carefully. Just trust me and all will be good.";
- next;
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- mes "[Taho]";
- mes "Now I will make Bakonawa spring out from the lake.";
- next;
- switch(select("Hold on! I'm not ready yet!", "Let's do it!")) {
+ mes("[Taho]");
+ mes("Heehee, I could join the Bakonawa hunt, but I'd rather hide behind that rock and cheer you guys on.");
+ next();
+ mes("[Taho]");
+ mes("Bakonawa becomes invincible at some point. When that time comes, listen to my guides carefully. Just trust me and all will be good.");
+ next();
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ mes("[Taho]");
+ mes("Now I will make Bakonawa spring out from the lake.");
+ next();
+ switch (select("Hold on! I'm not ready yet!", "Let's do it!")) {
case 1:
- mes "[Taho]";
- mes "Oh... alright... tell me when you are ready.";
- close;
+ mes("[Taho]");
+ mes("Oh... alright... tell me when you are ready.");
+ close();
case 2:
- mes "[Taho]";
- mes "Then I will drop a drop of Albopal to this lake.";
- next;
- mes "[Taho]";
- mes "Once Bakonawa tastes this, he will surface...";
- donpcevent instance_npcname("#Bakonawan1")+"::OnStart";
- disablenpc instance_npcname("Taho#nf");
- close;
+ mes("[Taho]");
+ mes("Then I will drop a drop of Albopal to this lake.");
+ next();
+ mes("[Taho]");
+ mes("Once Bakonawa tastes this, he will surface...");
+ donpcevent(instance_npcname("#Bakonawan1")+"::OnStart");
+ disablenpc(instance_npcname("Taho#nf"));
+ close();
}
} else {
- mes "[Taho]";
- mes "I am dropping the Alpopal to make Bakonawa mad. Bakonawa can be a good source of protein once we get him.";
- close;
+ mes("[Taho]");
+ mes("I am dropping the Alpopal to make Bakonawa mad. Bakonawa can be a good source of protein once we get him.");
+ close();
}
}
1@ma_b,36,111,4 script #Bakonawan1 CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#Bakonawan1");
+ disablenpc(instance_npcname("#Bakonawan1"));
end;
OnStart:
- enablenpc instance_npcname("#Bakonawan1");
+ enablenpc(instance_npcname("#Bakonawan1"));
.@map$ = instance_mapname("1@ma_b");
- mapannounce .@map$,"Taho: I can see him there on the surface! ATTACK!!!",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
- monster .@map$,78,81,"Bakonawa",2320,1,instance_npcname("#Bakonawan1")+"::OnMyMobDead"; //original: (78,83)
- initnpctimer;
+ mapannounce(.@map$, _("Taho: I can see him there on the surface! ATTACK!!!"), bc_map, C_AQUA); //FW_NORMAL 15 0 0
+ monster(.@map$, 78, 81, _("Bakonawa"), BAKONAWA_1, 1, instance_npcname("#Bakonawan1")+"::OnMyMobDead"); //original: (78, 83)
+ initnpctimer();
end;
OnFail:
- killmonster instance_mapname("1@ma_b"),instance_npcname("#Bakonawan1")+"::OnMyMobDead";
+ killmonster(instance_mapname("1@ma_b"), instance_npcname("#Bakonawan1")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@ma_b");
- if (mobcount(.@map$,instance_npcname("#Bakonawan1")+"::OnMyMobDead") < 1) {
- donpcevent instance_npcname("#BakonawaDeadn1")+"::OnStart";
- killmonster .@map$,instance_npcname("#Bakonawan1")+"::OnMyMobDead";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan1");
+ if (mobcount(.@map$, instance_npcname("#Bakonawan1")+"::OnMyMobDead") < 1) {
+ donpcevent(instance_npcname("#BakonawaDeadn1")+"::OnStart");
+ killmonster(.@map$, instance_npcname("#Bakonawan1")+"::OnMyMobDead");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan1"));
}
end;
-OnTimer1000: callsub OnAnnounce,"10 minutes";
-OnTimer60000: callsub OnAnnounce,"9 minutes";
-OnTimer120000: callsub OnAnnounce,"8 minutes";
-OnTimer180000: callsub OnAnnounce,"7 minutes";
-OnTimer240000: callsub OnAnnounce,"6 minutes";
-OnTimer300000: callsub OnAnnounce,"5 minutes";
-OnTimer360000: callsub OnAnnounce,"4 minutes";
-OnTimer420000: callsub OnAnnounce,"3 minutes";
-OnTimer480000: callsub OnAnnounce,"2 minutes";
-OnTimer540000: callsub OnAnnounce,"1 minute";
+OnTimer1000:
+ callsub(OnAnnounce, _("10 minutes"));
+OnTimer60000:
+ callsub(OnAnnounce, _("9 minutes"));
+OnTimer120000:
+ callsub(OnAnnounce, _("8 minutes"));
+OnTimer180000:
+ callsub(OnAnnounce, _("7 minutes"));
+OnTimer240000:
+ callsub(OnAnnounce, _("6 minutes"));
+OnTimer300000:
+ callsub(OnAnnounce, _("5 minutes"));
+OnTimer360000:
+ callsub(OnAnnounce, _("4 minutes"));
+OnTimer420000:
+ callsub(OnAnnounce, _("3 minutes"));
+OnTimer480000:
+ callsub(OnAnnounce, _("2 minutes"));
+OnTimer540000:
+ callsub(OnAnnounce, _("1 minute"));
OnTimer570000:
- mapannounce instance_mapname("1@ma_b"),"Time Limit: 30 seconds",bc_map,"0xff4400"; //FW_NORMAL 18 0 0
- donpcevent instance_npcname("#SummonPuppetsn1")+"::OnStart";
+ mapannounce(instance_mapname("1@ma_b"), _("Time Limit: 30 seconds"), bc_map, "0xff4400"); //FW_NORMAL 18 0 0
+ donpcevent(instance_npcname("#SummonPuppetsn1")+"::OnStart");
end;
OnTimer600000:
.@map$ = instance_mapname("1@ma_b");
- mapannounce .@map$,"Bakonawa has escaped deep into the lake.",bc_map,"0xffff00"; //FW_NORMAL 20 0 0
- donpcevent instance_npcname("Taho#Fail")+"::OnStart";
- donpcevent instance_npcname("#Bakonawan1")+"::OnFail";
- killmonster .@map$,instance_npcname("#Bakonawan1")+"::OnMyMobDead";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan1");
+ mapannounce(.@map$, _("Bakonawa has escaped deep into the lake."), bc_map, C_YELLOW); //FW_NORMAL 20 0 0
+ donpcevent(instance_npcname("Taho#Fail")+"::OnStart");
+ donpcevent(instance_npcname("#Bakonawan1")+"::OnFail");
+ killmonster(.@map$, instance_npcname("#Bakonawan1")+"::OnMyMobDead");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan1"));
end;
OnAnnounce:
- mapannounce instance_mapname("1@ma_b"),"Time Limit: "+getarg(0),bc_map,"0xff4400"; //FW_NORMAL 15 0 0
- donpcevent instance_npcname("#SummonPuppetsn1")+"::OnStart";
+ mapannounce(instance_mapname("1@ma_b"), sprintf(_$("Time Limit: %s"), getarg(0)), bc_map, "0xff4400"); //FW_NORMAL 15 0 0
+ donpcevent(instance_npcname("#SummonPuppetsn1")+"::OnStart");
end;
}
1@ma_b,78,81,0 script #SummonPuppetsn1 HIDDEN_WARP_NPC,4,5,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#SummonPuppetsn1");
+ disablenpc(instance_npcname("#SummonPuppetsn1"));
end;
OnStart:
- stopnpctimer;
- enablenpc instance_npcname("#SummonPuppetsn1");
- initnpctimer;
+ stopnpctimer();
+ enablenpc(instance_npcname("#SummonPuppetsn1"));
+ initnpctimer();
end;
OnTouch:
- stopnpctimer;
- disablenpc instance_npcname("#SummonPuppetsn1");
+ stopnpctimer();
+ disablenpc(instance_npcname("#SummonPuppetsn1"));
end;
OnTimer5000:
- setarray .@x[0],79,71,60,61,57,89,95,96,99;
- setarray .@y[0],71,72,80,90,99,73,82,90,99;
+ setarray(.@x[0], 79, 71, 60, 61, 57, 89, 95, 96, 99);
+ setarray(.@y[0], 71, 72, 80, 90, 99, 73, 82, 90, 99);
.@map$ = instance_mapname("1@ma_b");
- for(.@i = 0; .@i<9; ++.@i) {
- .@rand = rand(1,10);
+ for (.@i = 0; .@i < 9; ++.@i) {
+ .@rand = rand(1, 10);
if (.@rand > 7)
- monster .@map$,.@x[.@i],.@y[.@i],"Bakonawa's Will",2337,1,instance_npcname("#SummonPuppetsn1")+"::OnMyMobDead";
+ monster(.@map$, .@x[.@i], .@y[.@i], _("Bakonawa's Will"), HIDDEN_MOB, 1, instance_npcname("#SummonPuppetsn1")+"::OnMyMobDead");
else if (.@rand < 4)
- monster .@map$,.@x[.@i],.@y[.@i],"Bakonawa's Will",2343,1,instance_npcname("#SummonPuppetsn1")+"::OnMyMobDead";
+ monster(.@map$, .@x[.@i], .@y[.@i], _("Bakonawa's Will"), HIDDEN_MOB_W, 1, instance_npcname("#SummonPuppetsn1")+"::OnMyMobDead");
}
end;
OnTimer50000:
- killmonster instance_mapname("1@ma_b"),instance_npcname("#SummonPuppetsn1")+"::OnMyMobDead";
- stopnpctimer;
- disablenpc instance_npcname("#SummonPuppetsn1");
+ killmonster(instance_mapname("1@ma_b"), instance_npcname("#SummonPuppetsn1")+"::OnMyMobDead");
+ stopnpctimer();
+ disablenpc(instance_npcname("#SummonPuppetsn1"));
end;
OnMyMobDead:
end;
@@ -259,111 +270,126 @@ OnMyMobDead:
1@ma_b,1,5,4 script #BakonawaDeadn1 CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#BakonawaDeadn1");
+ disablenpc(instance_npcname("#BakonawaDeadn1"));
end;
OnStart:
- enablenpc instance_npcname("#BakonawaDeadn1");
- initnpctimer;
+ enablenpc(instance_npcname("#BakonawaDeadn1"));
+ initnpctimer();
end;
OnTimer100:
- mapannounce instance_mapname("1@ma_b"),"Taho: Good! Bakonawa is hidden under water. He will now try to swallow the moon.",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
+ mapannounce(instance_mapname("1@ma_b"), _("Taho: Good! Bakonawa is hidden under water. He will now try to swallow the moon."), bc_map, C_AQUA); //FW_NORMAL 15 0 0
end;
OnTimer5000:
- mapannounce instance_mapname("1@ma_b"),"Taho: We must make loud noises with caldron and gong so he can never concentrate on the moon!",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
+ mapannounce(instance_mapname("1@ma_b"), _("Taho: We must make loud noises with caldron and gong so he can never concentrate on the moon!"), bc_map, C_AQUA); //FW_NORMAL 15 0 0
end;
OnTimer10000:
- mapannounce instance_mapname("1@ma_b"),"Taho: Do not engage on him even if he come above the surface. Just make loud noises!",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
+ mapannounce(instance_mapname("1@ma_b"), _("Taho: Do not engage on him even if he come above the surface. Just make loud noises!"), bc_map, C_AQUA); //FW_NORMAL 15 0 0
end;
OnTimer15000:
- mapannounce instance_mapname("1@ma_b"),"Mission - Destroy 2 caldrons and 2 gongs on left and right sides of the lake.",bc_map,"0xff3300"; //FW_NORMAL 15 0 0
- donpcevent instance_npcname("#Bakonawan2")+"::OnStart";
- stopnpctimer;
- disablenpc instance_npcname("#BakonawaDeadn1");
+ mapannounce(instance_mapname("1@ma_b"), _("Mission - Destroy 2 caldrons and 2 gongs on left and right sides of the lake."), bc_map, "0xff3300"); //FW_NORMAL 15 0 0
+ donpcevent(instance_npcname("#Bakonawan2")+"::OnStart");
+ stopnpctimer();
+ disablenpc(instance_npcname("#BakonawaDeadn1"));
end;
}
1@ma_b,36,111,4 script #Bakonawan2 CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#Bakonawan2");
+ disablenpc(instance_npcname("#Bakonawan2"));
end;
OnStart:
- enablenpc instance_npcname("#Bakonawan2");
+ enablenpc(instance_npcname("#Bakonawan2"));
.@label$ = instance_npcname("#Bakonawan2")+"::OnMyMobDead";
.@map$ = instance_mapname("1@ma_b");
- monster .@map$,95,98,"Caldron",2328,1,.@label$;
- monster .@map$,60,98,"Caldron",2328,1,.@label$;
- monster .@map$,97,104,"Gong",2328,1,.@label$;
- monster .@map$,58,104,"Gong",2328,1,.@label$;
- donpcevent instance_npcname("#Bakonawan2-1")+"::OnStart";
- initnpctimer;
+ monster(.@map$, 95, 98, _("Caldron"), MA_DRUM, 1, .@label$);
+ monster(.@map$, 60, 98, _("Caldron"), MA_DRUM, 1, .@label$);
+ monster(.@map$, 97, 104, _("Gong"), MA_DRUM, 1, .@label$);
+ monster(.@map$, 58, 104, _("Gong"), MA_DRUM, 1, .@label$);
+ donpcevent(instance_npcname("#Bakonawan2-1")+"::OnStart");
+ initnpctimer();
end;
OnMyMobDead:
.@map$ = instance_mapname("1@ma_b");
- .@mob_dead_num = mobcount(.@map$,instance_npcname("#Bakonawan2")+"::OnMyMobDead");
+ .@mob_dead_num = mobcount(.@map$, instance_npcname("#Bakonawan2")+"::OnMyMobDead");
if (.@mob_dead_num < 1) {
- donpcevent instance_npcname("#Bakonawan2-1")+"::OnEnd";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan2");
- } else
- mapannounce .@map$,"Taho: Good! "+.@mob_dead_num+" left to go!",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
- end;
-OnTimer1000: callsub OnAnnounce,"5 minutes",15,1;
-OnTimer60000: callsub OnAnnounce,"4 minutes",15,1;
-OnTimer120000: callsub OnAnnounce,"3 minutes",15,1;
-OnTimer180000: callsub OnAnnounce,"2 minutes",15,1;
-OnTimer240000: callsub OnAnnounce,"1 minute",15,1;
-OnTimer270000: callsub OnAnnounce,"30 seconds",15,0;
-OnTimer280000: callsub OnAnnounce,"20 seconds",15,0;
-OnTimer290000: callsub OnAnnounce,"10 seconds",15,0;
-OnTimer295000: callsub OnAnnounce,"5 seconds",16,0;
-OnTimer296000: callsub OnAnnounce,"4 seconds",17,0;
-OnTimer297000: callsub OnAnnounce,"3 seconds",18,0;
-OnTimer298000: callsub OnAnnounce,"2 seconds",19,0;
-OnTimer299000: callsub OnAnnounce,"1 second",20,0;
+ donpcevent(instance_npcname("#Bakonawan2-1")+"::OnEnd");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan2"));
+ } else {
+ mapannounce(.@map$, sprintf(_$("Taho: Good! %d left to go!"), .@mob_dead_num), bc_map, C_AQUA); //FW_NORMAL 15 0 0
+ }
+ end;
+OnTimer1000:
+ callsub(OnAnnounce, _("5 minutes"), 15, 1);
+OnTimer60000:
+ callsub(OnAnnounce, _("4 minutes"), 15, 1);
+OnTimer120000:
+ callsub(OnAnnounce, _("3 minutes"), 15, 1);
+OnTimer180000:
+ callsub(OnAnnounce, _("2 minutes"), 15, 1);
+OnTimer240000:
+ callsub(OnAnnounce, _("1 minute"), 15, 1);
+OnTimer270000:
+ callsub(OnAnnounce, _("30 seconds"), 15, 0);
+OnTimer280000:
+ callsub(OnAnnounce, _("20 seconds"), 15, 0);
+OnTimer290000:
+ callsub(OnAnnounce, _("10 seconds"), 15, 0);
+OnTimer295000:
+ callsub(OnAnnounce, _("5 seconds"), 16, 0);
+OnTimer296000:
+ callsub(OnAnnounce, _("4 seconds"), 17, 0);
+OnTimer297000:
+ callsub(OnAnnounce, _("3 seconds"), 18, 0);
+OnTimer298000:
+ callsub(OnAnnounce, _("2 seconds"), 19, 0);
+OnTimer299000:
+ callsub(OnAnnounce, _("1 second"), 20, 0);
OnTimer300000:
.@map$ = instance_mapname("1@ma_b");
- mapannounce .@map$,"Bakonawa has escaped deep into the lake.",bc_map,"0xffff00"; //FW_NORMAL 20 0 0
- donpcevent instance_npcname("Taho#Fail")+"::OnStart";
- donpcevent instance_npcname("#Bakonawan2-1")+"::OnFail";
- killmonster .@map$,instance_npcname("#Bakonawan2")+"::OnMyMobDead";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan2");
+ mapannounce(.@map$, _("Bakonawa has escaped deep into the lake."), bc_map, C_YELLOW); //FW_NORMAL 20 0 0
+ donpcevent(instance_npcname("Taho#Fail")+"::OnStart");
+ donpcevent(instance_npcname("#Bakonawan2-1")+"::OnFail");
+ killmonster(.@map$, instance_npcname("#Bakonawan2")+"::OnMyMobDead");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan2"));
end;
OnAnnounce:
- mapannounce instance_mapname("1@ma_b"),"Time Limit: "+getarg(0),bc_map,"0xff4400"; //FW_NORMAL getarg(1) 0 0
- if (getarg(2)) donpcevent instance_npcname("#SummonPuppetsn1")+"::OnStart";
+ mapannounce(instance_mapname("1@ma_b"), sprintf(_$("Time Limit: %s"), getarg(0)), bc_map, "0xff4400"); //FW_NORMAL getarg(1) 0 0
+ if (getarg(2))
+ donpcevent(instance_npcname("#SummonPuppetsn1")+"::OnStart");
end;
}
1@ma_b,36,111,4 script #Bakonawan2-1 CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#Bakonawan2-1");
+ disablenpc(instance_npcname("#Bakonawan2-1"));
end;
OnStart:
- enablenpc instance_npcname("#Bakonawan2-1");
- monster instance_mapname("1@ma_b"),78,81,"Enraged Bakonawa",2321,1,instance_npcname("#Bakonawan2-1")+"::OnMyMobDead"; //original: (78,93)
+ enablenpc(instance_npcname("#Bakonawan2-1"));
+ monster(instance_mapname("1@ma_b"), 78, 81, _("Enraged Bakonawa"), BAKONAWA_2, 1, instance_npcname("#Bakonawan2-1")+"::OnMyMobDead"); //original: (78, 93)
end;
OnFail:
- killmonster instance_mapname("1@ma_b"),instance_npcname("#Bakonawan2-1")+"::OnMyMobDead";
+ killmonster(instance_mapname("1@ma_b"), instance_npcname("#Bakonawan2-1")+"::OnMyMobDead");
end;
OnEnd:
- enablenpc instance_npcname("#Bakonawan2-1");
- killmonster instance_mapname("1@ma_b"),instance_npcname("#Bakonawan2-1")+"::OnMyMobDead";
- initnpctimer;
+ enablenpc(instance_npcname("#Bakonawan2-1"));
+ killmonster(instance_mapname("1@ma_b"), instance_npcname("#Bakonawan2-1")+"::OnMyMobDead");
+ initnpctimer();
end;
OnTimer1000:
- mapannounce instance_mapname("1@ma_b"),"Taho: He is back into the lake again. Is it over?",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
+ mapannounce(instance_mapname("1@ma_b"), _("Taho: He is back into the lake again. Is it over?"), bc_map, C_AQUA); //FW_NORMAL 15 0 0
end;
OnTimer5000:
- mapannounce instance_mapname("1@ma_b"),"Taho: UHM! Something is moving up rapidly under the water! Ba... Bakonawa is coming!!",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
+ mapannounce(instance_mapname("1@ma_b"), _("Taho: UHM! Something is moving up rapidly under the water! Ba... Bakonawa is coming!!"), bc_map, C_AQUA); //FW_NORMAL 15 0 0
end;
OnTimer10000:
- mapannounce instance_mapname("1@ma_b"),"Mission - Eliminate Bakonawa who became more fierce.",bc_map,"0xff3300"; //FW_NORMAL 15 0 0
- donpcevent instance_npcname("#Bakonawan3")+"::OnStart";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan2-1");
+ mapannounce(instance_mapname("1@ma_b"), _("Mission - Eliminate Bakonawa who became more fierce."), bc_map, "0xff3300"); //FW_NORMAL 15 0 0
+ donpcevent(instance_npcname("#Bakonawan3")+"::OnStart");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan2-1"));
end;
OnMyMobDead:
end;
@@ -372,190 +398,212 @@ OnMyMobDead:
1@ma_b,36,111,4 script #Bakonawan3 CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#Bakonawan3");
+ disablenpc(instance_npcname("#Bakonawan3"));
end;
OnStart:
- enablenpc instance_npcname("#Bakonawan3");
- initnpctimer;
- monster instance_mapname("1@ma_b"),78,81,"Enraged Bakonawa",2322,1,instance_npcname("#Bakonawan3")+"::OnMyMobDead"; //original: (78,83)
- donpcevent instance_npcname("#Bakonawan3-1")+"::OnStart";
+ enablenpc(instance_npcname("#Bakonawan3"));
+ initnpctimer();
+ monster(instance_mapname("1@ma_b"), 78, 81, _("Enraged Bakonawa"), BAKONAWA_3, 1, instance_npcname("#Bakonawan3")+"::OnMyMobDead"); //original: (78, 83)
+ donpcevent(instance_npcname("#Bakonawan3-1")+"::OnStart");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@ma_b");
- .@mob_dead_num = mobcount(.@map$,instance_npcname("#Bakonawan3")+"::OnMyMobDead");
+ .@mob_dead_num = mobcount(.@map$, instance_npcname("#Bakonawan3")+"::OnMyMobDead");
if (.@mob_dead_num < 1) {
- mapannounce .@map$,"Taho: We got him! I can see he has threw up something that looks like a box.",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
- donpcevent instance_npcname("Taho#Completed")+"::OnStart";
- donpcevent instance_npcname("#Bakonawan3-1")+"::OnEnd";
- killmonster .@map$,instance_npcname("#Bakonawan3")+"::OnMyMobDead";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan3");
+ mapannounce(.@map$, _("Taho: We got him! I can see he has threw up something that looks like a box."), bc_map, C_AQUA); //FW_NORMAL 15 0 0
+ donpcevent(instance_npcname("Taho#Completed")+"::OnStart");
+ donpcevent(instance_npcname("#Bakonawan3-1")+"::OnEnd");
+ killmonster(.@map$, instance_npcname("#Bakonawan3")+"::OnMyMobDead");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan3"));
}
end;
OnTimer1000:
- callsub OnAnnounce,"10 minutes",15,1;
+ callsub(OnAnnounce, _("10 minutes"), 15, 1);
end;
OnTimer60000:
OnTimer120000:
OnTimer180000:
OnTimer240000:
- donpcevent instance_npcname("#SummonPuppetsn1")+"::OnStart";
- end;
-OnTimer300000: callsub OnAnnounce,"5 minutes",15,1;
-OnTimer360000: callsub OnAnnounce,"4 minutes",15,1;
-OnTimer420000: callsub OnAnnounce,"3 minutes",15,1;
-OnTimer480000: callsub OnAnnounce,"2 minutes",15,1;
-OnTimer540000: callsub OnAnnounce,"1 minute",15,1;
-OnTimer570000: callsub OnAnnounce,"30 seconds",15,0;
-OnTimer580000: callsub OnAnnounce,"20 seconds",15,0;
-OnTimer590000: callsub OnAnnounce,"10 seconds",15,0;
-OnTimer595000: callsub OnAnnounce,"5 seconds",16,0;
-OnTimer596000: callsub OnAnnounce,"4 seconds",17,0;
-OnTimer597000: callsub OnAnnounce,"3 seconds",18,0;
-OnTimer598000: callsub OnAnnounce,"2 seconds",19,0;
-OnTimer599000: callsub OnAnnounce,"1 second",20,0;
+ donpcevent(instance_npcname("#SummonPuppetsn1")+"::OnStart");
+ end;
+OnTimer300000:
+ callsub(OnAnnounce, _("5 minutes"), 15, 1);
+OnTimer360000:
+ callsub(OnAnnounce, _("4 minutes"), 15, 1);
+OnTimer420000:
+ callsub(OnAnnounce, _("3 minutes"), 15, 1);
+OnTimer480000:
+ callsub(OnAnnounce, _("2 minutes"), 15, 1);
+OnTimer540000:
+ callsub(OnAnnounce, _("1 minute"), 15, 1);
+OnTimer570000:
+ callsub(OnAnnounce, _("30 seconds"), 15, 0);
+OnTimer580000:
+ callsub(OnAnnounce, _("20 seconds"), 15, 0);
+OnTimer590000:
+ callsub(OnAnnounce, _("10 seconds"), 15, 0);
+OnTimer595000:
+ callsub(OnAnnounce, _("5 seconds"), 16, 0);
+OnTimer596000:
+ callsub(OnAnnounce, _("4 seconds"), 17, 0);
+OnTimer597000:
+ callsub(OnAnnounce, _("3 seconds"), 18, 0);
+OnTimer598000:
+ callsub(OnAnnounce, _("2 seconds"), 19, 0);
+OnTimer599000:
+ callsub(OnAnnounce, _("1 second"), 20, 0);
OnTimer600000:
.@map$ = instance_mapname("1@ma_b");
- mapannounce .@map$,"Bakonawa has escaped deep into the lake.",bc_map,"0xffff00"; //FW_NORMAL 20 0 0
- donpcevent instance_npcname("Taho#Fail")+"::OnStart";
- killmonster .@map$,instance_npcname("#Bakonawan3")+"::OnMyMobDead";
- stopnpctimer;
- disablenpc instance_npcname("#Bakonawan3");
+ mapannounce(.@map$, _("Bakonawa has escaped deep into the lake."), bc_map, C_YELLOW); //FW_NORMAL 20 0 0
+ donpcevent(instance_npcname("Taho#Fail")+"::OnStart");
+ killmonster(.@map$, instance_npcname("#Bakonawan3")+"::OnMyMobDead");
+ stopnpctimer();
+ disablenpc(instance_npcname("#Bakonawan3"));
end;
OnAnnounce:
- mapannounce instance_mapname("1@ma_b"),"Time Limit: "+getarg(0),bc_map,"0xff4400"; //FW_NORMAL getarg(1) 0 0
- if (getarg(2)) donpcevent instance_npcname("#SummonPuppetsn1")+"::OnStart";
+ mapannounce(instance_mapname("1@ma_b"), sprintf(_$("Time Limit: %s"), getarg(0)), bc_map, "0xff4400"); //FW_NORMAL getarg(1) 0 0
+ if (getarg(2))
+ donpcevent(instance_npcname("#SummonPuppetsn1")+"::OnStart");
end;
}
1@ma_b,36,111,4 script #Bakonawan3-1 CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#Bakonawan3-1");
+ disablenpc(instance_npcname("#Bakonawan3-1"));
end;
OnStart:
- initnpctimer;
+ initnpctimer();
end;
OnEnd:
- killmonster instance_mapname("1@ma_b"),instance_npcname("#Bakonawan3-1")+"::OnMyMobDead";
- //showdigit 0;
- stopnpctimer;
+ killmonster(instance_mapname("1@ma_b"), instance_npcname("#Bakonawan3-1")+"::OnMyMobDead");
+ //showdigit(0);
+ stopnpctimer();
end;
OnMyMobDead:
- showdigit mobcount(instance_mapname("1@ma_b"),instance_npcname("#Bakonawan3-1")+"::OnMyMobDead");
- end;
-OnTimer120000: callsub OnMobSpawn,10;
-OnTimer180000: callsub OnMobSpawn,15;
-OnTimer240000: callsub OnMobSpawn,20;
-//OnTimer300000: callsub OnMobSpawn,25;
-OnTimer300000: callsub OnMobSpawn,30;
-OnTimer360000: callsub OnMobSpawn,35;
-OnTimer420000: callsub OnMobSpawn,40;
-OnTimer480000: callsub OnMobSpawn,45;
-OnTimer540000: callsub OnMobSpawn,50;
+ showdigit(mobcount(instance_mapname("1@ma_b"), instance_npcname("#Bakonawan3-1")+"::OnMyMobDead"));
+ end;
+OnTimer120000:
+ callsub(OnMobSpawn, 10);
+OnTimer180000:
+ callsub(OnMobSpawn, 15);
+OnTimer240000:
+ callsub(OnMobSpawn, 20);
+//OnTimer300000:
+// callsub(OnMobSpawn, 25);
+OnTimer300000:
+ callsub(OnMobSpawn, 30);
+OnTimer360000:
+ callsub(OnMobSpawn, 35);
+OnTimer420000:
+ callsub(OnMobSpawn, 40);
+OnTimer480000:
+ callsub(OnMobSpawn, 45);
+OnTimer540000:
+ callsub(OnMobSpawn, 50);
OnTimer600000:
- killmonster instance_mapname("1@ma_b"),instance_npcname("#Bakonawan3-1")+"::OnMyMobDead";
- stopnpctimer;
+ killmonster(instance_mapname("1@ma_b"), instance_npcname("#Bakonawan3-1")+"::OnMyMobDead");
+ stopnpctimer();
end;
OnMobSpawn:
.@label$ = instance_npcname("#Bakonawan3-1")+"::OnMyMobDead";
.@map$ = instance_mapname("1@ma_b");
- killmonster .@map$,.@label$;
- .@mob_dead_num = mobcount(.@map$,.@label$);
+ killmonster(.@map$, .@label$);
+ .@mob_dead_num = mobcount(.@map$, .@label$);
if (.@mob_dead_num < 50) {
.@mob_rg = 50 - .@mob_dead_num;
if (.@mob_rg > getarg(0))
.@mob_rg = getarg(0);
- while(1) {
- areamonster .@map$,74,74,82,74,"Bakonawa's Puppet",2334,1,.@label$;
- .@mob_dead_num = mobcount(.@map$,.@label$);
- if (.@mob_dead_num >= .@mob_rg) {
+ while (true) {
+ areamonster(.@map$, 74, 74, 82, 74, _("Bakonawa's Puppet"), G_WAKWAK, 1, .@label$);
+ .@mob_dead_num = mobcount(.@map$, .@label$);
+ if (.@mob_dead_num >= .@mob_rg)
break;
- }
}
}
end;
}
1@ma_b,62,52,4 script Taho#Completed 4_M_DEWZATIMAN,{
- disable_items;
- if (checkweight(Knife,1) == 0) {
- mes "It seems you are carrying too many different kinds of items. Please try again after reducing it.";
- close;
+ disable_items();
+ if (checkweight(Knife, 1) == 0) {
+ mes("It seems you are carrying too many different kinds of items. Please try again after reducing it.");
+ close();
}
if (MaxWeight - Weight < 10000) {
- mes "It seems you are already carrying items of too much weight. Please try again after reducing the weight.";
- close;
- }
- if (questprogress(12279,HUNTING) == 2) {
- erasequest 12279;
- mes "[Taho]";
- mes "This was found from Bakonawa's corpse. It would be better if you take this.";
+ mes("It seems you are already carrying items of too much weight. Please try again after reducing the weight.");
+ close();
+ }
+ if (questprogress(12279, HUNTING) == 2) {
+ erasequest(12279);
+ mes("[Taho]");
+ mes("This was found from Bakonawa's corpse. It would be better if you take this.");
// if (IsPremiumPcCafe == 10)
- getitem Ancient_Grudge,7;
+ getitem(Ancient_Grudge, 7);
// else
-// getitem Ancient_Grudge,5;
- getexp 0,100000;
- next;
+// getitem(Ancient_Grudge, 5);
+ getexp(0, 100000);
+ next();
}
- mes "[Taho]";
- mes "We better hurry and get out of this place. This place is still dangerous even without Bakonawa...";
- next;
- mes "[Taho]";
- mes "Then let's use to the rope to go up!";
- close2;
- warp "ma_scene01",175,176;
+ mes("[Taho]");
+ mes("We better hurry and get out of this place. This place is still dangerous even without Bakonawa...");
+ next();
+ mes("[Taho]");
+ mes("Then let's use to the rope to go up!");
+ close2();
+ warp("ma_scene01", 175, 176);
end;
OnInstanceInit:
- disablenpc instance_npcname("Taho#Completed");
+ disablenpc(instance_npcname("Taho#Completed"));
end;
OnStart:
- enablenpc instance_npcname("Taho#Completed");
- initnpctimer;
+ enablenpc(instance_npcname("Taho#Completed"));
+ initnpctimer();
end;
OnTimer1000:
- monster instance_mapname("1@ma_b"),78,74,"Bakonawa Treasure Box",2335,1;
+ monster(instance_mapname("1@ma_b"), 78, 74, _("Bakonawa Treasure Box"), MA_TREASURE, 1);
end;
OnTimer10000:
- mapannounce instance_mapname("1@ma_b"),"Taho: After opening the treasure box, please visit me at the top of the hill. I've got something to give to you.",bc_map,"0x00ffff"; //FW_NORMAL 15 0 0
- stopnpctimer;
+ mapannounce(instance_mapname("1@ma_b"), _("Taho: After opening the treasure box, please visit me at the top of the hill. I've got something to give to you."), bc_map, C_AQUA); //FW_NORMAL 15 0 0
+ stopnpctimer();
end;
}
1@ma_b,62,52,4 script Taho#Fail 4_M_DEWZATIMAN,{
- mes "[Taho]";
- mes "HMM. We almost got him but he is one fast creature...";
- next;
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- mes "[Taho]";
- mes "Are we going to try again?";
- next;
- switch(select("Hold on a sec!", "Of course! We cannot stand back now!")) {
+ mes("[Taho]");
+ mes("HMM. We almost got him but he is one fast creature...");
+ next();
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ mes("[Taho]");
+ mes("Are we going to try again?");
+ next();
+ switch (select("Hold on a sec!", "Of course! We cannot stand back now!")) {
case 1:
- mes "[Taho]";
- mes "AWW... I almost brought him out.";
- close;
+ mes("[Taho]");
+ mes("AWW... I almost brought him out.");
+ close();
case 2:
- mes "[Taho]";
- mes "Then I will use Albopal once again to the lake.";
- next;
- mes "[Taho]";
- mes "We are about to see Bakonawa with intenser anger...";
- disablenpc instance_npcname("Taho#Fail");
- donpcevent instance_npcname("#Bakonawan1")+"::OnStart";
- close;
+ mes("[Taho]");
+ mes("Then I will use Albopal once again to the lake.");
+ next();
+ mes("[Taho]");
+ mes("We are about to see Bakonawa with intenser anger...");
+ disablenpc(instance_npcname("Taho#Fail"));
+ donpcevent(instance_npcname("#Bakonawan1")+"::OnStart");
+ close();
}
- close;
+ close();
} else {
- mes "[Taho]";
- mes "I am dropping Albopal like I did a while ago. I hope it pisses him off...";
- close;
+ mes("[Taho]");
+ mes("I am dropping Albopal like I did a while ago. I hope it pisses him off...");
+ close();
}
OnInstanceInit:
- disablenpc instance_npcname("Taho#Fail");
+ disablenpc(instance_npcname("Taho#Fail"));
end;
OnStart:
- enablenpc instance_npcname("Taho#Fail");
+ enablenpc(instance_npcname("Taho#Fail"));
end;
}
diff --git a/npc/re/instances/BuwayaCave.txt b/npc/re/instances/BuwayaCave.txt
index 094964867..393ac5d9e 100644
--- a/npc/re/instances/BuwayaCave.txt
+++ b/npc/re/instances/BuwayaCave.txt
@@ -35,95 +35,95 @@
ma_fild02,312,317,5 script Guard#buwaya_cave 4_MAL_SOLDIER,{
if (BaseLevel < 130) {
- mes "[Guard]";
- mes "People under ^ff0000level 130^000000";
- mes "cannot enter this place.";
- mes "This place is dangerous. Please go back.";
- close;
+ mes("[Guard]");
+ mes("People under ^ff0000level 130^000000");
+ mes("cannot enter this place.");
+ mes("This place is dangerous. Please go back.");
+ close();
}
.@party_id = getcharid(CHAR_ID_PARTY);
- .@md_name$ = "Buwaya Cave";
+ .@md_name$ = _("Buwaya Cave");
if (!.@party_id) {
- mes "[Guard]";
- mes "Buwaya is dangerous.";
- mes "Please come back after you form a";
- mes "team with other people.";
- close;
+ mes("[Guard]");
+ mes("Buwaya is dangerous.");
+ mes("Please come back after you form a");
+ mes("team with other people.");
+ close();
}
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2)) {
- mes "[Guard]";
- mes "This place is dangerous. Please go back.";
- mes "If you dont have any business here, please go back.";
- next;
- while(1) {
- switch(select("Why is it so dangerous?", "I'm here to hunt down Buwaya.", "End conversation.")) {
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) {
+ mes("[Guard]");
+ mes("This place is dangerous. Please go back.");
+ mes("If you dont have any business here, please go back.");
+ next();
+ while (true) {
+ switch (select("Why is it so dangerous?", "I'm here to hunt down Buwaya.", "End conversation.")) {
case 1:
- mes "[Guard]";
- mes "Recently, there has been a case";
- mes "where villagers have disappeared.";
- mes "After investigating the tracks, ";
- mes "we found out the giant monster Buwaya";
- mes "was responsible.";
- next;
- mes "[Guard]";
- mes "Soldiers and mercenaries have been dispatched to ";
- mes "hunt down Buwaya, but were never";
- mes "completely successful.";
- next;
- mes "[Guard]";
- mes "Buwaya is still kidnapping";
- mes "the villagers to this day.";
- mes "Please gather some people to get rid of Buwaya.";
- next;
+ mes("[Guard]");
+ mes("Recently, there has been a case");
+ mes("where villagers have disappeared.");
+ mes("After investigating the tracks, ");
+ mes("we found out the giant monster Buwaya");
+ mes("was responsible.");
+ next();
+ mes("[Guard]");
+ mes("Soldiers and mercenaries have been dispatched to ");
+ mes("hunt down Buwaya, but were never");
+ mes("completely successful.");
+ next();
+ mes("[Guard]");
+ mes("Buwaya is still kidnapping");
+ mes("the villagers to this day.");
+ mes("Please gather some people to get rid of Buwaya.");
+ next();
break;
case 2:
- .@playtime = questprogress(4229,PLAYTIME);
+ .@playtime = questprogress(4229, PLAYTIME);
if (!.@playtime) {
// fall through
} else if (.@playtime == 1) {
- mes "[Guard]";
- mes "Buwaya is still hiding.";
- mes "Even if you enter now, Buwaya will not come out. ";
- mes "Please come back later.";
- close;
+ mes("[Guard]");
+ mes("Buwaya is still hiding.");
+ mes("Even if you enter now, Buwaya will not come out. ");
+ mes("Please come back later.");
+ close();
} else {
- erasequest 4229;
+ erasequest(4229);
// fall through
}
- .@instance = instance_create(.@md_name$,.@party_id);
+ .@instance = instance_create(.@md_name$, .@party_id);
if (.@instance < 0) {
- mes "[Guard]";
- mes "Party name is... "+getpartyname(.@party_id)+".";;
- mes "Party leader is... "+strcharinfo(PC_NAME);
- mes "^0000ff"+.@md_name$+"^000000 cannot be opened now.";
- mes "Please try a moment later.";
- close;
+ mes("[Guard]");
+ mesf("Party name is... %s.", getpartyname(.@party_id));
+ mesf("Party leader is... %s", strcharinfo(PC_NAME));
+ mesf("^0000ff%s^000000 cannot be opened now.", .@md_name$);
+ mes("Please try a moment later.");
+ close();
}
- if (instance_attachmap("1@ma_c",.@instance) == "") {
- mes "^0000ff"+.@md_name$+"^000000 - Reservation Failed!";
+ if (instance_attachmap("1@ma_c", .@instance) == "") {
+ mesf("^0000ff%s^000000 - Reservation Failed!", .@md_name$);
instance_destroy(.@instance);
- close;
+ close();
}
- instance_set_timeout 3600,300,.@instance;
+ instance_set_timeout(3600, 300, .@instance);
instance_init(.@instance);
- mes "[Guard]";
- mes "I will open up the tunnel to ^0000ff"+.@md_name$+"^000000.";
- mes "I wish you good luck.";
- close;
+ mes("[Guard]");
+ mesf("I will open up the tunnel to ^0000ff%s^000000.", .@md_name$);
+ mes("I wish you good luck.");
+ close();
case 3:
- mes "[Guard]";
- mes "This place is dangerous. You cannot enter.";
- close;
+ mes("[Guard]");
+ mes("This place is dangerous. You cannot enter.");
+ close();
}
}
} else {
- mes "[Guard]";
- mes "Let me talk with the party leader.";
- mes "Please call forth the leader.";
- close;
+ mes("[Guard]");
+ mes("Let me talk with the party leader.");
+ mes("Please call forth the leader.");
+ close();
}
}
@@ -131,214 +131,214 @@ ma_fild02,315,323,0 script Cave Entrance#buwaya WARPNPC,2,2,{
end;
OnTouch:
if (BaseLevel < 130) {
- mes "[Guard]";
- mes "People under ^ff0000level 130^000000";
- mes "cannot enter this place.";
- mes "This place is dangerous. Please go back.";
- close;
+ mes("[Guard]");
+ mes("People under ^ff0000level 130^000000");
+ mes("cannot enter this place.");
+ mes("This place is dangerous. Please go back.");
+ close();
}
- .@playtime = questprogress(4229,PLAYTIME);
+ .@playtime = questprogress(4229, PLAYTIME);
if (!.@playtime) {
// fall through
} else if (.@playtime == 1) {
- mes "[Guard]";
- mes "Buwaya is still hiding.";
- mes "Even if you enter now, Buwaya will not come out.";
- mes "Please come back later.";
- close;
+ mes("[Guard]");
+ mes("Buwaya is still hiding.");
+ mes("Even if you enter now, Buwaya will not come out.");
+ mes("Please come back later.");
+ close();
} else {
- erasequest 4229;
+ erasequest(4229);
// fall through
}
- switch(select("Enter.", "Turn back.")) {
+ switch (select("Enter.", "Turn back.")) {
case 1:
- if( has_instance("1@ma_c") == "" ) {
- mes "The memorial dungeon Buwaya Cave does not exist.";
- mes "The party leader did not generate the dungeon yet.";
- close;
+ if (has_instance("1@ma_c") == "") {
+ mes("The memorial dungeon Buwaya Cave does not exist.");
+ mes("The party leader did not generate the dungeon yet.");
+ close();
} else {
- mapannounce "ma_fild02",getpartyname(getcharid(CHAR_ID_PARTY))+" party's "+strcharinfo(PC_NAME)+" member began hunting Buwaya in Buwaya Cave.",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
- setquest 4229;
- warp "1@ma_c",35,57;
+ mapannounce("ma_fild02", sprintf(_$("%s party's %s member began hunting Buwaya in Buwaya Cave."), getpartyname(getcharid(CHAR_ID_PARTY)), strcharinfo(PC_NAME)), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
+ setquest(4229);
+ warp("1@ma_c", 35, 57);
end;
}
case 2:
- mes "[Guard]";
- mes "You must value your life.";
- mes "It is better to think carefully before you act.";
- close;
+ mes("[Guard]");
+ mes("You must value your life.");
+ mes("It is better to think carefully before you act.");
+ close();
}
}
1@ma_c,33,112,0 script #damage HIDDEN_WARP_NPC,7,7,{
end;
OnInstanceInit:
- initnpctimer;
- disablenpc instance_npcname("#damage");
+ initnpctimer();
+ disablenpc(instance_npcname("#damage"));
end;
OnTimer1000:
- enablenpc instance_npcname("#damage");
- specialeffect EF_POISONHIT;
+ enablenpc(instance_npcname("#damage"));
+ specialeffect(EF_POISONHIT);
end;
OnTimer2000:
- stopnpctimer;
- initnpctimer;
- disablenpc instance_npcname("#damage");
+ stopnpctimer();
+ initnpctimer();
+ disablenpc(instance_npcname("#damage"));
end;
OnTouch:
- percentheal -10,-10;
- sc_start SC_BLOODING,60000,0;
- sc_start SC_POISON,60000,0;
+ percentheal(-10, -10);
+ sc_start(SC_BLOODING, 60000, 0);
+ sc_start(SC_POISON, 60000, 0);
end;
}
1@ma_c,29,110,5 script Kidnapped People#1 4_F_BARYO_OLD,{
- mes "[Kidnapped Residents]";
- mes "Buwaya was running around,";
- mes "and new people got caught.";
- mes "We will be stuck in here for the rest of our lives.";
- next;
- switch(select("Get me outta here!!", "Ca...can't escape?")) {
+ mes("[Kidnapped Residents]");
+ mes("Buwaya was running around,");
+ mes("and new people got caught.");
+ mes("We will be stuck in here for the rest of our lives.");
+ next();
+ switch (select("Get me outta here!!", "Ca...can't escape?")) {
case 1:
- mes "[Kidnapped Residents]";
- mes "We don't have enough power to destroy it but Buwaya has a weakness.";
- mes "Look at the wall over there.";
- mes "If you knock there, Buywaya will feel pain and spit you out.";
- donpcevent instance_npcname("#box_mob_call")+"::OnEnable";
- close2;
- disablenpc instance_npcname("Kidnapped People#1");
+ mes("[Kidnapped Residents]");
+ mes("We don't have enough power to destroy it but Buwaya has a weakness.");
+ mes("Look at the wall over there.");
+ mes("If you knock there, Buywaya will feel pain and spit you out.");
+ donpcevent(instance_npcname("#box_mob_call")+"::OnEnable");
+ close2();
+ disablenpc(instance_npcname("Kidnapped People#1"));
end;
case 2:
- mes "[Kidnapped People]";
- mes "Somthing is wrong here...";
- mes "Have you experienced this before?";
- close;
+ mes("[Kidnapped People]");
+ mes("Somthing is wrong here...");
+ mes("Have you experienced this before?");
+ close();
}
end;
OnInstanceInit:
- disablenpc instance_npcname("Kidnapped People#1");
+ disablenpc(instance_npcname("Kidnapped People#1"));
end;
OnEnable:
- enablenpc instance_npcname("Kidnapped People#1");
- donpcevent instance_npcname("#box_mob_call")+"::OnDisable";
+ enablenpc(instance_npcname("Kidnapped People#1"));
+ donpcevent(instance_npcname("#box_mob_call")+"::OnDisable");
end;
}
1@ma_c,36,110,5 script Kidnapped People#2 4_M_BARYO_OLD,{
- mes "[Kidnapped Residents]";
- mes "Ahaa! I wish I had a little more power...";
- mes "I know its weakness...";
- next;
- switch(select("Tell me.", "Do you really know?")) {
+ mes("[Kidnapped Residents]");
+ mes("Ahaa! I wish I had a little more power...");
+ mes("I know its weakness...");
+ next();
+ switch (select("Tell me.", "Do you really know?")) {
case 1:
- mes "[Kidnapped Residents]";
- mes "Are you sure you can do it...?";
- mes "Ok, listen carefully,";
- mes "its weakness is...";
- next;
- mes "[Kidnapped Residents]";
- mes "...behind us on the walls.";
- sc_start SC_ATKPOTION,60000,45;
- sc_start SC_MATKPOTION,60000,45;
- disablenpc instance_npcname("Kidnapped People#2");
- close;
+ mes("[Kidnapped Residents]");
+ mes("Are you sure you can do it...?");
+ mes("Ok, listen carefully,");
+ mes("its weakness is...");
+ next();
+ mes("[Kidnapped Residents]");
+ mes("...behind us on the walls.");
+ sc_start(SC_ATKPOTION, 60000, 45);
+ sc_start(SC_MATKPOTION, 60000, 45);
+ disablenpc(instance_npcname("Kidnapped People#2"));
+ close();
case 2:
- mes "[Kidnapped Residents]";
- mes "WHAT?!";
- mes "Are you ignoring me";
- mes "because I'm captured in here?";
- close;
+ mes("[Kidnapped Residents]");
+ mes("WHAT?!");
+ mes("Are you ignoring me");
+ mes("because I'm captured in here?");
+ close();
}
end;
OnInstanceInit:
- disablenpc instance_npcname("Kidnapped People#2");
+ disablenpc(instance_npcname("Kidnapped People#2"));
end;
OnEnable:
- enablenpc instance_npcname("Kidnapped People#2");
+ enablenpc(instance_npcname("Kidnapped People#2"));
end;
}
1@ma_c,3,3,0 script #box_mob_call HIDDEN_WARP_NPC,1,1,{
end;
OnInstanceInit:
- setcell instance_mapname("1@ma_c"),30,118,35,118,cell_shootable,1; //custom
- disablenpc instance_npcname("#box_mob_call");
+ setcell(instance_mapname("1@ma_c"), 30, 118, 35, 118, cell_shootable, 1); //custom
+ disablenpc(instance_npcname("#box_mob_call"));
end;
OnEnable:
- enablenpc instance_npcname("#box_mob_call");
+ enablenpc(instance_npcname("#box_mob_call"));
.@label$ = instance_npcname("#box_mob_call")+"::OnMyMobDead";
.@map$ = instance_mapname("1@ma_c");
- monster .@map$,30,118,"Buwaya's Weakness",2333,1,.@label$;
- monster .@map$,35,118,"Buwaya's Weakness",2333,1,.@label$;
+ monster(.@map$, 30, 118, _("Buwaya's Weakness"), BUWAYA_WEAK, 1, .@label$);
+ monster(.@map$, 35, 118, _("Buwaya's Weakness"), BUWAYA_WEAK, 1, .@label$);
end;
OnDisable:
- killmonster instance_mapname("1@ma_c"),instance_npcname("#box_mob_call")+"::OnMyMobDead";
- disablenpc instance_npcname("#box_mob_call");
+ killmonster(instance_mapname("1@ma_c"), instance_npcname("#box_mob_call")+"::OnMyMobDead");
+ disablenpc(instance_npcname("#box_mob_call"));
end;
OnMyMobDead:
- if (mobcount(instance_mapname("1@ma_c"),instance_npcname("#box_mob_call")+"::OnMyMobDead") < 1)
- donpcevent instance_npcname("#box_out")+"::OnEnable";
+ if (mobcount(instance_mapname("1@ma_c"), instance_npcname("#box_mob_call")+"::OnMyMobDead") < 1)
+ donpcevent(instance_npcname("#box_out")+"::OnEnable");
end;
}
1@ma_c,38,118,0 script #box_out WARPNPC,2,2,{
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname("#box_out");
+ disablenpc(instance_npcname("#box_out"));
end;
OnEnable:
- enablenpc instance_npcname("#box_out");
+ enablenpc(instance_npcname("#box_out"));
end;
OnTouch:
- .@x = rand(1,20) + 97;
- .@y = rand(1,20) + 74;
- warp instance_mapname("1@ma_c"),.@x,.@y;
+ .@x = rand(1, 20) + 97;
+ .@y = rand(1, 20) + 74;
+ warp(instance_mapname("1@ma_c"), .@x, .@y);
end;
}
1@ma_c,97,74,0 script #box_call HIDDEN_WARP_NPC,50,50,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#box_call");
- initnpctimer;
+ disablenpc(instance_npcname("#box_call"));
+ initnpctimer();
end;
OnTimer30000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : I will put you in my treasure box!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : I will put you in my treasure box!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
// Should execute OnTimer33000, but client doesn't render the effect fast enough.
- for(.@i = 1; .@i<=9; ++.@i)
- donpcevent instance_npcname("#yunobi"+.@i)+"::OnEnable";
+ for(.@i = 1; .@i <= 9; ++.@i)
+ donpcevent(instance_npcname("#yunobi"+.@i)+"::OnEnable");
end;
OnTimer33000:
- donpcevent instance_npcname("#box_out")+"::OnDisable";
- donpcevent instance_npcname("#box_mob_call")+"::OnDisable";
- donpcevent instance_npcname("Kidnapped People#1")+"::OnEnable";
- donpcevent instance_npcname("Kidnapped People#2")+"::OnEnable";
+ donpcevent(instance_npcname("#box_out")+"::OnDisable");
+ donpcevent(instance_npcname("#box_mob_call")+"::OnDisable");
+ donpcevent(instance_npcname("Kidnapped People#1")+"::OnEnable");
+ donpcevent(instance_npcname("Kidnapped People#2")+"::OnEnable");
end;
OnTimer34000:
- enablenpc instance_npcname("#box_call");
+ enablenpc(instance_npcname("#box_call"));
end;
OnTimer35000:
- stopnpctimer;
- initnpctimer;
- disablenpc instance_npcname("#box_call");
+ stopnpctimer();
+ initnpctimer();
+ disablenpc(instance_npcname("#box_call"));
end;
OnTouch:
specialeffect(EF_GUIDEDATTACK, AREA, playerattached());
- warp instance_mapname("1@ma_c"),33,112;
+ warp(instance_mapname("1@ma_c"), 33, 112);
end;
OnDisable:
- stopnpctimer;
- disablenpc instance_npcname("#box_call");
+ stopnpctimer();
+ disablenpc(instance_npcname("#box_call"));
end;
}
1@ma_c,97,74,0 script #yunobi1 HIDDEN_WARP_NPC,{
end;
OnInstanceInit:
- hideonnpc instance_npcname(strnpcinfo(NPC_NAME));
+ hideonnpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- specialeffect EF_MAPPILLAR2;
+ specialeffect(EF_MAPPILLAR2);
end;
}
1@ma_c,97,94,0 duplicate(#yunobi1) #yunobi2 HIDDEN_WARP_NPC
@@ -353,65 +353,65 @@ OnEnable:
1@ma_c,1,1,0 script #bunshin HIDDEN_WARP_NPC,{
end;
OnInstanceInit:
- initnpctimer;
+ initnpctimer();
end;
OnTimer58000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : I had enough with this, let's go till the end!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : I had enough with this, let's go till the end!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
end;
OnTimer61000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : This is!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : This is!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
end;
OnTimer62000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : This is...MY!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : This is...MY!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
end;
OnTimer63000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : This is...MY...Deadly!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : This is...MY...Deadly!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
end;
OnTimer64000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : This is...MY...Deadly... ATTACK!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : This is...MY...Deadly... ATTACK!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
end;
OnTimer65000:
.@label$ = instance_npcname("#bunshin")+"::OnMyMobDead";
.@map$ = instance_mapname("1@ma_c");
- areamonster .@map$,112,89,122,99,"Buwaya",2332,1,.@label$;
- areamonster .@map$,112,49,122,59,"Buwaya",2332,1,.@label$;
- areamonster .@map$,72,49,82,59,"Buwaya",2332,1,.@label$;
- areamonster .@map$,72,89,82,99,"Buwaya",2332,1,.@label$;
+ areamonster(.@map$, 112, 89, 122, 99, _("Buwaya"), BUWAYA_GHOST, 1, .@label$);
+ areamonster(.@map$, 112, 49, 122, 59, _("Buwaya"), BUWAYA_GHOST, 1, .@label$);
+ areamonster(.@map$, 72, 49, 82, 59, _("Buwaya"), BUWAYA_GHOST, 1, .@label$);
+ areamonster(.@map$, 72, 89, 82, 99, _("Buwaya"), BUWAYA_GHOST, 1, .@label$);
end;
OnTimer66000:
- mapannounce instance_mapname("1@ma_c"),"Buwaya : Are you scared?",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ma_c"), _("Buwaya : Are you scared?"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
end;
OnTimer105000:
- killmonster instance_mapname("1@ma_c"),instance_npcname("#bunshin")+"::OnMyMobDead";
- stopnpctimer;
- initnpctimer;
+ killmonster(instance_mapname("1@ma_c"), instance_npcname("#bunshin")+"::OnMyMobDead");
+ stopnpctimer();
+ initnpctimer();
end;
OnMyMobDead:
- if (mobcount(instance_mapname("1@ma_c"),instance_npcname("#bunshin")+"::OnMyMobDead") < 1) {
- stopnpctimer;
- initnpctimer;
+ if (mobcount(instance_mapname("1@ma_c"), instance_npcname("#bunshin")+"::OnMyMobDead") < 1) {
+ stopnpctimer();
+ initnpctimer();
}
end;
OnDisable:
- stopnpctimer;
- killmonster instance_mapname("1@ma_c"),instance_npcname("#bunshin")+"::OnMyMobDead";
- disablenpc instance_npcname("#bunshin");
+ stopnpctimer();
+ killmonster(instance_mapname("1@ma_c"), instance_npcname("#bunshin")+"::OnMyMobDead");
+ disablenpc(instance_npcname("#bunshin"));
end;
}
1@ma_c,2,2,0 script #buwaya_con HIDDEN_WARP_NPC,{
end;
OnInstanceInit:
- areamonster instance_mapname("1@ma_c"),90,67,104,81,"Buwaya",2319,1,instance_npcname("#buwaya_con")+"::OnMyMobDead";
+ areamonster(instance_mapname("1@ma_c"), 90, 67, 104, 81, _("Buwaya"), BUWAYA, 1, instance_npcname("#buwaya_con")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@ma_c");
- if (mobcount(.@map$,instance_npcname("#buwaya_con")+"::OnMyMobDead") < 1) {
- donpcevent instance_npcname("#box_call")+"::OnDisable";
- donpcevent instance_npcname("#bunshin")+"::OnDisable";
- donpcevent instance_npcname("#exit_mob")+"::OnDisable";
- donpcevent instance_npcname("#cave_out")+"::OnEnable";
- mapannounce .@map$,"Guard : You did great work. Please hurry up and escape to the way you came in!",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
+ if (mobcount(.@map$, instance_npcname("#buwaya_con")+"::OnMyMobDead") < 1) {
+ donpcevent(instance_npcname("#box_call")+"::OnDisable");
+ donpcevent(instance_npcname("#bunshin")+"::OnDisable");
+ donpcevent(instance_npcname("#exit_mob")+"::OnDisable");
+ donpcevent(instance_npcname("#cave_out")+"::OnEnable");
+ mapannounce(.@map$, _("Guard : You did great work. Please hurry up and escape to the way you came in!"), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
}
end;
}
@@ -419,24 +419,24 @@ OnMyMobDead:
1@ma_c,3,3,0 script #exit_mob HIDDEN_WARP_NPC,{
end;
OnInstanceInit:
- initnpctimer;
+ initnpctimer();
end;
OnTimer60000:
.@label$ = instance_npcname("#exit_mob")+"::OnMyMobDead";
.@map$ = instance_mapname("1@ma_c");
- if (mobcount(.@map$,.@label$) < 30)
+ if (mobcount(.@map$, .@label$) < 30)
.@amount = 10;
else
.@amount = 1;
- areamonster .@map$,43,58,47,60,"Water Plant",2331,.@amount,.@label$;
- areamonster .@map$,43,58,47,60,"Egg",2329,.@amount,.@label$;
- stopnpctimer;
- initnpctimer;
+ areamonster(.@map$, 43, 58, 47, 60, _("Water Plant"), MA_SEAW, .@amount, .@label$);
+ areamonster(.@map$, 43, 58, 47, 60, _("Egg"), BUWAYA_EGG, .@amount, .@label$);
+ stopnpctimer();
+ initnpctimer();
end;
OnDisable:
- stopnpctimer;
- killmonster instance_mapname("1@ma_c"),instance_npcname("#exit_mob")+"::OnMyMobDead";
- disablenpc instance_npcname("#exit_mob");
+ stopnpctimer();
+ killmonster(instance_mapname("1@ma_c"), instance_npcname("#exit_mob")+"::OnMyMobDead");
+ disablenpc(instance_npcname("#exit_mob"));
end;
OnMyMobDead:
end;
@@ -444,35 +444,35 @@ OnMyMobDead:
1@ma_c,28,57,0 script #cave_out WARPNPC,2,2,{
OnInstanceInit:
- disablenpc instance_npcname("#cave_out");
+ disablenpc(instance_npcname("#cave_out"));
end;
OnEnable:
- enablenpc instance_npcname("#cave_out");
+ enablenpc(instance_npcname("#cave_out"));
end;
OnTouch:
- mes "Would like to go out?";
- next;
- if(select("Yes!", "No, I will stay.") == 1)
- warp "ma_fild02",315,315;
- close;
+ mes("Would like to go out?");
+ next();
+ if (select("Yes!", "No, I will stay.") == 1)
+ warp("ma_fild02", 315, 315);
+ close();
}
1@ma_c,1,1,0 script #buwaya_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("1@ma_c");
- areamonster .@map$,73,81,93,101,"Seaweed",2331,18;
- areamonster .@map$,110,97,116,103,"Seaweed",2331,8;
- areamonster .@map$,59,63,63,67,"Seaweed",2331,8;
- areamonster .@map$,73,55,77,59,"Seaweed",2331,4;
- areamonster .@map$,103,69,107,73,"Seaweed",2331,4;
- areamonster .@map$,108,45,122,63,"Seaweed",2331,15;
- areamonster .@map$,73,81,93,101,"Buwaya's Egg",2329,10;
- areamonster .@map$,110,97,116,103,"Buwaya's Egg",2329,8;
- areamonster .@map$,59,63,63,67,"Buwaya's Egg",2329,4;
- areamonster .@map$,73,55,77,59,"Buwaya's Egg",2329,3;
- areamonster .@map$,103,69,107,73,"Buwaya's Egg",2329,3;
- areamonster .@map$,108,45,122,63,"Buwaya's Egg",2329,15;
- monster .@map$,0,0,"Seaweed",2331,5;
- monster .@map$,0,0,"Buwaya's Slave",2330,5;
+ areamonster(.@map$, 73, 81, 93, 101, _("Seaweed"), MA_SEAW, 18);
+ areamonster(.@map$, 110, 97, 116, 103, _("Seaweed"), MA_SEAW, 8);
+ areamonster(.@map$, 59, 63, 63, 67, _("Seaweed"), MA_SEAW, 8);
+ areamonster(.@map$, 73, 55, 77, 59, _("Seaweed"), MA_SEAW, 4);
+ areamonster(.@map$, 103, 69, 107, 73, _("Seaweed"), MA_SEAW, 4);
+ areamonster(.@map$, 108, 45, 122, 63, _("Seaweed"), MA_SEAW, 15);
+ areamonster(.@map$, 73, 81, 93, 101, _("Buwaya's Egg"), BUWAYA_EGG, 10);
+ areamonster(.@map$, 110, 97, 116, 103, _("Buwaya's Egg"), BUWAYA_EGG, 8);
+ areamonster(.@map$, 59, 63, 63, 67, _("Buwaya's Egg"), BUWAYA_EGG, 4);
+ areamonster(.@map$, 73, 55, 77, 59, _("Buwaya's Egg"), BUWAYA_EGG, 3);
+ areamonster(.@map$, 103, 69, 107, 73, _("Buwaya's Egg"), BUWAYA_EGG, 3);
+ areamonster(.@map$, 108, 45, 122, 63, _("Buwaya's Egg"), BUWAYA_EGG, 15);
+ monster(.@map$, 0, 0, _("Seaweed"), MA_SEAW, 5);
+ monster(.@map$, 0, 0, _("Buwaya's Slave"), BUWAYA_SLAVE, 5);
end;
}
diff --git a/npc/re/instances/EclageInterior.txt b/npc/re/instances/EclageInterior.txt
index b8aff0a81..6b2808e05 100644
--- a/npc/re/instances/EclageInterior.txt
+++ b/npc/re/instances/EclageInterior.txt
@@ -34,133 +34,132 @@
ecl_hub01,132,12,3 script Chief of Staff#tl01::EclInstance 4_F_FAIRY,{
.@party_id = getcharid(CHAR_ID_PARTY);
- .@md_name$ = "Eclage Interior";
- if (!.@party_id){
- mes "-! Warning !-";
- mes "This current quest will be held at Memorial dungeon.";
- mes "Only the party leader will enter. Please create your party.";
- close;
+ .@md_name$ = _("Eclage Interior");
+ if (!.@party_id) {
+ mes("-! Warning !-");
+ mes("This current quest will be held at Memorial dungeon.");
+ mes("Only the party leader will enter. Please create your party.");
+ close();
}
-
- if (getpartyleader(.@party_id,2) != getcharid(CHAR_ID_CHAR)) {
- mes "-! Warning !-";
- mes "This current quest will be held at Memorial dungeon.";
- mes "Only the party leader will enter. Please create your party.";
- close;
+ if (getpartyleader(.@party_id, 2) != getcharid(CHAR_ID_CHAR)) {
+ mes("-! Warning !-");
+ mes("This current quest will be held at Memorial dungeon.");
+ mes("Only the party leader will enter. Please create your party.");
+ close();
}
if (ep14_2_mylord == 29) {
- mes "[Shenime]";
- mes "This place is set up with lighting for Orb.";
- mes "If you favor Mayor, you should be cautious here.";
- next;
+ mes("[Shenime]");
+ mes("This place is set up with lighting for Orb.");
+ mes("If you favor Mayor, you should be cautious here.");
+ next();
switch (select("Enter it.", "Forget it.")) {
- case 1:
- .@instance = instance_create(.@md_name$,.@party_id);
- if (.@instance < 0) {
- mes "[Shenime]";
- mes "There are some soldiers dispatched by Mayor not too long ago.";
- mes "I should sure hope that you aren't the disturbance they're looking for, right?";
- close;
- }
- if (instance_attachmap("1@ecl",.@instance) == "") {
- mes "^0000ff"+.@md_name$+"^000000 - Reservation Failed!";
- instance_destroy(.@instance);
- close;
- }
- ecl_interior_time = gettimetick(2)+20*60;
- instance_set_timeout 1200,1200,.@instance;
- instance_init(.@instance);
- mes "[Shenime]";
- mes "Given the tight internal security, you should prepare yourself.";
- mes "Wait here for a minute.";
- close;
- case 2:
- mes "[Shenime]";
- mes "It's not an easy task.";
- close;
+ case 1:
+ .@instance = instance_create(.@md_name$, .@party_id);
+ if (.@instance < 0) {
+ mes("[Shenime]");
+ mes("There are some soldiers dispatched by Mayor not too long ago.");
+ mes("I should sure hope that you aren't the disturbance they're looking for, right?");
+ close();
+ }
+ if (instance_attachmap("1@ecl", .@instance) == "") {
+ mesf("^0000ff%s^000000 - Reservation Failed!", .@md_name$);
+ instance_destroy(.@instance);
+ close();
+ }
+ ecl_interior_time = gettimetick(2) + 20 * 60;
+ instance_set_timeout(1200, 1200, .@instance);
+ instance_init(.@instance);
+ mes("[Shenime]");
+ mes("Given the tight internal security, you should prepare yourself.");
+ mes("Wait here for a minute.");
+ close();
+ case 2:
+ mes("[Shenime]");
+ mes("It's not an easy task.");
+ close();
}
}
- mes "[High-level Laphine's]";
- mes "Hmm? This room?";
- mes "Never mind. Don't worry about it.";
- close;
+ mes("[High-level Laphine's]");
+ mes("Hmm? This room?");
+ mes("Never mind. Don't worry about it.");
+ close();
}
ecl_hub01,130,15,0 script It is closed shut. CLEAR_NPC,{
if (ep14_2_mylord == 29) {
- mes "This door connects to the plaza's ceiling.";
- mes "It's also a place where the lighting is set up to make Orb seem more beautiful.";
- next;
+ mes("This door connects to the plaza's ceiling.");
+ mes("It's also a place where the lighting is set up to make Orb seem more beautiful.");
+ next();
switch (select("Enter it.", "Forget it.")) {
- case 1:
- .@party_id = getcharid(CHAR_ID_PARTY);
+ case 1:
+ .@party_id = getcharid(CHAR_ID_PARTY);
- if (has_instance("1@ecl") == "") {
- mes "It is closed shut.";
- close;
+ if (has_instance("1@ecl") == "") {
+ mes("It is closed shut.");
+ close();
+ }
+ if (.@party_id) {
+ .@md_name$ = _("Eclage Interior");
+ if (getpartyleader(.@party_id, 2) != getcharid(CHAR_ID_CHAR)) {
+ mes("-! Warning !-");
+ mes("This current quest will be held at Memorial dungeon.");
+ mes("Only the party leader will enter. Please create your party.");
+ close();
}
- if (.@party_id) {
- .@md_name$ = "Eclage Interior";
- if (getpartyleader(.@party_id,2) != getcharid(CHAR_ID_CHAR)){
- mes "-! Warning !-";
- mes "This current quest will be held at Memorial dungeon.";
- mes "Only the party leader will enter. Please create your party.";
- close;
- }
- if (gettimetick(2) >= ecl_interior_time){
- mes "[Shenime]";
- mes "Looks like the soldiers inside are really tense.";
- mes "It is pretty difficult to guide an outsider like you.";
- close;
- }
- close2;
- mapannounce "ecl_hub01",getpartyname(.@party_id) + " Party leader " + strcharinfo(PC_NAME) + " is entering " + .@md_name$,bc_map,"0x00ff99";
- warp "1@ecl",60,50;
- end;
+ if (gettimetick(2) >= ecl_interior_time) {
+ mes("[Shenime]");
+ mes("Looks like the soldiers inside are really tense.");
+ mes("It is pretty difficult to guide an outsider like you.");
+ close();
}
- mes "-! Warning !-";
- mes "This current quest will be held at Memorial dungeon.";
- mes "Only the party leader will enter. Please create your party.";
- close;
- case 2:
- close;
+ close2();
+ mapannounce("ecl_hub01", sprintf(_$("%s Party leader %s is entering %s"), getpartyname(.@party_id), strcharinfo(PC_NAME), .@md_name$), bc_map, C_SPRINGGREEN);
+ warp("1@ecl", 60, 50);
+ end;
+ }
+ mes("-! Warning !-");
+ mes("This current quest will be held at Memorial dungeon.");
+ mes("Only the party leader will enter. Please create your party.");
+ close();
+ case 2:
+ close();
}
}
- mes "This door connects to the plaza's ceiling.";
- mes "It's also a place where the lighting is set up to make Orb seem more beautiful.";
- mes "It is closed shut.";
- close;
+ mes("This door connects to the plaza's ceiling.");
+ mes("It's also a place where the lighting is set up to make Orb seem more beautiful.");
+ mes("It is closed shut.");
+ close();
}
1@ecl,58,69,3 script Shenime#ecl01 4_F_FAIRY,{
- mes "[Shenime]";
- mes "Oh, what's going on here?";
- mes "They destroyed additional troops that Mayor sent?";
- next;
+ mes("[Shenime]");
+ mes("Oh, what's going on here?");
+ mes("They destroyed additional troops that Mayor sent?");
+ next();
select("What...?", "I fought monsters off!");
- mes "[Shenime]";
- mes "It doesn't matter.";
- mes "Your job ends here.";
- mes "Now you became a betrayer.";
- mes "Farewell, then!";
- specialeffect EF_BEGINSPELL3;
- next;
- mes "[" + strcharinfo(PC_NAME) + "]";
- mes "No...way!!!";
+ mes("[Shenime]");
+ mes("It doesn't matter.");
+ mes("Your job ends here.");
+ mes("Now you became a betrayer.");
+ mes("Farewell, then!");
+ specialeffect(EF_BEGINSPELL3);
+ next();
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mes("No...way!!!");
specialeffect(EF_LORD, AREA, playerattached());
- percentheal -99,0;
- soundeffect "wander_man_move.wav",1;
- sc_start SC_BLIND,60000,0;
- close2;
- warp "1@ecl",146,95;
+ percentheal(-99, 0);
+ soundeffect("wander_man_move.wav", 1);
+ sc_start(SC_BLIND, 60000, 0);
+ close2();
+ warp("1@ecl", 146, 95);
end;
OnInstanceInit:
- hideonnpc instance_npcname(strnpcinfo(NPC_NAME));
+ hideonnpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- hideoffnpc instance_npcname(strnpcinfo(NPC_NAME));
+ hideoffnpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
}
@@ -174,8 +173,9 @@ OnEnable:
1@ecl,42,80,5 script Suspicious Creature#5 MOROCC_2_142,{
end;
+
OnInstanceInit:
- hideonnpc instance_npcname(strnpcinfo(NPC_NAME));
+ hideonnpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
}
@@ -188,109 +188,113 @@ OnInstanceInit:
OnInstanceInit:
.mob_summoned = 0;
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- initnpctimer;
+ initnpctimer();
end;
OnReset:
- killmonster instance_mapname("1@ecl"),instance_npcname("#sndmaster")+"::OnMyMobDead";
- stopnpctimer;
+ killmonster(instance_mapname("1@ecl"), instance_npcname("#sndmaster")+"::OnMyMobDead");
+ stopnpctimer();
end;
+
OnTimer1000:
- mapannounce instance_mapname("1@ecl"),"Warning: Abnormal occurrence in the lighting room. Abnormal occurrence in the lighting room.",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@ecl"), _("Warning: Abnormal occurrence in the lighting room. Abnormal occurrence in the lighting room."), bc_map, C_YELLOW); //FW_NORMAL 12 0 0
end;
+
OnTimer2000:
- mapannounce instance_mapname("1@ecl"),"Suspicious Creature: Kerrrrr....krwahhhh!!",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
- hideoffnpc instance_npcname("Suspicious Creature#5");
- hideoffnpc instance_npcname("Suspicious Creature#6");
- hideoffnpc instance_npcname("Suspicious Creature#7");
- hideoffnpc instance_npcname("Suspicious Creature#8");
+ mapannounce(instance_mapname("1@ecl"), _("Suspicious Creature: Kerrrrr....krwahhhh!!"), bc_map, C_YELLOW); //FW_NORMAL 12 0 0
+ hideoffnpc(instance_npcname("Suspicious Creature#5"));
+ hideoffnpc(instance_npcname("Suspicious Creature#6"));
+ hideoffnpc(instance_npcname("Suspicious Creature#7"));
+ hideoffnpc(instance_npcname("Suspicious Creature#8"));
end;
OnTimer3000:
- hideonnpc instance_npcname("#sndmaster");
- stopnpctimer;
+ hideonnpc(instance_npcname("#sndmaster"));
+ stopnpctimer();
end;
OnMyMobDead:
- if (mobcount(instance_mapname("1@ecl"),instance_npcname("#sndmaster")+"::OnMyMobDead") == 0) {
- donpcevent instance_npcname("Shenime#ecl01")+"::OnEnable";
- mapannounce instance_mapname("1@ecl"),"Shenime: Good, I got here just in time.",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
+ if (mobcount(instance_mapname("1@ecl"), instance_npcname("#sndmaster")+"::OnMyMobDead") == 0) {
+ donpcevent(instance_npcname("Shenime#ecl01")+"::OnEnable");
+ mapannounce(instance_mapname("1@ecl"), _("Shenime: Good, I got here just in time."), bc_map, C_YELLOW); //FW_NORMAL 12 0 0
}
end;
OnTouch:
- if (.mob_summoned) end;
- mes "Upon eliminating the intruders near the Orb, another strange-looking creatures appeared.";
- next;
- mes "We couldn't communicate with them either, and one of them seemed furious after looking around and finding out that its fellows are defeated.";
- next;
- mes "[" + strcharinfo(PC_NAME) + "]";
- mes "They look as if they are incarnation of Morroc.";
- mes "Is the King of Domons after the Orb?";
- mes "Or is it just a coincidence?";
- next;
- mes "[Subordinate of the King of Demons]";
- mes "Kyaarr...Keraahhh!!!";
- mes "Kkwaaa!";
- next;
- mes "A battle cannot be avoided!";
- mes "They will kill me!";
- hideonnpc instance_npcname("Suspicious Creature#5");
- hideonnpc instance_npcname("Suspicious Creature#6");
- hideonnpc instance_npcname("Suspicious Creature#7");
- hideonnpc instance_npcname("Suspicious Creature#8");
+ if (.mob_summoned)
+ end;
+ mes("Upon eliminating the intruders near the Orb, another strange-looking creatures appeared.");
+ next();
+ mes("We couldn't communicate with them either, and one of them seemed furious after looking around and finding out that its fellows are defeated.");
+ next();
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mes("They look as if they are incarnation of Morroc.");
+ mes("Is the King of Domons after the Orb?");
+ mes("Or is it just a coincidence?");
+ next();
+ mes("[Subordinate of the King of Demons]");
+ mes("Kyaarr...Keraahhh!!!");
+ mes("Kkwaaa!");
+ next();
+ mes("A battle cannot be avoided!");
+ mes("They will kill me!");
+ hideonnpc(instance_npcname("Suspicious Creature#5"));
+ hideonnpc(instance_npcname("Suspicious Creature#6"));
+ hideonnpc(instance_npcname("Suspicious Creature#7"));
+ hideonnpc(instance_npcname("Suspicious Creature#8"));
.@eclmap$ = instance_mapname("1@ecl");
.@sndmaster$ = instance_npcname("#sndmaster");
- monster .@eclmap$,42,80,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,48,86,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,59,82,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,56,88,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,39,72,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,42,69,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,47,64,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
- monster .@eclmap$,50,60,"Subordinate of the King of Demons",MOROCC_2_142,1,.@sndmaster$+"::OnMyMobDead";
+ monster(.@eclmap$, 42, 80, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 48, 86, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 59, 82, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 56, 88, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 39, 72, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 42, 69, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 47, 64, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
+ monster(.@eclmap$, 50, 60, _("Subordinate of the King of Demons"), MOROCC_2_142, 1, .@sndmaster$+"::OnMyMobDead");
.mob_summoned = 1;
- close;
+ close();
}
1@ecl,57,65,0 script #event HIDDEN_WARP_NPC,5,5,{
end;
OnTouch:
- if (.mob_summoned) end;
+ if (.mob_summoned)
+ end;
.@eclmap$ = instance_mapname("1@ecl");
.@eventname$ = instance_npcname("#event");
- mes "An empty room with nothing inside.";
- mes "a light is coming out of a circular equipment in the middle of the room.";
- next;
- mes "[Suspicious Creature]";
- mes "Keheehehehe......";
- next;
- mes "A group of unidentifiable creatures is approaching threateningly.";
- mes "They seemed surprised, and although Bifrost's will still holds, it's hard to communicate.";
- next;
- mes "[Suspicious Creature]";
- mes "Kyaarr...Ke...Keryarya!!";
- next;
- mes "It seems like they are going to start attacking any minute.";
- mes "We cannot help fighting them!";
- hideonnpc instance_npcname("Suspicious Creature#1");
- hideonnpc instance_npcname("Suspicious Creature#2");
- hideonnpc instance_npcname("Suspicious Creature#3");
- hideonnpc instance_npcname("Suspicious Creature#4");
- monster .@eclmap$,51,64,"Suspicious Creature",MOROCC_4_142,1,.@eventname$+"::OnMyMobDead";
- monster .@eclmap$,43,67,"Suspicious Creature",MOROCC_4_142,1,.@eventname$+"::OnMyMobDead";
- monster .@eclmap$,55,80,"Suspicious Creature",MOROCC_4_142,1,.@eventname$+"::OnMyMobDead";
- monster .@eclmap$,60,75,"Suspicious Creature",MOROCC_4_142,1,.@eventname$+"::OnMyMobDead";
+ mes("An empty room with nothing inside.");
+ mes("a light is coming out of a circular equipment in the middle of the room.");
+ next();
+ mes("[Suspicious Creature]");
+ mes("Keheehehehe......");
+ next();
+ mes("A group of unidentifiable creatures is approaching threateningly.");
+ mes("They seemed surprised, and although Bifrost's will still holds, it's hard to communicate.");
+ next();
+ mes("[Suspicious Creature]");
+ mes("Kyaarr...Ke...Keryarya!!");
+ next();
+ mes("It seems like they are going to start attacking any minute.");
+ mes("We cannot help fighting them!");
+ hideonnpc(instance_npcname("Suspicious Creature#1"));
+ hideonnpc(instance_npcname("Suspicious Creature#2"));
+ hideonnpc(instance_npcname("Suspicious Creature#3"));
+ hideonnpc(instance_npcname("Suspicious Creature#4"));
+ monster(.@eclmap$, 51, 64, _("Suspicious Creature"), MOROCC_4_142, 1, .@eventname$+"::OnMyMobDead");
+ monster(.@eclmap$, 43, 67, _("Suspicious Creature"), MOROCC_4_142, 1, .@eventname$+"::OnMyMobDead");
+ monster(.@eclmap$, 55, 80, _("Suspicious Creature"), MOROCC_4_142, 1, .@eventname$+"::OnMyMobDead");
+ monster(.@eclmap$, 60, 75, _("Suspicious Creature"), MOROCC_4_142, 1, .@eventname$+"::OnMyMobDead");
.mob_summoned = 1;
- close;
+ close();
OnMyMobDead:
- if (mobcount(instance_mapname("1@ecl"),instance_npcname("#event")+"::OnMyMobDead") == 0) {
- enablenpc instance_npcname("#sndmaster");
- donpcevent instance_npcname("#sndmaster")+"::OnEnable";
+ if (mobcount(instance_mapname("1@ecl"), instance_npcname("#event")+"::OnMyMobDead") == 0) {
+ enablenpc(instance_npcname("#sndmaster"));
+ donpcevent(instance_npcname("#sndmaster")+"::OnEnable");
}
end;
OnInstanceInit:
@@ -299,218 +303,218 @@ OnInstanceInit:
}
1@ecl,148,97,3 script Avant# 4_M_FAIRYAVANT,{
- mes "[Avant]";
- mes "Hey, look who's here!";
- mes "You're a friend of my son, right?";
- mes "What a strange chance it is that has brought us together here!";
- cutin "avant01",1;
- next;
- mes "[Avant]";
- mes "Did something happen to you?";
- mes "There was a subtle and magical echo to it.";
- mes "Immidiately after that, you were thrown here.";
- next;
+ mes("[Avant]");
+ mes("Hey, look who's here!");
+ mes("You're a friend of my son, right?");
+ mes("What a strange chance it is that has brought us together here!");
+ cutin("avant01", 1);
+ next();
+ mes("[Avant]");
+ mes("Did something happen to you?");
+ mes("There was a subtle and magical echo to it.");
+ mes("Immidiately after that, you were thrown here.");
+ next();
if (select("It's all because of you!", "Shenime said...") == 1) {
- mes "[Avant]";
- mes "I don't understand a word you're saying.";
- mes "Can't you organize your story? Don't you know 'five W's and one H' rule?";
- next;
+ mes("[Avant]");
+ mes("I don't understand a word you're saying.");
+ mes("Can't you organize your story? Don't you know 'five W's and one H' rule?");
+ next();
}
- mes "[Avant]";
- mes "Ooh...so that's what happened.";
- mes "So you're saying that Shenime was after the Orb?";
- next;
- mes "[Avant]";
- mes "hehehe...hahahhaha ahahahahha";
- mes "Well, well...did he get me, too?";
- mes "Me, Avant, of all the people?! Hahahaha!";
- cutin "avant02",1;
- next;
+ mes("[Avant]");
+ mes("Ooh...so that's what happened.");
+ mes("So you're saying that Shenime was after the Orb?");
+ next();
+ mes("[Avant]");
+ mes("hehehe...hahahhaha ahahahahha");
+ mes("Well, well...did he get me, too?");
+ mes("Me, Avant, of all the people?! Hahahaha!");
+ cutin("avant02", 1);
+ next();
select("What do you mean?");
- mes "[Avant]";
- mes "I was doing a research on the power of the Orb on my own.";
- mes "But Shenime just urged me persistently.";
- cutin "avant01",1;
- next;
- mes "[Avant]";
- mes "I started from thinking about the beauty of the Orb and went on to wondering what kind of power is accumulated inside the Orb...";
- mes "and I started questioning the principle of the Orb's power since we all benefit from it.";
- next;
- mes "[Avant]";
- mes "All Laphines think of the Orb as something natural as air and water, but he was the first one to make me perceive it differently and investigate its origin.";
- mes "Right...Shenime. He excited my curiosity on purpose.";
- next;
- mes "[Avant]";
- mes "Stimulate a person who wasn't aware of air and water, and make him recognize and carry on investigating!";
- mes "Well, well...isn't that interesting!";
- cutin "avant02",1;
- next;
- mes "[Avant]";
- mes "Ha...hahaha...";
- mes "...I'm so angry about the fact that I just realized how he used me, but what's even worse is that I've done something horrible to our people.";
- mes "I think I'm pretty irritated now.";
- next;
+ mes("[Avant]");
+ mes("I was doing a research on the power of the Orb on my own.");
+ mes("But Shenime just urged me persistently.");
+ cutin("avant01", 1);
+ next();
+ mes("[Avant]");
+ mes("I started from thinking about the beauty of the Orb and went on to wondering what kind of power is accumulated inside the Orb...");
+ mes("and I started questioning the principle of the Orb's power since we all benefit from it.");
+ next();
+ mes("[Avant]");
+ mes("All Laphines think of the Orb as something natural as air and water, but he was the first one to make me perceive it differently and investigate its origin.");
+ mes("Right...Shenime. He excited my curiosity on purpose.");
+ next();
+ mes("[Avant]");
+ mes("Stimulate a person who wasn't aware of air and water, and make him recognize and carry on investigating!");
+ mes("Well, well...isn't that interesting!");
+ cutin("avant02", 1);
+ next();
+ mes("[Avant]");
+ mes("Ha...hahaha...");
+ mes("...I'm so angry about the fact that I just realized how he used me, but what's even worse is that I've done something horrible to our people.");
+ mes("I think I'm pretty irritated now.");
+ next();
select("You had a conscience?");
- mes "[Avant]";
- mes "What kind of a person do you think I am, seriously!";
- mes "Is it because of my sons?";
- mes "Well, then, I can't blame you too much.";
- cutin "avant01",1;
- next;
- mes "[Avant]";
- mes "...Bah.";
- mes "It's no fun.";
- mes "It's not fun anymore. I'm no longer interested in you.";
- next;
- mes "[Avant]";
- mes "......";
- mes "Seems like there's a visitor.";
- next;
- cutin "minuel01",4;
- mes "[Minuel]";
- mes "" + strcharinfo(PC_NAME) + "Sir,";
- mes "Although you're detained on suspicion of being responsible for the recent incident in the lighting room,";
- mes "there are some witnesses to prove your innocence.";
- next;
- mes "[Minuel]";
- mes "I don't know the details,";
- mes "but I also believe you're not guilty.";
- mes "I'll move you to the treatment room since this seems like a severe wound.";
- next;
- mes "[Minuel]";
- mes "I don't think it's a big deal.";
- mes "...hopefully.";
- mes "Let's go. I'll guide you.";
- close2;
- cutin "",255;
- warp "1@ecl",146,29;
+ mes("[Avant]");
+ mes("What kind of a person do you think I am, seriously!");
+ mes("Is it because of my sons?");
+ mes("Well, then, I can't blame you too much.");
+ cutin("avant01", 1);
+ next();
+ mes("[Avant]");
+ mes("...Bah.");
+ mes("It's no fun.");
+ mes("It's not fun anymore. I'm no longer interested in you.");
+ next();
+ mes("[Avant]");
+ mes("......");
+ mes("Seems like there's a visitor.");
+ next();
+ cutin("minuel01", 4);
+ mes("[Minuel]");
+ mesf("%s Sir,", strcharinfo(PC_NAME));
+ mes("Although you're detained on suspicion of being responsible for the recent incident in the lighting room,");
+ mes("there are some witnesses to prove your innocence.");
+ next();
+ mes("[Minuel]");
+ mes("I don't know the details,");
+ mes("but I also believe you're not guilty.");
+ mes("I'll move you to the treatment room since this seems like a severe wound.");
+ next();
+ mes("[Minuel]");
+ mes("I don't think it's a big deal.");
+ mes("...hopefully.");
+ mes("Let's go. I'll guide you.");
+ close2();
+ cutin("", 255);
+ warp("1@ecl", 146, 29);
end;
}
1@ecl,148,29,3 script Loki#ecl01 4_M_ROKI2,{
- mes "[Loki]";
- mes "It seems like this guy next to me has a lot more to say than I do.";
- mes "Why don't you explain to him first?";
- close;
+ mes("[Loki]");
+ mes("It seems like this guy next to me has a lot more to say than I do.");
+ mes("Why don't you explain to him first?");
+ close();
}
1@ecl,147,30,3 script Nydhog#ecl01 4_F_NYDHOG,{
- mes "[Guardian Nydhog]";
- mes "I think you should talk to Hisie first.";
- close;
+ mes("[Guardian Nydhog]");
+ mes("I think you should talk to Hisie first.");
+ close();
}
1@ecl,144,27,5 script Hisie#ecl01 4_M_FARIY_HISIE,{
- cutin "hisie01",0;
- mes "[Hisie]";
- mes "Can you tell me exactly what happened?";
- next;
+ cutin("hisie01", 0);
+ mes("[Hisie]");
+ mes("Can you tell me exactly what happened?");
+ next();
select("I fought with monsters.");
- cutin "hisie03",0;
- mes "[Hisie]";
- mes "Monsters? Subordinates of Morroc?";
- mes "What you were trying to kill were our soldiers, the Laphines!!";
- mes "What on earth happened there?";
- npcskill AL_HEAL,9,99,80;
- next;
- cutin "",255;
- mes "[Loki]";
- mes "It's because of this.";
- mes "" + strcharinfo(PC_NAME) + "It was inside the body of -";
- mes "This is how powerful Shenime is.";
- next;
- mes "On Loki's palm, there rested a small, thin, and dried piece of thorn.";
- next;
- cutin "hisie03",0;
- mes "[Hisie]";
- mes "Shenime, the Chief of Staff?";
- mes "Why is he related to this?";
- npcskill AL_HEAL,9,99,80;
- next;
- cutin "",255;
- mes "[Loki]";
- mes "Shenime is one of the subordinates of Morroc.";
- mes "His power enbales him to control another person directly or mentally influence that person indirectly through a part of his body.";
- next;
+ cutin("hisie03", 0);
+ mes("[Hisie]");
+ mes("Monsters? Subordinates of Morroc?");
+ mes("What you were trying to kill were our soldiers, the Laphines!!");
+ mes("What on earth happened there?");
+ npcskill(AL_HEAL, 9, 99, 80);
+ next();
+ cutin("", 255);
+ mes("[Loki]");
+ mes("It's because of this.");
+ mesf("%s It was inside the body of -", strcharinfo(PC_NAME));
+ mes("This is how powerful Shenime is.");
+ next();
+ mes("On Loki's palm, there rested a small, thin, and dried piece of thorn.");
+ next();
+ cutin("hisie03", 0);
+ mes("[Hisie]");
+ mes("Shenime, the Chief of Staff?");
+ mes("Why is he related to this?");
+ npcskill(AL_HEAL, 9, 99, 80);
+ next();
+ cutin("", 255);
+ mes("[Loki]");
+ mes("Shenime is one of the subordinates of Morroc.");
+ mes("His power enbales him to control another person directly or mentally influence that person indirectly through a part of his body.");
+ next();
select("Now that I think about it...");
- mes "[" + strcharinfo(PC_NAME) + "]";
- mes "Right before coming here, Shenime reached his hand out to me and I felt a spark when I held his hand.";
- mes "I thought it was just my imagination and ignored it...maybe that's when he...";
- next;
- mes "[Nydhog]";
- mes "You're probably right.";
- mes "They use wicked tricks.";
- mes "This thorn here probably has clouded your judgement.";
- next;
- cutin "hisie03",0;
- mes "[Hisie]";
- mes "So you're saying that he deceived us all?";
- mes "The Chief of Staff is a Laphine who stayed with us for a long time! He can't be...";
- npcskill AL_HEAL,9,99,80;
- next;
- cutin "",255;
- mes "[Loki]";
- mes "He might have been under the influence for a good while.";
- mes "Anyway, this guy is not guilty.";
- mes "I can prove it.";
- next;
- mes "[Nydhog]";
- mes "I swear by the name of the guardian of Yggdrasil, too.";
- mes "" + strcharinfo(PC_NAME) + "- will by no means do such a thing.";
- next;
- cutin "hisie02",0;
- mes "[Hisie]";
- mes "Hah...";
- mes "But things got out of control.";
- mes "I didn't expect this.";
- next;
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mes("Right before coming here, Shenime reached his hand out to me and I felt a spark when I held his hand.");
+ mes("I thought it was just my imagination and ignored it...maybe that's when he...");
+ next();
+ mes("[Nydhog]");
+ mes("You're probably right.");
+ mes("They use wicked tricks.");
+ mes("This thorn here probably has clouded your judgement.");
+ next();
+ cutin("hisie03", 0);
+ mes("[Hisie]");
+ mes("So you're saying that he deceived us all?");
+ mes("The Chief of Staff is a Laphine who stayed with us for a long time! He can't be...");
+ npcskill(AL_HEAL, 9, 99, 80);
+ next();
+ cutin("", 255);
+ mes("[Loki]");
+ mes("He might have been under the influence for a good while.");
+ mes("Anyway, this guy is not guilty.");
+ mes("I can prove it.");
+ next();
+ mes("[Nydhog]");
+ mes("I swear by the name of the guardian of Yggdrasil, too.");
+ mesf("%s - will by no means do such a thing.", strcharinfo(PC_NAME));
+ next();
+ cutin("hisie02", 0);
+ mes("[Hisie]");
+ mes("Hah...");
+ mes("But things got out of control.");
+ mes("I didn't expect this.");
+ next();
select("What happened to the Orb?");
- mes "[Hisie]";
- mes "The inner core is stolen.";
- mes "Nobody knows that the Orb's inner core is gone,";
- mes "and that's why Karr didn't make it here.";
- npcskill AL_HEAL,9,99,80;
- next;
- mes "[Hisie]";
- mes "And what's more, several soldiers are injured because of you.";
- mes "None of them died fortunately, but most of them are wounded severely.";
- mes "The situation is not very good right now.";
- next;
- cutin "",255;
- mes "[Loki]";
- mes "Someone has to take the responsibility here then.";
- mes "In all probablility," + strcharinfo(PC_NAME) + "it will be you.";
- next;
- cutin "hisie02",0;
- mes "[Hisie]";
- mes "......these two gentlemen here cleared up all charges related to the Orb,";
- mes "but both you and Karr won't be able to avoid your responsibility.";
- mes "you'll have to catch Shenime.";
- npcskill AL_HEAL,9,99,80;
- next;
- cutin "hisie01",0;
- mes "[Hisie]";
- mes "It seems like you've rested enough. Let's get going.";
- mes "Karr is waiting for you.";
- mes "What will you two do?";
- next;
- cutin "",255;
- mes "[Loki]";
- mes "Don't worry about us.";
- mes "Our target is Morroc, the King of Demons.";
- mes "It's good enough that we found an evidence here.";
- next;
- cutin "hisie01",0;
- mes "[Hisie]";
- mes "Thank you for your help.";
- mes "We will take off now.";
- mes "Let's go." + strcharinfo(PC_NAME) + ".";
+ mes("[Hisie]");
+ mes("The inner core is stolen.");
+ mes("Nobody knows that the Orb's inner core is gone,");
+ mes("and that's why Karr didn't make it here.");
+ npcskill(AL_HEAL, 9, 99, 80);
+ next();
+ mes("[Hisie]");
+ mes("And what's more, several soldiers are injured because of you.");
+ mes("None of them died fortunately, but most of them are wounded severely.");
+ mes("The situation is not very good right now.");
+ next();
+ cutin("", 255);
+ mes("[Loki]");
+ mes("Someone has to take the responsibility here then.");
+ mesf("In all probablility, %s it will be you.", strcharinfo(PC_NAME));
+ next();
+ cutin("hisie02", 0);
+ mes("[Hisie]");
+ mes("......these two gentlemen here cleared up all charges related to the Orb,");
+ mes("but both you and Karr won't be able to avoid your responsibility.");
+ mes("you'll have to catch Shenime.");
+ npcskill(AL_HEAL, 9, 99, 80);
+ next();
+ cutin("hisie01", 0);
+ mes("[Hisie]");
+ mes("It seems like you've rested enough. Let's get going.");
+ mes("Karr is waiting for you.");
+ mes("What will you two do?");
+ next();
+ cutin("", 255);
+ mes("[Loki]");
+ mes("Don't worry about us.");
+ mes("Our target is Morroc, the King of Demons.");
+ mes("It's good enough that we found an evidence here.");
+ next();
+ cutin("hisie01", 0);
+ mes("[Hisie]");
+ mes("Thank you for your help.");
+ mes("We will take off now.");
+ mesf("Let's go. %s.", strcharinfo(PC_NAME));
ep14_2_mylord = 30;
- changequest 7450,7451;
- erasequest 7450;
- setquest 7451;
- close2;
- cutin "",255;
- warp "ecl_in03",57,76;
+ changequest(7450, 7451);
+ erasequest(7450);
+ setquest(7451);
+ close2();
+ cutin("", 255);
+ warp("ecl_in03", 57, 76);
end;
}
diff --git a/npc/re/instances/HazyForest.txt b/npc/re/instances/HazyForest.txt
index c649171f8..291ce54db 100644
--- a/npc/re/instances/HazyForest.txt
+++ b/npc/re/instances/HazyForest.txt
@@ -37,147 +37,149 @@
bif_fild01,158,340,5 script Laphine Soldier#mist 4_M_FAIRYSOLDIER,{
.@party_id = getcharid(CHAR_ID_PARTY);
- .@md_name$ = "Mistwood Maze";
+ .@md_name$ = _("Mistwood Maze");
- mes "[Laphine Soldier]";
- mes "Are you going into the forest?";
- next;
+ mes("[Laphine Soldier]");
+ mes("Are you going into the forest?");
+ next();
if (!.@party_id) {
- mes "[Laphine Soldier]";
- mes "Well, well, well, aren't you being too rash?";
- mes "Why don't you at least organize a party?";
- close;
+ mes("[Laphine Soldier]");
+ mes("Well, well, well, aren't you being too rash?");
+ mes("Why don't you at least organize a party?");
+ close();
}
- .@playtime = questprogress(7211,PLAYTIME);
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2)) {
+ .@playtime = questprogress(7211, PLAYTIME);
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) {
if (.@playtime == 1) {
- mes "[Laphine Soldier]";
- mes "...Are you sure you're not doing too much?";
- mes "I think you'd better get some rest.";
- mes "You'll only wear yourself out by trying to do too much";
- next;
- mes "[Laphine Soldier]";
- mes "I don't think the authority will give you permission, either.";
- mes "...Even a Sapha would be stopped from entering the forest.";
- next;
+ mes("[Laphine Soldier]");
+ mes("...Are you sure you're not doing too much?");
+ mes("I think you'd better get some rest.");
+ mes("You'll only wear yourself out by trying to do too much");
+ next();
+ mes("[Laphine Soldier]");
+ mes("I don't think the authority will give you permission, either.");
+ mes("...Even a Sapha would be stopped from entering the forest.");
+ next();
select("You speak our language quite well, don't you?");
- mes "[Laphine Soldier]";
- mes "...Do I?";
- mes "Actually I'm not speaking your language.";
- mes "I'm speaking Laphine language.";
- next;
- mes "[Laphine Soldier]";
- mes "But it's one of the mysteries of Bifrost.";
- mes "That we can understand each other even if we speak different languages.";
- next;
- mes "[Laphine Soldier]";
- mes "To be able to talk with everybody...";
- mes "Perhaps that's the power of Bifrost.";
- close;
+ mes("[Laphine Soldier]");
+ mes("...Do I?");
+ mes("Actually I'm not speaking your language.");
+ mes("I'm speaking Laphine language.");
+ next();
+ mes("[Laphine Soldier]");
+ mes("But it's one of the mysteries of Bifrost.");
+ mes("That we can understand each other even if we speak different languages.");
+ next();
+ mes("[Laphine Soldier]");
+ mes("To be able to talk with everybody...");
+ mes("Perhaps that's the power of Bifrost.");
+ close();
} else if (.@playtime == 2) {
- mes "[Laphine Soldier]";
- mes "Great, great.";
- mes "Now the forest won't reject you.";
- mes "What are you going to do now?";
- erasequest 7211;
+ mes("[Laphine Soldier]");
+ mes("Great, great.");
+ mes("Now the forest won't reject you.");
+ mes("What are you going to do now?");
+ erasequest(7211);
} else {
- mes "[Laphine Soldier]";
- mes "You human adventurers are incredible.";
- mes "You're always going into the forest, where no one else dares to go.";
- next;
- mes "[Laphine Soldier]";
- mes "Phew. But I have to report to the authority";
- mes "everyone who goes into the forest, just in case.";
- next;
- mes "[Laphine Soldier]";
- mes "You'll get permission";
- mes "after you register.";
- mes "Are you going to venture into the Hazy Forest?";
+ mes("[Laphine Soldier]");
+ mes("You human adventurers are incredible.");
+ mes("You're always going into the forest, where no one else dares to go.");
+ next();
+ mes("[Laphine Soldier]");
+ mes("Phew. But I have to report to the authority");
+ mes("everyone who goes into the forest, just in case.");
+ next();
+ mes("[Laphine Soldier]");
+ mes("You'll get permission");
+ mes("after you register.");
+ mes("Are you going to venture into the Hazy Forest?");
}
- next;
+ next();
switch(select("Venture into the Hazy Forest.", "Give up.")) {
case 1:
- mes "[Laphine Soldier]";
- mes "Party Name "+getpartyname(.@party_id)+"...";
- mes "Party Leader "+strcharinfo(PC_NAME)+"...";
+ mes("[Laphine Soldier]");
+ mesf("Party Name %s...", getpartyname(.@party_id));
+ mesf("Party Leader %s...", strcharinfo(PC_NAME));
.@instance = instance_create(.@md_name$, .@party_id);
if (.@instance < 0) {
- mes "Hmm...";
- next;
- mes "[Laphine Soldier]";
+ mes("Hmm...");
+ next();
+ mes("[Laphine Soldier]");
if (!.@playtime)
- mes "It's dangerous in the forest.";
+ mes("It's dangerous in the forest.");
else
- mes "The atmosphere is somewhat tense in the forest.";
- mes "...Why don't you just go back today?";
- close;
+ mes("The atmosphere is somewhat tense in the forest.");
+ mes("...Why don't you just go back today?");
+ close();
}
- if (instance_attachmap("1@mist",.@instance) != "") {
- instance_set_timeout 7200,300,.@instance;
+ if (instance_attachmap("1@mist", .@instance) != "") {
+ instance_set_timeout(7200, 300, .@instance);
instance_init(.@instance);
- mes "I've got it. I've written them down on the report here.";
- next;
- mes "[Laphine Soldier]";
- mes "You'll get permission soon.";
- mes "Now go to the log tunnel, the only way to get into the Hazy Forest.";
- mes "You understand?";
- next;
- mes "[Laphine Soldier]";
- mes "We can't go against the forest,";
- mes "but maybe you humans can.";
- mes "Good luck!";
- close;
+ mes("I've got it. I've written them down on the report here.");
+ next();
+ mes("[Laphine Soldier]");
+ mes("You'll get permission soon.");
+ mes("Now go to the log tunnel, the only way to get into the Hazy Forest.");
+ mes("You understand?");
+ next();
+ mes("[Laphine Soldier]");
+ mes("We can't go against the forest,");
+ mes("but maybe you humans can.");
+ mes("Good luck!");
+ close();
} else {
instance_destroy(.@instance);
}
case 2:
- mes "[Laphine Soldier]";
- mes "Well, you've made the right decision.";
+ mes("[Laphine Soldier]");
+ mes("Well, you've made the right decision.");
if (!.@playtime)
- mes "That's what's good for you.";
- close;
+ mes("That's what's good for you.");
+ close();
}
} else {
- mes "[Laphine Soldier]";
- mes "Where's your party leader?";
- mes "It's dangerous in there.";
- next;
+ mes("[Laphine Soldier]");
+ mes("Where's your party leader?");
+ mes("It's dangerous in there.");
+ next();
if (.@playtime == 2) {
- mes "[Laphine Soldier]";
- mes "I see you've been into the forest before.";
- mes "Okay, at least the forest won't reject you.";
- mes "However...";
- erasequest 7211;
- next;
+ mes("[Laphine Soldier]");
+ mes("I see you've been into the forest before.");
+ mes("Okay, at least the forest won't reject you.");
+ mes("However...");
+ erasequest(7211);
+ next();
}
- mes "[Laphine Soldier]";
- mes "Put yourself in my shoes, the entrance guard, and let me meet the representative of your party.";
- mes "I have to discuss some things with him/her.";
- close;
+ mes("[Laphine Soldier]");
+ mes("Put yourself in my shoes, the entrance guard, and let me meet the representative of your party.");
+ mes("I have to discuss some things with him/her.");
+ close();
}
}
bif_fild01,161,355,0 script Log Tunnel CLEAR_NPC,{
- mes "I see the forest through the log tunnel.";
- mes "It looks like I can enter the forest through the log tunnel.";
- next;
- if(select("Enter the tunnel.", "Give up.") == 2)
- close;
+ mes("I see the forest through the log tunnel.");
+ mes("It looks like I can enter the forest through the log tunnel.");
+ next();
+ if (select("Enter the tunnel.", "Give up.") == 2)
+ close();
if (has_instance("1@mist") == "") {
- if (questprogress(7211,PLAYTIME) == 1) {
- mes "You try to crawl into the log, but some mysterious power pushes you back with a gush of wind.";
- mes "It seems like you can't force your way into the forest.";
- close;
+ if (questprogress(7211, PLAYTIME) == 1) {
+ mes("You try to crawl into the log, but some mysterious power pushes you back with a gush of wind.");
+ mes("It seems like you can't force your way into the forest.");
+ close();
}
- mes "The world beyond the log tunnel looks dark and suffocating.";
- mes "Your instinct is screaming that this forest is dangerous.";
- close;
+ mes("The world beyond the log tunnel looks dark and suffocating.");
+ mes("Your instinct is screaming that this forest is dangerous.");
+ close();
} else {
- if (questprogress(7211,PLAYTIME) == 2) erasequest 7211;
- if (!questprogress(7211,PLAYTIME)) setquest 7211;
- mapannounce "bif_fild01",getpartyname(getcharid(CHAR_ID_PARTY))+" party's "+strcharinfo(PC_NAME)+" member is entering the Mistwood Maze.",bc_map,"0x00ff99"; //FW_NORMAL 12 0 0
- warp "1@mist",89,29;
- close;
+ if (questprogress(7211, PLAYTIME) == 2)
+ erasequest(7211);
+ if (!questprogress(7211, PLAYTIME))
+ setquest(7211);
+ mapannounce("bif_fild01", sprintf(_$("%s party's %s member is entering the Mistwood Maze."), getpartyname(getcharid(CHAR_ID_PARTY)), strcharinfo(PC_NAME)), bc_map, C_SPRINGGREEN); //FW_NORMAL 12 0 0
+ warp("1@mist", 89, 29);
+ close();
}
}
@@ -185,284 +187,325 @@ bif_fild01,161,355,0 script Log Tunnel CLEAR_NPC,{
1@mist,89,29,0 script #Whisper_mist CLEAR_NPC,1,1,{
end;
OnInstanceInit:
- enablenpc instance_npcname("#Whisper_mist");
+ enablenpc(instance_npcname("#Whisper_mist"));
end;
OnTouch:
- disablenpc instance_npcname("#Whisper_mist");
- initnpctimer;
+ disablenpc(instance_npcname("#Whisper_mist"));
+ initnpctimer();
end;
OnTimer10000:
OnTimer20000:
- mapannounce instance_mapname("1@mist"),"Whisper: Who's this? Who's this!? The forest is open! Tom, Tomba, Tired Rem, Remi! Wake up!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Whisper: Who's this? Who's this!? The forest is open! Tom, Tomba, Tired Rem, Remi! Wake up!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer60000:
- mapannounce instance_mapname("1@mist"),"Loud Whisper: What are the forest keepers doing? What are the gardeners doing??",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Loud Whisper: What are the forest keepers doing? What are the gardeners doing??"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer120000:
- mapannounce instance_mapname("1@mist"),"Loud Whisper: Don't go out, wander around forever, and play with us!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Loud Whisper: Don't go out, wander around forever, and play with us!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer180000:
- mapannounce instance_mapname("1@mist"),"Loud Whisper: Useless, useless. Wandering around and around, you'll meet your end!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
- stopnpctimer;
+ mapannounce(instance_mapname("1@mist"), _("Loud Whisper: Useless, useless. Wandering around and around, you'll meet your end!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
+ stopnpctimer();
end;
}
-// callfunc "F_Mora_Mist",<warp to enable>,<success message>,<fail message>{,<end flag>}
+// callfunc("F_Mora_Mist", <warp to enable>, <success message>, <fail message>{, <end flag>})
function script F_Mora_Mist {
.@map$ = instance_mapname("1@mist");
- if (mobcount(.@map$,instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") == 0) {
- mes "Obviously no one is taking care of it.";
- mes "It seems like you can chop down the garden tree.";
- next;
- if(select("Chop down the garden tree.", "Give up.") == 2)
- close;
- mes "You chop down the tree, which was blocking the path of the maze, "+((getarg(3,0))?"clearing the way out of the forest.":"so now you can continue.");
- mapannounce .@map$,getarg(1),bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
- enablenpc instance_npcname(getarg(0));
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
- close;
- } else
- mapannounce .@map$,((getarg(3,0))?getarg(2):getarg(2)+"'s Cry: Huh? Who's doing bad things to my tree?!"),bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ if (mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") == 0) {
+ mes("Obviously no one is taking care of it.");
+ mes("It seems like you can chop down the garden tree.");
+ next();
+ if (select("Chop down the garden tree.", "Give up.") == 2)
+ close();
+ mesf("You chop down the tree, which was blocking the path of the maze, %s", ((getarg(3, 0))?"clearing the way out of the forest.":"so now you can continue."));
+ mapannounce(.@map$, getarg(1), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
+ enablenpc(instance_npcname(getarg(0)));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ close();
+ } else {
+ mapannounce(.@map$, (getarg(3, 0) ? getarg(2) : sprintf(_$("%s's Cry: Huh? Who's doing bad things to my tree?!"), getarg(2))), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
+ }
+ end;
+}
+
+1@mist,251,121,3 script Tom's Garden 4_BULLETIN_BOARD2,{
end;
}
-1@mist,251,121,3 script Tom's Garden 4_BULLETIN_BOARD2,{ end; }
1@mist,247,123,0 script Tom's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"a25_a18-1",
"Roaring Cry: Tom's bolt is broken! Watch out, Tomba! Watch out, Tomba!",
- "Tom";
+ "Tom");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),249,120,"Tom",2136,1,instance_npcname("Tom's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 249, 120, _("Tom"), LITTLE_FATUM, 1, instance_npcname("Tom's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,226,95,3 script Tomba's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,226,95,3 script Tomba's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,225,98,0 script Tomba's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"a27-2_af1-2",
"Roaring Cry: Tomba's Garden Tree is gone with Tomba. Remi, what are you going to do now?",
- "Tomba";
+ "Tomba");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),200,64,"Tomba",2136,1,instance_npcname("Tomba's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 200, 64, _("Tomba"), LITTLE_FATUM, 1, instance_npcname("Tomba's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,157,183,3 script Remi's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,157,183,3 script Remi's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,159,184,0 script Remi's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"a15-2_a4-1",
"Roaring Cry: Remi, Remi's Garden Tree was chopped down- Rem, it's your turn next. Poor Rem!",
- "Remi";
+ "Remi");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),154,184,"Remi the Tired",2137,1,instance_npcname("Remi's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 154, 184, _("Remi the Tired"), MIMING, 1, instance_npcname("Remi's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,58,39,3 script Tired Rem's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,58,39,3 script Tired Rem's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,61,39,0 script Tired Rem's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"a4-2_a11",
"Rem's Desperate Cry: Argh... Rem will sleep. Rem will sleep now, and won't wake up forever!",
- "Rem";
+ "Rem");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),101,107,"Rem the Gardener",2136,1,instance_npcname("Tired Rem's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 101, 107, _("Rem the Gardener"), LITTLE_FATUM, 1, instance_npcname("Tired Rem's Garden Tree")+"::OnMyMobDead");
end;
OnTimer10000:
- mapannounce instance_mapname("1@mist"),"Whisper of the Forest: So Tom's, Tomba's, Remi's, and Rem's garden trees were all chopped down?",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Whisper of the Forest: So Tom's, Tomba's, Remi's, and Rem's garden trees were all chopped down?"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer15000:
- mapannounce instance_mapname("1@mist"),"Whisper of the Forest: Trouble, trouble, we're in big trouble.",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Whisper of the Forest: Trouble, trouble, we're in big trouble."), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer20000:
- mapannounce instance_mapname("1@mist"),"Loud Whisper: They've come to the second deepest forest. Gardeners of the deep forest, watch out!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
- stopnpctimer;
+ mapannounce(instance_mapname("1@mist"), _("Loud Whisper: They've come to the second deepest forest. Gardeners of the deep forest, watch out!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
+ stopnpctimer();
end;
OnMyMobDead:
end;
}
-1@mist,227,179,3 script Ron's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,227,179,3 script Ron's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,230,179,0 script Ron's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"b4-2_b2",
"Ron the Gardener's Cry: I'm getting off work! Don't look for Ron, the second gardener, any more!!",
- "Ron";
+ "Ron");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),227,178,"Ron the Gardener",2134,1,instance_npcname("Ron's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 227, 178, _("Ron the Gardener"), PARUS, 1, instance_npcname("Ron's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,288,226,3 script Rover's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,288,226,3 script Rover's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,285,225,0 script Rover's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"b7_bf1-2",
"Roaring Whisper: Ron's, and Rover's trees were chopped down as well. Who is forcing his way into the forest? Who is it?",
- "Rover";
+ "Rover");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),304,237,"Rover the Strutter",2134,1,instance_npcname("Rover's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 304, 237, _("Rover the Strutter"), PARUS, 1, instance_npcname("Rover's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,159,318,3 script Mona's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,159,318,3 script Mona's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,161,316,0 script Mona's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"b31_b16",
"Clamoring Whisper: Mona the Seedseeker's garden tree is gone! Mona is gone too! Namon will be okay, because he is brave, right? Namon, are you okay?",
- "Mona";
+ "Mona");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),239,253,"Mona the Seedseeker",2133,1,instance_npcname("Mona's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 239, 253, _("Mona the Seedseeker"), ANGRA_MANTIS, 1, instance_npcname("Mona's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,205,300,3 script Namon's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,205,300,3 script Namon's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,204,299,0 script Namon's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"b27-3_bN-1",
"Clamoring Whisper: Brave Namon met his fate not so bravely... *giggle*",
- "Namon";
+ "Namon");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),89,173,"Brave Namon",2134,1,instance_npcname("Namon's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 89, 173, _("Brave Namon"), PARUS, 1, instance_npcname("Namon's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,219,232,3 script Sad Neoron's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,219,232,3 script Sad Neoron's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,221,236,0 script Sad Neoron's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"b6-1_b33",
"Lamenting Whisper: Sad Neoron has become cheerful! Spyder the Superior Spider, what are you going to do? What are you going to do now?",
- "Neoron";
+ "Neoron");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),143,265,"Sad Neoron",2137,1,instance_npcname("Sad Neoron's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 143, 265, _("Sad Neoron"), MIMING, 1, instance_npcname("Sad Neoron's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,206,202,3 script Spyder's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,206,202,3 script Spyder's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,206,200,0 script Spyder's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"b5_b14",
"Depressed Whisper: Now it's all over with the second deepest forest. Gardeners are dying out-",
- "Spyder";
+ "Spyder");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),209,200,"Spyder the Eight-Legged",2132,1,instance_npcname("Spyder's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 209, 200, _("Spyder the Eight-Legged"), POM_SPIDER, 1, instance_npcname("Spyder's Garden Tree")+"::OnMyMobDead");
end;
OnTimer5000:
- mapannounce instance_mapname("1@mist"),"Roaring Whisper: The path is about to open. The tight bolts have been removed!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Roaring Whisper: The path is about to open. The tight bolts have been removed!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer9000:
- mapannounce instance_mapname("1@mist"),"Roaring Whisper: A forest opened, another opened, and the other is going to open as well. Tito and Pumba, they are heading your way!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Roaring Whisper: A forest opened, another opened, and the other is going to open as well. Tito and Pumba, they are heading your way!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer13000:
- mapannounce instance_mapname("1@mist"),"Roaring Whisper: Where you get after wandering around, around and around, everybody you've met while wandering around, around and around,",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
+ mapannounce(instance_mapname("1@mist"), _("Roaring Whisper: Where you get after wandering around, around and around, everybody you've met while wandering around, around and around,"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
end;
OnTimer17000:
- mapannounce instance_mapname("1@mist"),"Roaring Whisper: all the gardeners will be waiting for you, with their clippers in their hands-!",bc_map,"0xccffcc"; //FW_NORMAL 12 0 0
- stopnpctimer;
+ mapannounce(instance_mapname("1@mist"), _("Roaring Whisper: all the gardeners will be waiting for you, with their clippers in their hands-!"), bc_map, "0xccffcc"); //FW_NORMAL 12 0 0
+ stopnpctimer();
end;
OnMyMobDead:
end;
}
-1@mist,96,288,3 script Tito's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,96,288,3 script Tito's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,95,287,0 script Tito's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"c1_c13-1",
"Tito's Cry: *sob* *sob* Tito's gone now! Tito's done for! Boo hoo!!",
- "Tito";
+ "Tito");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),264,291,"Tito the Flipper",2133,1,instance_npcname("Tito's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 264, 291, _("Tito the Flipper"), ANGRA_MANTIS, 1, instance_npcname("Tito's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,326,325,3 script Pumba's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,326,325,3 script Pumba's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,324,325,0 script Pumba's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"c13-3_c4",
"Roaring Whisper: Tito the Hard Worker was defeated! Stop playing and go to work, Tete! Start working!",
- "Pumba";
+ "Pumba");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),309,165,"Diligent Pumba",2134,1,instance_npcname("Pumba's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 309, 165, _("Diligent Pumba"), PARUS, 1, instance_npcname("Pumba's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
-1@mist,278,345,3 script Tete's Garden 4_BULLETIN_BOARD2,{ end; }
+1@mist,278,345,3 script Tete's Garden 4_BULLETIN_BOARD2,{
+ end;
+}
+
1@mist,280,344,0 script Tete's Garden Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"c19_c4",
"Whisper: They are strong, strong indeed. What are we going to do now? Are there any gardeners left? Are there any?",
- "Tete";
+ "Tete");
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),277,343,"Carefree Tete",2136,1,instance_npcname("Tete's Garden Tree")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 277, 343, _("Carefree Tete"), LITTLE_FATUM, 1, instance_npcname("Tete's Garden Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
1@mist,345,186,0 script The Gardeners' Tree 4_CREEPER,{
- callfunc "F_Mora_Mist",
+ callfunc("F_Mora_Mist",
"#to_bif02",
"Roaring Whisper: The forest will remember you! It will remember you, the one who broke the clippers of all the gardeners!",
- "Gardeners: We're not dead, yet!!!!",1;
+ "Gardeners: We're not dead, yet!!!!", 1);
end;
OnInstanceInit:
.@map$ = instance_mapname("1@mist");
- monster .@map$,318,137,"Baby Tom",2136,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,321,137,"Tomba the Baby",2136,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,324,137,"Exhausted Remi",2137,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,319,135,"Rem the Exhausted",2136,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,323,135,"Ron the Ex-Gardener",2134,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,320,133,"Rover the Strutter",2134,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,323,133,"Mona the Seedpicker",2133,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,317,132,"Timid Namon",2134,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,326,132,"Indifferent Neoron",2137,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,317,129,"Spyder the Seven-Legged",2132,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,320,129,"Tito the Flapper",2133,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,324,129,"Lazy Pumba",2134,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
- monster .@map$,327,129,"Careless Tete",2136,1,instance_npcname("The Gardeners' Tree")+"::OnMyMobDead";
+ monster(.@map$, 318, 137, _("Baby Tom"), LITTLE_FATUM, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 321, 137, _("Tomba the Baby"), LITTLE_FATUM, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 324, 137, _("Exhausted Remi"), MIMING, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 319, 135, _("Rem the Exhausted"), LITTLE_FATUM, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 323, 135, _("Ron the Ex-Gardener"), PARUS, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 320, 133, _("Rover the Strutter"), PARUS, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 323, 133, _("Mona the Seedpicker"), ANGRA_MANTIS, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 317, 132, _("Timid Namon"), PARUS, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 326, 132, _("Indifferent Neoron"), MIMING, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 317, 129, _("Spyder the Seven-Legged"), POM_SPIDER, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 320, 129, _("Tito the Flapper"), ANGRA_MANTIS, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 324, 129, _("Lazy Pumba"), PARUS, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
+ monster(.@map$, 327, 129, _("Careless Tete"), LITTLE_FATUM, 1, instance_npcname("The Gardeners' Tree")+"::OnMyMobDead");
end;
OnMyMobDead:
end;
}
1@mist,73,290,0 script Mysterious Flower#1 CLEAR_NPC,{
- specialeffect EF_LEVEL99_4;
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
- getitem Mysterious_Seed,1;
+ specialeffect(EF_LEVEL99_4);
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ getitem(Mysterious_Seed, 1);
end;
}
+
1@mist,69,295,0 duplicate(Mysterious Flower#1) Mysterious Flower#2 CLEAR_NPC
1@mist,62,291,0 duplicate(Mysterious Flower#1) Mysterious Flower#3 CLEAR_NPC
1@mist,54,293,0 duplicate(Mysterious Flower#1) Mysterious Flower#4 CLEAR_NPC
@@ -516,420 +559,432 @@ OnMyMobDead:
1@mist,2,2,0 script #Dragon Herder CLEAR_NPC,{
end;
OnInstanceInit:
- switch(rand(1,6)) {
- case 1: setarray .@c[0],77,240; break;
- case 2: setarray .@c[0],147,261; break;
- case 3: setarray .@c[0],182,263; break;
- case 4: setarray .@c[0],194,350; break;
- case 5: setarray .@c[0],268,183; break;
- case 6: setarray .@c[0],65,278; break;
+ switch (rand(1, 6)) {
+ case 1:
+ setarray .@c[0], 77, 240;
+ break;
+ case 2:
+ setarray .@c[0], 147, 261;
+ break;
+ case 3:
+ setarray .@c[0], 182, 263;
+ break;
+ case 4:
+ setarray .@c[0], 194, 350;
+ break;
+ case 5:
+ setarray .@c[0], 268, 183;
+ break;
+ case 6:
+ setarray .@c[0], 65, 278;
+ break;
}
- monster instance_mapname("1@mist"),.@c[0],.@c[1],"Wandering Purple Dragon",2131,1,instance_npcname("#Dragon Herder")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), .@c[0], .@c[1], _("Wandering Purple Dragon"), LOST_DRAGON, 1, instance_npcname("#Dragon Herder")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@mist");
- if (mobcount(.@map$,instance_npcname("#Dragon Herder")+"::OnMyMobDead") == 0) {
- donpcevent instance_npcname("Collapsed Girl#mist")+"::OnEnable";
- donpcevent instance_npcname("Mysterious Young Man#mis")+"::OnEnable";
- donpcevent instance_npcname("Loki#mist")+"::OnEnable";
- mapannounce .@map$,"The Dragon's Cry: Am I being punished... for abandoning the way... of the guardian...?",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
- disablenpc instance_npcname("#Dragon Herder");
- initnpctimer;
+ if (mobcount(.@map$, instance_npcname("#Dragon Herder")+"::OnMyMobDead") == 0) {
+ donpcevent(instance_npcname("Collapsed Girl#mist")+"::OnEnable");
+ donpcevent(instance_npcname("Mysterious Young Man#mis")+"::OnEnable");
+ donpcevent(instance_npcname("Loki#mist")+"::OnEnable");
+ mapannounce(.@map$, _("The Dragon's Cry: Am I being punished... for abandoning the way... of the guardian...?"), bc_map, C_YELLOW); //FW_NORMAL 12 0 0
+ disablenpc(instance_npcname("#Dragon Herder"));
+ initnpctimer();
}
end;
OnTimer3000:
- stopnpctimer;
- mapannounce instance_mapname("1@mist"),"Voice in your head: ...Will you... save... me... please......?",bc_map,"0xffff00"; //FW_NORMAL 12 0 0
+ stopnpctimer();
+ mapannounce(instance_mapname("1@mist"), _("Voice in your head: ...Will you... save... me... please......?"), bc_map, C_YELLOW); //FW_NORMAL 12 0 0
end;
}
1@mist,97,30,3 script Mysterious Young Man#mis 4_M_ROKI2,{
if (BaseLevel < 98) {
- mes "[Mysterious Young Man]";
- mes "Huh? Do you plan to pass through here?";
- mes ".....I'm afraid it's beyond your ability, but I won't meddle in your affairs.";
- mes "We'll meet again, if you survive.";
- close;
+ mes("[Mysterious Young Man]");
+ mes("Huh? Do you plan to pass through here?");
+ mes(".....I'm afraid it's beyond your ability, but I won't meddle in your affairs.");
+ mes("We'll meet again, if you survive.");
+ close();
}
if (ep14_1_mistwoods == 0) {
if (ep13_3_secret > 23) {
- mes "[Mysterious Young Man]";
- mes "You... I remember seeing you at the camp.";
- mes "The information you gave on Ahat was useful.";
- mes "Thanks!";
- next;
- mes "[Mysterious Young Man]";
- mes "But do you plan to pass through here?";
- mes "What good is it to go across Bifrost?";
- next;
+ mes("[Mysterious Young Man]");
+ mes("You... I remember seeing you at the camp.");
+ mes("The information you gave on Ahat was useful.");
+ mes("Thanks!");
+ next();
+ mes("[Mysterious Young Man]");
+ mes("But do you plan to pass through here?");
+ mes("What good is it to go across Bifrost?");
+ next();
} else {
- mes "[Mysterious Young Man]";
- mes "Do you plan to pass through here?";
- mes "I will advise against it if you're just curious.";
- mes "It will only bring about your untimely death...";
- next;
+ mes("[Mysterious Young Man]");
+ mes("Do you plan to pass through here?");
+ mes("I will advise against it if you're just curious.");
+ mes("It will only bring about your untimely death...");
+ next();
}
- mes "[Mysterious Young Man]";
- mes "If you are determined to pass through here,";
- mes "I will ask for your help with something.";
- next;
+ mes("[Mysterious Young Man]");
+ mes("If you are determined to pass through here,");
+ mes("I will ask for your help with something.");
+ next();
select("Who are you?");
- mes "[Loki]";
- mes "Loki... from the Assassin's Guild.";
- mes "That's my name.";
- mes "And yours?";
- next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes "....";
- mes "...."+strcharinfo(PC_NAME)+" sir.";
- next;
- mes "[Loki]";
- mes "I see. "+strcharinfo(PC_NAME)+".";
- mes "I'm asking you again.";
- mes "Do you plan to pass through this forest?";
- next;
+ mes("[Loki]");
+ mes("Loki... from the Assassin's Guild.");
+ mes("That's my name.");
+ mes("And yours?");
+ next();
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mes("....");
+ mesf("....%s sir.", strcharinfo(PC_NAME));
+ next();
+ mes("[Loki]");
+ mesf("I see. %s.", strcharinfo(PC_NAME));
+ mes("I'm asking you again.");
+ mes("Do you plan to pass through this forest?");
+ next();
switch(select("Yes, I do.", "No, I don't.")) {
case 1:
- mes "[Loki]";
- mes "Then I'll ask you a question.";
- mes "Have you ever seen a guard... a girl with purple hair?";
- next;
+ mes("[Loki]");
+ mes("Then I'll ask you a question.");
+ mes("Have you ever seen a guard... a girl with purple hair?");
+ next();
switch(select("No, I haven't.", "Yes, I might have...")) {
case 1:
- mes "[Loki]";
- mes "So you haven't.";
- mes "You're telling the truth.";
- next;
+ mes("[Loki]");
+ mes("So you haven't.");
+ mes("You're telling the truth.");
+ next();
break;
case 2:
- mes "[Loki]";
- mes "Wait.";
- mes "(Loki comes closer.)";
- mes "... No.";
- mes "You're telling the truth.";
- next;
+ mes("[Loki]");
+ mes("Wait.");
+ mes("(Loki comes closer.)");
+ mes("... No.");
+ mes("You're telling the truth.");
+ next();
break;
}
- mes "[Loki]";
- mes "Now we have to say goodbye here.";
- mes "If you survive this forest, of course.";
+ mes("[Loki]");
+ mes("Now we have to say goodbye here.");
+ mes("If you survive this forest, of course.");
ep14_1_mistwoods = 2;
- setquest 7212;
- close;
+ setquest(7212);
+ close();
case 2:
- mes "[Loki]";
- mes "I understand.";
- mes "Step back if you aren't ready.";
- mes "This forest doesn't like strangers.";
+ mes("[Loki]");
+ mes("I understand.");
+ mes("Step back if you aren't ready.");
+ mes("This forest doesn't like strangers.");
ep14_1_mistwoods = 1;
- close;
+ close();
}
} else if (ep14_1_mistwoods == 1) {
- mes "[Loki]";
- mes "I told you - step back if you don't want to die.";
- mes "It's not easy going through the forest.";
- mes "It may cost you your life.";
- next;
+ mes("[Loki]");
+ mes("I told you - step back if you don't want to die.");
+ mes("It's not easy going through the forest.");
+ mes("It may cost you your life.");
+ next();
switch(select("Okay.", "What do you want?")) {
case 1:
- mes "- When you step back,";
- mes "Loki nods slightly and then looks away. -";
- close;
+ mes("- When you step back,");
+ mes("Loki nods slightly and then looks away. -");
+ close();
case 2:
- mes "[Loki]";
- mes "I'm looking for somebody.";
- mes "Have you ever seen a guard... a girl with purple hair?";
- next;
+ mes("[Loki]");
+ mes("I'm looking for somebody.");
+ mes("Have you ever seen a guard... a girl with purple hair?");
+ next();
switch(select("No, I haven't.", "Yes, I might have...")) {
case 1:
- mes "[Loki]";
- mes "So you haven't.";
- mes "You're telling the truth.";
- next;
+ mes("[Loki]");
+ mes("So you haven't.");
+ mes("You're telling the truth.");
+ next();
break;
case 2:
- mes "[Loki]";
- mes "Wait.";
- mes "(Loki comes closer.)";
- mes "... No.";
- mes "You're telling the truth.";
- next;
+ mes("[Loki]");
+ mes("Wait.");
+ mes("(Loki comes closer.)");
+ mes("... No.");
+ mes("You're telling the truth.");
+ next();
break;
}
- mes "[Loki]";
- mes "Now we have to say goodbye here.";
- mes "Hopefully, we will see each other again in Mora.";
+ mes("[Loki]");
+ mes("Now we have to say goodbye here.");
+ mes("Hopefully, we will see each other again in Mora.");
ep14_1_mistwoods = 2;
- setquest 7212;
- close;
+ setquest(7212);
+ close();
}
} else if (ep14_1_mistwoods == 2) {
- mes "[Loki]";
- mes "I don't want to go with you.";
- mes "Hopefully, we will see each other again in Mora.";
- close;
+ mes("[Loki]");
+ mes("I don't want to go with you.");
+ mes("Hopefully, we will see each other again in Mora.");
+ close();
} else if (ep14_1_mistwoods == 3) {
- mes "[Loki]";
- mes "So we meet again.";
- mes "Are you used to this place?";
- mes "Come to the inn in Mora.";
- mes "I have something to give to you.";
- close;
+ mes("[Loki]");
+ mes("So we meet again.");
+ mes("Are you used to this place?");
+ mes("Come to the inn in Mora.");
+ mes("I have something to give to you.");
+ close();
} else {
- mes "[Loki]";
- mes "We're seeing a lot of each other these days.";
- mes "It seems you are completely comfortable with the place.";
- mes "You'd better not be too proud of yourself.";
- close;
+ mes("[Loki]");
+ mes("We're seeing a lot of each other these days.");
+ mes("It seems you are completely comfortable with the place.");
+ mes("You'd better not be too proud of yourself.");
+ close();
}
end;
OnEnable:
- enablenpc instance_npcname("Mysterious Young Man#mis");
+ enablenpc(instance_npcname("Mysterious Young Man#mis"));
end;
OnDisable:
- disablenpc instance_npcname("Mysterious Young Man#mis");
+ disablenpc(instance_npcname("Mysterious Young Man#mis"));
end;
}
1@mist,183,304,3 script Loki#mist 4_M_ROKI2,{
if (ep14_1_mistwoods < 2) {
- mes "[Loki]";
- mes "An adventurer in the forest.";
- mes ".....";
- mes "You can go to Mora through this forest.";
- close;
+ mes("[Loki]");
+ mes("An adventurer in the forest.");
+ mes(".....");
+ mes("You can go to Mora through this forest.");
+ close();
} else if (ep14_1_mistwoods == 2) {
- mes "[Loki]";
- mes "Is it you that took care of this unruly girl?";
- mes "I guess I have to thank you.";
- mes "You've calmed her down.";
- next;
+ mes("[Loki]");
+ mes("Is it you that took care of this unruly girl?");
+ mes("I guess I have to thank you.");
+ mes("You've calmed her down.");
+ next();
select("What's happening?", "This girl...?");
- mes "[Loki]";
- mes "You might be able to change your appearance, but you cannot change your unique, innate light.";
- mes "A scent strong enough to burn your nose.";
- next;
- mes "[Loki]";
- mes "This is Nydhogg, the Guardian of Yggdrasil,";
- mes "whom I was looking for.";
- mes "Now she won't wander around crazy any more.";
- next;
+ mes("[Loki]");
+ mes("You might be able to change your appearance, but you cannot change your unique, innate light.");
+ mes("A scent strong enough to burn your nose.");
+ next();
+ mes("[Loki]");
+ mes("This is Nydhogg, the Guardian of Yggdrasil,");
+ mes("whom I was looking for.");
+ mes("Now she won't wander around crazy any more.");
+ next();
select("What are you going to do now?");
- mes "[Loki]";
- mes "I'll wait for her to wake up and get out of this forest.";
- mes "I can manage it on my own.";
- mes "I'll see you in Mora.";
+ mes("[Loki]");
+ mes("I'll wait for her to wake up and get out of this forest.");
+ mes("I can manage it on my own.");
+ mes("I'll see you in Mora.");
ep14_1_mistwoods = 3;
- erasequest 7212;
- setquest 7213;
- close;
+ erasequest(7212);
+ setquest(7213);
+ close();
} else if (ep14_1_mistwoods == 3) {
- mes "[Loki]";
- mes "I don't want to go with you.";
- mes "I can manage her on my own.";
- mes "If you have something to say, say it after we get out of the forest.";
- close;
+ mes("[Loki]");
+ mes("I don't want to go with you.");
+ mes("I can manage her on my own.");
+ mes("If you have something to say, say it after we get out of the forest.");
+ close();
} else {
- mes "[Loki]";
- mes "I don't want to go with you.";
- mes "If you have something to say, say it after we get out of the forest.";
- close;
+ mes("[Loki]");
+ mes("I don't want to go with you.");
+ mes("If you have something to say, say it after we get out of the forest.");
+ close();
}
end;
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname("Loki#mist");
+ disablenpc(instance_npcname("Loki#mist"));
end;
OnEnable:
- enablenpc instance_npcname("Loki#mist");
+ enablenpc(instance_npcname("Loki#mist"));
end;
}
1@mist,181,303,3 script Collapsed Girl#mist 4_F_NYDHOG2,{
- mes "You see a girl with mysterious hair collapsed on the ground.";
- mes "As you approach her, you smell the scent of flowers so strong that it makes you dizzy.";
- close;
+ mes("You see a girl with mysterious hair collapsed on the ground.");
+ mes("As you approach her, you smell the scent of flowers so strong that it makes you dizzy.");
+ close();
OnInstanceInit:
OnDisable:
- disablenpc instance_npcname("Collapsed Girl#mist");
+ disablenpc(instance_npcname("Collapsed Girl#mist"));
end;
OnEnable:
- enablenpc instance_npcname("Collapsed Girl#mist");
+ enablenpc(instance_npcname("Collapsed Girl#mist"));
end;
}
mora,46,152,5 script Flower Smelling Lady 4_F_NYDHOG,{
if (ep14_1_mistwoods < 3) {
- mes "[Flower Smell Lady]";
- mes "I need rest.";
- mes "I'm too tired to talk to you.";
- mes "I'm sorry.";
- close;
+ mes("[Flower Smell Lady]");
+ mes("I need rest.");
+ mes("I'm too tired to talk to you.");
+ mes("I'm sorry.");
+ close();
} else if (ep14_1_mistwoods == 3) {
- mes "[Nydhogg the Guardian]";
- mes "I've been waiting for you.";
- mes "I'm still confused, but I know what I did wrong.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "If it weren't for you, I would still be wandering in the abyssal darkness.";
- mes "I thank you, from the bottom of my heart.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "I'm ashamed of myself, falling for the sweet but empty words that came to me in my loneliness.";
- mes "....";
- next;
- mes "[Nydhogg the Guardian]";
- mes "I don't deserve to be a guardian any more.";
- mes "A dragon gone crazy is not a guardian any more.";
- next;
- mes "[Loki]";
- mes "Yggdrasil doesn't think so.";
- mes "Nidi, don't forget your duties.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "Are you...?";
- mes "I see...";
- mes "I thought I was forsaken...";
- next;
- mes "The Guardian slowly looked away as if deep in thought.";
+ mes("[Nydhogg the Guardian]");
+ mes("I've been waiting for you.");
+ mes("I'm still confused, but I know what I did wrong.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("If it weren't for you, I would still be wandering in the abyssal darkness.");
+ mes("I thank you, from the bottom of my heart.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("I'm ashamed of myself, falling for the sweet but empty words that came to me in my loneliness.");
+ mes("....");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("I don't deserve to be a guardian any more.");
+ mes("A dragon gone crazy is not a guardian any more.");
+ next();
+ mes("[Loki]");
+ mes("Yggdrasil doesn't think so.");
+ mes("Nidi, don't forget your duties.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("Are you...?");
+ mes("I see...");
+ mes("I thought I was forsaken...");
+ next();
+ mes("The Guardian slowly looked away as if deep in thought.");
ep14_1_mistwoods = 4;
- close2;
+ close2();
} else if (ep14_1_mistwoods == 4) {
- mes "- He seems to be deep in thought. -";
- close;
+ mes("- He seems to be deep in thought. -");
+ close();
} else {
- mes "[Nydhogg the Guardian]";
- mes "I haven't gotten all of my powers back.";
- mes "I'm sorry I can't protect you.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "Loki said...";
- mes "that I won't cry from loneliness again,";
- mes "that I will always have new friends like you...";
- next;
- mes "[Nydhogg the Guardian]";
- mes "...I've lost everything, but I'm happy now.";
- close;
+ mes("[Nydhogg the Guardian]");
+ mes("I haven't gotten all of my powers back.");
+ mes("I'm sorry I can't protect you.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("Loki said...");
+ mes("that I won't cry from loneliness again,");
+ mes("that I will always have new friends like you...");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("...I've lost everything, but I'm happy now.");
+ close();
}
}
mora,48,152,3 script Sharp Eyed Man 4_M_ROKI2,{
- if (checkweight(Knife,1) == 0 || MaxWeight - Weight < 1000) {
- mes "- You have too many items to do this quest. -";
- close;
+ if (checkweight(Knife, 1) == 0 || MaxWeight - Weight < 1000) {
+ mes("- You have too many items to do this quest. -");
+ close();
}
if (ep14_1_mistwoods < 3) {
- mes "He won't look at you. It's like he's not interested at all.";
- close;
+ mes("He won't look at you. It's like he's not interested at all.");
+ close();
} else if (ep14_1_mistwoods == 3) {
- mes "[Loki]";
- mes "So you've passed through the forest.";
- mes "It seems Niddy has something to say to you.";
- close;
+ mes("[Loki]");
+ mes("So you've passed through the forest.");
+ mes("It seems Niddy has something to say to you.");
+ close();
} else if (ep14_1_mistwoods == 4) {
- mes "[Loki]";
- mes "Nydhogg was one of the guardians of the World Tree.";
- mes "But he abandoned his duties as a guardian when he gave in to Morroc's temptation.";
- next;
- mes "[Loki]";
- mes "Some fools performed a ritual to break the seal that held Morroc.";
- mes "But the ritual didn't work right. The servant of Morroc failed to break the seal.";
- next;
- mes "[Loki]";
- mes "But the seal is so weak that it can break open any time.";
- mes "It's Yggdrasil the World Tree's will that has kept the seal from breaking.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "That's right. The power of the World Tree is linked to the whole world.";
- mes "When the bond between the guardians and Yggdrasil broke, Yggdrasil became unstable.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "That's why all those disasters happened to Yggdrasil.";
- mes "As the World Tree became unstable, the influence it had on the seal grew weak.";
- next;
- mes "[Loki]";
- mes "And Morroc broke himself free from the seal.";
- mes "Although it seems like he used most of his powers just to break the seal...";
- next;
- mes "[Nydhogg the Guardian]";
- mes "It's all my fault.";
- mes "I couldn't break free from Morroc's temptation.";
- mes "For too... too long...";
- next;
- mes "[Nydhogg the Guardian]";
- mes "...I wanted to be relieved of my thousands of years of loneliness.";
- mes "I wasn't in my right mind then.";
- mes "It was none other than I that broke my bond with Yggdrasil.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "I lost control of myself, and did what I shouldn't have done.";
- mes "The other side of me became a shadow and a reckless tyrant.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "Facing the world, I realized...";
- mes "I felt too great a sense of loss... it was much more painful than the loneliness I had endured for thousands of years.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "That's how I was left alone.";
- mes "I felt too great a sense of loss... it was much more painful than the loneliness I had endured for thousands of years.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "So I became a sinner, forgotten to the world.";
- next;
- mes "[Loki]";
- mes "It's not too late.";
- mes "You're still a guardian.";
- mes "You still have things to do.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "...Oh, yes. It's late, but I have to fulfill my duties as a guardian.";
- mes "Now I know. I'll destroy Morroc with my own hands.";
- mes "I will fulfill my duties as a guardian.";
- next;
+ mes("[Loki]");
+ mes("Nydhogg was one of the guardians of the World Tree.");
+ mes("But he abandoned his duties as a guardian when he gave in to Morroc's temptation.");
+ next();
+ mes("[Loki]");
+ mes("Some fools performed a ritual to break the seal that held Morroc.");
+ mes("But the ritual didn't work right. The servant of Morroc failed to break the seal.");
+ next();
+ mes("[Loki]");
+ mes("But the seal is so weak that it can break open any time.");
+ mes("It's Yggdrasil the World Tree's will that has kept the seal from breaking.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("That's right. The power of the World Tree is linked to the whole world.");
+ mes("When the bond between the guardians and Yggdrasil broke, Yggdrasil became unstable.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("That's why all those disasters happened to Yggdrasil.");
+ mes("As the World Tree became unstable, the influence it had on the seal grew weak.");
+ next();
+ mes("[Loki]");
+ mes("And Morroc broke himself free from the seal.");
+ mes("Although it seems like he used most of his powers just to break the seal...");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("It's all my fault.");
+ mes("I couldn't break free from Morroc's temptation.");
+ mes("For too... too long...");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("...I wanted to be relieved of my thousands of years of loneliness.");
+ mes("I wasn't in my right mind then.");
+ mes("It was none other than I that broke my bond with Yggdrasil.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("I lost control of myself, and did what I shouldn't have done.");
+ mes("The other side of me became a shadow and a reckless tyrant.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("Facing the world, I realized...");
+ mes("I felt too great a sense of loss... it was much more painful than the loneliness I had endured for thousands of years.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("That's how I was left alone.");
+ mes("I felt too great a sense of loss... it was much more painful than the loneliness I had endured for thousands of years.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("So I became a sinner, forgotten to the world.");
+ next();
+ mes("[Loki]");
+ mes("It's not too late.");
+ mes("You're still a guardian.");
+ mes("You still have things to do.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("...Oh, yes. It's late, but I have to fulfill my duties as a guardian.");
+ mes("Now I know. I'll destroy Morroc with my own hands.");
+ mes("I will fulfill my duties as a guardian.");
+ next();
switch(select("You're not alone.", "Those are very important duties.")) {
case 1:
- mes "[Nydhogg the Guardian]";
- mes "You're right.";
- mes "It may be why I haven't been forsaken - to realize that I'm not alone.";
- mes "You are a kind soul.";
- next;
+ mes("[Nydhogg the Guardian]");
+ mes("You're right.");
+ mes("It may be why I haven't been forsaken - to realize that I'm not alone.");
+ mes("You are a kind soul.");
+ next();
break;
case 2:
- mes "[Nydhogg the Guardian]";
- mes "But this is my atonement.";
- mes "I'm happy, though.";
- mes "I don't have to fight the loneliness any more.";
- next;
+ mes("[Nydhogg the Guardian]");
+ mes("But this is my atonement.");
+ mes("I'm happy, though.");
+ mes("I don't have to fight the loneliness any more.");
+ next();
break;
}
- mes "[Nydhogg the Guardian]";
- mes strcharinfo(PC_NAME)+"...";
- mes "Thanks for listening to my long story.";
- next;
- mes "[Nydhogg the Guardian]";
- mes "It's what I always have with me.";
- mes "I'm sure it will protect you someday.";
- next;
- mes "[Loki]";
- mes "(Removes his scarf from around his neck and hands it to you.)";
- next;
- mes "[Nydhogg the Guardian]";
- mes "May the blessing of Mother Yggdrasil be with you...";
+ mes("[Nydhogg the Guardian]");
+ mesf("%s...", strcharinfo(PC_NAME));
+ mes("Thanks for listening to my long story.");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("It's what I always have with me.");
+ mes("I'm sure it will protect you someday.");
+ next();
+ mes("[Loki]");
+ mes("(Removes his scarf from around his neck and hands it to you.)");
+ next();
+ mes("[Nydhogg the Guardian]");
+ mes("May the blessing of Mother Yggdrasil be with you...");
ep14_1_mistwoods = 10;
- completequest 7213;
- getitem Muffler_Of_Roki,1;
- getitem Pendant_Of_Guardian,1;
- getexp 400000,400000;
- close;
+ completequest(7213);
+ getitem(Muffler_Of_Roki, 1);
+ getitem(Pendant_Of_Guardian, 1);
+ getexp(400000, 400000);
+ close();
} else {
- mes "[Loki]";
- mes "I'll be staying here for a while.";
- mes "We may meet again.";
- next;
- mes "[Loki]";
- mes "The day when Morroc reveals his despicable nature...";
- mes "I will be waiting for him.";
- close;
+ mes("[Loki]");
+ mes("I'll be staying here for a while.");
+ mes("We may meet again.");
+ next();
+ mes("[Loki]");
+ mes("The day when Morroc reveals his despicable nature...");
+ mes("I will be waiting for him.");
+ close();
}
}
@@ -937,98 +992,98 @@ mora,48,152,3 script Sharp Eyed Man 4_M_ROKI2,{
1@mist,1,1,0 script #Mist Mobs Respawn1 CLEAR_NPC,{
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),0,0,"Miming",2137,15,instance_npcname("#Mist Mobs Respawn1")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 0, 0, _("Miming"), MIMING, 15, instance_npcname("#Mist Mobs Respawn1")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@mist");
- .@num_mobs = 15 - mobcount(.@map$,instance_npcname("#Mist Mobs Respawn1")+"::OnMyMobDead");
+ .@num_mobs = 15 - mobcount(.@map$, instance_npcname("#Mist Mobs Respawn1")+"::OnMyMobDead");
if (.@num_mobs > 0)
- monster .@map$,0,0,"Miming",2137,.@num_mobs,instance_npcname("#Mist Mobs Respawn1")+"::OnMyMobDead";
+ monster(.@map$, 0, 0, _("Miming"), MIMING, .@num_mobs, instance_npcname("#Mist Mobs Respawn1")+"::OnMyMobDead");
end;
}
1@mist,1,2,0 script #Mist Mobs Respawn2 CLEAR_NPC,{
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),0,0,"Pom Spider",2132,35,instance_npcname("#Mist Mobs Respawn2")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 0, 0, _("Pom Spider"), POM_SPIDER, 35, instance_npcname("#Mist Mobs Respawn2")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@mist");
- .@num_mobs = 35 - mobcount(.@map$,instance_npcname("#Mist Mobs Respawn2")+"::OnMyMobDead");
+ .@num_mobs = 35 - mobcount(.@map$, instance_npcname("#Mist Mobs Respawn2")+"::OnMyMobDead");
if (.@num_mobs > 0)
- monster .@map$,0,0,"Pom Spider",2132,.@num_mobs,instance_npcname("#Mist Mobs Respawn2")+"::OnMyMobDead";
+ monster(.@map$, 0, 0, _("Pom Spider"), POM_SPIDER, .@num_mobs, instance_npcname("#Mist Mobs Respawn2")+"::OnMyMobDead");
end;
}
1@mist,1,3,0 script #Mist Mobs Respawn3 CLEAR_NPC,{
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),0,0,"Angra Mantis",2133,35,instance_npcname("#Mist Mobs Respawn3")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 0, 0, _("Angra Mantis"), ANGRA_MANTIS, 35, instance_npcname("#Mist Mobs Respawn3")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@mist");
- .@num_mobs = 35 - mobcount(.@map$,instance_npcname("#Mist Mobs Respawn3")+"::OnMyMobDead");
+ .@num_mobs = 35 - mobcount(.@map$, instance_npcname("#Mist Mobs Respawn3")+"::OnMyMobDead");
if (.@num_mobs > 0)
- monster .@map$,0,0,"Angra Mantis",2133,.@num_mobs,instance_npcname("#Mist Mobs Respawn3")+"::OnMyMobDead";
+ monster(.@map$, 0, 0, _("Angra Mantis"), ANGRA_MANTIS, .@num_mobs, instance_npcname("#Mist Mobs Respawn3")+"::OnMyMobDead");
end;
}
1@mist,1,4,0 script #Mist Mobs Respawn4 CLEAR_NPC,{
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),0,0,"Parus",2134,35,instance_npcname("#Mist Mobs Respawn4")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 0, 0, _("Parus"), PARUS, 35, instance_npcname("#Mist Mobs Respawn4")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@mist");
- .@num_mobs = 35 - mobcount(.@map$,instance_npcname("#Mist Mobs Respawn4")+"::OnMyMobDead");
+ .@num_mobs = 35 - mobcount(.@map$, instance_npcname("#Mist Mobs Respawn4")+"::OnMyMobDead");
if (.@num_mobs > 0)
- monster .@map$,0,0,"Parus",2134,.@num_mobs,instance_npcname("#Mist Mobs Respawn4")+"::OnMyMobDead";
+ monster(.@map$, 0, 0, _("Parus"), PARUS, .@num_mobs, instance_npcname("#Mist Mobs Respawn4")+"::OnMyMobDead");
end;
}
1@mist,1,5,0 script #Mist Mobs Respawn5 CLEAR_NPC,{
end;
OnInstanceInit:
- monster instance_mapname("1@mist"),0,0,"Little Fatum",2136,15,instance_npcname("#Mist Mobs Respawn5")+"::OnMyMobDead";
+ monster(instance_mapname("1@mist"), 0, 0, _("Little Fatum"), LITTLE_FATUM, 15, instance_npcname("#Mist Mobs Respawn5")+"::OnMyMobDead");
end;
OnMyMobDead:
.@map$ = instance_mapname("1@mist");
- .@num_mobs = 15 - mobcount(.@map$,instance_npcname("#Mist Mobs Respawn5")+"::OnMyMobDead");
+ .@num_mobs = 15 - mobcount(.@map$, instance_npcname("#Mist Mobs Respawn5")+"::OnMyMobDead");
if (.@num_mobs > 0)
- monster .@map$,0,0,"Little Fatum",2136,.@num_mobs,instance_npcname("#Mist Mobs Respawn5")+"::OnMyMobDead";
+ monster(.@map$, 0, 0, _("Little Fatum"), LITTLE_FATUM, .@num_mobs, instance_npcname("#Mist Mobs Respawn5")+"::OnMyMobDead");
end;
}
1@mist,1,6,0 script #Fragments of Memory CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("#Fragments of Memory");
- monster instance_mapname("1@mist"),0,0,"Guardian's Fragments of Memory",2138,15;
+ disablenpc(instance_npcname("#Fragments of Memory"));
+ monster(instance_mapname("1@mist"), 0, 0, _("Guardian's Fragments of Memory"), NYDHOG_MEMORY1_1, 15);
end;
}
//== Warp Portals ==========================================
bif_fild01,38,374,0 script Mysterious Flower#ep14_1 CLEAR_NPC,{
- mes "It's a giant flower with mysterious energy.";
+ mes("It's a giant flower with mysterious energy.");
if (countitem(Mysterious_Seed)) {
- mes "It's reacting to the Mysterious Flower Seeds you have with you.";
- next;
+ mes("It's reacting to the Mysterious Flower Seeds you have with you.");
+ next();
switch(select("Observe the reaction.", "Stop the reaction.")) {
case 1:
- mes "The flower started to shake violently";
- mes "and swing forward as if trying to send the seeds as far away as possible!!!";
- close2;
- delitem Mysterious_Seed,1;
- warp "bif_fild02",160,230;
+ mes("The flower started to shake violently");
+ mes("and swing forward as if trying to send the seeds as far away as possible!!!");
+ close2();
+ delitem(Mysterious_Seed, 1);
+ warp("bif_fild02", 160, 230);
end;
case 2:
- mes "As you hold onto the Mysterious Flower Seeds tightly,";
- mes "the flower shook violently and then became calm again.";
- close;
+ mes("As you hold onto the Mysterious Flower Seeds tightly,");
+ mes("the flower shook violently and then became calm again.");
+ close();
}
}
- mes "It looks like it has some special use, but you're not sure what.";
- close;
+ mes("It looks like it has some special use, but you're not sure what.");
+ close();
}
1@mist,104,23,0 warp #to_bif01 1,1,bif_fild01,160,352
@@ -1036,9 +1091,9 @@ bif_fild01,38,374,0 script Mysterious Flower#ep14_1 CLEAR_NPC,{
1@mist,109,70,0 script a1_a2 WARPNPC,1,1,{
end;
OnTouch:
- if (!questprogress(7211,PLAYTIME))
- setquest 7211;
- warp instance_mapname("1@mist"),116,40;
+ if (!questprogress(7211, PLAYTIME))
+ setquest(7211);
+ warp(instance_mapname("1@mist"), 116, 40);
end;
}
@@ -1140,21 +1195,21 @@ OnTouch:
1@mist,1,1,0 script #mist_warp_init CLEAR_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname("a25_a18-1");
- disablenpc instance_npcname("a27-2_af1-2");
- disablenpc instance_npcname("a15-2_a4-1");
- disablenpc instance_npcname("a4-2_a11");
- disablenpc instance_npcname("b4-2_b2");
- disablenpc instance_npcname("b7_bf1-2");
- disablenpc instance_npcname("b31_b16");
- disablenpc instance_npcname("b27-3_bN-1");
- disablenpc instance_npcname("b6-1_b33");
- disablenpc instance_npcname("b5_b14");
- disablenpc instance_npcname("c1_c13-1");
- disablenpc instance_npcname("c13-3_c4");
- disablenpc instance_npcname("c19_c4");
- disablenpc instance_npcname("#to_bif02");
- disablenpc instance_npcname("#mist_warp_init");
+ disablenpc(instance_npcname("a25_a18-1"));
+ disablenpc(instance_npcname("a27-2_af1-2"));
+ disablenpc(instance_npcname("a15-2_a4-1"));
+ disablenpc(instance_npcname("a4-2_a11"));
+ disablenpc(instance_npcname("b4-2_b2"));
+ disablenpc(instance_npcname("b7_bf1-2"));
+ disablenpc(instance_npcname("b31_b16"));
+ disablenpc(instance_npcname("b27-3_bN-1"));
+ disablenpc(instance_npcname("b6-1_b33"));
+ disablenpc(instance_npcname("b5_b14"));
+ disablenpc(instance_npcname("c1_c13-1"));
+ disablenpc(instance_npcname("c13-3_c4"));
+ disablenpc(instance_npcname("c19_c4"));
+ disablenpc(instance_npcname("#to_bif02"));
+ disablenpc(instance_npcname("#mist_warp_init"));
end;
}
1@mist,247,123,0 warp a25_a18-1 1,1,1@mist,164,66 //Tom
diff --git a/npc/re/instances/MalangdoCulvert.txt b/npc/re/instances/MalangdoCulvert.txt
index e954c9b15..2e51f0fd5 100644
--- a/npc/re/instances/MalangdoCulvert.txt
+++ b/npc/re/instances/MalangdoCulvert.txt
@@ -37,245 +37,261 @@
//== Quest NPCs ============================================
mal_in01,172,28,2 script Albo#mal 4_CAT_SAILOR5,{
- if (checkweight(Knife,1) == 0) {
- mes "You have too many kinds of objects. Try to continue after reducing those objects.";
- close;
+ if (checkweight(Knife, 1) == 0) {
+ mes("You have too many kinds of objects. Try to continue after reducing those objects.");
+ close();
}
if (MaxWeight - Weight < 1000) {
- mes "You have too many heavy objects. Try to continue after reducing your weight.";
- close;
+ mes("You have too many heavy objects. Try to continue after reducing your weight.");
+ close();
}
if (BaseLevel < 90) {
- mes "[Albo]";
- mes "Who are you?";
- mes "We don't need a weaking!!";
- close;
+ mes("[Albo]");
+ mes("Who are you?");
+ mes("We don't need a weaking!!");
+ close();
}
- setarray .@quests[0],12271,12272,12273,12274;
- setarray .@names$[0],
- "General Culvert Daily Service","^990000Hard Culvert Daily Service^000000",
- "General Culvert Weekly Service","^990000Hard Culvert Weekly Service^000000";
- .@menu$ = "Why are doing this job?:";
+ setarray(.@quests[0], 12271, 12272, 12273, 12274);
+ setarray(.@names$[0],
+ _("General Culvert Daily Service"), _("^990000Hard Culvert Daily Service^000000"),
+ _("General Culvert Weekly Service"), _("^990000Hard Culvert Weekly Service^000000"));
+ .@menu$ = _("Why are doing this job?:");
for(.@i = 0; .@i<4; ++.@i) {
- if (questprogress(.@quests[.@i],PLAYTIME)) {
+ if (questprogress(.@quests[.@i], PLAYTIME)) {
.@status[.@i] = 2;
- .@menu$ += "^aaaaaa- There is no new task -^000000:";
+ .@menu$ += _("^aaaaaa- There is no new task -^000000:");
} else if (.@i%2 && BaseLevel < 140) {
.@status[.@i] = 0;
- .@menu$ += "^aaaaaaCan't take this job because level is too low^000000:";
+ .@menu$ += _("^aaaaaaCan't take this job because level is too low^000000:");
} else {
.@status[.@i] = 1;
.@menu$ += .@names$[.@i]+":";
}
}
- mes "[Albo]";
- mes "We crossed the sea!";
- mes "We are great heroes of Culvert! We do not forgive the seafood that aims at Culvert!";
- next;
- .@i = select(.@menu$)-1;
+ mes("[Albo]");
+ mes("We crossed the sea!");
+ mes("We are great heroes of Culvert! We do not forgive the seafood that aims at Culvert!");
+ next();
+ .@i = select(.@menu$) - 1;
if (.@i == 0) {
- mes "[Albo]";
- mes "We used to be the henchmen of Mr. Missing! We almost became guards of such a historic site.";
- next;
- mes "[Albo]";
- mes "However, when sea water flooded all precious the resources, my dream... all my dreams melted away...";
- next;
- mes "[Albo]";
- mes "We do not forgive the seafood that invaded our territory. I'll eat them with spicy paste!!!";
- next;
- mes "^0000ffAlbo's voice shakes with anger. He smacked his lips when he mentioned spicy paste.^000000";
- close;
+ mes("[Albo]");
+ mes("We used to be the henchmen of Mr. Missing! We almost became guards of such a historic site.");
+ next();
+ mes("[Albo]");
+ mes("However, when sea water flooded all precious the resources, my dream... all my dreams melted away...");
+ next();
+ mes("[Albo]");
+ mes("We do not forgive the seafood that invaded our territory. I'll eat them with spicy paste!!!");
+ next();
+ mes("^0000ffAlbo's voice shakes with anger. He smacked his lips when he mentioned spicy paste.^000000");
+ close();
}
- switch(.@status[.@i-1]) {
+ switch (.@status[.@i - 1]) {
case 0:
- mes "[Albo]";
- mes "That task is really hard for you, so I can't tell you about it. Why don't you find another one?";
- close;
+ mes("[Albo]");
+ mes("That task is really hard for you, so I can't tell you about it. Why don't you find another one?");
+ close();
case 1:
break;
case 2:
- mes "[Albo]";
- mes "I'm sorry. There is no new task yet! If I find any work, I'll tell you so!";
- close;
+ mes("[Albo]");
+ mes("I'm sorry. There is no new task yet! If I find any work, I'll tell you so!");
+ close();
}
- switch(.@i) {
+ switch (.@i) {
case 1: // General Culvert Daily Service
- switch(rand(1,6)) {
- case 1: callsub L_GiveQuest,.@i,12255,12271,"Deep Sea Crab";
- case 2: callsub L_GiveQuest,.@i,12256,12271,"Deep Sea Marse";
- case 3: callsub L_GiveQuest,.@i,12257,12271,"Deep Sea Vadon";
- case 4: callsub L_GiveQuest,.@i,12258,12271,"Deep Sea Shellfish";
- case 5: callsub L_GiveQuest,.@i,12259,12271,"Deep Sea Kukre";
- case 6: callsub L_GiveQuest,.@i,12260,12271,"Deep Sea Cornutus";
+ switch (rand(1, 6)) {
+ case 1:
+ callsub(L_GiveQuest, .@i, 12255, 12271, _("Deep Sea Crab"));
+ case 2:
+ callsub(L_GiveQuest, .@i, 12256, 12271, _("Deep Sea Marse"));
+ case 3:
+ callsub(L_GiveQuest, .@i, 12257, 12271, _("Deep Sea Vadon"));
+ case 4:
+ callsub(L_GiveQuest, .@i, 12258, 12271, _("Deep Sea Shellfish"));
+ case 5:
+ callsub(L_GiveQuest, .@i, 12259, 12271, _("Deep Sea Kukre"));
+ case 6:
+ callsub(L_GiveQuest, .@i, 12260, 12271, _("Deep Sea Cornutus"));
}
case 2: // Hard Culvert Daily Service
- switch(rand(1,6)) {
- case 1: callsub L_GiveQuest,.@i,12261,12272,"Deep Sea Marc";
- case 2: callsub L_GiveQuest,.@i,12262,12272,"Deep Sea Sword Fish";
- case 3: callsub L_GiveQuest,.@i,12263,12272,"Deep Sea Strouf";
- case 4: callsub L_GiveQuest,.@i,12264,12272,"Deep Sea Anolian";
- case 5: callsub L_GiveQuest,.@i,12265,12272,"Deep Sea Obeanue";
- case 6: callsub L_GiveQuest,.@i,12266,12272,"Deep Sea Kapha";
+ switch (rand(1, 6)) {
+ case 1:
+ callsub(L_GiveQuest, .@i, 12261, 12272, _("Deep Sea Marc"));
+ case 2:
+ callsub(L_GiveQuest, .@i, 12262, 12272, _("Deep Sea Sword Fish"));
+ case 3:
+ callsub(L_GiveQuest, .@i, 12263, 12272, _("Deep Sea Strouf"));
+ case 4:
+ callsub(L_GiveQuest, .@i, 12264, 12272, _("Deep Sea Anolian"));
+ case 5:
+ callsub(L_GiveQuest, .@i, 12265, 12272, _("Deep Sea Obeanue"));
+ case 6:
+ callsub(L_GiveQuest, .@i, 12266, 12272, _("Deep Sea Kapha"));
}
case 3: // General Culvert Weekly Service
- switch(rand(1,2)) {
- case 1: callsub L_GiveQuest,.@i,12267,12273,"Weird Coelacanth";
- case 2: callsub L_GiveQuest,.@i,12268,12273,"Gloomy Coelacanth";
+ switch (rand(1, 2)) {
+ case 1:
+ callsub(L_GiveQuest, .@i, 12267, 12273, _("Weird Coelacanth"));
+ case 2:
+ callsub(L_GiveQuest, .@i, 12268, 12273, _("Gloomy Coelacanth"));
}
case 4: // Hard Culvert Weekly Service
- switch(rand(1,2)) {
- case 1: callsub L_GiveQuest,.@i,12269,12274,"Violent Coelacanth";
- case 2: callsub L_GiveQuest,.@i,12270,12274,"Mutant Coelacanth";
+ switch (rand(1, 2)) {
+ case 1:
+ callsub(L_GiveQuest, .@i, 12269, 12274, _("Violent Coelacanth"));
+ case 2:
+ callsub(L_GiveQuest, .@i, 12270, 12274, _("Mutant Coelacanth"));
}
default:
- mes "[Albo]";
- mes "Uh!? Where is the task? Let me find that quickly. You must speak with Madeca!";
- close;
+ mes("[Albo]");
+ mes("Uh!? Where is the task? Let me find that quickly. You must speak with Madeca!");
+ close();
}
end;
-// callsub L_GiveQuest,.@i,<quest 1>,<quest 2>,<monster>;
+// callsub(L_GiveQuest, .@i, <quest 1>, <quest 2>, <monster>);
L_GiveQuest:
- setquest getarg(1);
- setquest getarg(2);
- mes "[Albo]";
- mes "Today, the heroes of Culvert!";
- mes "We raise our voices and set a date for the extermination of ^0000ff"+getarg(3)+"^000000!";
- next;
- mes "[Albo]";
- switch(getarg(0)) {
+ setquest(getarg(1));
+ setquest(getarg(2));
+ mes("[Albo]");
+ mes("Today, the heroes of Culvert!");
+ mesf("We raise our voices and set a date for the extermination of ^0000ff%s^000000!", getarg(3));
+ next();
+ mes("[Albo]");
+ switch (getarg(0)) {
case 1:
case 2:
- mes "Come on, heroes! Don't be afraid of them! Just go on, since it's a one-day mission!";
+ mes("Come on, heroes! Don't be afraid of them! Just go on, since it's a one-day mission!");
break;
case 3:
- mes "I'll give you one week to finish this job! Terminate all of them in Culvert Dungeon, Normal Mode!";
+ mes("I'll give you one week to finish this job! Terminate all of them in Culvert Dungeon, Normal Mode!");
break;
case 4:
- mes "I'll give you one week to finish this job! Terminate all of them in Culvert Dungeon, Hard Mode!";
+ mes("I'll give you one week to finish this job! Terminate all of them in Culvert Dungeon, Hard Mode!");
break;
}
- next;
- mes "You received a request for the Extermination of ^005500"+getarg(3)+"^000000. If you need more details, please check the quest window.";
- close;
+ next();
+ mesf("You received a request for the Extermination of ^005500%s^000000. If you need more details, please check the quest window.", getarg(3));
+ close();
}
mal_in01,172,26,2 script Madeca#mal 4_CAT_SAILOR1,{
- if (checkweight(Knife,1) == 0) {
- mes "You have too many kinds of objects. Try to continue after reducing those objects.";
- close;
+ if (checkweight(Knife, 1) == 0) {
+ mes("You have too many kinds of objects. Try to continue after reducing those objects.");
+ close();
}
if (MaxWeight - Weight < 1000) {
- mes "You have too many heavy objects. Try to continue after reducing your weight.";
- close;
+ mes("You have too many heavy objects. Try to continue after reducing your weight.");
+ close();
}
if (BaseLevel < 90) {
- mes "[Madeca]";
- mes "Karrrrrrr!!";
- mes "Let's have some bad seafood that can be boiled or grilled!";
- next;
- mes "[Madeca]";
- mes "Who are you? You are such a totterer. Even seaweed could kill you!";
- close;
+ mes("[Madeca]");
+ mes("Karrrrrrr!!");
+ mes("Let's have some bad seafood that can be boiled or grilled!");
+ next();
+ mes("[Madeca]");
+ mes("Who are you? You are such a totterer. Even seaweed could kill you!");
+ close();
}
- mes "[Madeca]";
- mes "Oh?";
- mes "You're the one who took care of my big brother Albo's request. It was a hard job!";
- next;
- .@i = select("What are you doing here?", "General Culvert Daily Service Compensation", "Hard Culvert Daily Service Compensation", "General Culvert Weekly Service Compensation", "Hard Culvert Weekly Service Compensation")-1;
+ mes("[Madeca]");
+ mes("Oh?");
+ mes("You're the one who took care of my big brother Albo's request. It was a hard job!");
+ next();
+ .@i = select("What are you doing here?", "General Culvert Daily Service Compensation", "Hard Culvert Daily Service Compensation", "General Culvert Weekly Service Compensation", "Hard Culvert Weekly Service Compensation") - 1;
if (.@i == 0) {
- mes "[Madeca]";
- mes "I'm here to help my big brother Albo!";
- next;
- mes "[Madeca]";
- mes "We provide precious materials to humans who make sludge out of the bad seafood in the Culverts!";
- next;
- mes "[Madeca]";
- mes "We provide A~B Grade Coins as compensation for daily service, and the precious Sea God's Wrath as compensation for weekly service.";
- next;
- mes "[Madeca]";
- mes "If you take care of big brother Albo's request, I will see you very often. So, let's stay close!";
- close;
+ mes("[Madeca]");
+ mes("I'm here to help my big brother Albo!");
+ next();
+ mes("[Madeca]");
+ mes("We provide precious materials to humans who make sludge out of the bad seafood in the Culverts!");
+ next();
+ mes("[Madeca]");
+ mes("We provide A~B Grade Coins as compensation for daily service, and the precious Sea God's Wrath as compensation for weekly service.");
+ next();
+ mes("[Madeca]");
+ mes("If you take care of big brother Albo's request, I will see you very often. So, let's stay close!");
+ close();
}
- mes "[Madeca]";
- mes "I can't give you compensation for an expired request, so let me check if any of yours have expired.";
- next;
+ mes("[Madeca]");
+ mes("I can't give you compensation for an expired request, so let me check if any of yours have expired.");
+ next();
specialeffect(EF_SPHERE, AREA, playerattached());
- progressbar "0xFFFF00",3;
+ progressbar(sprintf("0x%x", C_YELLOW), 3);
specialeffect(EF_STEAL, AREA, playerattached());
- switch(.@i) {
+ switch (.@i) {
case 1: // General Culvert Daily Service
- if (questprogress(12271,PLAYTIME) == 2)
- callsub L_EraseQuest,12255,12256,12257,12258,12259,12260,12271;
- else {
+ if (questprogress(12271, PLAYTIME) == 2) {
+ callsub(L_EraseQuest, 12255, 12256, 12257, 12258, 12259, 12260, 12271);
+ } else {
// Reward: 2x B Grade Coin
- callsub L_CheckQuest,12255,"Deep Sea Crab",6419,2;
- callsub L_CheckQuest,12256,"Deep Sea Marse",6419,2;
- callsub L_CheckQuest,12257,"Deep Sea Vadon",6419,2;
- callsub L_CheckQuest,12258,"Deep Sea Shellfish",6419,2;
- callsub L_CheckQuest,12259,"Deep Sea Kukre",6419,2;
- callsub L_CheckQuest,12260,"Deep Sea Cornutus",6419,2;
+ callsub(L_CheckQuest, 12255, _("Deep Sea Crab"), Bgrade_Coin, 2);
+ callsub(L_CheckQuest, 12256, _("Deep Sea Marse"), Bgrade_Coin, 2);
+ callsub(L_CheckQuest, 12257, _("Deep Sea Vadon"), Bgrade_Coin, 2);
+ callsub(L_CheckQuest, 12258, _("Deep Sea Shellfish"), Bgrade_Coin, 2);
+ callsub(L_CheckQuest, 12259, _("Deep Sea Kukre"), Bgrade_Coin, 2);
+ callsub(L_CheckQuest, 12260, _("Deep Sea Cornutus"), Bgrade_Coin, 2);
}
break;
case 2: // Hard Culvert Daily Service
- if (questprogress(12272,PLAYTIME) == 2)
- callsub L_EraseQuest,12261,12262,12263,12264,12265,12266,12272;
- else {
+ if (questprogress(12272, PLAYTIME) == 2) {
+ callsub(L_EraseQuest, 12261, 12262, 12263, 12264, 12265, 12266, 12272);
+ } else {
// Reward: 1x A Grade Coin
- callsub L_CheckQuest,12261,"Deep Sea Marc",6418,1;
- callsub L_CheckQuest,12262,"Deep Sea Sword Fish",6418,1;
- callsub L_CheckQuest,12263,"Deep Sea Strouf",6418,1;
- callsub L_CheckQuest,12264,"Deep Sea Anolian",6418,1;
- callsub L_CheckQuest,12265,"Deep Sea Obeaune",6418,1;
- callsub L_CheckQuest,12266,"Deep Sea Kapha",6418,1;
+ callsub(L_CheckQuest, 12261, _("Deep Sea Marc"), Agrade_Coin, 1);
+ callsub(L_CheckQuest, 12262, _("Deep Sea Sword Fish"), Agrade_Coin, 1);
+ callsub(L_CheckQuest, 12263, _("Deep Sea Strouf"), Agrade_Coin, 1);
+ callsub(L_CheckQuest, 12264, _("Deep Sea Anolian"), Agrade_Coin, 1);
+ callsub(L_CheckQuest, 12265, _("Deep Sea Obeaune"), Agrade_Coin, 1);
+ callsub(L_CheckQuest, 12266, _("Deep Sea Kapha"), Agrade_Coin, 1);
}
break;
case 3: // General Culvert Weekly Service
- if (questprogress(12273,PLAYTIME) == 2)
- callsub L_EraseQuest,12267,12268,12273;
- else {
+ if (questprogress(12273, PLAYTIME) == 2) {
+ callsub(L_EraseQuest, 12267, 12268, 12273);
+ } else {
// Reward: 1x Sea God's Wrath
- callsub L_CheckQuest,12267,"Weird Coelacanth",6423,1;
- callsub L_CheckQuest,12268,"Gloomy Coelacanth",6423,1;
+ callsub(L_CheckQuest, 12267, _("Weird Coelacanth"), Anger_Seagod, 1);
+ callsub(L_CheckQuest, 12268, _("Gloomy Coelacanth"), Anger_Seagod, 1);
}
break;
case 4: // Hard Culvert Weekly Service
- if (questprogress(12274,PLAYTIME) == 2)
- callsub L_EraseQuest,12269,12270,12274;
- else {
+ if (questprogress(12274, PLAYTIME) == 2) {
+ callsub(L_EraseQuest, 12269, 12270, 12274);
+ } else {
// Reward: 5x Sea God's Wrath
- callsub L_CheckQuest,12269,"Violent Coelacanth",6423,5;
- callsub L_CheckQuest,12270,"Mutant Coelacanth",6423,5;
+ callsub(L_CheckQuest, 12269, _("Violent Coelacanth"), Anger_Seagod, 5);
+ callsub(L_CheckQuest, 12270, _("Mutant Coelacanth"), Anger_Seagod, 5);
}
break;
default:
- mes "[Madeca]";
- mes "Something is wrong. Please check this again!";
- close;
+ mes("[Madeca]");
+ mes("Something is wrong. Please check this again!");
+ close();
}
- mes "[Madeca]";
- mes "I don't see any completed mission!";
- close;
+ mes("[Madeca]");
+ mes("I don't see any completed mission!");
+ close();
L_EraseQuest:
for(.@j = 0; .@j<getargcount(); ++.@j) {
if (questprogress(getarg(.@j)))
- erasequest getarg(.@j);
+ erasequest(getarg(.@j));
}
- mes "[Madeca]";
- mes "Um, I'm sorry. You exceeded the time limit, so I can't give you any payment.";
- close;
+ mes("[Madeca]");
+ mes("Um, I'm sorry. You exceeded the time limit, so I can't give you any payment.");
+ close();
-// callsub L_CheckQuest,<quest ID>,<monster>,<reward item ID>,<reward item amount>;
+// callsub(L_CheckQuest, <quest ID>, <monster>, <reward item ID>, <reward item amount>);
L_CheckQuest:
- if (questprogress(getarg(0),HUNTING) == 2) {
- mes "[Madeca]";
- mes "You've punished ^0000ff"+getarg(1)+"^000000!";
- mes "Here's your pay!";
- erasequest getarg(0);
+ if (questprogress(getarg(0), HUNTING) == 2) {
+ mes("[Madeca]");
+ mesf("You've punished ^0000ff%s^000000!", getarg(1));
+ mes("Here's your pay!");
+ erasequest(getarg(0));
specialeffect(EF_STEAL, AREA, playerattached());
- getitem getarg(2),getarg(3);
- close;
+ getitem(getarg(2), getarg(3));
+ close();
}
return;
}
@@ -283,248 +299,249 @@ L_CheckQuest:
//== Instance Creation =====================================
mal_in01,160,34,4 script Missing, the Cleaner 4_CAT_SAILOR2,{
if (BaseLevel < 90) {
- mes "[Missing, the Cleaner]";
- mes "Are you talking to me?!";
- next;
- mes "[Missing, the Cleaner]";
- mes "I'm not sure what made you come here but you can't enter!";
- mes "Tomas' orders...";
- next;
- mes "^770099You must be Base level 90 to enter.^000000";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("Are you talking to me?!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I'm not sure what made you come here but you can't enter!");
+ mes("Tomas' orders...");
+ next();
+ mes("^770099You must be Base level 90 to enter.^000000");
+ close();
}
if (in_canal_n == 0) {
- mes "[Missing, the Cleaner]";
- mes "(trembling)";
- next;
- mes "^660066This cat looks like it's in bad shape. It is slightly trembling.^000000";
- next;
- if(select("Pet the cat", "Are you ok?") == 1) {
- mes "[Missing, the Cleaner]";
- mes "Are you talking to me?!";
- next;
- mes "^660066A trembling cat is looking up at you.^000000";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("(trembling)");
+ next();
+ mes("^660066This cat looks like it's in bad shape. It is slightly trembling.^000000");
+ next();
+ if (select("Pet the cat", "Are you ok?") == 1) {
+ mes("[Missing, the Cleaner]");
+ mes("Are you talking to me?!");
+ next();
+ mes("^660066A trembling cat is looking up at you.^000000");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "Achoo!";
- next;
- mes "[Missing, the Cleaner]";
- mes "We have had many issues during the";
- mes "cleaning of the culverts. But a";
- mes "cat's gotta do it...";
- next;
+ mes("[Missing, the Cleaner]");
+ mes("Achoo!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("We have had many issues during the");
+ mes("cleaning of the culverts. But a");
+ mes("cat's gotta do it...");
+ next();
select("What culvert are you cleaning?");
- mes "[Missing, the Cleaner]";
- mes "It might look unfamiliar for an";
- mes "outsider, but actually this place";
- mes "is made to keep souvenirs and";
- mes "luxurious things.";
- next;
- mes "[Missing, the Cleaner]";
- mes "After there was a big trembling on";
- mes "this island, things started leaking";
- mes "around here. So that's why I became";
- mes "a cleaner here, though I used";
- mes "to be a manager.";
- next;
- mes "^660066The cat looks like it's been crying...^000000";
- next;
- mes "[Missing, the Cleaner]";
- mes "There is a culvert along this way";
- mes "to the basement. There are many bad";
- mes "guys who hurt me. I am tired of";
- mes "fighting with them so many times a";
- mes "day!";
- next;
- mes "[Missing, the Cleaner]";
- mes "Ohh! You touched my fur!";
- mes "My fur is falling out... it's all";
- mes "those guys' fault~";
- next;
- mes "^660066You just now notice that the cat's fur is missing in some places.^000000";
- next;
+ mes("[Missing, the Cleaner]");
+ mes("It might look unfamiliar for an");
+ mes("outsider, but actually this place");
+ mes("is made to keep souvenirs and");
+ mes("luxurious things.");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("After there was a big trembling on");
+ mes("this island, things started leaking");
+ mes("around here. So that's why I became");
+ mes("a cleaner here, though I used");
+ mes("to be a manager.");
+ next();
+ mes("^660066The cat looks like it's been crying...^000000");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("There is a culvert along this way");
+ mes("to the basement. There are many bad");
+ mes("guys who hurt me. I am tired of");
+ mes("fighting with them so many times a");
+ mes("day!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("Ohh! You touched my fur!");
+ mes("My fur is falling out... it's all");
+ mes("those guys' fault~");
+ next();
+ mes("^660066You just now notice that the cat's fur is missing in some places.^000000");
+ next();
select("Why don't you just quit!");
- mes "[Missing, the Cleaner]";
- mes "I still have to make a living, don't I?";
- next;
- mes "[Missing, the Cleaner]";
- mes "Sometimes I can get a lucky box,";
- mes "or even better, I can get cans...";
- next;
- if(select("Okay, cheers!", "I will help if possible...") == 1) {
- mes "[Missing, the Cleaner]";
- mes "Thank you. I am going back to pour the water!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("I still have to make a living, don't I?");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("Sometimes I can get a lucky box,");
+ mes("or even better, I can get cans...");
+ next();
+ if (select("Okay, cheers!", "I will help if possible...") == 1) {
+ mes("[Missing, the Cleaner]");
+ mes("Thank you. I am going back to pour the water!");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "(turns down his voice)";
- mes "If you really want to help, come closer!";
- next;
+ mes("[Missing, the Cleaner]");
+ mes("(turns down his voice)");
+ mes("If you really want to help, come closer!");
+ next();
select("(get in closer)");
- mes "[Missing, the Cleaner]";
- mes "Not everyone can be an assistant";
- mes "here. But I can't help choosing";
- mes "anyone at the moment...";
- next;
- mes "[Missing, the Cleaner]";
- mes "If you want to go down here, let me get this code.";
- next;
- mes "^660066The cat scribbles a memo for code to you.^000000";
- next;
+ mes("[Missing, the Cleaner]");
+ mes("Not everyone can be an assistant");
+ mes("here. But I can't help choosing");
+ mes("anyone at the moment...");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("If you want to go down here, let me get this code.");
+ next();
+ mes("^660066The cat scribbles a memo for code to you.^000000");
+ next();
select("Open the memo.");
- mes "^660000Aragam insulted me.^000000";
- next;
- mes "[Missing, the Cleaner]";
- mes "You must be here with friends";
- mes "because you can't go in alone! And";
- mes "the password code will be from the";
- mes "party leader!";
- next;
- mes "[Missing, the Cleaner]";
- mes "What is also important is you must";
- mes "have a Seagod Protection with you.";
- next;
- mes "[Missing, the Cleaner]";
- mes "Don't forget! I will not open the";
- mes "door if you do not have Seagod Protection!";
+ mes("^660000Aragam insulted me.^000000");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("You must be here with friends");
+ mes("because you can't go in alone! And");
+ mes("the password code will be from the");
+ mes("party leader!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("What is also important is you must");
+ mes("have a Seagod Protection with you.");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("Don't forget! I will not open the");
+ mes("door if you do not have Seagod Protection!");
in_canal_n = 1;
- close;
+ close();
}
if (countitem(Ptotection_Seagod) == 0) {
- mes "[Missing, the Cleaner]";
- mes "You don't look like you have Seagod Protection. I can't open door at the moment!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("You don't look like you have Seagod Protection. I can't open door at the moment!");
+ close();
}
.@party_id = getcharid(CHAR_ID_PARTY);
- .@md_name$ = "Culvert";
+ .@md_name$ = _("Culvert");
if (!.@party_id) {
- mes "^0000ffYou have to organize a party of";
- mes "more than 1 member or be a member";
- mes "of the party and come back.^000000";
- close;
+ mes("^0000ffYou have to organize a party of");
+ mes("more than 1 member or be a member");
+ mes("of the party and come back.^000000");
+ close();
}
- .@playtime = questprogress(12254,PLAYTIME);
+ .@playtime = questprogress(12254, PLAYTIME);
if (!.@playtime) {
- if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2)) {
- mes "[Missing, the Cleaner]";
- mes "Ummm? What's up? Tell me the password if you're the leader!";
- next;
- switch(select("No... nothing.", "Aragam insulted me.", "Enter the Culvert.")) {
+ if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) {
+ mes("[Missing, the Cleaner]");
+ mes("Ummm? What's up? Tell me the password if you're the leader!");
+ next();
+ switch (select("No... nothing.", "Aragam insulted me.", "Enter the Culvert.")) {
case 1:
- mes "[Missing, the Cleaner]";
- mes "What a rookie.";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("What a rookie.");
+ close();
case 2:
- .@instance = instance_create(.@md_name$,.@party_id);
+ .@instance = instance_create(.@md_name$, .@party_id);
if (.@instance < 0) {
- mes "Party name: "+getpartyname(.@party_id);
- mes "Party leader: "+strcharinfo(PC_NAME);
- mes "^0000ff"+.@md_name$+"^000000 - Reservation Failed!";
- close;
+ mesf("Party name: %s", getpartyname(.@party_id));
+ mesf("Party leader: %s", strcharinfo(PC_NAME));
+ mesf("^0000ff%s^000000 - Reservation Failed!", .@md_name$);
+ close();
}
- if (instance_attachmap("1@pump",.@instance) == "" || instance_attachmap("2@pump",.@instance) == "") {
- mes "^0000ff"+.@md_name$+"^000000 - Reservation Failed!";
+ if (instance_attachmap("1@pump", .@instance) == "" || instance_attachmap("2@pump", .@instance) == "") {
+ mesf("^0000ff%s^000000 - Reservation Failed!", .@md_name$);
instance_destroy(.@instance);
- close;
+ close();
}
- instance_set_timeout 3600,300,.@instance;
+ instance_set_timeout(3600, 300, .@instance);
instance_init(.@instance);
- mes "^3333FF"+.@md_name$+"^000000 - Reserving";
- mes "After making the reservation, you";
- mes "have to select Enter the Culvert.";
- close;
+ mesf("^3333FF%s^000000 - Reserving", .@md_name$);
+ mes("After making the reservation, you");
+ mes("have to select Enter the Culvert.");
+ close();
case 3:
- callsub L_Enter,0;
+ callsub(L_Enter, 0);
}
}
- if(select("Enter Culvert", "Cancel") == 2)
+ if (select("Enter Culvert", "Cancel") == 2)
end;
- callsub L_Enter,1;
+ callsub(L_Enter, 1);
} else if (.@playtime == 1) {
- mes "You can enter the Culvert if the gate is open.";
- next;
- if(select("Enter Culvert", "Cancel") == 2)
- close;
- callsub L_Enter,0;
+ mes("You can enter the Culvert if the gate is open.");
+ next();
+ if (select("Enter Culvert", "Cancel") == 2)
+ close();
+ callsub(L_Enter, 0);
} else if (.@playtime == 2) {
- mes "^0000ffThe gate to the Culvert is open again.^000000";
- erasequest 12254;
- close;
+ mes("^0000ffThe gate to the Culvert is open again.^000000");
+ erasequest(12254);
+ close();
}
end;
L_Enter:
if (has_instance("1@pump") == "") {
- if (questprogress(12254,PLAYTIME) == 1) {
- mes "The gate to the Culvert is still closed.";
- mes "You must wait until you are able to enter or find a party leader who can create the instance.";
- close;
+ if (questprogress(12254, PLAYTIME) == 1) {
+ mes("The gate to the Culvert is still closed.");
+ mes("You must wait until you are able to enter or find a party leader who can create the instance.");
+ close();
}
- mes "The memorial dungeon Culvert does not exist.";
- mes "The party leader has not reserved entrance to the dungeon yet.";
- close;
+ mes("The memorial dungeon Culvert does not exist.");
+ mes("The party leader has not reserved entrance to the dungeon yet.");
+ close();
}
- mapannounce "mal_in01", strcharinfo(PC_NAME)+" of the party "+getpartyname(.@party_id)+" is entering the Culvert.",bc_map,"0x00ff99";
- if (!questprogress(12254)) setquest 12254;
- warp "1@pump",63,98;
+ mapannounce("mal_in01", sprintf(_$("%s of the party %s is entering the Culvert."), strcharinfo(PC_NAME), getpartyname(.@party_id)), bc_map, C_SPRINGGREEN);
+ if (!questprogress(12254))
+ setquest(12254);
+ warp("1@pump", 63, 98);
end;
}
//== Instance: Common Scripts ==============================
1@pump,63,100,4 script Missing, the Cleaner#0 4_CAT_SAILOR2,{
- if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- mes "[Missing, the Cleaner]";
- mes "I am trying to have a conversation with your leader now. Please don't disturb and wait!";
- close;
+ if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ mes("[Missing, the Cleaner]");
+ mes("I am trying to have a conversation with your leader now. Please don't disturb and wait!");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "This is the underground culvert where you will clean with your friends!";
- next;
- mes "[Missing, the Cleaner]";
- mes "I'll open the door first. By the way, do you know how to fight?";
- next;
- switch(select("I'm pretty good at delivering bread.", "I know how to fight.", "^ffffffGive me the diamond.^000000")) {
+ mes("[Missing, the Cleaner]");
+ mes("This is the underground culvert where you will clean with your friends!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I'll open the door first. By the way, do you know how to fight?");
+ next();
+ switch (select("I'm pretty good at delivering bread.", "I know how to fight.", "^ffffffGive me the diamond.^000000")) {
case 1:
- mes "[Missing, the Cleaner]";
- mes "Ok then, I'll let you clean the culverts here as usual! I will prepare at the right-hand corner, please follow me!";
- next;
- if(select("Wait! I changed my mind!", "As you wish~") == 1) {
- mes "[Missing, the Cleaner]";
- mes "Huh? Not ready yet? Talk to me again when you're ready.";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("Ok then, I'll let you clean the culverts here as usual! I will prepare at the right-hand corner, please follow me!");
+ next();
+ if (select("Wait! I changed my mind!", "As you wish~") == 1) {
+ mes("[Missing, the Cleaner]");
+ mes("Huh? Not ready yet? Talk to me again when you're ready.");
+ close();
}
'party_id = getcharid(CHAR_ID_PARTY);
- mapannounce instance_mapname("1@pump"),"Missing: Move toward the 3 o'clock direction and wait for my next order!",bc_map,"0xff88ff",FW_NORMAL,15;
- disablenpc instance_npcname("Missing, the Cleaner#0");
- enablenpc instance_npcname("Missing, the Cleaner#n");
- close;
+ mapannounce(instance_mapname("1@pump"), _("Missing: Move toward the 3 o'clock direction and wait for my next order!"), bc_map, "0xff88ff", FW_NORMAL, 15);
+ disablenpc(instance_npcname("Missing, the Cleaner#0"));
+ enablenpc(instance_npcname("Missing, the Cleaner#n"));
+ close();
case 2:
if (BaseLevel < 140) {
- mes "[Missing, the Cleaner]";
- mes "Hmmm... Missing thinks you're weak! Tell me the truth!!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("Hmmm... Missing thinks you're weak! Tell me the truth!!");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "Huh? You have some fighting skills? Well, then, there is one place I wasn't able to clean... why don't you go there?!";
- next;
- mes "[Missing, the Cleaner]";
- mes "I must tell you that it's been such a long~~ time since we've cleaned that place, so anyone under level 140 cannot even enter! Are you sure you still want to go?";
- next;
- if(select("Wait! I changed my mind!", "Sure, I'm prepared already~") == 1) {
- mes "[Missing, the Cleaner]";
- mes "Hmm? Talk to me again when you're ready.";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("Huh? You have some fighting skills? Well, then, there is one place I wasn't able to clean... why don't you go there?!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I must tell you that it's been such a long~~ time since we've cleaned that place, so anyone under level 140 cannot even enter! Are you sure you still want to go?");
+ next();
+ if (select("Wait! I changed my mind!", "Sure, I'm prepared already~") == 1) {
+ mes("[Missing, the Cleaner]");
+ mes("Hmm? Talk to me again when you're ready.");
+ close();
}
'party_id = getcharid(CHAR_ID_PARTY);
- mapannounce instance_mapname("1@pump"),"Missing: I'll go in first, so follow me! I'll open up a gate at the 3 o'clock direction!",bc_map,"0xff88ff",FW_NORMAL,15;
- disablenpc instance_npcname("Missing, the Cleaner#0");
- enablenpc instance_npcname("Culvert Entrance#i");
- close;
+ mapannounce(instance_mapname("1@pump"), _("Missing: I'll go in first, so follow me! I'll open up a gate at the 3 o'clock direction!"), bc_map, "0xff88ff", FW_NORMAL, 15);
+ disablenpc(instance_npcname("Missing, the Cleaner#0"));
+ enablenpc(instance_npcname("Culvert Entrance#i"));
+ close();
case 3:
- mes "[Missing, the Cleaner]";
- mes "I told you not to play with me~!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("I told you not to play with me~!");
+ close();
}
end;
}
@@ -532,134 +549,134 @@ L_Enter:
1@pump,84,105,0 script Culvert Entrance#i WARPNPC,3,3,{
end;
OnInstanceInit:
- disablenpc instance_npcname("Culvert Entrance#i");
+ disablenpc(instance_npcname("Culvert Entrance#i"));
end;
OnTouch:
if (BaseLevel >= 140)
- warp instance_mapname("2@pump"),38,88;
+ warp(instance_mapname("2@pump"), 38, 88);
else
- warp instance_mapname("1@pump"),74,105;
+ warp(instance_mapname("1@pump"), 74, 105);
end;
}
function script F_mal_missing {
- mes "[Missing, the Cleaner]";
- mes "I will tell you how to clean shortly. Can you see the culverts around you?";
- next;
- if(select("What culverts??", "Yes, I see them.") == 1) {
- mes "[Missing, the Cleaner]";
- mes "Huh? Is this your first time seeing culverts? You'll see many buried machines in the ground. You may look around and come back!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("I will tell you how to clean shortly. Can you see the culverts around you?");
+ next();
+ if (select("What culverts??", "Yes, I see them.") == 1) {
+ mes("[Missing, the Cleaner]");
+ mes("Huh? Is this your first time seeing culverts? You'll see many buried machines in the ground. You may look around and come back!");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "That's right! Those culverts are very important! We must clean the culverts to prevent seaweed from blocking them. This is what we, cleaners, do!";
- next;
- mes "[Missing, the Cleaner]";
- mes "Watch out! Some monsters will be after you while you're cleaning the culverts! But do not yield to them!";
- next;
- mes "[Missing, the Cleaner]";
- mes "And... NEVER let 6 seaweeds stack! Up to 5 is acceptable! If there are 6, I'll drag you out of here!!";
- next;
- mes "[Missing, the Cleaner]";
- mes "I don't care if you get help from your friends or not. I want you to clean up all culverts! Don't forget! I will watch you and give you instructions. Just do what I said!!";
- next;
- if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- mes "[Missing, the Cleaner]";
- mes "Once your leader finishes preparing, it will begin, so get your hearts ready for it!!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("That's right! Those culverts are very important! We must clean the culverts to prevent seaweed from blocking them. This is what we, cleaners, do!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("Watch out! Some monsters will be after you while you're cleaning the culverts! But do not yield to them!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("And... NEVER let 6 seaweeds stack! Up to 5 is acceptable! If there are 6, I'll drag you out of here!!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I don't care if you get help from your friends or not. I want you to clean up all culverts! Don't forget! I will watch you and give you instructions. Just do what I said!!");
+ next();
+ if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ mes("[Missing, the Cleaner]");
+ mes("Once your leader finishes preparing, it will begin, so get your hearts ready for it!!");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "So, are you ready to clean now?";
- next;
- switch(select("Wait! Not yet!", "Let's start!")) {
+ mes("[Missing, the Cleaner]");
+ mes("So, are you ready to clean now?");
+ next();
+ switch (select("Wait! Not yet!", "Let's start!")) {
case 1:
- mes "[Missing, the Cleaner]";
- mes "Huh? Not ready yet? Then talk to me when you're ready.";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("Huh? Not ready yet? Then talk to me when you're ready.");
+ close();
case 2:
- mes "[Missing, the Cleaner]";
- mes "OK! Now it begins!";
+ mes("[Missing, the Cleaner]");
+ mes("OK! Now it begins!");
return;
}
}
//== Instance: Normal Mode =================================
1@pump,84,105,4 script Missing, the Cleaner#nf 4_CAT_SAILOR2,{
- mes "[Missing, the Cleaner]";
- mes "I have the cleaning job for 40 years and I've never seen such a terrible team!!";
- next;
- mes "[Missing, the Cleaner]";
- mes "I see seaweed everywhere because you're wiggling! All the culverts will be blocked with seaweed!";
- next;
- if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY),2)) {
- mes "[Missing, the Cleaner]";
- mes "Once your leader finishes preparing, settlement will be decided so get your hearts ready for it!!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("I have the cleaning job for 40 years and I've never seen such a terrible team!!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I see seaweed everywhere because you're wiggling! All the culverts will be blocked with seaweed!");
+ next();
+ if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) {
+ mes("[Missing, the Cleaner]");
+ mes("Once your leader finishes preparing, settlement will be decided so get your hearts ready for it!!");
+ close();
}
- mes "[Missing, the Cleaner]";
- mes "If you got some guts to challenge again, I'll give you another chance! What's your choice going to be!?";
- next;
- switch(select("Wait! Not yet!", "Okay, let's start again!")) {
+ mes("[Missing, the Cleaner]");
+ mes("If you got some guts to challenge again, I'll give you another chance! What's your choice going to be!?");
+ next();
+ switch (select("Wait! Not yet!", "Okay, let's start again!")) {
case 1:
- mes "[Missing, the Cleaner]";
- mes "You're still slow! Talk to me again whenever your're ready.";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("You're still slow! Talk to me again whenever your're ready.");
+ close();
case 2:
- mes "[Missing, the Cleaner]";
- mes "Ok! Let's start now!";
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
- enablenpc instance_npcname("Missing, the Cleaner#"+.@i$);
- donpcevent instance_npcname("Missing, the Cleaner#"+.@i$)+"::OnStart";
- disablenpc instance_npcname("Culvert Entrance#"+.@i$);
- disablenpc instance_npcname("Missing, the Cleaner#"+.@i$+"o");
- donpcevent instance_npcname("Monster Hole#"+.@i$)+"::OnClear";
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
- close;
+ mes("[Missing, the Cleaner]");
+ mes("Ok! Let's start now!");
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
+ enablenpc(instance_npcname("Missing, the Cleaner#"+.@i$));
+ donpcevent(instance_npcname("Missing, the Cleaner#"+.@i$)+"::OnStart");
+ disablenpc(instance_npcname("Culvert Entrance#"+.@i$));
+ disablenpc(instance_npcname("Missing, the Cleaner#"+.@i$+"o"));
+ donpcevent(instance_npcname("Monster Hole#"+.@i$)+"::OnClear");
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ close();
}
- close;
+ close();
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
}
1@pump,84,105,4 script Missing, the Cleaner#n 4_CAT_SAILOR2,{
- callfunc "F_mal_missing";
- donpcevent instance_npcname("Missing, the Cleaner#n")+"::OnStart";
- close;
+ callfunc("F_mal_missing");
+ donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnStart");
+ close();
OnInstanceInit:
- disablenpc instance_npcname("Missing, the Cleaner#n");
+ disablenpc(instance_npcname("Missing, the Cleaner#n"));
end;
OnStart:
- killmonster instance_mapname("1@pump"),instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead";
- disablenpc instance_npcname("Missing, the Cleaner#n");
- initnpctimer;
+ killmonster(instance_mapname("1@pump"), instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ disablenpc(instance_npcname("Missing, the Cleaner#n"));
+ initnpctimer();
end;
OnAddSeaweed:
.@map$ = instance_mapname("1@pump");
- areamonster .@map$,55,99,61,105,"Contaminated Seaweed",2191,1,instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead";
- .@mob_dead_num = mobcount(.@map$,instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ areamonster(.@map$, 55, 99, 61, 105, _("Contaminated Seaweed"), MD_SEAWEED, 1, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ .@mob_dead_num = mobcount(.@map$, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
if (.@mob_dead_num >= 6)
- donpcevent instance_npcname("Missing, the Cleaner#n")+"::OnFail";
+ donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnFail");
else
- mapannounce .@map$,"Contaminated Seaweed: "+.@mob_dead_num+" stem",bc_map,"0xff3333",FW_NORMAL,20;
+ mapannounce(.@map$, sprintf(_$("Contaminated Seaweed: %s stem"), .@mob_dead_num), bc_map, "0xff3333", FW_NORMAL, 20);
end;
OnMyMobDead:
end;
OnFail:
- stopnpctimer;
- donpcevent instance_npcname("Monster Hole#n")+"::OnClear";
+ stopnpctimer();
+ donpcevent(instance_npcname("Monster Hole#n")+"::OnClear");
.@map$ = instance_mapname("1@pump");
- killmonster .@map$,instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead";
- enablenpc instance_npcname("Missing, the Cleaner#nf");
- mapannounce .@map$,"What is this!! Seaweed is all over the culverts! You're done with cleaning! Get out!!",bc_map,"0xff88ff",FW_NORMAL,15;
- disablenpc instance_npcname("Missing, the Cleaner#n");
+ killmonster(.@map$, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ enablenpc(instance_npcname("Missing, the Cleaner#nf"));
+ mapannounce(.@map$, _("What is this!! Seaweed is all over the culverts! You're done with cleaning! Get out!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
+ disablenpc(instance_npcname("Missing, the Cleaner#n"));
end;
OnTimer100:
- mapannounce instance_mapname("1@pump"),"First culvert will be opened in 5 sec. Cleaner can find the opened drain and click to start cleaning.",bc_map,"0x00ffcc",FW_NORMAL,15;
+ mapannounce(instance_mapname("1@pump"), _("First culvert will be opened in 5 sec. Cleaner can find the opened drain and click to start cleaning."), bc_map, "0x00ffcc", FW_NORMAL, 15);
end;
OnTimer5500:
- mapannounce instance_mapname("1@pump"),"The one who's in charge of cleaning the culvert cannot move or be attacked until the casting is over.",bc_map,"0x00ffcc",FW_NORMAL,15;
- donpcevent instance_npcname("Monster Hole#n")+"::OnSpawn";
+ mapannounce(instance_mapname("1@pump"), _("The one who's in charge of cleaning the culvert cannot move or be attacked until the casting is over."), bc_map, "0x00ffcc", FW_NORMAL, 15);
+ donpcevent(instance_npcname("Monster Hole#n")+"::OnSpawn");
end;
OnTimer45000:
OnTimer95000:
@@ -670,12 +687,12 @@ OnTimer295000:
OnTimer345000:
OnTimer395000:
OnTimer445000:
- mapannounce instance_mapname("1@pump"),"Next culvert will be opened in 5 sec. Please hurry up and find the position of the next culvert.",bc_map,"0x00ffcc",FW_NORMAL,15;
+ mapannounce(instance_mapname("1@pump"), _("Next culvert will be opened in 5 sec. Please hurry up and find the position of the next culvert."), bc_map, "0x00ffcc", FW_NORMAL, 15);
end;
OnTimer50000:
OnTimer100000:
OnTimer150000:
- donpcevent instance_npcname("Monster Hole#n")+"::OnSpawn";
+ donpcevent(instance_npcname("Monster Hole#n")+"::OnSpawn");
end;
OnTimer200000:
OnTimer250000:
@@ -683,103 +700,116 @@ OnTimer300000:
OnTimer350000:
OnTimer400000:
OnTimer450000:
- .@mob_dead_num = mobcount(instance_mapname("1@pump"),instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ .@mob_dead_num = mobcount(instance_mapname("1@pump"), instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
if (.@mob_dead_num >= 6)
- donpcevent instance_npcname("Missing, the Cleaner#n")+"::OnFail";
+ donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnFail");
else
- donpcevent instance_npcname("Monster Hole#n")+"::OnSpawn";
+ donpcevent(instance_npcname("Monster Hole#n")+"::OnSpawn");
end;
OnTimer515000:
.@map$ = instance_mapname("1@pump");
- .@mob_dead_num = mobcount(.@map$,instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
- mapannounce .@map$,"Contaminated Seaweed: "+.@mob_dead_num+" stem. Missing will come and inspect the results of the cleaning soon.",bc_map,"0xff3333",FW_NORMAL,20;
+ .@mob_dead_num = mobcount(.@map$, instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ mapannounce(.@map$, sprintf(_$("Contaminated Seaweed: %s stem. Missing will come and inspect the results of the cleaning soon."), .@mob_dead_num), bc_map, "0xff3333", FW_NORMAL, 20);
end;
OnTimer520000:
- stopnpctimer;
- .@mob_dead_num = mobcount(instance_mapname("1@pump"),instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
+ stopnpctimer();
+ .@mob_dead_num = mobcount(instance_mapname("1@pump"), instance_npcname("Missing, the Cleaner#n")+"::OnMyMobDead");
if (.@mob_dead_num >= 6)
- donpcevent instance_npcname("Missing, the Cleaner#n")+"::OnFail";
+ donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnFail");
else
- donpcevent instance_npcname("Boss Creation#n")+"::OnEnable";
+ donpcevent(instance_npcname("Boss Creation#n")+"::OnEnable");
end;
}
1@pump,1,1,4 script Monster Hole#n FAKE_NPC,{
end;
OnSpawn:
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
if (.@i$ == "n")
.@n = 6;
else if (.@i$ == "h")
.@n = 10;
- donpcevent instance_npcname("#Culvert_"+.@i$+rand(1,.@n))+"::OnEnable";
+ donpcevent(instance_npcname("#Culvert_"+.@i$+rand(1, .@n))+"::OnEnable");
end;
OnClear:
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
if (.@i$ == "n")
.@n = 6;
else if (.@i$ == "h")
.@n = 10;
- for(.@i = 1; .@i<=.@n; ++.@i)
- donpcevent instance_npcname("#Culvert_"+.@i$+.@n)+"::OnClear";
+ for(.@i = 1; .@i <= .@n; ++.@i)
+ donpcevent(instance_npcname("#Culvert_"+.@i$+.@n)+"::OnClear");
end;
}
1@pump,36,111,4 script #Culvert_n1 CLEAR_NPC,14,14,{ //temporary workaround for ALL_SAMEMAP
- progressbar "0xFFFF00",10;
- stopnpctimer;
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ progressbar(sprintf("0x%x", C_YELLOW), 10);
+ stopnpctimer();
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- enablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
.@map$ = instance_mapname("1@pump");
- .@index = atoi(charat(strnpcinfo(NPC_NAME_HIDDEN),9));
- switch(.@index) {
- case 1: setarray .@c[0],32,107,40,115; break;
- case 2: setarray .@c[0],64,120,72,128; break;
- case 3: setarray .@c[0],76,110,84,118; break;
- case 4: setarray .@c[0],36,76,44,84; break;
- case 5: setarray .@c[0],71,76,79,84; break;
- case 6: setarray .@c[0],54,97,62,105; break;
+ .@index = atoi(charat(strnpcinfo(NPC_NAME_HIDDEN), 9));
+ switch (.@index) {
+ case 1:
+ setarray(.@c[0], 32, 107, 40, 115);
+ break;
+ case 2:
+ setarray(.@c[0], 64, 120, 72, 128);
+ break;
+ case 3:
+ setarray(.@c[0], 76, 110, 84, 118);
+ break;
+ case 4:
+ setarray(.@c[0], 36, 76, 44, 84);
+ break;
+ case 5:
+ setarray(.@c[0], 71, 76, 79, 84);
+ break;
+ case 6:
+ setarray(.@c[0], 54, 97, 62, 105);
+ break;
}
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Abysmal Crab",2176,rand(1,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Abysmal Marse",2175,rand(1,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Ancient Vadon",2174,rand(1,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Abysmal Shellfish",2178,rand(1,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Ancient Kukre",2179,rand(1,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Abysmal Cornutus",2177,rand(1,3),.@label$;
- specialeffect EF_MAPPILLAR2,ALL_SAMEMAP; //currently broken
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Crab"), MD_CRAB, rand(1, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Marse"), MD_MARSE, rand(1, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Vadon"), MD_VADON, rand(1, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Shellfish"), MD_SHELLFISH, rand(1, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Kukre"), MD_KUKRE, rand(1, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Cornutus"), MD_CORNUTUS, rand(1, 3), .@label$);
+ specialeffect(EF_MAPPILLAR2, ALL_SAMEMAP); //currently broken
getmapxy(.@map$, .@x, .@y, UNITTYPE_NPC);
- getpartymember 'party_id,2;
- copyarray .@partymemberaid[0],$@partymemberaid[0],$@partymembercount;
+ getpartymember('party_id, 2);
+ copyarray(.@partymemberaid[0], $@partymemberaid[0], $@partymembercount);
for(.@i = 0; .@i<$@partymembercount; ++.@i) {
if (attachrid(.@partymemberaid[.@i])) {
if (strcharinfo(PC_MAP) == .@map$)
- viewpoint 0,.@x,.@y,.@index,0xFFFF00;
- detachrid;
+ viewpoint(0, .@x, .@y, .@index, C_YELLOW);
+ detachrid();
}
}
- initnpctimer;
+ initnpctimer();
end;
OnMyMobDead:
end;
OnClear:
- stopnpctimer;
- killmonster instance_mapname("1@pump"),instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
+ stopnpctimer();
+ killmonster(instance_mapname("1@pump"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead");
end;
OnTimer49500: //OnTimer50000 clashes with the timer in "Missing, the Cleaner#h".
- donpcevent instance_npcname("Missing, the Cleaner#n")+"::OnAddSeaweed";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnClear";
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ donpcevent(instance_npcname("Missing, the Cleaner#n")+"::OnAddSeaweed");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnClear");
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnTouch:
- specialeffect EF_MAPPILLAR2;
+ specialeffect(EF_MAPPILLAR2);
end;
}
+
1@pump,68,124,4 duplicate(#Culvert_n1) #Culvert_n2 CLEAR_NPC,14,14
1@pump,80,114,4 duplicate(#Culvert_n1) #Culvert_n3 CLEAR_NPC,14,14
1@pump,40,80,4 duplicate(#Culvert_n1) #Culvert_n4 CLEAR_NPC,14,14
@@ -789,126 +819,139 @@ OnTouch:
1@pump,1,1,4 script Boss Creation#n FAKE_NPC,{
end;
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- enablenpc instance_npcname(strnpcinfo(NPC_NAME));
- initnpctimer;
+ enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
+ initnpctimer();
end;
OnTimer100:
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
if (.@i$ == "n")
- mapannounce instance_mapname("1@pump"),"Hmm! That wasn't so bad!",bc_map,"0xff88ff",FW_NORMAL,15;
+ mapannounce(instance_mapname("1@pump"), _("Hmm! That wasn't so bad!"), bc_map, "0xff88ff", FW_NORMAL, 15);
else if (.@i$ == "h")
- mapannounce instance_mapname("2@pump"),"Hmm! You guys are pretty good!!",bc_map,"0xff88ff",FW_NORMAL,15;
+ mapannounce(instance_mapname("2@pump"), _("Hmm! You guys are pretty good!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
end;
OnTimer5000:
- mapannounce strnpcinfo(NPC_MAP),"Let's pack up and go... WHAT!!?",bc_map,"0xff88ff",FW_NORMAL,15;
+ mapannounce(strnpcinfo(NPC_MAP), _("Let's pack up and go... WHAT!!?"), bc_map, "0xff88ff", FW_NORMAL, 15);
end;
OnTimer10000:
- mapannounce strnpcinfo(NPC_MAP),"I sense something strange!! Don't loosen up-- prepare for a fight!!",bc_map,"0xff88ff",FW_NORMAL,15;
+ mapannounce(strnpcinfo(NPC_MAP), _("I sense something strange!! Don't loosen up-- prepare for a fight!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
end;
OnTimer20000:
- stopnpctimer;
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
+ stopnpctimer();
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
- if (rand(1,100) > 50) {
+ if (rand(1, 100) > 50) {
if (.@i$ == "n")
- monster instance_mapname("1@pump"),0,0,"Weird Coelacanth",2188,1,.@label$;
+ monster(instance_mapname("1@pump"), 0, 0, _("Weird Coelacanth"), COELACANTH_N_M, 1, .@label$);
else if (.@i$ == "h")
- monster instance_mapname("2@pump"),0,0,"Mutant Coelacanth",2189,1,.@label$;
- mapannounce strnpcinfo(NPC_MAP),"Something big inside the abyss appears with a huge noise.",bc_map,"0x00ffcc",FW_NORMAL,15;
+ monster(instance_mapname("2@pump"), 0, 0, _("Mutant Coelacanth"), COELACANTH_H_M, 1, .@label$);
+ mapannounce(strnpcinfo(NPC_MAP), _("Something big inside the abyss appears with a huge noise."), bc_map, "0x00ffcc", FW_NORMAL, 15);
} else {
if (.@i$ == "n")
- monster instance_mapname("1@pump"),0,0,"Gloomy Coelacanth",2187,1,.@label$;
+ monster(instance_mapname("1@pump"), 0, 0, _("Gloomy Coelacanth"), COELACANTH_N_A, 1, .@label$);
else if (.@i$ == "h")
- monster instance_mapname("2@pump"),0,0,"Violent Coelacanth",2190,1,.@label$;
- mapannounce strnpcinfo(NPC_MAP),"Something savage inside the abyss appears with a huge noise.",bc_map,"0x00ffcc",FW_NORMAL,15;
+ monster(instance_mapname("2@pump"), 0, 0, _("Violent Coelacanth"), COELACANTH_H_A, 1, .@label$);
+ mapannounce(strnpcinfo(NPC_MAP), _("Something savage inside the abyss appears with a huge noise."), bc_map, "0x00ffcc", FW_NORMAL, 15);
}
end;
OnMyMobDead:
- if (mobcount(strnpcinfo(NPC_MAP),instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) {
- mapannounce strnpcinfo(NPC_MAP),"You've destroyed all monsters in the culverts. There are trophies lying on the ground, please look for them.",bc_map,"0xffff00",FW_NORMAL,15;
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
+ if (mobcount(strnpcinfo(NPC_MAP), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) {
+ mapannounce(strnpcinfo(NPC_MAP), _("You've destroyed all monsters in the culverts. There are trophies lying on the ground, please look for them."), bc_map, C_YELLOW, FW_NORMAL, 15);
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
.@map$ = strnpcinfo(NPC_MAP);
- enablenpc instance_npcname("Culvert Entrance#"+.@i$);
- enablenpc instance_npcname("Missing, the Cleaner#"+.@i$+"o");
+ enablenpc(instance_npcname("Culvert Entrance#"+.@i$));
+ enablenpc(instance_npcname("Missing, the Cleaner#"+.@i$+"o"));
if (.@i$ == "n") {
- for(.@i = 0; .@i<10; ++.@i) {
- .@j = rand(1,6401);
- if (.@j < 5001) .@item = 12636; //Malang_Sp_Can
- else if (.@j < 5501) .@item = 12615; //Low_Coin_Pocket
- else if (.@j < 6001) .@item = 12621; //Egrade_Pocket
- else if (.@j < 6201) .@item = 12620; //Dgrade_Pocket
- else if (.@j < 6401) .@item = 12623; //High_Weapon_Box
- else continue;
- makeitem .@item,1,.@map$,rand(40,77),rand(87,120);
+ for(.@i = 0; .@i < 10; ++.@i) {
+ .@j = rand(1, 6401);
+ if (.@j < 5001)
+ .@item = Malang_Sp_Can;
+ else if (.@j < 5501)
+ .@item = Low_Coin_Pocket;
+ else if (.@j < 6001)
+ .@item = Egrade_Pocket;
+ else if (.@j < 6201)
+ .@item = Dgrade_Pocket;
+ else if (.@j < 6401)
+ .@item = High_Weapon_Box;
+ else
+ continue;
+ makeitem(.@item, 1, .@map$, rand(40, 77), rand(87, 120));
}
} else if (.@i$ == "h") {
- for(.@i = 0; .@i<10; ++.@i) {
- .@j = rand(1,5001);
- if (.@j < 2001) .@item = 12615; //Low_Coin_Pocket
- else if (.@j < 3001) .@item = 12621; //Egrade_Pocket
- else if (.@j < 4001) .@item = 12620; //Dgrade_Pocket
- else if (.@j < 4501) .@item = 12619; //Cgrade_Pocket
- else if (.@j < 5001) .@item = 12623; //High_Weapon_Box
- else continue;
- makeitem .@item,1,.@map$,rand(40,77),rand(87,120);
+ for(.@i = 0; .@i < 10; ++.@i) {
+ .@j = rand(1, 5001);
+ if (.@j < 2001)
+ .@item = Low_Coin_Pocket;
+ else if (.@j < 3001)
+ .@item = Egrade_Pocket;
+ else if (.@j < 4001)
+ .@item = Dgrade_Pocket;
+ else if (.@j < 4501)
+ .@item = Cgrade_Pocket;
+ else if (.@j < 5001)
+ .@item = High_Weapon_Box;
+ else
+ continue;
+ makeitem(.@item, 1, .@map$, rand(40, 77), rand(87, 120));
}
}
- } else
- mapannounce strnpcinfo(NPC_MAP),"There are still monsters alive.",bc_map,"0x00ff99",FW_NORMAL,20;
+ } else {
+ mapannounce(strnpcinfo(NPC_MAP), _("There are still monsters alive."), bc_map, C_SPRINGGREEN, FW_NORMAL, 20);
+ }
end;
}
1@pump,84,105,4 script Missing, the Cleaner#no 4_CAT_SAILOR2,{
- .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN),0);
+ .@i$ = charat(strnpcinfo(NPC_NAME_HIDDEN), 0);
if (.@i$ == "n") {
- mes "[Missing, the Cleaner]";
- mes "I was very surprised!!";
- next;
- mes "[Missing, the Cleaner]";
- mes "That funny-looking fish seems to be one of Coelacanths living around here. This is my first time seeing one coming here alone!";
- next;
- mes "[Missing, the Cleaner]";
- mes "I'll clean up the remains. Go pack and leave! Enterance is located on the other side, look for it!";
- next;
+ mes("[Missing, the Cleaner]");
+ mes("I was very surprised!!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("That funny-looking fish seems to be one of Coelacanths living around here. This is my first time seeing one coming here alone!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I'll clean up the remains. Go pack and leave! Enterance is located on the other side, look for it!");
+ next();
} else if (.@i$ == "h") {
- mes "[Missing, the Cleaner]";
- mes "You've destroyed an immense monster!";
- next;
- mes "[Missing, the Cleaner]";
- mes "The one you destroyed was among the variety of Coelacanths. Others have tried to destroy them but failed.";
- next;
- mes "[Missing, the Cleaner]";
- mes "I'll clean up the remains. You go ahead to get trophies and leave!";
- next;
+ mes("[Missing, the Cleaner]");
+ mes("You've destroyed an immense monster!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("The one you destroyed was among the variety of Coelacanths. Others have tried to destroy them but failed.");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("I'll clean up the remains. You go ahead to get trophies and leave!");
+ next();
}
- mes "[Missing, the Cleaner]";
- mes "One more thing! DO NOT TALK to ANYONE about what you've seen here today!!";
- next;
- mes "[Missing, the Cleaner]";
- mes "If Tomas closes this down, we will lose our jobs!";
- close;
+ mes("[Missing, the Cleaner]");
+ mes("One more thing! DO NOT TALK to ANYONE about what you've seen here today!!");
+ next();
+ mes("[Missing, the Cleaner]");
+ mes("If Tomas closes this down, we will lose our jobs!");
+ close();
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
}
1@pump,32,100,0 script Culvert Entrance#n WARPNPC,3,3,{
end;
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnTouch:
- warp "mal_in01",161,32;
+ warp("mal_in01", 161, 32);
end;
}
//MD_Putmob "1@pump" 0 0 0 0 20 HYDRA 0 0 2
1@pump,1,1,4 script Hydra#n FAKE_NPC,{
OnInstanceInit:
- monster strnpcinfo(NPC_MAP),0,0,"Hydra",1068,20;
+ monster(strnpcinfo(NPC_MAP), 0, 0, _("Hydra"), HYDRA, 20);
end;
}
@@ -916,40 +959,40 @@ OnInstanceInit:
2@pump,39,88,4 duplicate(Missing, the Cleaner#nf) Missing, the Cleaner#hf 4_CAT_SAILOR2
2@pump,39,88,4 script Missing, the Cleaner#h 4_CAT_SAILOR2,{
- callfunc "F_mal_missing";
- donpcevent instance_npcname("Missing, the Cleaner#h")+"::OnStart";
- close;
+ callfunc("F_mal_missing");
+ donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnStart");
+ close();
OnStart:
- killmonster instance_mapname("2@pump"),instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead";
- disablenpc instance_npcname("Missing, the Cleaner#h");
- initnpctimer;
+ killmonster(instance_mapname("2@pump"), instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
+ disablenpc(instance_npcname("Missing, the Cleaner#h"));
+ initnpctimer();
end;
OnAddSeaweed:
.@map$ = instance_mapname("2@pump");
- areamonster .@map$,75,78,85,88,"Contaminated Seaweed",2191,1,instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead";
- .@mob_dead_num = mobcount(.@map$,instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
+ areamonster(.@map$, 75, 78, 85, 88, _("Contaminated Seaweed"), MD_SEAWEED, 1, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
+ .@mob_dead_num = mobcount(.@map$, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
if (.@mob_dead_num >= 6)
- donpcevent instance_npcname("Missing, the Cleaner#h")+"::OnFail";
+ donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnFail");
else
- mapannounce .@map$,"Proliferous Contaminated Seaweed: "+.@mob_dead_num+" stem",bc_map,"0xff3333",FW_NORMAL,20;
+ mapannounce(.@map$, sprintf(_$("Proliferous Contaminated Seaweed: %s stem"), .@mob_dead_num), bc_map, "0xff3333", FW_NORMAL, 20);
end;
OnMyMobDead:
end;
OnFail:
- stopnpctimer;
- donpcevent instance_npcname("Monster Hole#h")+"::OnClear";
+ stopnpctimer();
+ donpcevent(instance_npcname("Monster Hole#h")+"::OnClear");
.@map$ = instance_mapname("2@pump");
- killmonster .@map$, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead";
- enablenpc instance_npcname("Missing, the Cleaner#hf");
- mapannounce .@map$,"What is this!! Seaweed is all over the culverts! You're done with cleaning! Get out!!",bc_map,"0xff88ff",FW_NORMAL,15;
- disablenpc instance_npcname("Missing, the Cleaner#h");
+ killmonster(.@map$, instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
+ enablenpc(instance_npcname("Missing, the Cleaner#hf"));
+ mapannounce(.@map$, _("What is this!! Seaweed is all over the culverts! You're done with cleaning! Get out!!"), bc_map, "0xff88ff", FW_NORMAL, 15);
+ disablenpc(instance_npcname("Missing, the Cleaner#h"));
end;
OnTimer100:
- mapannounce instance_mapname("2@pump"),"First culvert will be opened in 5 sec. Cleaner can find the opened drain and click to start cleaning.",bc_map,"0x00ffcc",FW_NORMAL,15;
+ mapannounce(instance_mapname("2@pump"), _("First culvert will be opened in 5 sec. Cleaner can find the opened drain and click to start cleaning."), bc_map, "0x00ffcc", FW_NORMAL, 15);
end;
OnTimer5500:
- mapannounce instance_mapname("2@pump"),"The one who's in charge of cleaning the culvert cannot move or be attacked until the casting is over.",bc_map,"0x00ffcc",FW_NORMAL,15;
- donpcevent instance_npcname("Monster Hole#h")+"::OnSpawn";
+ mapannounce(instance_mapname("2@pump"), _("The one who's in charge of cleaning the culvert cannot move or be attacked until the casting is over."), bc_map, "0x00ffcc", FW_NORMAL, 15);
+ donpcevent(instance_npcname("Monster Hole#h")+"::OnSpawn");
end;
OnTimer35000:
OnTimer75000:
@@ -960,12 +1003,12 @@ OnTimer235000:
OnTimer275000:
OnTimer315000:
OnTimer355000:
- mapannounce instance_mapname("2@pump"),"Next culvert will be opened in 5 sec. Please hurry up and find the position of the next culvert.",bc_map,"0x00ffcc",FW_NORMAL,15;
+ mapannounce(instance_mapname("2@pump"), _("Next culvert will be opened in 5 sec. Please hurry up and find the position of the next culvert."), bc_map, "0x00ffcc", FW_NORMAL, 15);
end;
OnTimer40000:
OnTimer80000:
OnTimer120000:
- donpcevent instance_npcname("Monster Hole#h")+"::OnSpawn";
+ donpcevent(instance_npcname("Monster Hole#h")+"::OnSpawn");
end;
OnTimer160000:
OnTimer200000:
@@ -973,72 +1016,92 @@ OnTimer240000:
OnTimer280000:
OnTimer320000:
OnTimer360000:
- .@mob_dead_num = mobcount(instance_mapname("2@pump"),instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
+ .@mob_dead_num = mobcount(instance_mapname("2@pump"), instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
if (.@mob_dead_num >= 6)
- donpcevent instance_npcname("Missing, the Cleaner#h")+"::OnFail";
+ donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnFail");
else
- donpcevent instance_npcname("Monster Hole#h")+"::OnSpawn";
+ donpcevent(instance_npcname("Monster Hole#h")+"::OnSpawn");
end;
OnTimer420000:
- mapannounce instance_mapname("2@pump"),"It seems Missing will come and inspect the results of the cleaning soon. Shall we clean up the mess around here?",bc_map,"0xff3333",FW_NORMAL,20;
+ mapannounce(instance_mapname("2@pump"), _("It seems Missing will come and inspect the results of the cleaning soon. Shall we clean up the mess around here?"), bc_map, "0xff3333", FW_NORMAL, 20);
end;
OnTimer425000:
- stopnpctimer;
- .@mob_dead_num = mobcount(instance_mapname("2@pump"),instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
+ stopnpctimer();
+ .@mob_dead_num = mobcount(instance_mapname("2@pump"), instance_npcname("Missing, the Cleaner#h")+"::OnMyMobDead");
if (.@mob_dead_num >= 6)
- donpcevent instance_npcname("Missing, the Cleaner#h")+"::OnFail";
+ donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnFail");
else
- donpcevent instance_npcname("Boss Creation#h")+"::OnEnable";
+ donpcevent(instance_npcname("Boss Creation#h")+"::OnEnable");
end;
}
2@pump,53,114,4 script #Culvert_h1 CLEAR_NPC,14,14,{ //temporary workaround for ALL_SAMEMAP
- progressbar "0xFFFF00",15;
- stopnpctimer;
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ progressbar(sprintf("0x%x", C_YELLOW), 15);
+ stopnpctimer();
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnInstanceInit:
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnEnable:
- enablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ enablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
.@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
.@map$ = instance_mapname("2@pump");
- .@index = atoi(substr(strnpcinfo(NPC_NAME_HIDDEN),9,getstrlen(strnpcinfo(NPC_NAME_HIDDEN))-1));
- switch(.@index) {
- case 1: setarray .@c[0],49,110,57,118; break;
- case 2: setarray .@c[0],75,105,83,113; break;
- case 3: setarray .@c[0],110,110,118,118; break;
- case 4: setarray .@c[0],94,94,102,102; break;
- case 5: setarray .@c[0],58,92,66,100; break;
- case 6: setarray .@c[0],53,66,61,74; break;
- case 7: setarray .@c[0],43,45,51,53; break;
- case 8: setarray .@c[0],77,59,85,67; break;
- case 9: setarray .@c[0],96,70,104,78; break;
- case 10: setarray .@c[0],111,46,119,54; break;
+ .@index = atoi(substr(strnpcinfo(NPC_NAME_HIDDEN), 9, getstrlen(strnpcinfo(NPC_NAME_HIDDEN))-1));
+ switch (.@index) {
+ case 1:
+ setarray(.@c[0], 49, 110, 57, 118);
+ break;
+ case 2:
+ setarray(.@c[0], 75, 105, 83, 113);
+ break;
+ case 3:
+ setarray(.@c[0], 110, 110, 118, 118);
+ break;
+ case 4:
+ setarray(.@c[0], 94, 94, 102, 102);
+ break;
+ case 5:
+ setarray(.@c[0], 58, 92, 66, 100);
+ break;
+ case 6:
+ setarray(.@c[0], 53, 66, 61, 74);
+ break;
+ case 7:
+ setarray(.@c[0], 43, 45, 51, 53);
+ break;
+ case 8:
+ setarray(.@c[0], 77, 59, 85, 67);
+ break;
+ case 9:
+ setarray(.@c[0], 96, 70, 104, 78);
+ break;
+ case 10:
+ setarray(.@c[0], 111, 46, 119, 54);
+ break;
}
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Ancient Marc",2182,rand(2,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Ancient Sword Fish",2181,rand(2,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Ancient Strouf",2180,rand(2,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Mutant Anolian",2183,rand(2,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Abysmal Obeaune",2184,rand(2,3),.@label$;
- areamonster .@map$,.@c[0],.@c[1],.@c[2],.@c[3],"Metamorphous Kapha",2185,rand(2,3),.@label$;
- specialeffect EF_MAPPILLAR2,ALL_SAMEMAP; //currently broken
- initnpctimer;
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Marc"), MD_MARC, rand(2, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Sword Fish"), MD_SWORD_FISH, rand(2, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Ancient Strouf"), MD_STROUF, rand(2, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Mutant Anolian"), MD_ANOLIAN, rand(2, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Abysmal Obeaune"), MD_OBEAUNE, rand(2, 3), .@label$);
+ areamonster(.@map$, .@c[0], .@c[1], .@c[2], .@c[3], _("Metamorphous Kapha"), MD_KAPHA, rand(2, 3), .@label$);
+ specialeffect(EF_MAPPILLAR2, ALL_SAMEMAP); //currently broken
+ initnpctimer();
end;
OnMyMobDead:
end;
OnClear:
- stopnpctimer;
- killmonster instance_mapname("2@pump"),instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead";
+ stopnpctimer();
+ killmonster(instance_mapname("2@pump"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead");
end;
OnTimer39500: //OnTimer40000 clashes with the timer in "Missing, the Cleaner#h".
- donpcevent instance_npcname("Missing, the Cleaner#h")+"::OnAddSeaweed";
- donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnClear";
- disablenpc instance_npcname(strnpcinfo(NPC_NAME));
+ donpcevent(instance_npcname("Missing, the Cleaner#h")+"::OnAddSeaweed");
+ donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnClear");
+ disablenpc(instance_npcname(strnpcinfo(NPC_NAME)));
end;
OnTouch:
- specialeffect EF_MAPPILLAR2;
+ specialeffect(EF_MAPPILLAR2);
end;
}
2@pump,79,109,4 duplicate(#Culvert_h1) #Culvert_h2 CLEAR_NPC,14,14
diff --git a/npc/re/other/clans.txt b/npc/re/other/clans.txt
new file mode 100644
index 000000000..1260cdcd1
--- /dev/null
+++ b/npc/re/other/clans.txt
@@ -0,0 +1,581 @@
+//================= Hercules Script =======================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2017 Hercules Dev Team
+//= Copyright (C) Ridley
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Clan System
+//================= Description ===========================================
+//= Join a Clan instead of a guild
+//= Reference: http://ragnarok.wikia.com/wiki/Clans
+//= Todo: Clan Quests
+//= Note: Official npcs can have also a way to stop players joining clans
+//= that already reached their maximum amount of members. Maybe it
+//= can be added here after a confirmation.
+//================= Current Version =======================================
+//= 1.0
+//=========================================================================
+
+prontera,138,183,7 script Clan Helper#clan 4_F_KID2,{
+ mes("[Clan Helper]");
+ mes("Do you want to build connections without being in a guild?");
+ next();
+ mes("[Clan Helper]");
+ mes("Can't find the perfect guild for yourself?");
+ next();
+ mes("[Clan Helper]");
+ mes("You can join or leave clan freely! Just join!");
+ next();
+ mes("[Clan Helper]");
+ mes("Now, come on in and meet the masters of the Kingdom's best Clans!");
+ close();
+}
+
+//= Clan Leaders
+//================= Crossbow Clan =========================================
+prt_in,39,114,4 script Sham Rumi#clan 4_F_SHAM,{
+ mes("[Sham Rumi]");
+ mes("Hi, there! I'm Sham, master of ^3131FF[Crossbow Clan]^000000");
+ mes("What can I do for you?");
+ next();
+ switch (select("Introducing Clan", "Join.", "Leave.")) {
+ case 1:
+ switch (select("Clans are", "About the Crossbow Clan", "Cancel.")) {
+ case 1:
+ mes("[Sham Rumi]");
+ mes("The Clan established by the Rune-Midgarts Kingdom to...");
+ mes("Laperm, why are our ^3131FFclans^000000 made?");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("Did you sleep in class? Gosh.");
+ mes("The Clans help lone adventurers connect with each other and share information.");
+ next();
+ mes("[Sham Rumi]");
+ mes("A-ha, got it! Thank you, Captain!");
+ mes("You heard that too, right?");
+ next();
+ mes("[Sham Rumi]");
+ mes("Run by the Kingdom itself, the Clans are not allowed to participate in the Siege, but the good news is that the members are given some ^3131FFstat bonuses^000000.");
+ next();
+ mes("[Sham Rumi]");
+ mes("In case you wonder if the ^3131FFCrossbow Clan^000000 only recruits Archers, no, it doesn't.");
+ mes("All the Clans accept all classes. You can choose the one that suits your needs best.");
+ next();
+ mes("[Sham Rumi]");
+ mes("That should cover everything there is to know.");
+ mes("Berman, let's go hang out in Glast Heim.");
+ next();
+ mes("[Debon Aire]");
+ mes("You...");
+ next();
+ mes("[Sham Rumi]");
+ mes("Ooh, scary! You're so protective of your brother.");
+ close();
+ case 2:
+ mes("[Sham Rumi]");
+ mes("The ^3131FFCrossbow Clan^000000 is ideal for Ranged classes.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Eh, let me check the Clan manual. Ah, and we offer stat bonuses to new members: ^FF0000<DEX+1, AGI+1, MHP+30, MSP+10>^000000.");
+ next();
+ mes("[Sham Rumi]");
+ mes("The Clans are not allowed to participate in the Siege; you should join a private guild instead for Siege.");
+ mes("The Clans are for adventurers that hate being tied down.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Do you have a question?");
+ close();
+ case 3:
+ close();
+ }
+ case 2:
+ mes("[Sham Rumi]");
+ mes("Oh, yeah? Good choice!");
+ mes("Let's check the Clan policy then take admission procedures.");
+ next();
+ mes("[Sham Rumi]");
+ mes("^3131FFClansmen^000000 cannot participate in the Siege.");
+ mes("As our new member, you'll receive the following stat bonuses: ^FF0000<DEX+1, AGI+1, MHP+30, MSP+10>^000000.");
+ mes("Do you agree?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Sham Rumi]");
+ mes("Join and leave the clans anytime, but if you don't show up at clan for ^FF0000more than 2 weeks^000000, you'll be ^FF0000expelled^000000.");
+ mes("Do you promise you'll maintain good standing?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Sham Rumi]");
+ mes("Good, write your name here.");
+ next();
+ input(.@name$);
+ mes("[Sham Rumi]");
+ mesf("^3131FF%s^000000..!", strcharinfo(PC_NAME));
+ mes("Ugh, your penmanship needs work. Let me process your application.");
+ next();
+ mes("[Sham Rumi]");
+ if (strcharinfo(PC_GUILD) != "") {
+ mes("Did you finish things up with your old guild?");
+ close();
+ }
+ if (getcharid(CHAR_ID_CLAN)) {
+ mes("Eh, you're already in a clan. Hey, this isn't funny.");
+ close();
+ }
+ clan_join(CROSSBOWCLAN);
+ mes("Welcome to the ^3131FFCrossbow Clan^000000!");
+ next();
+ mes("[Sham Rumi]");
+ mes("You can review Clan info with ^3131FFCtrl+G^000000.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Don't pick fights with other clansmen. Be social.");
+ mes("If you need help, you can always whisper me, okay? See you around!");
+ close();
+ case 3:
+ mes("[Sham Rumi]");
+ mes("Why, did you find a better clan?");
+ mes("I'm disappointed, but it's your call. Let me process your withdrawal.");
+ next();
+ if (select("Continue.", "Cancel.") == 2)
+ close();
+ mes("[Sham Rumi]");
+ if (!getcharid(CHAR_ID_CLAN)) {
+ mes("I can't let you leave--you're not even in my clan!");
+ close();
+ } else if (getcharid(CHAR_ID_CLAN) != CROSSBOWCLAN) {
+ mes("Sorry, but I don't meddle with other clans' business.");
+ close();
+ }
+ clan_leave();
+ mes("It's done.");
+ mes("If you ever miss us, don't hesitate to come back, all right?");
+ close();
+ }
+
+L_Nope:
+ mes("[Sham Rumi]");
+ mes("Ah, do you need time to think about this? No problem.");
+ close();
+
+OnInit:
+ clan_master(CROSSBOWCLAN);
+ end;
+}
+
+//================= Goldenmace Clan =======================================
+prt_in,37,114,4 script Berman Aire 4_M_BIRMAN,{
+ mes("[Berman Aire]");
+ mes("Nice to meet you. I'm Berman Aire, master of ^3131FF[Goldenmace Clan]^000000.");
+ mes("I'm also the older brother of Debon Aire here. Debon looks tough, but he's a sweetheart.");
+ next();
+ switch (select("Introducing Clan", "Join.", "Leave.")) {
+ case 1:
+ switch (select("Clans are", "About the Crossbow Clan", "Cancel.")) {
+ case 1:
+ mes("[Berman Aire]");
+ mes("The ^3131FFClans^000000 are established by the Kingdom to help adventurers connect and share information.");
+ next();
+ mes("[Berman Aire]");
+ mes("Because the Kingdom runs the clan, no Sieges, but at least the members are given ^3131FFstat bonuses^000000.");
+ mes("The stat bonuses are small, but can be very useful for beginning adventurers.");
+ next();
+ mes("[Berman Aire]");
+ mes("We're named the ^3131FFGolden Mace Clan^000000, but we don't discriminate against applicants based on their classes.");
+ mes("The name is just to help you easily choose your clan.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Berman, enough with the explanation. Let's go hang out in Glast Heim.");
+ next();
+ mes("[Debon Aire]");
+ mes("... Hey.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Ooh, you're scaring me.");
+ mes("Berman, call me when you can!~");
+ next();
+ mes("[Berman Aire]");
+ mes("Hah hah, I apologize for their bickering.");
+ next();
+ mes("[Berman Aire]");
+ mes("Do you have a question?");
+ mes("If you're tired of traveling alone, join us! You can join and leave the Clans anytime you want.");
+ close();
+ case 2:
+ mes("[Berman Aire]");
+ mes("The ^3131FFGolden Mace Clan^000000 mainly supports supportive classes.");
+ mes("We offer ^FF0000<INT+1, LUK+1, MHP+30, MSP+10>^000000 to new members.");
+ next();
+ mes("[Berman Aire]");
+ mes("As I told you earlier, Clans cannot join the Siege because they already belong to the Kingdom.");
+ mes("If you want to be in the Siege, then I recommend you join a regular guild.");
+ next();
+ mes("[Berman Aire]");
+ mes("Do you understand about the Clans now?");
+ close();
+ case 3:
+ close();
+ }
+ case 2:
+ mes("[Berman Aire]");
+ mes("Great!");
+ mes("Let's check the Clan policy then take admission procedures.");
+ next();
+ mes("[Berman Aire]");
+ mes("^3131FFClansmen^000000 cannot participate in the Siege.");
+ mes("As our new member, you'll receive the following stat bonuses: ^FF0000<INT+1, LUK+1, MHP+30, MSP+10>^000000.");
+ mes("Do you agree?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Berman Aire]");
+ mes("Join and leave the clans anytime, but if you don't show up at clan for ^FF0000more than 2 weeks^000000, you'll be ^FF0000expelled^000000.");
+ mes("Do you agree to maintain good standing in Clan?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Berman Aire]");
+ mes("Now, please write your name here.");
+ next();
+ input(.@name$);
+ mes("[Berman Aire]");
+ mesf("^3131FF%s^000000! What a good name!", strcharinfo(PC_NAME));
+ mes("Okay, then...");
+ next();
+ mes("[Berman Aire]");
+ if (strcharinfo(PC_GUILD) != "") {
+ mes("Oh, no.");
+ mes("In order to join, you first have to leave the current guild.");
+ close();
+ }
+ if (getcharid(CHAR_ID_CLAN)) {
+ mes("You're already in a clan.");
+ mes("You're just confused, right?");
+ close();
+ }
+ clan_join(GOLDENMACECLAN);
+ mes("Welcome to the ^3131FFGolden Mace Clan^000000!");
+ next();
+ mes("[Berman Aire]");
+ mes("You can review Clan info with ^3131FFCtrl+G^000000.");
+ next();
+ mes("[Berman Aire]");
+ mes("Please remember the few precautions I gave you, and enjoy your Clan activities!");
+ close();
+ case 3:
+ mes("[Berman Aire]");
+ mes("With meeting, there is parting.");
+ mes("I hope you enjoyed your time in ^3131FFGolden Mace Clan^000000.");
+ mes("Now, should I process your withdrawal?");
+ next();
+ if (select("Continue.", "Cancel.") == 2)
+ close();
+ mes("[Berman Aire]");
+ if (!getcharid(CHAR_ID_CLAN)) {
+ mes("You can't leave the clan without joining it first.");
+ close();
+ } else if (getcharid(CHAR_ID_CLAN) != GOLDENMACECLAN) {
+ mes("I'm sorry, but I can't remove you from another clan..");
+ close();
+ }
+ clan_leave();
+ mes("It's processed.");
+ mes("Come back anytime to ^3131FFGolden Mace Clan^000000. I'll be here.");
+ close();
+ }
+
+L_Nope:
+ mes("[Berman Aire]");
+ mes("I suggest you to think it over.");
+ close();
+
+OnInit:
+ clan_master(GOLDENMACECLAN);
+ end;
+}
+
+//================= Arc Wand Clan =========================================
+prt_in,35,114,4 script Debon Aire 4_M_DEBON,{
+ mes("[Debon Aire]");
+ mes("I'm Debon, master of ^3131FF[Arc Wand Clan]^000000.");
+ next();
+ switch (select("Introducing Clan", "Join.", "Leave.")) {
+ case 1:
+ switch (select("Clans are::About the Crossbow Clan:Cancel.")) {
+ case 1:
+ mes("[Debon Aire]");
+ mes("The ^3131FFClans^000000 are ran by the Kingdom, not privately like others.");
+ mes("And I manage one of them.");
+ next();
+ mes("[Debon Aire]");
+ mes("...");
+ mes("What's with that look? You got a problem?");
+ next();
+ mes("[Berman Aire]");
+ mes("Brother, you're scaring the potential member, be gentle.");
+ next();
+ mes("[Debon Aire]");
+ mes("...");
+ next();
+ mes("[Debon Aire]");
+ mes("Join if seeking a place to fit in. We give ^3131FFfree bonus stat^000000. But no Siege.");
+ next();
+ mes("[Debon Aire]");
+ mes("Most members are offensive mage classes as the name ^3131FFArc Wand Clan^000000 suggests, but that's no requirement.");
+ next();
+ mes("[Debon Aire]");
+ mes("...Hey, Sham Rumi.");
+ mes("Stop hitting on my brother, and go work.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Whatever!");
+ next();
+ mes("[Debon Aire]");
+ mes("...Hmpf!");
+ mes("Listen, Crossbow Clan's master is an evil.");
+ next();
+ mes("[Sham Rumi]");
+ mes("Get over me, Decon! Don't spread rumors!");
+ next();
+ mes("[Berman Aire]");
+ mes("Haha. stop it. You two are making a scene.");
+ mes("Come on, back to work, guys.");
+ close();
+ case 2:
+ mes("[Debon Aire]");
+ mes("The ^3131FFArc Wand Clan^000000 mainly supports offensive mage classes.");
+ mes("We offer ^FF0000<INT+1, DEX+1, MHP+30, MSP+10>^000000 to new members. Don't ask for more; it's the Kingdom's rule.");
+ next();
+ mes("[Debon Aire]");
+ mes("^3131FFClansmen^000000 can't participate in the Siege.");
+ mes("If you like the Siege, then go join a regular guild.");
+ next();
+ mes("[Debon Aire]");
+ mes("That is all. No questions.");
+ close();
+ case 3:
+ close();
+ }
+ case 2:
+ mes("[Debon Aire]");
+ mes("...");
+ mes("Let's check the Clan policy then take admission procedures.");
+ next();
+ mes("[Debon Aire]");
+ mes("^3131FFClansmen^000000 cannot participate in the Siege.");
+ mes("New members are given these stat bonuses: ^FF0000<INT+1, DEX+1, MHP+30, MSP+10>^000000.");
+ mes("You with me so far?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Debon Aire]");
+ mes("Join and leave the clans anytime, but if you don't show up at clan for ^FF0000more than 2 weeks^000000, you'll be ^FF0000expelled^000000.");
+ mes("Do you agree?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Debon Aire]");
+ mes("Sign your name here.");
+ next();
+ input(.@name$);
+ mes("[Debon Aire]");
+ mesf("^3131FF%s^000000.....", strcharinfo(PC_NAME));
+ mes("Good, let me invite you in.");
+ next();
+ mes("[Debon Aire]");
+ if (strcharinfo(PC_GUILD) != "") {
+ mes("Leave your guild first to join mine, duh.");
+ close();
+ }
+ if (getcharid(CHAR_ID_CLAN)) {
+ mes("You're already in a clan. You joking?!");
+ mes("Oh, I can be funny, too--FIRE PILLAR!");
+ close();
+ }
+ clan_join(ARCWANDCLAN);
+ mes("You have joined the ^3131FFArc Wand Clan^000000.");
+ next();
+ mes("[Debon Aire]");
+ mes("You can review Clan info with ^3131FFCtrl+G^000000.");
+ mes("So don't bother me later.");
+ next();
+ mes("[Debon Aire]");
+ mes("That's all. Visit often or be expelled. Dismissed.");
+ close();
+ case 3:
+ mes("[Debon Aire]");
+ mes("Want to leave, huh?");
+ mes("I understand it it's about Siege. If not, why are..Never mind..");
+ mes("I'll process your withdrawal.");
+ next();
+ if (select("Continue.","Cancel.") == 2)
+ close();
+ mes("[Debon Aire]");
+ if (!getcharid(CHAR_ID_CLAN)) {
+ mes("Naughty children deserve a good Jupitel Thunder.");
+ close();
+ } else if (getcharid(CHAR_ID_CLAN) != ARCWANDCLAN) {
+ mes("You're barking up the wrong tree. Go to your clan master.");
+ close();
+ }
+ clan_leave();
+ mes("You are withdrawn from the clan.");
+ mes("Now leave. I don't feel like talking anymore.");
+ close();
+ }
+
+L_Nope:
+ mes("[Debon Aire]");
+ mes("Gosh, listen to the policy again.");
+ close();
+
+OnInit:
+ clan_master(ARCWANDCLAN);
+ end;
+}
+
+//================= Sword Clan ============================================
+prt_in,33,114,4 script Laperm Oranpere 4_F_LAPERM,{
+ mes("[Laperm Oranpere]");
+ mes("Hi! I'm Laperm, master of ^3131FF[Sword Clan]^000000, one the Rune-Midgarts Kingdom.");
+ next();
+ switch (select("Introducing Clan", "Join.", "Leave.")) {
+ case 1:
+ switch (select("Clans are", "About the Crossbow Clan", "Cancel.")) {
+ case 1:
+ mes("[Laperm Oranpere]");
+ mes("The ^3131FFClans^000000 are a type of guild ran by the Kingdom.");
+ mes("They don't participate in the Siege, so members are free to join/leave anytime.");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("I wish we could join the Siege. I'd love flying over on my dragon and burning everyone in my way!");
+ mes("Oops, too thrilled!");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("Join us, if no clan suits your taste.");
+ mes("New members are given ^3131FFfree stat bonus^000000.");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("Melee stats are offered as the name ^3131FFSword Clan^000000 suggests, but not all members are Melee classes.");
+ mes("Don't feel pressured, just count on me!");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("Difference in variety creates the fun");
+ mes("These odd bunches never bore me in the party.");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("And who knows you'll meet your soul mate in the clan? Hahah!");
+ close();
+ case 2:
+ mes("[Laperm Oranpere]");
+ mes("The ^3131FFSword Clan^000000 mainly supports Melee adventurers.");
+ mes("Join for free ^FF0000<STR+1, VIT+1, MHP+30, MSP+10>^000000!");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("Remember, no Siege participation.");
+ mes("You should contact other guilds for Siege.");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("A question?");
+ mes("Excited to join me? Hahah!");
+ close();
+ case 3:
+ close();
+ }
+ case 2:
+ mes("[Laperm Oranpere]");
+ mes("Oh, you'll join? Good choice!");
+ mes("Let's check the Clan policy then take admission procedures.");
+ next();
+ mes("[Laperm Oranpere]");
+ mes("^3131FFClansmen^000000 cannot participate in the Siege.");
+ mes("New members are given these stat bonuses: ^FF0000<STR+1, VIT+1, MHP+30, MSP+10>^000000.");
+ mes("You with me so far?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Laperm Oranpere]");
+ mes("Join and leave the clans anytime, but if you don't show up at clan for ^FF0000longer than 2 weeks^000000, you'll be ^FF0000expelled^000000.");
+ mes("Clan masters exsit for reason, like I.");
+ mes("Understood?");
+ next();
+ if (select("Yes.", "No.") == 2)
+ callsub(L_Nope);
+ mes("[Laperm Oranpere]");
+ mes("Great, sign name here on the register.");
+ next();
+ input(.@name$);
+ mes("[Laperm Oranpere]");
+ mesf("So, you're ^3131FF%s^000000! Nice name!", strcharinfo(PC_NAME));
+ mes("Let me register you.");
+ next();
+ mes("[Laperm Oranpere]");
+ if (strcharinfo(PC_GUILD) != "") {
+ mes("Come back to join after you leave the current guild.");
+ close();
+ }
+ if (getcharid(CHAR_ID_CLAN)) {
+ mes("[Laperm Oranpere]");
+ mes("Eh?");
+ mes("Oh, you're in Clan.");
+ mes("Don't mess with me, it's not cool!");
+ close();
+ }
+ clan_join(SWORDCLAN);
+ mes("Welcome to ^3131FFSword Clan^000000!");
+ mes("You can review Clan info with ^3131FFCtrl+G^000000.");
+ mes("At your service!");
+ close();
+ case 3:
+ mes("[Laperm Oranpere]");
+ mes("You want to leave?");
+ mes("No problem. I hope you'll find more suitable clan.");
+ mes("Ready for withdrawal?");
+ next();
+ if (select("Continue.", "Cancel.") == 2)
+ close();
+ mes("[Laperm Oranpere]");
+ if (!getcharid(CHAR_ID_CLAN)) {
+ mes("Wait, you're not with us! Grr, don't make me breathe fire at you!");
+ close();
+ } else if (getcharid(CHAR_ID_CLAN) != SWORDCLAN) {
+ mes("Hey, talk to your guild master if you want to leave.");
+ close();
+ }
+ clan_leave();
+ mes("Okay, it's done. But let's not be strangers, okay?");
+ mes("It was nice having you!");
+ close();
+ }
+
+L_Nope:
+ mes("[Laperm Oranpere]");
+ mes("Uh, oh. Let's go back to beginning.");
+ close();
+
+OnInit:
+ clan_master(SWORDCLAN);
+ end;
+}
diff --git a/npc/re/scripts.conf b/npc/re/scripts.conf
index e64052f33..c26e907ad 100644
--- a/npc/re/scripts.conf
+++ b/npc/re/scripts.conf
@@ -134,6 +134,8 @@
"npc/re/other/resetskill.txt",
"npc/re/other/stone_change.txt",
"npc/re/other/turbo_track.txt",
+// - Clan System
+"npc/re/other/clans.txt",
//================= Quests ================================================
// - Eden Group -------------------------------------------------
diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql
index a88d19775..3a045faf0 100644
--- a/sql-files/item_db.sql
+++ b/sql-files/item_db.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2017 Hercules Dev Team
+-- Copyright (C) 2013-2018 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/item_db2.sql b/sql-files/item_db2.sql
index 4c7640e8f..1957b0b8c 100644
--- a/sql-files/item_db2.sql
+++ b/sql-files/item_db2.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2017 Hercules Dev Team
+-- Copyright (C) 2013-2018 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index 8c65f3a5d..4c762b8e8 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2017 Hercules Dev Team
+-- Copyright (C) 2013-2018 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/logs.sql b/sql-files/logs.sql
index c75fc37d2..6edf385a2 100644
--- a/sql-files/logs.sql
+++ b/sql-files/logs.sql
@@ -77,7 +77,7 @@ CREATE TABLE IF NOT EXISTS `branchlog` (
CREATE TABLE IF NOT EXISTS `chatlog` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`time` DATETIME NULL,
- `type` ENUM('O','W','P','G','M') NOT NULL DEFAULT 'O',
+ `type` ENUM('O','W','P','G','M','C') NOT NULL DEFAULT 'O',
`type_id` INT(11) NOT NULL DEFAULT '0',
`src_charid` INT(11) NOT NULL DEFAULT '0',
`src_accountid` INT(11) NOT NULL DEFAULT '0',
diff --git a/sql-files/main.sql b/sql-files/main.sql
index feda8a4cd..5546c0271 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -183,6 +183,7 @@ CREATE TABLE IF NOT EXISTS `char` (
`manner` SMALLINT(6) NOT NULL DEFAULT '0',
`party_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`guild_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
+ `clan_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`pet_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`homun_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`elemental_id` INT(11) UNSIGNED NOT NULL DEFAULT '0',
@@ -196,6 +197,7 @@ CREATE TABLE IF NOT EXISTS `char` (
`head_mid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
`head_bottom` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
`robe` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
+ `last_login` BIGINT(20) NULL DEFAULT '0',
`last_map` VARCHAR(11) NOT NULL DEFAULT '',
`last_x` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '53',
`last_y` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '111',
@@ -884,7 +886,10 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1477434595); -- 2016-10-2
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1488454834); -- 2017-03-02--11-40.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1488744559); -- 2017-03-05--08-09.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1489588190); -- 2017-03-15--14-29.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1496588640); -- 2017-06-04--15-04.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1496588700); -- 2017-06-04--15-05.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1509835214); -- 2017-11-04--10-39.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1519671456); -- 2018-02-26--15-57.sql
--
-- Table structure for table `storage`
--
@@ -955,12 +960,13 @@ CREATE TABLE IF NOT EXISTS `rodex_mail` (
`sender_id` INT(11) NOT NULL,
`receiver_name` VARCHAR(30) NOT NULL,
`receiver_id` INT(11) NOT NULL,
- `receiver_accountid` INT(11) NOT NULL,
+ `receiver_accountid` INT(11) NOT NULL,
`title` VARCHAR(50) NOT NULL,
`body` VARCHAR(510) NOT NULL,
`zeny` BIGINT(20) NOT NULL,
`type` TINYINT(8) UNSIGNED NOT NULL,
`is_read` TINYINT(8) NOT NULL,
+ `sender_read` TINYINT(2) NOT NULL,
`send_date` INT(11) NOT NULL,
`expire_date` INT(11) NOT NULL,
`weight` INT(11) NOT NULL,
diff --git a/sql-files/mob_db.sql b/sql-files/mob_db.sql
index 824aa6e55..d62f804a9 100644
--- a/sql-files/mob_db.sql
+++ b/sql-files/mob_db.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2017 Hercules Dev Team
+-- Copyright (C) 2013-2018 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/mob_db2.sql b/sql-files/mob_db2.sql
index 55823993e..ac3d63985 100644
--- a/sql-files/mob_db2.sql
+++ b/sql-files/mob_db2.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2017 Hercules Dev Team
+-- Copyright (C) 2013-2018 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/mob_db_re.sql b/sql-files/mob_db_re.sql
index f871500be..35a2178de 100644
--- a/sql-files/mob_db_re.sql
+++ b/sql-files/mob_db_re.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2017 Hercules Dev Team
+-- Copyright (C) 2013-2018 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/upgrades/2017-06-04--15-04.sql b/sql-files/upgrades/2017-06-04--15-04.sql
new file mode 100644
index 000000000..0805d054b
--- /dev/null
+++ b/sql-files/upgrades/2017-06-04--15-04.sql
@@ -0,0 +1,24 @@
+#1496588640
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2017 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `char` ADD COLUMN `clan_id` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `guild_id`;
+ALTER TABLE `char` ADD COLUMN `last_login` BIGINT(20) NULL DEFAULT '0' AFTER `robe`;
+
+INSERT INTO `sql_updates` (`timestamp`, `ignored`) VALUES (1496588640 , 'No');
diff --git a/sql-files/upgrades/2017-06-04--15-05.sql b/sql-files/upgrades/2017-06-04--15-05.sql
new file mode 100644
index 000000000..550197a15
--- /dev/null
+++ b/sql-files/upgrades/2017-06-04--15-05.sql
@@ -0,0 +1,23 @@
+#1496588700
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2017 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `chatlog` MODIFY COLUMN `type` enum('O','W','P','G','M','C') NOT NULL DEFAULT 'O' AFTER `time`;
+
+INSERT INTO `sql_updates` (`timestamp`, `ignored`) VALUES (1496588700 , 'No');
diff --git a/sql-files/upgrades/2018-02-26--15-57.sql b/sql-files/upgrades/2018-02-26--15-57.sql
new file mode 100644
index 000000000..a2090bb3c
--- /dev/null
+++ b/sql-files/upgrades/2018-02-26--15-57.sql
@@ -0,0 +1,6 @@
+#1519671456
+
+ALTER TABLE `rodex_mail`
+ ADD COLUMN `sender_read` TINYINT(2) NOT NULL DEFAULT '0' AFTER `is_read`;
+
+INSERT INTO `sql_updates` (`timestamp`, `ignored`) VALUES (1519671456 , 'No');
diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt
index 11cb36a79..a2d0c5171 100644
--- a/sql-files/upgrades/index.txt
+++ b/sql-files/upgrades/index.txt
@@ -40,4 +40,7 @@
2017-03-02--11-40.sql
2017-03-05--08-09.sql
2017-03-15--14-29.sql
+2017-06-04--15-04.sql
+2017-06-04--15-05.sql
2017-11-04--10-39.sql
+2018-02-26--15-57.sql
diff --git a/src/char/HPMchar.c b/src/char/HPMchar.c
index 3a74f443d..43a94604d 100644
--- a/src/char/HPMchar.c
+++ b/src/char/HPMchar.c
@@ -28,6 +28,7 @@
#include "char/geoip.h"
#include "char/inter.h"
#include "char/int_auction.h"
+#include "char/int_clan.h"
#include "char/int_elemental.h"
#include "char/int_guild.h"
#include "char/int_homun.h"
diff --git a/src/char/Makefile.in b/src/char/Makefile.in
index 1a7d067a4..fed7ec030 100644
--- a/src/char/Makefile.in
+++ b/src/char/Makefile.in
@@ -40,11 +40,11 @@ MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
-CHAR_C = char.c HPMchar.c loginif.c mapif.c geoip.c inter.c int_auction.c int_elemental.c int_guild.c \
+CHAR_C = char.c HPMchar.c loginif.c mapif.c geoip.c inter.c int_auction.c int_clan.c int_elemental.c int_guild.c \
int_homun.c int_mail.c int_mercenary.c int_party.c int_pet.c \
int_quest.c int_rodex.c int_storage.c pincode.c
CHAR_OBJ = $(addprefix obj_sql/, $(patsubst %.c,%.o,$(CHAR_C)))
-CHAR_H = char.h HPMchar.h loginif.h mapif.h geoip.h inter.h int_auction.h int_elemental.h int_guild.h \
+CHAR_H = char.h HPMchar.h loginif.h mapif.h geoip.h inter.h int_auction.h int_clan.h int_elemental.h int_guild.h \
int_homun.h int_mail.h int_mercenary.h int_party.h int_pet.h \
int_quest.h int_rodex.h int_storage.h pincode.h
CHAR_PH =
diff --git a/src/char/char.c b/src/char/char.c
index c3fcd9e0a..0069e7f1d 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -26,6 +26,7 @@
#include "char/HPMchar.h"
#include "char/geoip.h"
#include "char/int_auction.h"
+#include "char/int_clan.h"
#include "char/int_elemental.h"
#include "char/int_guild.h"
#include "char/int_homun.h"
@@ -465,7 +466,8 @@ int char_mmo_char_tosql(int char_id, struct mmo_charstatus* p)
(p->look.head_mid != cp->look.head_mid) || (p->look.head_bottom != cp->look.head_bottom) || (p->delete_date != cp->delete_date) ||
(p->rename != cp->rename) || (p->slotchange != cp->slotchange) || (p->look.robe != cp->look.robe) ||
(p->show_equip != cp->show_equip) || (p->allow_party != cp->allow_party) || (p->font != cp->font) ||
- (p->uniqueitem_counter != cp->uniqueitem_counter) || (p->hotkey_rowshift != cp->hotkey_rowshift)
+ (p->uniqueitem_counter != cp->uniqueitem_counter) || (p->hotkey_rowshift != cp->hotkey_rowshift) ||
+ (p->clan_id != cp->clan_id) || (p->last_login != cp->last_login)
) {
//Save status
unsigned int opt = 0;
@@ -483,7 +485,7 @@ int char_mmo_char_tosql(int char_id, struct mmo_charstatus* p)
"`weapon`='%d',`shield`='%d',`head_top`='%d',`head_mid`='%d',`head_bottom`='%d',"
"`last_map`='%s',`last_x`='%d',`last_y`='%d',`save_map`='%s',`save_x`='%d',`save_y`='%d', `rename`='%d',"
"`delete_date`='%lu',`robe`='%d',`slotchange`='%d', `char_opt`='%u', `font`='%u', `uniqueitem_counter` ='%u',"
- "`hotkey_rowshift`='%d'"
+ "`hotkey_rowshift`='%d',`clan_id`='%d',`last_login`='%"PRId64"'"
" WHERE `account_id`='%d' AND `char_id` = '%d'",
char_db, p->base_level, p->job_level,
p->base_exp, p->job_exp, p->zeny,
@@ -495,7 +497,7 @@ int char_mmo_char_tosql(int char_id, struct mmo_charstatus* p)
mapindex_id2name(p->save_point.map), p->save_point.x, p->save_point.y, p->rename,
(unsigned long)p->delete_date, // FIXME: platform-dependent size
p->look.robe,p->slotchange,opt,p->font,p->uniqueitem_counter,
- p->hotkey_rowshift,
+ p->hotkey_rowshift,p->clan_id,p->last_login,
p->account_id, p->char_id) )
{
Sql_ShowDebug(inter->sql_handle);
@@ -1173,7 +1175,7 @@ int char_mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_every
"`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`homun_id`,`elemental_id`,`hair`,"
"`hair_color`,`clothes_color`,`body`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`last_x`,`last_y`,"
"`save_map`,`save_x`,`save_y`,`partner_id`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,`robe`,`slotchange`,"
- "`char_opt`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`"
+ "`char_opt`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`,`clan_id`,`last_login`"
" FROM `%s` WHERE `char_id`=? LIMIT 1", char_db)
|| SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT, &char_id, sizeof char_id)
|| SQL_ERROR == SQL->StmtExecute(stmt)
@@ -1236,6 +1238,8 @@ int char_mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_every
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 56, SQLDT_UINT32, &p->uniqueitem_counter, sizeof p->uniqueitem_counter, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 57, SQLDT_ENUM, &sex, sizeof sex, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 58, SQLDT_UCHAR, &p->hotkey_rowshift, sizeof p->hotkey_rowshift, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 59, SQLDT_INT, &p->clan_id, sizeof p->clan_id, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 60, SQLDT_INT64, &p->last_login, sizeof p->last_login, NULL, NULL)
) {
SqlStmt_ShowDebug(stmt);
SQL->StmtFree(stmt);
@@ -1612,7 +1616,7 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int
case JOB_NOVICE:
break;
default:
- return -2; // Char Creation Denied
+ return -2; // Char Creation Denied
}
//check other inputs
@@ -3324,7 +3328,12 @@ void char_char_name_ack(int fd, int char_id)
WFIFOHEAD(fd,30);
WFIFOW(fd,0) = 0x2b09;
WFIFOL(fd,2) = char_id;
+#if !defined(PACKETVER_ZERO) && (PACKETVER >= 20180307 || (defined(PACKETVER_RE) && PACKETVER >= 20180221))
+ if (chr->loadName(char_id, WFIFOP(fd,6)) == 0)
+ WFIFOL(fd, 6) = 0;
+#else
chr->loadName(char_id, WFIFOP(fd,6));
+#endif
WFIFOSET(fd,30);
}
@@ -6424,6 +6433,7 @@ void char_load_defaults(void)
loginif_defaults();
mapif_defaults();
inter_auction_defaults();
+ inter_clan_defaults();
inter_elemental_defaults();
inter_guild_defaults();
inter_homunculus_defaults();
diff --git a/src/char/int_clan.c b/src/char/int_clan.c
new file mode 100644
index 000000000..e68f6a655
--- /dev/null
+++ b/src/char/int_clan.c
@@ -0,0 +1,181 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2017 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#define HERCULES_CORE
+
+#include "config/core.h" // DBPATH
+#include "int_clan.h"
+
+#include "char/char.h"
+#include "char/inter.h"
+#include "char/mapif.h"
+#include "common/cbasetypes.h"
+#include "common/memmgr.h"
+#include "common/mmo.h"
+#include "common/nullpo.h"
+#include "common/showmsg.h"
+#include "common/socket.h"
+#include "common/sql.h"
+#include "common/strlib.h"
+#include "common/timer.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct inter_clan_interface inter_clan_s;
+struct inter_clan_interface *inter_clan;
+
+/**
+ * Kick offline members of a clan
+ *
+ * Perform the update on the DB to reset clan id to 0
+ * of the members that are inactive for too long
+ *
+ * @param clan_id Id of the clan
+ * @param kick_interval Time needed to consider a player inactive and kick it
+ * @return 0 on failure, 1 on success
+ */
+int inter_clan_kick_inactive_members(int clan_id, int kick_interval)
+{
+ if (clan_id <= 0) {
+ ShowError("inter_clan_kick_inactive_members: Invalid clan id received '%d'\n", clan_id);
+ Assert_report(clan_id > 0);
+ return 0;
+ } else if (kick_interval <= 0) {
+ ShowError("inter_clan_kick_inactive_members: Invalid kick_interval received '%d'", kick_interval);
+ Assert_report(kick_interval > 0);
+ return 0;
+ }
+
+ // Kick Inactive members
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET "
+ "`clan_id` = 0 WHERE `clan_id` = '%d' AND `online` = 0 AND `last_login` < %"PRId64,
+ char_db, clan_id, (int64)(time(NULL) - kick_interval)))
+ {
+ Sql_ShowDebug(inter->sql_handle);
+ return 0;
+ }
+
+ return 1;
+}
+
+/**
+ * Count members of a clan
+ *
+ * @param clan_id Id of the clan
+ * @param kick_interval Time needed to consider a player inactive and ignore it on the count
+ */
+int inter_clan_count_members(int clan_id, int kick_interval)
+{
+ struct SqlStmt *stmt;
+ int count = 0;
+
+ if (clan_id <= 0) {
+ ShowError("inter_clan_count_members: Invalid clan id received '%d'\n", clan_id);
+ Assert_report(clan_id > 0);
+ return 0;
+ } else if (kick_interval <= 0) {
+ ShowError("inter_clan_count_member: Invalid kick_interval received '%d'", kick_interval);
+ Assert_report(kick_interval > 0);
+ return 0;
+ }
+
+ stmt = SQL->StmtMalloc(inter->sql_handle);
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return 0;
+ }
+
+ // Count members
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, "SELECT COUNT(*) FROM `%s` WHERE `clan_id` = ? AND `last_login` >= %"PRId64, char_db, (int64)(time(NULL) - kick_interval))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT, &clan_id, sizeof(clan_id))
+ || SQL_ERROR == SQL->StmtExecute(stmt)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 0, SQLDT_INT, &count, sizeof(count), NULL, NULL)
+ ) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return 0;
+ }
+
+ if (SQL->StmtNumRows(stmt) > 0 && SQL_SUCCESS != SQL->StmtNextRow(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return 0;
+ }
+
+ SQL->StmtFree(stmt);
+ return count;
+}
+
+int mapif_parse_ClanMemberCount(int fd, int clan_id, int kick_interval)
+{
+
+ WFIFOHEAD(fd, 10);
+ WFIFOW(fd, 0) = 0x3858;
+ WFIFOL(fd, 2) = clan_id;
+ WFIFOL(fd, 6) = inter_clan->count_members(clan_id, kick_interval);
+ WFIFOSET(fd, 10);
+ return 0;
+}
+
+int mapif_parse_ClanMemberKick(int fd, int clan_id, int kick_interval)
+{
+ int count = 0;
+
+ if (inter_clan->kick_inactive_members(clan_id, kick_interval) == 1)
+ count = inter_clan->count_members(clan_id, kick_interval);
+
+ WFIFOHEAD(fd, 10);
+ WFIFOW(fd, 0) = 0x3858;
+ WFIFOL(fd, 2) = clan_id;
+ WFIFOL(fd, 6) = count;
+ WFIFOSET(fd, 10);
+ return 0;
+}
+
+// Communication from the map server
+// - Can analyzed only one by one packet
+// Data packet length that you set to inter.c
+//- Shouldn't do checking and packet length, RFIFOSKIP is done by the caller
+// Must Return
+// 1 : ok
+// 0 : error
+int inter_clan_parse_frommap(int fd)
+{
+ RFIFOHEAD(fd);
+
+ switch(RFIFOW(fd, 0)) {
+ case 0x3044: mapif->parse_ClanMemberCount(fd, RFIFOL(fd, 2), RFIFOL(fd, 6)); break;
+ case 0x3045: mapif->parse_ClanMemberKick(fd, RFIFOL(fd, 2), RFIFOL(fd, 6)); break;
+
+ default:
+ return 0;
+ }
+
+ return 1;
+}
+
+void inter_clan_defaults(void)
+{
+ inter_clan = &inter_clan_s;
+
+ inter_clan->kick_inactive_members = inter_clan_kick_inactive_members;
+ inter_clan->count_members = inter_clan_count_members;
+ inter_clan->parse_frommap = inter_clan_parse_frommap;
+}
diff --git a/src/char/int_clan.h b/src/char/int_clan.h
new file mode 100644
index 000000000..e7b44ecd3
--- /dev/null
+++ b/src/char/int_clan.h
@@ -0,0 +1,39 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2017 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef CHAR_INT_CLAN_H
+#define CHAR_INT_CLAN_H
+
+#include "common/mmo.h"
+
+/**
+ * inter clan Interface
+ **/
+struct inter_clan_interface {
+ int (*kick_inactive_members) (int clan_id, int kick_interval);
+ int (*count_members) (int clan_id, int kick_interval);
+ int (*parse_frommap) (int fd);
+};
+
+#ifdef HERCULES_CORE
+void inter_clan_defaults(void);
+#endif // HERCULES_CORE
+
+HPShared struct inter_clan_interface *inter_clan;
+#endif /* CHAR_INT_CLAN_H */
diff --git a/src/char/int_rodex.c b/src/char/int_rodex.c
index f5d036991..2001ddc43 100644
--- a/src/char/int_rodex.c
+++ b/src/char/int_rodex.c
@@ -55,7 +55,7 @@ static int inter_rodex_fromsql(int char_id, int account_id, int8 opentype, int64
case RODEX_OPENTYPE_MAIL:
if (SQL_ERROR == SQL->StmtPrepare(stmt,
"SELECT `mail_id`, `sender_name`, `sender_id`, `receiver_name`, `receiver_id`, `receiver_accountid`,"
- "`title`, `body`, `zeny`, `type`, `is_read`, `send_date`, `expire_date`, `weight`"
+ "`title`, `body`, `zeny`, `type`, `is_read`, `sender_read`, `send_date`, `expire_date`, `weight`"
"FROM `%s` WHERE `expire_date` > '%d' AND `receiver_id` = '%d' AND `mail_id` > '%"PRId64"'"
"ORDER BY `mail_id` ASC", rodex_db, (int)time(NULL), char_id, mail_id)
) {
@@ -68,7 +68,7 @@ static int inter_rodex_fromsql(int char_id, int account_id, int8 opentype, int64
case RODEX_OPENTYPE_ACCOUNT:
if (SQL_ERROR == SQL->StmtPrepare(stmt,
"SELECT `mail_id`, `sender_name`, `sender_id`, `receiver_name`, `receiver_id`, `receiver_accountid`,"
- "`title`, `body`, `zeny`, `type`, `is_read`, `send_date`, `expire_date`, `weight`"
+ "`title`, `body`, `zeny`, `type`, `is_read`, `sender_read`, `send_date`, `expire_date`, `weight`"
"FROM `%s` WHERE "
"`expire_date` > '%d' AND `receiver_accountid` = '%d' AND `mail_id` > '%"PRId64"'"
"ORDER BY `mail_id` ASC", rodex_db, (int)time(NULL), account_id, mail_id)
@@ -82,8 +82,8 @@ static int inter_rodex_fromsql(int char_id, int account_id, int8 opentype, int64
case RODEX_OPENTYPE_RETURN:
if (SQL_ERROR == SQL->StmtPrepare(stmt,
"SELECT `mail_id`, `sender_name`, `sender_id`, `receiver_name`, `receiver_id`, `receiver_accountid`,"
- "`title`, `body`, `zeny`, `type`, `is_read`, `send_date`, `expire_date`, `weight`"
- "FROM `%s` WHERE (`sender_id` = '%d' AND `expire_date` <= '%d' AND `send_date` + '%d' > '%d' AND `mail_id` > '%"PRId64"')"
+ "`title`, `body`, `zeny`, `type`, `is_read`, `sender_read`, `send_date`, `expire_date`, `weight`"
+ "FROM `%s` WHERE (`is_read` = 0 AND `sender_id` = '%d' AND `expire_date` <= '%d' AND `send_date` + '%d' > '%d' AND `mail_id` > '%"PRId64"')"
"ORDER BY `mail_id` ASC", rodex_db, char_id, (int)time(NULL), 2 * RODEX_EXPIRE, (int)time(NULL), mail_id)
) {
SqlStmt_ShowDebug(stmt);
@@ -95,9 +95,11 @@ static int inter_rodex_fromsql(int char_id, int account_id, int8 opentype, int64
case RODEX_OPENTYPE_UNSET:
if (SQL_ERROR == SQL->StmtPrepare(stmt,
"SELECT `mail_id`, `sender_name`, `sender_id`, `receiver_name`, `receiver_id`, `receiver_accountid`,"
- "`title`, `body`, `zeny`, `type`, `is_read`, `send_date`, `expire_date`, `weight`"
- "FROM `%s` WHERE `expire_date` > '%d' AND (`receiver_id` = '%d' or `receiver_accountid` = '%d') AND `mail_id` > '%"PRId64"'"
- "ORDER BY `mail_id` ASC", rodex_db, (int)time(NULL), char_id, account_id, mail_id)
+ "`title`, `body`, `zeny`, `type`, `is_read`, `sender_read`, `send_date`, `expire_date`, `weight`"
+ "FROM `%s` WHERE "
+ "((`expire_date` > '%d' AND (`receiver_id` = '%d' OR `receiver_accountid` = '%d'))"
+ "OR (`is_read` = 0 AND `sender_id` = '%d' AND `expire_date` <= '%d' AND `send_date` + '%d' > '%d'))"
+ "ORDER BY `mail_id` ASC", rodex_db, (int)time(NULL), char_id, account_id, char_id, (int)time(NULL), 2 * RODEX_EXPIRE, (int)time(NULL))
) {
SqlStmt_ShowDebug(stmt);
SQL->StmtFree(stmt);
@@ -118,9 +120,10 @@ static int inter_rodex_fromsql(int char_id, int account_id, int8 opentype, int64
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 8, SQLDT_INT64, &msg.zeny, sizeof msg.zeny, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 9, SQLDT_UINT8, &msg.type, sizeof msg.type, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 10, SQLDT_BOOL, &msg.is_read, sizeof msg.is_read, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 11, SQLDT_INT, &msg.send_date, sizeof msg.send_date, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 12, SQLDT_INT, &msg.expire_date, sizeof msg.expire_date, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 13, SQLDT_INT, &msg.weight, sizeof msg.weight, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 11, SQLDT_BOOL, &msg.sender_read, sizeof msg.sender_read, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 12, SQLDT_INT, &msg.send_date, sizeof msg.send_date, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 13, SQLDT_INT, &msg.expire_date, sizeof msg.expire_date, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 14, SQLDT_INT, &msg.weight, sizeof msg.weight, NULL, NULL)
) {
SqlStmt_ShowDebug(stmt);
SQL->StmtFree(stmt);
@@ -201,10 +204,12 @@ static int inter_rodex_fromsql(int char_id, int account_id, int8 opentype, int64
#if PACKETVER >= 20170419
if (opentype == RODEX_OPENTYPE_UNSET) {
- if (msg.receiver_id != 0)
- msg.opentype = RODEX_OPENTYPE_MAIL;
- else
+ if (msg.receiver_id == 0)
msg.opentype = RODEX_OPENTYPE_ACCOUNT;
+ else if (msg.expire_date < time(NULL))
+ msg.opentype = RODEX_OPENTYPE_RETURN;
+ else
+ msg.opentype = RODEX_OPENTYPE_MAIL;
} else {
msg.opentype = opentype;
}
@@ -243,8 +248,8 @@ static bool inter_rodex_hasnew(int char_id, int account_id)
if (SQL_ERROR == SQL->Query(inter->sql_handle,
"SELECT count(*) FROM `%s` WHERE ("
"(`expire_date` > '%d' AND (`receiver_id` = '%d' OR `receiver_accountid` = '%d')) OR"
- "(`sender_id` = '%d' AND `expire_date` <= '%d' AND `send_date` + '%d' > '%d')"
- ") AND (`is_read` = 0 OR (`type` > 0 AND `type` != 8))",
+ "(`sender_id` = '%d' AND `expire_date` <= '%d' AND `send_date` + '%d' > '%d' AND `is_read` = 0)" // is_read is required in this line because of the OR in next condition
+ ") AND ((`is_read` = 0 AND `sender_read` = 0) OR (`type` > 0 AND `type` != 8))",
rodex_db, (int)time(NULL), char_id, account_id,
char_id, (int)time(NULL), 2 * RODEX_EXPIRE, (int)time(NULL))
) {
@@ -309,10 +314,10 @@ int64 inter_rodex_savemessage(struct rodex_message* msg)
SQL->EscapeStringLen(inter->sql_handle, title, msg->title, strnlen(msg->title, RODEX_TITLE_LENGTH));
if (SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`sender_name`, `sender_id`, `receiver_name`, `receiver_id`, `receiver_accountid`, `title`, `body`,"
- "`zeny`, `type`, `is_read`, `send_date`, `expire_date`, `weight`) VALUES "
- "('%s', '%d', '%s', '%d', '%d', '%s', '%s', '%"PRId64"', '%d', '%d', '%d', '%d', '%d')",
+ "`zeny`, `type`, `is_read`, `sender_read`, `send_date`, `expire_date`, `weight`) VALUES "
+ "('%s', '%d', '%s', '%d', '%d', '%s', '%s', '%"PRId64"', '%d', '%d', '%d', '%d', '%d', '%d')",
rodex_db, sender_name, msg->sender_id, receiver_name, msg->receiver_id, msg->receiver_accountid,
- title, body, msg->zeny, msg->type, msg->is_read == true ? 1 : 0, msg->send_date, msg->expire_date, msg->weight)) {
+ title, body, msg->zeny, msg->type, msg->is_read == true ? 1 : 0, msg->sender_read == true ? 1 : 0, msg->send_date, msg->expire_date, msg->weight)) {
Sql_ShowDebug(inter->sql_handle);
return 0;
}
@@ -344,29 +349,31 @@ int64 inter_rodex_savemessage(struct rodex_message* msg)
/*==========================================
* Inbox Request
*------------------------------------------*/
-void mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int count, struct rodex_maillist *mails)
+void mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int count, int64 mail_id, struct rodex_maillist *mails)
{
- int per_packet = (UINT16_MAX - 15) / sizeof(struct rodex_message);
+ int per_packet = (UINT16_MAX - 24) / sizeof(struct rodex_message);
int sent = 0;
+ bool is_first = true;
nullpo_retv(mails);
Assert_retv(char_id > 0);
Assert_retv(count >= 0);
+ Assert_retv(mail_id >= 0);
do {
- int i = 15, j, size, limit;
+ int i = 24, j, size, limit;
+ int to_send = count - sent;
bool is_last = true;
- if (count <= per_packet) {
- size = count * sizeof(struct rodex_message) + 15;
- limit = count;
+ if (to_send <= per_packet) {
+ size = to_send * sizeof(struct rodex_message) + 24;
+ limit = to_send;
is_last = true;
} else {
- int to_send = count - sent;
limit = min(to_send, per_packet);
if (limit != to_send) {
is_last = false;
}
- size = limit * sizeof(struct rodex_message) + 15;
+ size = limit * sizeof(struct rodex_message) + 24;
}
WFIFOHEAD(fd, size);
@@ -376,11 +383,15 @@ void mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int co
WFIFOB(fd, 8) = opentype;
WFIFOB(fd, 9) = flag;
WFIFOB(fd, 10) = is_last;
- WFIFOL(fd, 11) = count;
+ WFIFOB(fd, 11) = is_first;
+ WFIFOL(fd, 12) = limit;
+ WFIFOQ(fd, 16) = mail_id;
for (j = 0; j < limit; ++j, ++sent, i += sizeof(struct rodex_message)) {
memcpy(WFIFOP(fd, i), &VECTOR_INDEX(*mails, sent), sizeof(struct rodex_message));
}
WFIFOSET(fd, size);
+
+ is_first = false;
} while (sent < count);
}
@@ -399,7 +410,7 @@ void mapif_parse_rodex_requestinbox(int fd)
count = inter_rodex->fromsql(char_id, account_id, opentype, 0, &mails);
else
count = inter_rodex->fromsql(char_id, account_id, opentype, mail_id, &mails);
- mapif->rodex_sendinbox(fd, char_id, opentype, flag, count, &mails);
+ mapif->rodex_sendinbox(fd, char_id, opentype, flag, count, mail_id, &mails);
VECTOR_CLEAR(mails);
}
@@ -439,7 +450,7 @@ void mapif_parse_rodex_updatemail(int fd)
int8 flag = RFIFOB(fd, 10);
Assert_retv(mail_id > 0);
- Assert_retv(flag >= 0 && flag <= 3);
+ Assert_retv(flag >= 0 && flag <= 4);
switch (flag) {
case 0: // Read
@@ -465,6 +476,11 @@ void mapif_parse_rodex_updatemail(int fd)
if (SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `mail_id` = '%"PRId64"'", rodex_item_db, mail_id))
Sql_ShowDebug(inter->sql_handle);
break;
+
+ case 4: // Sender Read
+ if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `sender_read` = 1 WHERE `mail_id` = '%"PRId64"'", rodex_db, mail_id))
+ Sql_ShowDebug(inter->sql_handle);
+ break;
}
}
diff --git a/src/char/inter.c b/src/char/inter.c
index 557ee5313..b095a046d 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -25,6 +25,7 @@
#include "char/char.h"
#include "char/geoip.h"
#include "char/int_auction.h"
+#include "char/int_clan.h"
#include "char/int_elemental.h"
#include "char/int_guild.h"
#include "char/int_homun.h"
@@ -72,7 +73,7 @@ int inter_recv_packet_length[] = {
6,-1, 0, 0, 0, 0, 0, 0, 10,-1, 0, 0, 0, 0, 0, 0, // 3010- Account Storage [Smokexyz]
-1,10,-1,14, 14,19, 6,-1, 14,14, 0, 0, 0, 0, 0, 0, // 3020- Party
-1, 6,-1,-1, 55,19, 6,-1, 14,-1,-1,-1, 18,19,186,-1, // 3030-
- -1, 9, 0, 0, 0, 0, 0, 0, 7, 6,10,10, 10,-1, 0, 0, // 3040-
+ -1, 9, 0, 0, 10,10, 0, 0, 7, 6,10,10, 10,-1, 0, 0, // 3040- Clan System(3044-3045)
-1,-1,10,10, 0,-1,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3050- Auction System [Zephyrus], Item Bound [Mhalicot]
6,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3060- Quest system [Kevin] [Inkfish]
-1,10, 6,-1, 0, 0, 0, 0, 0, 0, 0, 0, -1,10, 6,-1, // 3070- Mercenary packets [Zephyrus], Elemental packets [pakpil]
@@ -526,12 +527,15 @@ void mapif_parse_accinfo2(bool success, int map_fd, int u_fd, int u_aid, int acc
inter->msg_to_fd(map_fd, u_fd, u_aid, "-- Account %d --", account_id);
inter->msg_to_fd(map_fd, u_fd, u_aid, "User: %s | GM Group: %d | State: %d", userid, group_id, state);
+// enable this if you really know what you doing.
+#if 0
if (*user_pass != '\0') { /* password is only received if your gm level is greater than the one you're searching for */
if (pin_code && *pin_code != '\0')
inter->msg_to_fd(map_fd, u_fd, u_aid, "Password: %s (PIN:%s)", user_pass, pin_code);
else
inter->msg_to_fd(map_fd, u_fd, u_aid, "Password: %s", user_pass );
}
+#endif
inter->msg_to_fd(map_fd, u_fd, u_aid, "Account e-mail: %s | Birthdate: %s", email, birthdate);
inter->msg_to_fd(map_fd, u_fd, u_aid, "Last IP: %s (%s)", last_ip, geoip->getcountry(sockt->str2ip(last_ip)));
@@ -1420,6 +1424,7 @@ int inter_parse_frommap(int fd)
|| inter_auction->parse_frommap(fd)
|| inter_quest->parse_frommap(fd)
|| inter_rodex->parse_frommap(fd)
+ || inter_clan->parse_frommap(fd)
)
break;
else
diff --git a/src/char/mapif.c b/src/char/mapif.c
index 9fccd691b..f80e38fe7 100644
--- a/src/char/mapif.c
+++ b/src/char/mapif.c
@@ -185,7 +185,7 @@ void mapif_send_quests(int fd, int char_id, struct quest *tmp_questlog, int num_
int mapif_parse_quest_load(int fd);
/* RoDEX */
int mapif_parse_rodex_requestinbox(int fd);
-void mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int count, struct rodex_maillist *mails);
+void mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int count, int64 mail_id, struct rodex_maillist *mails);
int mapif_parse_rodex_checkhasnew(int fd);
void mapif_rodex_sendhasnew(int fd, int char_id, bool has_new);
int mapif_parse_rodex_updatemail(int fd);
@@ -221,6 +221,9 @@ int mapif_parse_Registry(int fd);
int mapif_parse_RegistryRequest(int fd);
void mapif_namechange_ack(int fd, int account_id, int char_id, int type, int flag, const char *const name);
int mapif_parse_NameChangeRequest(int fd);
+// Clan System
+int mapif_parse_ClanMemberKick(int fd, int clan_id, int kick_interval);
+int mapif_parse_ClanMemberCount(int fd, int clan_id, int kick_interval);
struct mapif_interface mapif_s;
struct mapif_interface *mapif;
@@ -411,4 +414,7 @@ void mapif_defaults(void) {
mapif->parse_RegistryRequest = mapif_parse_RegistryRequest;
mapif->namechange_ack = mapif_namechange_ack;
mapif->parse_NameChangeRequest = mapif_parse_NameChangeRequest;
+ /* Clan System */
+ mapif->parse_ClanMemberKick = mapif_parse_ClanMemberKick;
+ mapif->parse_ClanMemberCount = mapif_parse_ClanMemberCount;
}
diff --git a/src/char/mapif.h b/src/char/mapif.h
index a78940ba2..7fc79f661 100644
--- a/src/char/mapif.h
+++ b/src/char/mapif.h
@@ -177,7 +177,7 @@ struct mapif_interface {
void (*send_quests) (int fd, int char_id, struct quest *tmp_questlog, int num_quests);
int (*parse_quest_load) (int fd);
int(*parse_rodex_requestinbox) (int fd);
- void(*rodex_sendinbox) (int fd, int char_id, int8 opentype, int8 flag, int count, struct rodex_maillist *mails);
+ void(*rodex_sendinbox) (int fd, int char_id, int8 opentype, int8 flag, int count, int64 mail_id, struct rodex_maillist *mails);
int(*parse_rodex_checkhasnew) (int fd);
void(*rodex_sendhasnew) (int fd, int char_id, bool has_new);
int(*parse_rodex_updatemail) (int fd);
@@ -213,6 +213,9 @@ struct mapif_interface {
int (*parse_RegistryRequest) (int fd);
void (*namechange_ack) (int fd, int account_id, int char_id, int type, int flag, const char *name);
int (*parse_NameChangeRequest) (int fd);
+ // Clan System
+ int (*parse_ClanMemberKick) (int fd, int clan_id, int kick_interval);
+ int (*parse_ClanMemberCount) (int fd, int clan_id, int kick_interval);
};
#ifdef HERCULES_CORE
diff --git a/src/char/pincode.c b/src/char/pincode.c
index fc1a4c037..bca1b4394 100644
--- a/src/char/pincode.c
+++ b/src/char/pincode.c
@@ -68,6 +68,8 @@ void pincode_check(int fd, struct char_session_data* sd) {
char pin[5] = "\0\0\0\0";
nullpo_retv(sd);
+ if (strlen(sd->pincode) != 4)
+ return;
safestrncpy(pin, RFIFOP(fd, 6), sizeof(pin));
pincode->decrypt(sd->pincode_seed, pin);
if( pincode->compare( fd, sd, pin ) ){
@@ -87,7 +89,9 @@ int pincode_compare(int fd, struct char_session_data* sd, char* pin) {
} else {
pincode->sendstate( fd, sd, PINCODE_WRONG );
if( pincode->maxtry && ++sd->pincode_try >= pincode->maxtry ){
- pincode->error( sd->account_id );
+ pincode->error(sd->account_id);
+ chr->authfail_fd(fd, 0);
+ chr->disconnect_player(sd->account_id);
}
return 0;
}
@@ -97,6 +101,8 @@ void pincode_change(int fd, struct char_session_data* sd) {
char oldpin[5] = "\0\0\0\0", newpin[5] = "\0\0\0\0";
nullpo_retv(sd);
+ if (strlen(sd->pincode) != 4)
+ return;
safestrncpy(oldpin, RFIFOP(fd,6), sizeof(oldpin));
pincode->decrypt(sd->pincode_seed,oldpin);
if( !pincode->compare( fd, sd, oldpin ) )
@@ -113,6 +119,8 @@ void pincode_setnew(int fd, struct char_session_data* sd) {
char newpin[5] = "\0\0\0\0";
nullpo_retv(sd);
+ if (strlen(sd->pincode) == 4)
+ return;
safestrncpy(newpin, RFIFOP(fd,6), sizeof(newpin));
pincode->decrypt(sd->pincode_seed,newpin);
pincode->update( sd->account_id, newpin );
@@ -172,8 +180,11 @@ void pincode_decrypt(unsigned int userSeed, char* pin) {
}
}
- for( i = 0; i < 4; i++ ){
- pin[i] = tab[pin[i] - '0'];
+ for (i = 0; i < 4; i++ ) {
+ if (pin[i] < '0' || pin[i] > '9')
+ pin[i] = '0';
+ else
+ pin[i] = tab[pin[i] - '0'];
}
sprintf(pin, "%d%d%d%d", pin[0], pin[1], pin[2], pin[3]);
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h
index a8524bdda..4bcb33e23 100644
--- a/src/common/HPMDataCheck.h
+++ b/src/common/HPMDataCheck.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2014-2017 Hercules Dev Team
+ * Copyright (C) 2014-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -61,6 +61,11 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#else
#define CHAR_INT_AUCTION_H
#endif // CHAR_INT_AUCTION_H
+ #ifdef CHAR_INT_CLAN_H
+ { "inter_clan_interface", sizeof(struct inter_clan_interface), SERVER_TYPE_CHAR },
+ #else
+ #define CHAR_INT_CLAN_H
+ #endif // CHAR_INT_CLAN_H
#ifdef CHAR_INT_ELEMENTAL_H
{ "inter_elemental_interface", sizeof(struct inter_elemental_interface), SERVER_TYPE_CHAR },
#else
@@ -194,6 +199,10 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#endif // COMMON_MEMMGR_H
#ifdef COMMON_MMO_H
{ "auction_data", sizeof(struct auction_data), SERVER_TYPE_ALL },
+ { "clan", sizeof(struct clan), SERVER_TYPE_ALL },
+ { "clan_buff", sizeof(struct clan_buff), SERVER_TYPE_ALL },
+ { "clan_member", sizeof(struct clan_member), SERVER_TYPE_ALL },
+ { "clan_relationship", sizeof(struct clan_relationship), SERVER_TYPE_ALL },
{ "fame_list", sizeof(struct fame_list), SERVER_TYPE_ALL },
{ "guild", sizeof(struct guild), SERVER_TYPE_ALL },
{ "guild_alliance", sizeof(struct guild_alliance), SERVER_TYPE_ALL },
@@ -300,11 +309,20 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#ifdef LOGIN_ACCOUNT_H
{ "Account_engine", sizeof(struct Account_engine), SERVER_TYPE_LOGIN },
{ "AccountDB", sizeof(struct AccountDB), SERVER_TYPE_LOGIN },
+ { "AccountDB_SQL", sizeof(struct AccountDB_SQL), SERVER_TYPE_LOGIN },
{ "AccountDBIterator", sizeof(struct AccountDBIterator), SERVER_TYPE_LOGIN },
+ { "AccountDBIterator_SQL", sizeof(struct AccountDBIterator_SQL), SERVER_TYPE_LOGIN },
+ { "account_interface", sizeof(struct account_interface), SERVER_TYPE_LOGIN },
{ "mmo_account", sizeof(struct mmo_account), SERVER_TYPE_LOGIN },
#else
#define LOGIN_ACCOUNT_H
#endif // LOGIN_ACCOUNT_H
+ #ifdef LOGIN_IPBAN_H
+ { "ipban_interface", sizeof(struct ipban_interface), SERVER_TYPE_LOGIN },
+ { "s_ipban_dbs", sizeof(struct s_ipban_dbs), SERVER_TYPE_LOGIN },
+ #else
+ #define LOGIN_IPBAN_H
+ #endif // LOGIN_IPBAN_H
#ifdef LOGIN_LCLIF_H
{ "lclif_interface", sizeof(struct lclif_interface), SERVER_TYPE_LOGIN },
{ "login_packet_db", sizeof(struct login_packet_db), SERVER_TYPE_LOGIN },
@@ -332,14 +350,22 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#else
#define LOGIN_LCLIF_P_H
#endif // LOGIN_LCLIF_P_H
+ #ifdef LOGIN_LOGINLOG_H
+ { "loginlog_interface", sizeof(struct loginlog_interface), SERVER_TYPE_LOGIN },
+ { "s_loginlog_dbs", sizeof(struct s_loginlog_dbs), SERVER_TYPE_LOGIN },
+ #else
+ #define LOGIN_LOGINLOG_H
+ #endif // LOGIN_LOGINLOG_H
#ifdef LOGIN_LOGIN_H
{ "Login_Config", sizeof(struct Login_Config), SERVER_TYPE_LOGIN },
{ "client_hash_node", sizeof(struct client_hash_node), SERVER_TYPE_LOGIN },
+ { "lchrif_interface", sizeof(struct lchrif_interface), SERVER_TYPE_LOGIN },
{ "login_auth_node", sizeof(struct login_auth_node), SERVER_TYPE_LOGIN },
{ "login_interface", sizeof(struct login_interface), SERVER_TYPE_LOGIN },
{ "login_session_data", sizeof(struct login_session_data), SERVER_TYPE_LOGIN },
{ "mmo_char_server", sizeof(struct mmo_char_server), SERVER_TYPE_LOGIN },
{ "online_login_data", sizeof(struct online_login_data), SERVER_TYPE_LOGIN },
+ { "s_login_dbs", sizeof(struct s_login_dbs), SERVER_TYPE_LOGIN },
#else
#define LOGIN_LOGIN_H
#endif // LOGIN_LOGIN_H
@@ -394,6 +420,11 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#else
#define MAP_CHRIF_H
#endif // MAP_CHRIF_H
+ #ifdef MAP_CLAN_H
+ { "clan_interface", sizeof(struct clan_interface), SERVER_TYPE_MAP },
+ #else
+ #define MAP_CLAN_H
+ #endif // MAP_CLAN_H
#ifdef MAP_CLIF_H
{ "cdelayed_damage", sizeof(struct cdelayed_damage), SERVER_TYPE_MAP },
{ "clif_interface", sizeof(struct clif_interface), SERVER_TYPE_MAP },
@@ -493,8 +524,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "charid_request", sizeof(struct charid_request), SERVER_TYPE_MAP },
{ "flooritem_data", sizeof(struct flooritem_data), SERVER_TYPE_MAP },
{ "iwall_data", sizeof(struct iwall_data), SERVER_TYPE_MAP },
- { "map_cache_main_header", sizeof(struct map_cache_main_header), SERVER_TYPE_MAP },
- { "map_cache_map_info", sizeof(struct map_cache_map_info), SERVER_TYPE_MAP },
+ { "map_cache_header", sizeof(struct map_cache_header), SERVER_TYPE_MAP },
{ "map_data", sizeof(struct map_data), SERVER_TYPE_MAP },
{ "map_data_other_server", sizeof(struct map_data_other_server), SERVER_TYPE_MAP },
{ "map_drop_list", sizeof(struct map_drop_list), SERVER_TYPE_MAP },
@@ -565,18 +595,26 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_CZ_REQ_REMOVE_ITEM_MAIL", sizeof(struct PACKET_CZ_REQ_REMOVE_ITEM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_REQ_ZENY_FROM_MAIL", sizeof(struct PACKET_CZ_REQ_ZENY_FROM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_CZ_SEND_MAIL", sizeof(struct PACKET_CZ_SEND_MAIL), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_CLAN_LEAVE", sizeof(struct PACKET_ZC_ACK_CLAN_LEAVE), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_DELETE_MAIL", sizeof(struct PACKET_ZC_ACK_DELETE_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_ITEM_FROM_MAIL", sizeof(struct PACKET_ZC_ACK_ITEM_FROM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_OPEN_WRITE_MAIL", sizeof(struct PACKET_ZC_ACK_OPEN_WRITE_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_REMOVE_ITEM_MAIL", sizeof(struct PACKET_ZC_ACK_REMOVE_ITEM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_ZENY_FROM_MAIL", sizeof(struct PACKET_ZC_ACK_ZENY_FROM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ADD_ITEM_TO_MAIL", sizeof(struct PACKET_ZC_ADD_ITEM_TO_MAIL), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ADD_MEMBER_TO_GROUP", sizeof(struct PACKET_ZC_ADD_MEMBER_TO_GROUP), SERVER_TYPE_MAP },
{ "PACKET_ZC_CHECKNAME", sizeof(struct PACKET_ZC_CHECKNAME), SERVER_TYPE_MAP },
+ { "PACKET_ZC_CLANINFO", sizeof(struct PACKET_ZC_CLANINFO), SERVER_TYPE_MAP },
+ { "PACKET_ZC_GROUP_LIST", sizeof(struct PACKET_ZC_GROUP_LIST), SERVER_TYPE_MAP },
+ { "PACKET_ZC_GROUP_LIST_SUB", sizeof(struct PACKET_ZC_GROUP_LIST_SUB), SERVER_TYPE_MAP },
{ "PACKET_ZC_MAIL_LIST", sizeof(struct PACKET_ZC_MAIL_LIST), SERVER_TYPE_MAP },
+ { "PACKET_ZC_NOTIFY_CLAN_CHAT", sizeof(struct PACKET_ZC_NOTIFY_CLAN_CHAT), SERVER_TYPE_MAP },
+ { "PACKET_ZC_NOTIFY_CLAN_CONNECTINFO", sizeof(struct PACKET_ZC_NOTIFY_CLAN_CONNECTINFO), SERVER_TYPE_MAP },
{ "PACKET_ZC_NOTIFY_UNREADMAIL", sizeof(struct PACKET_ZC_NOTIFY_UNREADMAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_READ_MAIL", sizeof(struct PACKET_ZC_READ_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_SKILL_SCALE", sizeof(struct PACKET_ZC_SKILL_SCALE), SERVER_TYPE_MAP },
{ "PACKET_ZC_WRITE_MAIL_RESULT", sizeof(struct PACKET_ZC_WRITE_MAIL_RESULT), SERVER_TYPE_MAP },
+ { "ZC_PROGRESS_ACTOR", sizeof(struct ZC_PROGRESS_ACTOR), SERVER_TYPE_MAP },
{ "mail_item", sizeof(struct mail_item), SERVER_TYPE_MAP },
{ "maillistinfo", sizeof(struct maillistinfo), SERVER_TYPE_MAP },
{ "packet_additem", sizeof(struct packet_additem), SERVER_TYPE_MAP },
diff --git a/src/common/HPMSymbols.inc.h b/src/common/HPMSymbols.inc.h
index 5ee8a014b..70de5cdef 100644
--- a/src/common/HPMSymbols.inc.h
+++ b/src/common/HPMSymbols.inc.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,6 +29,9 @@
#ifdef COMMON_UTILS_H /* HCache */
struct HCache_interface *HCache;
#endif // COMMON_UTILS_H
+#ifdef LOGIN_ACCOUNT_H /* account */
+struct account_interface *account;
+#endif // LOGIN_ACCOUNT_H
#ifdef MAP_ATCOMMAND_H /* atcommand */
struct atcommand_interface *atcommand;
#endif // MAP_ATCOMMAND_H
@@ -53,6 +56,9 @@ struct chat_interface *chat;
#ifdef MAP_CHRIF_H /* chrif */
struct chrif_interface *chrif;
#endif // MAP_CHRIF_H
+#ifdef MAP_CLAN_H /* clan */
+struct clan_interface *clan;
+#endif // MAP_CLAN_H
#ifdef MAP_CLIF_H /* clif */
struct clif_interface *clif;
#endif // MAP_CLIF_H
@@ -98,6 +104,9 @@ struct instance_interface *instance;
#ifdef CHAR_INT_AUCTION_H /* inter_auction */
struct inter_auction_interface *inter_auction;
#endif // CHAR_INT_AUCTION_H
+#ifdef CHAR_INT_CLAN_H /* inter_clan */
+struct inter_clan_interface *inter_clan;
+#endif // CHAR_INT_CLAN_H
#ifdef CHAR_INT_ELEMENTAL_H /* inter_elemental */
struct inter_elemental_interface *inter_elemental;
#endif // CHAR_INT_ELEMENTAL_H
@@ -134,12 +143,18 @@ struct inter_storage_interface *inter_storage;
#ifdef MAP_INTIF_H /* intif */
struct intif_interface *intif;
#endif // MAP_INTIF_H
+#ifdef LOGIN_IPBAN_H /* ipban */
+struct ipban_interface *ipban;
+#endif // LOGIN_IPBAN_H
#ifdef MAP_IRC_BOT_H /* ircbot */
struct irc_bot_interface *ircbot;
#endif // MAP_IRC_BOT_H
#ifdef MAP_ITEMDB_H /* itemdb */
struct itemdb_interface *itemdb;
#endif // MAP_ITEMDB_H
+#ifdef LOGIN_LOGIN_H /* lchrif */
+struct lchrif_interface *lchrif;
+#endif // LOGIN_LOGIN_H
#ifdef LOGIN_LCLIF_H /* lclif */
struct lclif_interface *lclif;
#endif // LOGIN_LCLIF_H
@@ -155,6 +170,9 @@ struct login_interface *login;
#ifdef CHAR_LOGINIF_H /* loginif */
struct loginif_interface *loginif;
#endif // CHAR_LOGINIF_H
+#ifdef LOGIN_LOGINLOG_H /* loginlog */
+struct loginlog_interface *loginlog;
+#endif // LOGIN_LOGINLOG_H
#ifdef MAP_MAIL_H /* mail */
struct mail_interface *mail;
#endif // MAP_MAIL_H
@@ -283,6 +301,10 @@ HPExport const char *HPM_shared_symbols(int server_type)
if ((server_type&(SERVER_TYPE_ALL)) != 0 && !HPM_SYMBOL("HCache", HCache))
return "HCache";
#endif // COMMON_UTILS_H
+#ifdef LOGIN_ACCOUNT_H /* account */
+ if ((server_type&(SERVER_TYPE_LOGIN)) != 0 && !HPM_SYMBOL("account", account))
+ return "account";
+#endif // LOGIN_ACCOUNT_H
#ifdef MAP_ATCOMMAND_H /* atcommand */
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("atcommand", atcommand))
return "atcommand";
@@ -315,6 +337,10 @@ HPExport const char *HPM_shared_symbols(int server_type)
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("chrif", chrif))
return "chrif";
#endif // MAP_CHRIF_H
+#ifdef MAP_CLAN_H /* clan */
+ if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("clan", clan))
+ return "clan";
+#endif // MAP_CLAN_H
#ifdef MAP_CLIF_H /* clif */
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("clif", clif))
return "clif";
@@ -375,6 +401,10 @@ HPExport const char *HPM_shared_symbols(int server_type)
if ((server_type&(SERVER_TYPE_CHAR)) != 0 && !HPM_SYMBOL("inter_auction", inter_auction))
return "inter_auction";
#endif // CHAR_INT_AUCTION_H
+#ifdef CHAR_INT_CLAN_H /* inter_clan */
+ if ((server_type&(SERVER_TYPE_CHAR)) != 0 && !HPM_SYMBOL("inter_clan", inter_clan))
+ return "inter_clan";
+#endif // CHAR_INT_CLAN_H
#ifdef CHAR_INT_ELEMENTAL_H /* inter_elemental */
if ((server_type&(SERVER_TYPE_CHAR)) != 0 && !HPM_SYMBOL("inter_elemental", inter_elemental))
return "inter_elemental";
@@ -423,6 +453,10 @@ HPExport const char *HPM_shared_symbols(int server_type)
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("intif", intif))
return "intif";
#endif // MAP_INTIF_H
+#ifdef LOGIN_IPBAN_H /* ipban */
+ if ((server_type&(SERVER_TYPE_LOGIN)) != 0 && !HPM_SYMBOL("ipban", ipban))
+ return "ipban";
+#endif // LOGIN_IPBAN_H
#ifdef MAP_IRC_BOT_H /* ircbot */
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("ircbot", ircbot))
return "ircbot";
@@ -431,6 +465,10 @@ HPExport const char *HPM_shared_symbols(int server_type)
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("itemdb", itemdb))
return "itemdb";
#endif // MAP_ITEMDB_H
+#ifdef LOGIN_LOGIN_H /* lchrif */
+ if ((server_type&(SERVER_TYPE_LOGIN)) != 0 && !HPM_SYMBOL("lchrif", lchrif))
+ return "lchrif";
+#endif // LOGIN_LOGIN_H
#ifdef LOGIN_LCLIF_H /* lclif */
if ((server_type&(SERVER_TYPE_LOGIN)) != 0 && !HPM_SYMBOL("lclif", lclif))
return "lclif";
@@ -451,6 +489,10 @@ HPExport const char *HPM_shared_symbols(int server_type)
if ((server_type&(SERVER_TYPE_CHAR)) != 0 && !HPM_SYMBOL("loginif", loginif))
return "loginif";
#endif // CHAR_LOGINIF_H
+#ifdef LOGIN_LOGINLOG_H /* loginlog */
+ if ((server_type&(SERVER_TYPE_LOGIN)) != 0 && !HPM_SYMBOL("loginlog", loginlog))
+ return "loginlog";
+#endif // LOGIN_LOGINLOG_H
#ifdef MAP_MAIL_H /* mail */
if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("mail", mail))
return "mail";
diff --git a/src/common/HPMi.h b/src/common/HPMi.h
index 143c325c1..7698d3ca7 100644
--- a/src/common/HPMi.h
+++ b/src/common/HPMi.h
@@ -89,6 +89,7 @@ enum HPluginDataTypes {
HPDT_ITEMDATA, ///< For struct item_data.
HPDT_BGDATA, ///< For struct battleground_data.
HPDT_AUTOTRADE_VEND, ///< For struct autotrade_vending.
+ HPDT_CLAN, ///< For struct clan.
};
/* used in macros and conf storage */
@@ -153,6 +154,10 @@ enum HPluginConfType {
#define addToATVEND(ptr,data,classid,autofree) (HPMi->addToHPData(HPDT_AUTOTRADE_VEND,HPMi->pid,&(ptr)->hdata,(data),(classid),(autofree)))
#define getFromATVEND(ptr,classid) (HPMi->getFromHPData(HPDT_AUTOTRADE_VEND,HPMi->pid,(ptr)->hdata,(classid)))
#define removeFromATVEND(ptr,classid) (HPMi->removeFromHPData(HPDT_AUTOTRADE_VEND,HPMi->pid,(ptr)->hdata,(classid)))
+/* clan */
+#define addtoCLAN(ptr,data,classid,autofree) (HPMi->addToHPData(HPDT_CLAN,HPMi->pid,&(ptr)->hdata,(data),(classid),(autofree)))
+#define getfromCLAN(ptr,classid) (HPMi->getFromHPData(HPDT_CLAN,HPMi->pid,(ptr)->hdata,(classid)))
+#define removefromCLAN(ptr,classid) (HPMi->removeFromHPData(HPDT_CLAN,HPMi->pid,(ptr)->hdata,(classid)))
/// HPMi->addCommand
#define addAtcommand(cname,funcname) do { \
diff --git a/src/common/md5calc.c b/src/common/md5calc.c
index d2fc32371..d5ce8b5a8 100644
--- a/src/common/md5calc.c
+++ b/src/common/md5calc.c
@@ -202,7 +202,7 @@ static void md5_buf2binary(const uint8 *buf, const int buf_size, uint8 *output)
//1-3
copy_len = buf_size % 64; //The number of bytes which remained is computed.
- strncpy((char *)padding_message, (const char *)pbuf, copy_len); // A message is copied to an extended bit sequence.
+ memcpy((char *)padding_message, (const char *)pbuf, copy_len); // A message is copied to an extended bit sequence.
memset(padding_message+copy_len, 0, 64 - copy_len); //It buries by 0 until it becomes extended bit length.
padding_message[copy_len] |= 0x80; //The next of a message is 1.
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 7fd4ca6ea..f9cbc57de 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -304,6 +304,7 @@ STATIC_ASSERT(MAX_ITEM_OPTIONS <= 5, "This value is limited by the client and da
#define INFINITE_DURATION (-1) // Infinite duration for status changes
struct hplugin_data_store;
+struct script_code;
enum item_types {
IT_HEALING = 0,
@@ -359,7 +360,7 @@ struct item {
char favorite;
unsigned char bound;
uint64 unique_id;
-
+
struct {
int16 index;
int16 value;
@@ -616,7 +617,7 @@ struct mmo_charstatus {
short manner; // Defines how many minutes a char will be muted, each negative point is equivalent to a minute.
unsigned char karma;
short hair,hair_color,clothes_color,body;
- int party_id,guild_id,pet_id,hom_id,mer_id,ele_id;
+ int party_id,guild_id,clan_id,pet_id,hom_id,mer_id,ele_id;
int fame;
// Mercenary Guilds Rank
@@ -641,6 +642,7 @@ struct mmo_charstatus {
uint32 mapip;
uint16 mapport;
+ int64 last_login;
struct point last_point,save_point,memo_point[MAX_MEMOPOINTS];
struct item inventory[MAX_INVENTORY],cart[MAX_CART];
struct s_skill skill[MAX_SKILL_DB];
@@ -818,6 +820,59 @@ struct guild_castle {
int temp_guardians_max;
};
+/**
+ * Clan Member Struct
+ */
+struct clan_member {
+ int char_id; ///< Char Id of member
+ short online; ///< Flag to know if the player is online or not
+ int64 last_login; ///< Last login of this member, used to kick if inactive for long time
+ struct map_session_data *sd; ///< Player data of member
+};
+
+/**
+ * Clan Buff Struct
+ */
+struct clan_buff {
+ int icon; ///< Status Icon to be shown in client (Use one of the 'SI_' constants)
+ struct script_code *script; ///< The script to be executed as CLan Buff
+};
+
+/**
+ * Clan Relationship Struct
+ */
+struct clan_relationship {
+ char constant[NAME_LENGTH]; ///< Unique name of the related clan
+ int clan_id; ///< Id of the related clan
+};
+
+/**
+ * Clan Struct
+ */
+struct clan {
+ int clan_id; ///< CLan's Id
+ char constant[NAME_LENGTH]; ///< Clan's Unique Name
+ char name[NAME_LENGTH]; ///< Clan's Name
+ char master[NAME_LENGTH]; ///< Name of the clan's master (used for clan information on client)
+ char map[MAP_NAME_LENGTH_EXT]; ///< The map of that clan (used for clan information on client)
+ struct clan_buff buff; ///< The buff for a clan when a member joins it
+ short max_member; ///< Limit of Members
+ short member_count; ///< Holds the amount of members in this clan, online and offline
+ short connect_member; ///< Members that are Online
+ VECTOR_DECL(struct clan_member) members; ///< Vector of Members
+ VECTOR_DECL(struct clan_relationship) allies; ///< Vector of Allies
+ VECTOR_DECL(struct clan_relationship) antagonists; ///< Vector of Antagonists
+ int kick_time; /// Needed inactive time to be kicked
+ int check_time; ///< Interval to check for inactive players
+ int tid; ///< Timer ID for inactivity kick
+ bool received; ///< Whether or not the requested data was received
+ int req_state; ///< Flag for knowing what to do after receiving the data from inter server
+ int req_count_tid; ///< Timer ID for the timer that handles the timeout of requests for interserver to count members
+ int req_kick_tid; ///< Timer ID for the timer that handles the timeout of requests for interserver to kick inactive members
+
+ struct hplugin_data_store *hdata; ///< HPM Plugin Data Store
+};
+
struct fame_list {
int id;
int fame;
@@ -844,12 +899,12 @@ struct rodex_message {
struct {
struct item item;
int idx;
-
} items[RODEX_MAX_ITEM];
int64 zeny;
uint8 type;
int8 opentype;
bool is_read;
+ bool sender_read;
bool is_deleted;
int send_date;
int expire_date;
diff --git a/src/common/nullpo.h b/src/common/nullpo.h
index 28d058dc0..ae0c82364 100644
--- a/src/common/nullpo.h
+++ b/src/common/nullpo.h
@@ -23,15 +23,10 @@
#include "common/hercules.h"
-// enabled by default on debug builds
-#if defined(DEBUG) && !defined(NULLPO_CHECK)
+// if need disable nullpo checks this line can be commented
#define NULLPO_CHECK
-#endif
-
-// Skip assert checks on release builds
-#if !defined(RELEASE) && !defined(ASSERT_CHECK)
+// if need disable asserts checks this line can be commented
#define ASSERT_CHECK
-#endif
/** Assert */
diff --git a/src/common/socket.c b/src/common/socket.c
index d4b8bb43f..c74cd4661 100644
--- a/src/common/socket.c
+++ b/src/common/socket.c
@@ -1537,7 +1537,7 @@ void socket_close(int fd)
// Epoll based Event Dispatcher
epevent.data.fd = fd;
epevent.events = EPOLLIN;
- epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &epevent); // removing the socket from epoll when it's being closed is not required but recommended
+ epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &epevent); // removing the socket from epoll when it's being closed is not required but recommended
#endif // SOCKET_EPOLL
sShutdown(fd, SHUT_RDWR); // Disallow further reads/writes
@@ -1694,7 +1694,7 @@ void socket_init(void)
#else // SOCKET_EPOLL
// Epoll based Event Dispatcher:
- epfd = epoll_create(FD_SETSIZE); // 2.6.8 or newer ignores the expected socket amount argument
+ epfd = epoll_create(FD_SETSIZE); // 2.6.8 or newer ignores the expected socket amount argument
if(epfd == SOCKET_ERROR){
ShowError("Failed to Create Epoll Event Dispatcher: %s\n", error_msg());
exit(EXIT_FAILURE);
diff --git a/src/login/HPMlogin.c b/src/login/HPMlogin.c
index b35ac13cb..4f63da6ac 100644
--- a/src/login/HPMlogin.c
+++ b/src/login/HPMlogin.c
@@ -25,9 +25,11 @@
#include "common/cbasetypes.h"
#include "login/account.h"
+#include "login/ipban.h"
#include "login/lclif.h"
#include "login/lclif.p.h"
#include "login/login.h"
+#include "login/loginlog.h"
#include "common/HPMi.h"
#include "common/conf.h"
#include "common/console.h"
@@ -69,7 +71,7 @@ bool HPM_login_data_store_validate(enum HPluginDataTypes type, struct hplugin_da
}
void HPM_login_plugin_load_sub(struct hplugin *plugin) {
- plugin->hpi->sql_handle = account_db_sql_up(login->accounts);
+ plugin->hpi->sql_handle = account->db_sql_up(login->accounts);
}
void HPM_login_do_init(void) {
diff --git a/src/login/Makefile.in b/src/login/Makefile.in
index 69cc6a897..d0258deb0 100644
--- a/src/login/Makefile.in
+++ b/src/login/Makefile.in
@@ -40,7 +40,7 @@ MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
-LOGIN_C = account_sql.c HPMlogin.c ipban_sql.c lclif.c login.c loginlog_sql.c
+LOGIN_C = account.c HPMlogin.c ipban.c lclif.c login.c loginlog.c
LOGIN_OBJ = $(addprefix obj_sql/, $(patsubst %.c,%.o,$(LOGIN_C)))
LOGIN_H = login.h account.h HPMlogin.h ipban.h lclif.h loginlog.h
LOGIN_PH = lclif.p.h
diff --git a/src/login/account_sql.c b/src/login/account.c
index 66ede6cfa..cd480def9 100644
--- a/src/login/account_sql.c
+++ b/src/login/account.c
@@ -39,54 +39,8 @@
/// global defines
#define ACCOUNT_SQL_DB_VERSION 20110114
-/// internal structure
-typedef struct AccountDB_SQL
-{
- AccountDB vtable; // public interface
-
- struct Sql *accounts; // SQL accounts storage
-
- // Sql settings
- char db_hostname[32];
- uint16 db_port;
- char db_username[32];
- char db_password[100];
- char db_database[32];
- char codepage[32];
- // other settings
- bool case_sensitive;
- char account_db[32];
- char global_acc_reg_num_db[32];
- char global_acc_reg_str_db[32];
-
-
-} AccountDB_SQL;
-
-/// internal structure
-typedef struct AccountDBIterator_SQL
-{
- AccountDBIterator vtable; // public interface
-
- AccountDB_SQL* db;
- int last_account_id;
-} AccountDBIterator_SQL;
-
-/// internal functions
-static bool account_db_sql_init(AccountDB* self);
-static void account_db_sql_destroy(AccountDB* self);
-static bool account_db_sql_get_property(AccountDB* self, const char* key, char* buf, size_t buflen);
-static bool account_db_sql_set_property(AccountDB* self, struct config_t *config, bool imported);
-static bool account_db_sql_create(AccountDB* self, struct mmo_account* acc);
-static bool account_db_sql_remove(AccountDB* self, const int account_id);
-static bool account_db_sql_save(AccountDB* self, const struct mmo_account* acc);
-static bool account_db_sql_load_num(AccountDB* self, struct mmo_account* acc, const int account_id);
-static bool account_db_sql_load_str(AccountDB* self, struct mmo_account* acc, const char* userid);
-static AccountDBIterator* account_db_sql_iterator(AccountDB* self);
-static void account_db_sql_iter_destroy(AccountDBIterator* self);
-static bool account_db_sql_iter_next(AccountDBIterator* self, struct mmo_account* acc);
-
-static bool mmo_auth_fromsql(AccountDB_SQL* db, struct mmo_account* acc, int account_id);
-static bool mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, bool is_new);
+struct account_interface account_s;
+struct account_interface *account;
/// public constructor
AccountDB* account_db_sql(void)
@@ -94,16 +48,16 @@ AccountDB* account_db_sql(void)
AccountDB_SQL* db = (AccountDB_SQL*)aCalloc(1, sizeof(AccountDB_SQL));
// set up the vtable
- db->vtable.init = &account_db_sql_init;
- db->vtable.destroy = &account_db_sql_destroy;
- db->vtable.get_property = &account_db_sql_get_property;
- db->vtable.set_property = &account_db_sql_set_property;
- db->vtable.save = &account_db_sql_save;
- db->vtable.create = &account_db_sql_create;
- db->vtable.remove = &account_db_sql_remove;
- db->vtable.load_num = &account_db_sql_load_num;
- db->vtable.load_str = &account_db_sql_load_str;
- db->vtable.iterator = &account_db_sql_iterator;
+ db->vtable.init = account->db_sql_init;
+ db->vtable.destroy = account->db_sql_destroy;
+ db->vtable.get_property = account->db_sql_get_property;
+ db->vtable.set_property = account->db_sql_set_property;
+ db->vtable.save = account->db_sql_save;
+ db->vtable.create = account->db_sql_create;
+ db->vtable.remove = account->db_sql_remove;
+ db->vtable.load_num = account->db_sql_load_num;
+ db->vtable.load_str = account->db_sql_load_str;
+ db->vtable.iterator = account->db_sql_iterator;
// initialize to default values
db->accounts = NULL;
@@ -123,10 +77,8 @@ AccountDB* account_db_sql(void)
return &db->vtable;
}
-
/* ------------------------------------------------------------------------- */
-
/// establishes database connection
static bool account_db_sql_init(AccountDB* self)
{
@@ -323,7 +275,7 @@ static bool account_db_sql_set_property(AccountDB* self, struct config_t *config
libconfig->setting_lookup_uint16(setting, "db_port", &db->db_port);
libconfig->setting_lookup_bool_real(setting, "case_sensitive", &db->case_sensitive);
- account_db_read_inter(db, "conf/common/inter-server.conf", imported);
+ account->db_read_inter(db, "conf/common/inter-server.conf", imported);
return true;
}
@@ -381,7 +333,7 @@ static bool account_db_sql_create(AccountDB* self, struct mmo_account* acc)
// insert the data into the database
acc->account_id = account_id;
- return mmo_auth_tosql(db, acc, true);
+ return account->mmo_auth_tosql(db, acc, true);
}
/// delete an existing account entry + its regs
@@ -411,14 +363,14 @@ static bool account_db_sql_remove(AccountDB* self, const int account_id)
static bool account_db_sql_save(AccountDB* self, const struct mmo_account* acc)
{
AccountDB_SQL* db = (AccountDB_SQL*)self;
- return mmo_auth_tosql(db, acc, false);
+ return account->mmo_auth_tosql(db, acc, false);
}
/// retrieve data from db and store it in the provided data structure
static bool account_db_sql_load_num(AccountDB* self, struct mmo_account* acc, const int account_id)
{
AccountDB_SQL* db = (AccountDB_SQL*)self;
- return mmo_auth_fromsql(db, acc, account_id);
+ return account->mmo_auth_fromsql(db, acc, account_id);
}
/// retrieve data from db and store it in the provided data structure
@@ -458,7 +410,7 @@ static bool account_db_sql_load_str(AccountDB* self, struct mmo_account* acc, co
SQL->GetData(sql_handle, 0, &data, NULL);
account_id = atoi(data);
- return account_db_sql_load_num(self, acc, account_id);
+ return account->db_sql_load_num(self, acc, account_id);
}
@@ -471,8 +423,8 @@ static AccountDBIterator* account_db_sql_iterator(AccountDB* self)
nullpo_retr(NULL, db);
iter = (AccountDBIterator_SQL*)aCalloc(1, sizeof(AccountDBIterator_SQL));
// set up the vtable
- iter->vtable.destroy = &account_db_sql_iter_destroy;
- iter->vtable.next = &account_db_sql_iter_next;
+ iter->vtable.destroy = account->db_sql_iter_destroy;
+ iter->vtable.next = account->db_sql_iter_next;
// fill data
iter->db = db;
@@ -516,8 +468,7 @@ static bool account_db_sql_iter_next(AccountDBIterator* self, struct mmo_account
{// get account data
int account_id;
account_id = atoi(data);
- if( mmo_auth_fromsql(db, acc, account_id) )
- {
+ if (account->mmo_auth_fromsql(db, acc, account_id)) {
iter->last_account_id = account_id;
SQL->FreeResult(sql_handle);
return true;
@@ -528,7 +479,7 @@ static bool account_db_sql_iter_next(AccountDBIterator* self, struct mmo_account
}
-static bool mmo_auth_fromsql(AccountDB_SQL* db, struct mmo_account* acc, int account_id)
+static bool account_mmo_auth_fromsql(AccountDB_SQL* db, struct mmo_account* acc, int account_id)
{
struct Sql *sql_handle;
char* data;
@@ -573,7 +524,7 @@ static bool mmo_auth_fromsql(AccountDB_SQL* db, struct mmo_account* acc, int acc
return true;
}
-static bool mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, bool is_new)
+static bool account_mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, bool is_new)
{
struct Sql *sql_handle;
struct SqlStmt *stmt;
@@ -673,7 +624,8 @@ struct Sql *account_db_sql_up(AccountDB* self)
AccountDB_SQL* db = (AccountDB_SQL*)self;
return db ? db->accounts : NULL;
}
-void mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id)
+
+void account_mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id)
{
struct Sql *sql_handle;
AccountDB_SQL* db = (AccountDB_SQL*)self;
@@ -725,7 +677,7 @@ void mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id)
}
}
-void mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id)
+void account_mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id)
{
struct Sql *sql_handle;
AccountDB_SQL* db = (AccountDB_SQL*)self;
@@ -869,3 +821,28 @@ void mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id)
SQL->FreeResult(sql_handle);
}
+
+void account_defaults(void) {
+ account = &account_s;
+
+ account->db_sql_up = account_db_sql_up;
+ account->mmo_send_accreg2 = account_mmo_send_accreg2;
+ account->mmo_save_accreg2 = account_mmo_save_accreg2;
+ account->mmo_auth_fromsql = account_mmo_auth_fromsql;
+ account->mmo_auth_tosql = account_mmo_auth_tosql;
+
+ account->db_sql = account_db_sql;
+ account->db_sql_init = account_db_sql_init;
+ account->db_sql_destroy = account_db_sql_destroy;
+ account->db_sql_get_property = account_db_sql_get_property;
+ account->db_sql_set_property = account_db_sql_set_property;
+ account->db_sql_create = account_db_sql_create;
+ account->db_sql_remove = account_db_sql_remove;
+ account->db_sql_save = account_db_sql_save;
+ account->db_sql_load_num = account_db_sql_load_num;
+ account->db_sql_load_str = account_db_sql_load_str;
+ account->db_sql_iterator = account_db_sql_iterator;
+ account->db_sql_iter_destroy = account_db_sql_iter_destroy;
+ account->db_sql_iter_next = account_db_sql_iter_next;
+ account->db_read_inter = account_db_read_inter;
+}
diff --git a/src/login/account.h b/src/login/account.h
index 9bb07fda3..8199ce3ba 100644
--- a/src/login/account.h
+++ b/src/login/account.h
@@ -33,12 +33,6 @@ struct config_t; // common/conf.h
typedef struct AccountDB AccountDB;
typedef struct AccountDBIterator AccountDBIterator;
-
-#ifdef HERCULES_CORE
-// standard engines
-AccountDB* account_db_sql(void);
-#endif // HERCULES_CORE
-
struct mmo_account
{
int account_id;
@@ -59,7 +53,6 @@ struct mmo_account
char birthdate[10+1]; // assigned birth date (format: YYYY-MM-DD, default: 0000-00-00)
};
-
struct AccountDBIterator
{
/// Destroys this iterator, releasing all allocated memory (including itself).
@@ -161,11 +154,66 @@ struct AccountDB
AccountDBIterator* (*iterator)(AccountDB* self);
};
-#ifdef HERCULES_CORE
-struct Sql *account_db_sql_up(AccountDB* self);
+typedef struct AccountDB_SQL
+{
+ AccountDB vtable; // public interface
+
+ struct Sql *accounts; // SQL accounts storage
+
+ // Sql settings
+ char db_hostname[32];
+ uint16 db_port;
+ char db_username[32];
+ char db_password[100];
+ char db_database[32];
+ char codepage[32];
+ // other settings
+ bool case_sensitive;
+ char account_db[32];
+ char global_acc_reg_num_db[32];
+ char global_acc_reg_str_db[32];
+} AccountDB_SQL;
+
+/// internal structure
+typedef struct AccountDBIterator_SQL
+{
+ AccountDBIterator vtable; // public interface
+
+ AccountDB_SQL* db;
+ int last_account_id;
+} AccountDBIterator_SQL;
-void mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id);
-void mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id);
+/**
+ * Account.c Interface
+ **/
+struct account_interface {
+ struct Sql* (*db_sql_up) (AccountDB* self);
+ void (*mmo_send_accreg2) (AccountDB* self, int fd, int account_id, int char_id);
+ void (*mmo_save_accreg2) (AccountDB* self, int fd, int account_id, int char_id);
+ bool (*mmo_auth_fromsql) (AccountDB_SQL* db, struct mmo_account* acc, int account_id);
+ bool (*mmo_auth_tosql) (AccountDB_SQL* db, const struct mmo_account* acc, bool is_new);
+
+ AccountDB* (*db_sql) (void);
+ bool (*db_sql_init) (AccountDB* self);
+ void (*db_sql_destroy) (AccountDB* self);
+ bool (*db_sql_get_property) (AccountDB* self, const char* key, char* buf, size_t buflen);
+ bool (*db_sql_set_property) (AccountDB* self, struct config_t *config, bool imported);
+ bool (*db_sql_create) (AccountDB* self, struct mmo_account* acc);
+ bool (*db_sql_remove) (AccountDB* self, const int account_id);
+ bool (*db_sql_save) (AccountDB* self, const struct mmo_account* acc);
+ bool (*db_sql_load_num) (AccountDB* self, struct mmo_account* acc, const int account_id);
+ bool (*db_sql_load_str) (AccountDB* self, struct mmo_account* acc, const char* userid);
+ AccountDBIterator* (*db_sql_iterator) (AccountDB* self);
+ void (*db_sql_iter_destroy) (AccountDBIterator* self);
+ bool (*db_sql_iter_next) (AccountDBIterator* self, struct mmo_account* acc);
+
+ bool (*db_read_inter) (AccountDB_SQL *db, const char *filename, bool imported);
+};
+
+#ifdef HERCULES_CORE
+void account_defaults(void);
#endif // HERCULES_CORE
+HPShared struct account_interface *account;
+
#endif /* LOGIN_ACCOUNT_H */
diff --git a/src/login/ipban_sql.c b/src/login/ipban.c
index d74e6c4fa..60a90fec9 100644
--- a/src/login/ipban_sql.c
+++ b/src/login/ipban.c
@@ -34,49 +34,36 @@
#include <stdlib.h>
-// Sql settings
-static char ipban_db_hostname[32] = "127.0.0.1";
-static uint16 ipban_db_port = 3306;
-static char ipban_db_username[32] = "ragnarok";
-static char ipban_db_password[100] = "ragnarok";
-static char ipban_db_database[32] = "ragnarok";
-static char ipban_codepage[32] = "";
-static char ipban_table[32] = "ipbanlist";
-
-// globals
-static struct Sql *sql_handle = NULL;
-static int cleanup_timer_id = INVALID_TIMER;
-static bool ipban_inited = false;
-
-int ipban_cleanup(int tid, int64 tick, int id, intptr_t data);
-
+struct ipban_interface ipban_s;
+struct ipban_interface *ipban;
+struct s_ipban_dbs ipbandbs;
// initialize
void ipban_init(void)
{
- ipban_inited = true;
+ ipban->inited = true;
if (!login->config->ipban)
return;// ipban disabled
// establish connections
- sql_handle = SQL->Malloc();
- if (SQL_ERROR == SQL->Connect(sql_handle, ipban_db_username, ipban_db_password,
- ipban_db_hostname, ipban_db_port, ipban_db_database)) {
- Sql_ShowDebug(sql_handle);
- SQL->Free(sql_handle);
+ ipban->sql_handle = SQL->Malloc();
+ if (SQL_ERROR == SQL->Connect(ipban->sql_handle, ipban->dbs->db_username, ipban->dbs->db_password,
+ ipban->dbs->db_hostname, ipban->dbs->db_port, ipban->dbs->db_database)) {
+ Sql_ShowDebug(ipban->sql_handle);
+ SQL->Free(ipban->sql_handle);
exit(EXIT_FAILURE);
}
- if (ipban_codepage[0] != '\0' && SQL_ERROR == SQL->SetEncoding(sql_handle, ipban_codepage))
- Sql_ShowDebug(sql_handle);
+ if (ipban->dbs->codepage[0] != '\0' && SQL_ERROR == SQL->SetEncoding(ipban->sql_handle, ipban->dbs->codepage))
+ Sql_ShowDebug(ipban->sql_handle);
if (login->config->ipban_cleanup_interval > 0) {
// set up periodic cleanup of connection history and active bans
- timer->add_func_list(ipban_cleanup, "ipban_cleanup");
- cleanup_timer_id = timer->add_interval(timer->gettick()+10, ipban_cleanup, 0, 0, login->config->ipban_cleanup_interval*1000);
+ timer->add_func_list(ipban->cleanup, "ipban_cleanup");
+ ipban->cleanup_timer_id = timer->add_interval(timer->gettick()+10, ipban->cleanup, 0, 0, login->config->ipban_cleanup_interval*1000);
} else {
// make sure it gets cleaned up on login-server start regardless of interval-based cleanups
- ipban_cleanup(0,0,0,0);
+ ipban->cleanup(0,0,0,0);
}
}
@@ -88,13 +75,13 @@ void ipban_final(void)
if (login->config->ipban_cleanup_interval > 0)
// release data
- timer->delete(cleanup_timer_id, ipban_cleanup);
+ timer->delete(ipban->cleanup_timer_id, ipban->cleanup);
- ipban_cleanup(0,0,0,0); // always clean up on login-server stop
+ ipban->cleanup(0,0,0,0); // always clean up on login-server stop
// close connections
- SQL->Free(sql_handle);
- sql_handle = NULL;
+ SQL->Free(ipban->sql_handle);
+ ipban->sql_handle = NULL;
}
/**
@@ -126,14 +113,14 @@ bool ipban_config_read_inter(const char *filename, bool imported)
ShowError("ipban_config_read: inter_configuration/database_names was not found!\n");
return false;
}
- libconfig->setting_lookup_mutable_string(setting, "ipban_table", ipban_table, sizeof(ipban_table));
+ libconfig->setting_lookup_mutable_string(setting, "ipban_table", ipban->dbs->table, sizeof(ipban->dbs->table));
// import should overwrite any previous configuration, so it should be called last
if (libconfig->lookup_string(&config, "import", &import) == CONFIG_TRUE) {
if (strcmp(import, filename) == 0 || strcmp(import, "conf/common/inter-server.conf") == 0) {
ShowWarning("ipban_config_read_inter: Loop detected! Skipping 'import'...\n");
} else {
- if (!ipban_config_read_inter(import, true))
+ if (!ipban->config_read_inter(import, true))
retval = false;
}
}
@@ -165,13 +152,13 @@ bool ipban_config_read_connection(const char *filename, struct config_t *config,
return false;
}
- libconfig->setting_lookup_mutable_string(setting, "db_hostname", ipban_db_hostname, sizeof(ipban_db_hostname));
- libconfig->setting_lookup_mutable_string(setting, "db_database", ipban_db_database, sizeof(ipban_db_database));
+ libconfig->setting_lookup_mutable_string(setting, "db_hostname", ipban->dbs->db_hostname, sizeof(ipban->dbs->db_hostname));
+ libconfig->setting_lookup_mutable_string(setting, "db_database", ipban->dbs->db_database, sizeof(ipban->dbs->db_database));
- libconfig->setting_lookup_mutable_string(setting, "db_username", ipban_db_username, sizeof(ipban_db_username));
- libconfig->setting_lookup_mutable_string(setting, "db_password", ipban_db_password, sizeof(ipban_db_password));
- libconfig->setting_lookup_mutable_string(setting, "codepage", ipban_codepage, sizeof(ipban_codepage));
- libconfig->setting_lookup_uint16(setting, "db_port", &ipban_db_port);
+ libconfig->setting_lookup_mutable_string(setting, "db_username", ipban->dbs->db_username, sizeof(ipban->dbs->db_username));
+ libconfig->setting_lookup_mutable_string(setting, "db_password", ipban->dbs->db_password, sizeof(ipban->dbs->db_password));
+ libconfig->setting_lookup_mutable_string(setting, "codepage", ipban->dbs->codepage, sizeof(ipban->dbs->codepage));
+ libconfig->setting_lookup_uint16(setting, "db_port", &ipban->dbs->db_port);
return true;
}
@@ -224,7 +211,7 @@ bool ipban_config_read(const char *filename, struct config_t *config, bool impor
nullpo_retr(false, filename);
nullpo_retr(false, config);
- if (ipban_inited)
+ if (ipban->inited)
return false; // settings can only be changed before init
if ((setting = libconfig->lookup(config, "login_configuration/account/ipban")) == NULL) {
@@ -256,20 +243,20 @@ bool ipban_check(uint32 ip)
if (!login->config->ipban)
return false;// ipban disabled
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT count(*) FROM `%s` WHERE `rtime` > NOW() AND (`list` = '%u.*.*.*' OR `list` = '%u.%u.*.*' OR `list` = '%u.%u.%u.*' OR `list` = '%u.%u.%u.%u')",
- ipban_table, p[3], p[3], p[2], p[3], p[2], p[1], p[3], p[2], p[1], p[0]) )
+ if( SQL_ERROR == SQL->Query(ipban->sql_handle, "SELECT count(*) FROM `%s` WHERE `rtime` > NOW() AND (`list` = '%u.*.*.*' OR `list` = '%u.%u.*.*' OR `list` = '%u.%u.%u.*' OR `list` = '%u.%u.%u.%u')",
+ ipban->dbs->table, p[3], p[3], p[2], p[3], p[2], p[1], p[3], p[2], p[1], p[0]) )
{
- Sql_ShowDebug(sql_handle);
+ Sql_ShowDebug(ipban->sql_handle);
// close connection because we can't verify their connectivity.
return true;
}
- if( SQL_SUCCESS != SQL->NextRow(sql_handle) )
+ if( SQL_SUCCESS != SQL->NextRow(ipban->sql_handle) )
return false;
- SQL->GetData(sql_handle, 0, &data, NULL);
+ SQL->GetData(ipban->sql_handle, 0, &data, NULL);
matches = atoi(data);
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(ipban->sql_handle);
return( matches > 0 );
}
@@ -282,16 +269,16 @@ void ipban_log(uint32 ip)
if (!login->config->ipban)
return;// ipban disabled
- failures = loginlog_failedattempts(ip, login->config->dynamic_pass_failure_ban_interval);// how many times failed account? in one ip.
+ failures = loginlog->failedattempts(ip, login->config->dynamic_pass_failure_ban_interval);// how many times failed account? in one ip.
// if over the limit, add a temporary ban entry
if (failures >= login->config->dynamic_pass_failure_ban_limit)
{
uint8* p = (uint8*)&ip;
- if (SQL_ERROR == SQL->Query(sql_handle, "INSERT INTO `%s`(`list`,`btime`,`rtime`,`reason`) VALUES ('%u.%u.%u.*', NOW() , NOW() + INTERVAL %u MINUTE ,'Password error ban')",
- ipban_table, p[3], p[2], p[1], login->config->dynamic_pass_failure_ban_duration))
+ if (SQL_ERROR == SQL->Query(ipban->sql_handle, "INSERT INTO `%s`(`list`,`btime`,`rtime`,`reason`) VALUES ('%u.%u.%u.*', NOW() , NOW() + INTERVAL %u MINUTE ,'Password error ban')",
+ ipban->dbs->table, p[3], p[2], p[1], login->config->dynamic_pass_failure_ban_duration))
{
- Sql_ShowDebug(sql_handle);
+ Sql_ShowDebug(ipban->sql_handle);
}
}
}
@@ -301,8 +288,37 @@ int ipban_cleanup(int tid, int64 tick, int id, intptr_t data) {
if (!login->config->ipban)
return 0;// ipban disabled
- if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `rtime` <= NOW()", ipban_table) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(ipban->sql_handle, "DELETE FROM `%s` WHERE `rtime` <= NOW()", ipban->dbs->table) )
+ Sql_ShowDebug(ipban->sql_handle);
return 0;
}
+
+void ipban_defaults(void) {
+ ipban = &ipban_s;
+
+ ipban->dbs = &ipbandbs;
+
+ ipban->sql_handle = NULL;
+ ipban->cleanup_timer_id = INVALID_TIMER;
+ ipban->inited = false;
+
+ // Sql settings
+ strcpy(ipban->dbs->db_hostname, "127.0.0.1");
+ ipban->dbs->db_port = 3306;
+ strcpy(ipban->dbs->db_username, "ragnarok");
+ strcpy(ipban->dbs->db_password, "ragnarok");
+ strcpy(ipban->dbs->db_database, "ragnarok");
+ *ipban->dbs->codepage = 0;
+ strcpy(ipban->dbs->table, "ipbanlist");
+
+ ipban->init = ipban_init;
+ ipban->final = ipban_final;
+ ipban->cleanup = ipban_cleanup;
+ ipban->config_read_inter = ipban_config_read_inter;
+ ipban->config_read_connection = ipban_config_read_connection;
+ ipban->config_read_dynamic = ipban_config_read_dynamic;
+ ipban->config_read = ipban_config_read;
+ ipban->check = ipban_check;
+ ipban->log = ipban_log;
+}
diff --git a/src/login/ipban.h b/src/login/ipban.h
index 104e3a8a3..29aafba9d 100644
--- a/src/login/ipban.h
+++ b/src/login/ipban.h
@@ -22,26 +22,44 @@
#define LOGIN_IPBAN_H
#include "common/cbasetypes.h"
+#include "common/hercules.h"
/* Forward Declarations */
struct config_t; // common/conf.h
-#ifdef HERCULES_CORE
-// TODO: Interface
-// initialize
-void ipban_init(void);
-
-// finalize
-void ipban_final(void);
-
-// check ip against ban list
-bool ipban_check(uint32 ip);
+struct s_ipban_dbs {
+ char db_hostname[32];
+ uint16 db_port;
+ char db_username[32];
+ char db_password[100];
+ char db_database[32];
+ char codepage[32];
+ char table[32];
+};
-// increases failure count for the specified IP
-void ipban_log(uint32 ip);
+/**
+ * Ipban.c Interface
+ **/
+struct ipban_interface {
+ struct s_ipban_dbs *dbs;
+ struct Sql *sql_handle;
+ int cleanup_timer_id;
+ bool inited;
+ void (*init) (void);
+ void (*final) (void);
+ int (*cleanup) (int tid, int64 tick, int id, intptr_t data);
+ bool (*config_read_inter) (const char *filename, bool imported);
+ bool (*config_read_connection) (const char *filename, struct config_t *config, bool imported);
+ bool (*config_read_dynamic) (const char *filename, struct config_t *config, bool imported);
+ bool (*config_read) (const char *filename, struct config_t *config, bool imported);
+ bool (*check) (uint32 ip);
+ void (*log) (uint32 ip);
+};
-// parses configuration options
-bool ipban_config_read(const char *filename, struct config_t *config, bool imported);
+#ifdef HERCULES_CORE
+void ipban_defaults(void);
#endif // HERCULES_CORE
+HPShared struct ipban_interface *ipban;
+
#endif /* LOGIN_IPBAN_H */
diff --git a/src/login/lclif.c b/src/login/lclif.c
index 1870f9bc9..ae9f035e3 100644
--- a/src/login/lclif.c
+++ b/src/login/lclif.c
@@ -257,8 +257,8 @@ bool lclif_send_server_list(struct login_session_data *sd)
uint32 ip;
struct packet_AC_ACCEPT_LOGIN *packet = NULL;
- for (i = 0; i < ARRAYLENGTH(server); ++i) {
- if (sockt->session_is_active(server[i].fd))
+ for (i = 0; i < ARRAYLENGTH(login->dbs->server); ++i) {
+ if (sockt->session_is_active(login->dbs->server[i].fd))
server_num++;
}
if (server_num == 0)
@@ -283,24 +283,24 @@ bool lclif_send_server_list(struct login_session_data *sd)
packet->last_login_ip = 0; // Not used anymore
memset(packet->last_login_time, '\0', sizeof(packet->last_login_time)); // Not used anymore
packet->sex = sex_str2num(sd->sex);
- for (i = 0, n = 0; i < ARRAYLENGTH(server); ++i) {
+ for (i = 0, n = 0; i < ARRAYLENGTH(login->dbs->server); ++i) {
uint32 subnet_char_ip;
- if (!sockt->session_is_valid(server[i].fd))
+ if (!sockt->session_is_valid(login->dbs->server[i].fd))
continue;
subnet_char_ip = login->lan_subnet_check(ip);
- packet->server_list[n].ip = htonl((subnet_char_ip) ? subnet_char_ip : server[i].ip);
- packet->server_list[n].port = sockt->ntows(htons(server[i].port)); // [!] LE byte order here [!]
- safestrncpy(packet->server_list[n].name, server[i].name, 20);
- packet->server_list[n].usercount = login->convert_users_to_colors(server[i].users);
+ packet->server_list[n].ip = htonl((subnet_char_ip) ? subnet_char_ip : login->dbs->server[i].ip);
+ packet->server_list[n].port = sockt->ntows(htons(login->dbs->server[i].port)); // [!] LE byte order here [!]
+ safestrncpy(packet->server_list[n].name, login->dbs->server[i].name, 20);
+ packet->server_list[n].usercount = login->convert_users_to_colors(login->dbs->server[i].users);
- if (server[i].type == CST_PAYING && sd->expiration_time > time(NULL))
+ if (login->dbs->server[i].type == CST_PAYING && sd->expiration_time > time(NULL))
packet->server_list[n].property = CST_NORMAL;
else
- packet->server_list[n].property = server[i].type;
+ packet->server_list[n].property = login->dbs->server[i].type;
- packet->server_list[n].state = server[i].new_;
+ packet->server_list[n].state = login->dbs->server[i].new_;
++n;
}
WFIFOSET(sd->fd, length);
@@ -373,9 +373,9 @@ int lclif_parse(int fd)
if ((sd = sockt->session[fd]->session_data) == NULL) {
// Perform ip-ban check
- if (login->config->ipban && !sockt->trusted_ip_check(ipl) && ipban_check(ipl)) {
+ if (login->config->ipban && !sockt->trusted_ip_check(ipl) && ipban->check(ipl)) {
ShowStatus("Connection refused: IP isn't authorized (deny/allow, ip: %s).\n", ip);
- login_log(ipl, "unknown", -3, "ip banned");
+ loginlog->log(ipl, "unknown", -3, "ip banned");
lclif->login_error(fd, 3); // 3 = Rejected from Server
sockt->eof(fd);
return 0;
diff --git a/src/login/lclif.p.h b/src/login/lclif.p.h
index 024280b37..5c5c062d3 100644
--- a/src/login/lclif.p.h
+++ b/src/login/lclif.p.h
@@ -122,7 +122,7 @@ struct packet_CA_LOGIN4 {
*/
struct packet_CA_LOGIN_PCBANG {
int16 packet_id; ///< Packet ID (#PACKET_ID_CA_LOGIN_PCBANG)
- uint32 version; ///< Client Version
+ uint32 version; ///< Client Version
char id[24]; ///< Username
char password[24]; ///< Password
uint8 clienttype; ///< Client Type
diff --git a/src/login/login.c b/src/login/login.c
index a78276051..9fe9de0d3 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -52,12 +52,12 @@
struct login_interface login_s;
struct login_interface *login;
+struct s_login_dbs logindbs;
+struct lchrif_interface lchrif_s;
+struct lchrif_interface *lchrif;
struct Login_Config login_config_;
-struct mmo_char_server server[MAX_SERVERS]; // char server data
-struct Account_engine account_engine[] = {
- {account_db_sql, NULL}
-};
+struct Account_engine account_engine;
// account database
AccountDB* accounts = NULL;
@@ -164,9 +164,9 @@ int charif_sendallwos(int sfd, uint8* buf, size_t len)
int i, c;
nullpo_ret(buf);
- for( i = 0, c = 0; i < ARRAYLENGTH(server); ++i )
+ for (i = 0, c = 0; i < ARRAYLENGTH(login->dbs->server); ++i)
{
- int fd = server[i].fd;
+ int fd = login->dbs->server[i].fd;
if (sockt->session_is_valid(fd) && fd != sfd) {
WFIFOHEAD(fd,len);
memcpy(WFIFOP(fd,0), buf, len);
@@ -180,41 +180,41 @@ int charif_sendallwos(int sfd, uint8* buf, size_t len)
/// Initializes a server structure.
-void chrif_server_init(int id)
+void lchrif_server_init(int id)
{
Assert_retv(id >= 0 && id < MAX_SERVERS);
- memset(&server[id], 0, sizeof(server[id]));
- server[id].fd = -1;
+ memset(&login->dbs->server[id], 0, sizeof(login->dbs->server[id]));
+ login->dbs->server[id].fd = -1;
}
/// Destroys a server structure.
-void chrif_server_destroy(int id)
+void lchrif_server_destroy(int id)
{
Assert_retv(id >= 0 && id < MAX_SERVERS);
- if (server[id].fd != -1)
+ if (login->dbs->server[id].fd != -1)
{
- sockt->close(server[id].fd);
- server[id].fd = -1;
+ sockt->close(login->dbs->server[id].fd);
+ login->dbs->server[id].fd = -1;
}
}
/// Resets all the data related to a server.
-void chrif_server_reset(int id)
+void lchrif_server_reset(int id)
{
login->online_db->foreach(login->online_db, login->online_db_setoffline, id); //Set all chars from this char server to offline.
- chrif_server_destroy(id);
- chrif_server_init(id);
+ lchrif->server_destroy(id);
+ lchrif->server_init(id);
}
/// Called when the connection to Char Server is disconnected.
-void chrif_on_disconnect(int id)
+void lchrif_on_disconnect(int id)
{
Assert_retv(id >= 0 && id < MAX_SERVERS);
- ShowStatus("Char-server '%s' has disconnected.\n", server[id].name);
- chrif_server_reset(id);
+ ShowStatus("Char-server '%s' has disconnected.\n", login->dbs->server[id].name);
+ lchrif->server_reset(id);
}
@@ -324,7 +324,7 @@ void login_fromchar_parse_auth(int fd, int id, const char *const ip)
node->sex == sex_num2str(sex) /*&&
node->ip == ip_*/ )
{// found
- //ShowStatus("Char-server '%s': authentication of the account %d accepted (ip: %s).\n", server[id].name, account_id, ip);
+ //ShowStatus("Char-server '%s': authentication of the account %d accepted (ip: %s).\n", login->dbs->server[id].name, account_id, ip);
// send ack
login->fromchar_auth_ack(fd, account_id, login_id1, login_id2, sex, request_id, node);
@@ -334,7 +334,7 @@ void login_fromchar_parse_auth(int fd, int id, const char *const ip)
else
{// authentication not found
nullpo_retv(ip);
- ShowStatus("Char-server '%s': authentication of the account %d REFUSED (ip: %s).\n", server[id].name, account_id, ip);
+ ShowStatus("Char-server '%s': authentication of the account %d REFUSED (ip: %s).\n", login->dbs->server[id].name, account_id, ip);
login->fromchar_auth_ack(fd, account_id, login_id1, login_id2, sex, request_id, NULL);
}
}
@@ -345,11 +345,11 @@ void login_fromchar_parse_update_users(int fd, int id)
RFIFOSKIP(fd,6);
// how many users on world? (update)
- if( server[id].users != users )
+ if (login->dbs->server[id].users != users)
{
- ShowStatus("set users %s : %d\n", server[id].name, users);
+ ShowStatus("set users %s : %d\n", login->dbs->server[id].name, users);
- server[id].users = (uint16)users;
+ login->dbs->server[id].users = (uint16)users;
}
}
@@ -363,13 +363,13 @@ void login_fromchar_parse_request_change_email(int fd, int id, const char *const
RFIFOSKIP(fd,46);
if( e_mail_check(email) == 0 )
- ShowNotice("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - e-mail is invalid (account: %d, ip: %s)\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - e-mail is invalid (account: %d, ip: %s)\n", login->dbs->server[id].name, account_id, ip);
else
if( !accounts->load_num(accounts, &acc, account_id) || strcmp(acc.email, "a@a.com") == 0 || acc.email[0] == '\0' )
- ShowNotice("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - account doesn't exist or e-mail of account isn't default e-mail (account: %d, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - account doesn't exist or e-mail of account isn't default e-mail (account: %d, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else {
memcpy(acc.email, email, sizeof(acc.email));
- ShowNotice("Char-server '%s': Create an e-mail on an account with a default e-mail (account: %d, new e-mail: %s, ip: %s).\n", server[id].name, account_id, email, ip);
+ ShowNotice("Char-server '%s': Create an e-mail on an account with a default e-mail (account: %d, new e-mail: %s, ip: %s).\n", login->dbs->server[id].name, account_id, email, ip);
// Save
accounts->save(accounts, &acc);
}
@@ -428,7 +428,7 @@ void login_fromchar_parse_account_data(int fd, int id, const char *const ip)
if( !accounts->load_num(accounts, &acc, account_id) )
{
- ShowNotice("Char-server '%s': account %d NOT found (ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': account %d NOT found (ip: %s).\n", login->dbs->server[id].name, account_id, ip);
login->fromchar_account(fd, account_id, NULL);
}
else {
@@ -461,22 +461,22 @@ void login_fromchar_parse_change_email(int fd, int id, const char *const ip)
RFIFOSKIP(fd, 86);
if( e_mail_check(actual_email) == 0 )
- ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)\n", login->dbs->server[id].name, account_id, ip);
else
if( e_mail_check(new_email) == 0 )
- ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)\n", login->dbs->server[id].name, account_id, ip);
else
if( strcmpi(new_email, "a@a.com") == 0 )
- ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)\n", login->dbs->server[id].name, account_id, ip);
else
if( !accounts->load_num(accounts, &acc, account_id) )
- ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but account doesn't exist (account: %d, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but account doesn't exist (account: %d, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else
if( strcmpi(acc.email, actual_email) != 0 )
- ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual e-mail is incorrect (account: %d (%s), actual e-mail: %s, proposed e-mail: %s, ip: %s).\n", server[id].name, account_id, acc.userid, acc.email, actual_email, ip);
+ ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual e-mail is incorrect (account: %d (%s), actual e-mail: %s, proposed e-mail: %s, ip: %s).\n", login->dbs->server[id].name, account_id, acc.userid, acc.email, actual_email, ip);
else {
safestrncpy(acc.email, new_email, sizeof(acc.email));
- ShowNotice("Char-server '%s': Modify an e-mail on an account (@email GM command) (account: %d (%s), new e-mail: %s, ip: %s).\n", server[id].name, account_id, acc.userid, new_email, ip);
+ ShowNotice("Char-server '%s': Modify an e-mail on an account (@email GM command) (account: %d (%s), new e-mail: %s, ip: %s).\n", login->dbs->server[id].name, account_id, acc.userid, new_email, ip);
// Save
accounts->save(accounts, &acc);
}
@@ -501,12 +501,12 @@ void login_fromchar_parse_account_update(int fd, int id, const char *const ip)
RFIFOSKIP(fd,10);
if( !accounts->load_num(accounts, &acc, account_id) )
- ShowNotice("Char-server '%s': Error of Status change (account: %d not found, suggested status %u, ip: %s).\n", server[id].name, account_id, state, ip);
+ ShowNotice("Char-server '%s': Error of Status change (account: %d not found, suggested status %u, ip: %s).\n", login->dbs->server[id].name, account_id, state, ip);
else
if( acc.state == state )
- ShowNotice("Char-server '%s': Error of Status change - actual status is already the good status (account: %d, status %u, ip: %s).\n", server[id].name, account_id, state, ip);
+ ShowNotice("Char-server '%s': Error of Status change - actual status is already the good status (account: %d, status %u, ip: %s).\n", login->dbs->server[id].name, account_id, state, ip);
else {
- ShowNotice("Char-server '%s': Status change (account: %d, new status %u, ip: %s).\n", server[id].name, account_id, state, ip);
+ ShowNotice("Char-server '%s': Status change (account: %d, new status %u, ip: %s).\n", login->dbs->server[id].name, account_id, state, ip);
acc.state = state;
// Save
@@ -543,7 +543,7 @@ void login_fromchar_parse_ban(int fd, int id, const char *const ip)
RFIFOSKIP(fd,18);
if (!accounts->load_num(accounts, &acc, account_id)) {
- ShowNotice("Char-server '%s': Error of ban request (account: %d not found, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of ban request (account: %d not found, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
} else {
time_t timestamp;
struct tm *tmtime;
@@ -560,14 +560,14 @@ void login_fromchar_parse_ban(int fd, int id, const char *const ip)
tmtime->tm_sec += sec;
timestamp = mktime(tmtime);
if (timestamp == -1) {
- ShowNotice("Char-server '%s': Error of ban request (account: %d, invalid date, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of ban request (account: %d, invalid date, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
} else if( timestamp <= time(NULL) || timestamp == 0 ) {
- ShowNotice("Char-server '%s': Error of ban request (account: %d, new date unbans the account, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of ban request (account: %d, new date unbans the account, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
} else {
char tmpstr[24];
timestamp2string(tmpstr, sizeof(tmpstr), timestamp, login->config->date_format);
ShowNotice("Char-server '%s': Ban request (account: %d, new final date of banishment: %ld (%s), ip: %s).\n",
- server[id].name, account_id, (long)timestamp, tmpstr, ip);
+ login->dbs->server[id].name, account_id, (long)timestamp, tmpstr, ip);
acc.unban_time = timestamp;
@@ -596,15 +596,15 @@ void login_fromchar_parse_change_sex(int fd, int id, const char *const ip)
RFIFOSKIP(fd,6);
if( !accounts->load_num(accounts, &acc, account_id) )
- ShowNotice("Char-server '%s': Error of sex change (account: %d not found, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of sex change (account: %d not found, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else
if( acc.sex == 'S' )
- ShowNotice("Char-server '%s': Error of sex change - account to change is a Server account (account: %d, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of sex change - account to change is a Server account (account: %d, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else
{
char sex = ( acc.sex == 'M' ) ? 'F' : 'M'; //Change gender
- ShowNotice("Char-server '%s': Sex change (account: %d, new sex %c, ip: %s).\n", server[id].name, account_id, sex, ip);
+ ShowNotice("Char-server '%s': Sex change (account: %d, new sex %c, ip: %s).\n", login->dbs->server[id].name, account_id, sex, ip);
acc.sex = sex;
// Save
@@ -622,9 +622,9 @@ void login_fromchar_parse_account_reg2(int fd, int id, const char *const ip)
int account_id = RFIFOL(fd,4);
if( !accounts->load_num(accounts, &acc, account_id) )
- ShowStatus("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d not found, ip: %s).\n", server[id].name, account_id, ip);
+ ShowStatus("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d not found, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else {
- mmo_save_accreg2(accounts,fd,account_id,RFIFOL(fd, 8));
+ account->mmo_save_accreg2(accounts,fd,account_id,RFIFOL(fd, 8));
}
RFIFOSKIP(fd,RFIFOW(fd,2));
}
@@ -637,13 +637,13 @@ void login_fromchar_parse_unban(int fd, int id, const char *const ip)
RFIFOSKIP(fd,6);
if( !accounts->load_num(accounts, &acc, account_id) )
- ShowNotice("Char-server '%s': Error of Unban request (account: %d not found, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of Unban request (account: %d not found, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else
if( acc.unban_time == 0 )
- ShowNotice("Char-server '%s': Error of Unban request (account: %d, no change for unban date, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Error of Unban request (account: %d, no change for unban date, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
else
{
- ShowNotice("Char-server '%s': Unban request (account: %d, ip: %s).\n", server[id].name, account_id, ip);
+ ShowNotice("Char-server '%s': Unban request (account: %d, ip: %s).\n", login->dbs->server[id].name, account_id, ip);
acc.unban_time = 0;
accounts->save(accounts, &acc);
}
@@ -684,13 +684,13 @@ void login_fromchar_parse_request_account_reg2(int fd)
int char_id = RFIFOL(fd,6);
RFIFOSKIP(fd,10);
- mmo_send_accreg2(accounts,fd,account_id,char_id);
+ account->mmo_send_accreg2(accounts,fd,account_id,char_id);
}
void login_fromchar_parse_update_wan_ip(int fd, int id)
{
- server[id].ip = ntohl(RFIFOL(fd,2));
- ShowInfo("Updated IP of Server #%d to %u.%u.%u.%u.\n",id, CONVIP(server[id].ip));
+ login->dbs->server[id].ip = ntohl(RFIFOL(fd,2));
+ ShowInfo("Updated IP of Server #%d to %u.%u.%u.%u.\n",id, CONVIP(login->dbs->server[id].ip));
RFIFOSKIP(fd,6);
}
@@ -725,7 +725,7 @@ bool login_fromchar_parse_wrong_pincode(int fd)
return true;
}
- login_log(sockt->host2ip(acc.last_ip), acc.userid, 100, "PIN Code check failed"); // FIXME: Do we really want to log this with the same code as successful logins?
+ loginlog->log(sockt->host2ip(acc.last_ip), acc.userid, 100, "PIN Code check failed"); // FIXME: Do we really want to log this with the same code as successful logins?
}
login->remove_online_user(acc.account_id);
@@ -794,8 +794,8 @@ int login_parse_fromchar(int fd)
uint32 ipl;
char ip[16];
- ARR_FIND( 0, ARRAYLENGTH(server), id, server[id].fd == fd );
- if( id == ARRAYLENGTH(server) )
+ ARR_FIND(0, ARRAYLENGTH(login->dbs->server), id, login->dbs->server[id].fd == fd);
+ if (id == ARRAYLENGTH(login->dbs->server))
{// not a char server
ShowDebug("login_parse_fromchar: Disconnecting invalid session #%d (is not a char-server)\n", fd);
sockt->eof(fd);
@@ -806,12 +806,12 @@ int login_parse_fromchar(int fd)
if( sockt->session[fd]->flag.eof )
{
sockt->close(fd);
- server[id].fd = -1;
- chrif_on_disconnect(id);
+ login->dbs->server[id].fd = -1;
+ lchrif->on_disconnect(id);
return 0;
}
- ipl = server[id].ip;
+ ipl = login->dbs->server[id].ip;
sockt->ip2str(ipl, ip);
while (RFIFOREST(fd) >= 2) {
@@ -1258,7 +1258,7 @@ void login_auth_ok(struct login_session_data* sd)
return;
}
- login_log(ip, sd->userid, 100, "login ok");
+ loginlog->log(ip, sd->userid, 100, "login ok");
ShowStatus("Connection of the account '%s' accepted.\n", sd->userid);
// create temporary auth entry
@@ -1322,11 +1322,11 @@ void login_auth_failed(struct login_session_data *sd, int result)
default : error = "Unknown Error."; break;
}
- login_log(ip, sd->userid, result, error); // FIXME: result can be 100, conflicting with the value 100 we use for successful login...
+ loginlog->log(ip, sd->userid, result, error); // FIXME: result can be 100, conflicting with the value 100 we use for successful login...
}
if (result == 1 && login->config->dynamic_pass_failure_ban && !sockt->trusted_ip_check(ip))
- ipban_log(ip); // log failed password attempt
+ ipban->log(ip); // log failed password attempt
if (result == 6) {
struct mmo_account acc = { 0 };
@@ -1430,25 +1430,25 @@ void login_parse_request_connection(int fd, struct login_session_data* sd, const
ShowInfo("Connection request of the char-server '%s' @ %u.%u.%u.%u:%u (account: '%s', pass: '%s', ip: '%s')\n", server_name, CONVIP(server_ip), server_port, sd->userid, sd->passwd, ip);
sprintf(message, "charserver - %s@%u.%u.%u.%u:%u", server_name, CONVIP(server_ip), server_port);
- login_log(sockt->session[fd]->client_addr, sd->userid, 100, message);
+ loginlog->log(sockt->session[fd]->client_addr, sd->userid, 100, message);
result = login->mmo_auth(sd, true);
if (core->runflag == LOGINSERVER_ST_RUNNING &&
result == -1 &&
sd->sex == 'S' &&
sd->account_id >= 0 &&
- sd->account_id < ARRAYLENGTH(server) &&
- !sockt->session_is_valid(server[sd->account_id].fd) &&
+ sd->account_id < ARRAYLENGTH(login->dbs->server) &&
+ !sockt->session_is_valid(login->dbs->server[sd->account_id].fd) &&
sockt->allowed_ip_check(ipl))
{
ShowStatus("Connection of the char-server '%s' accepted.\n", server_name);
- safestrncpy(server[sd->account_id].name, server_name, sizeof(server[sd->account_id].name));
- server[sd->account_id].fd = fd;
- server[sd->account_id].ip = server_ip;
- server[sd->account_id].port = server_port;
- server[sd->account_id].users = 0;
- server[sd->account_id].type = type;
- server[sd->account_id].new_ = new_;
+ safestrncpy(login->dbs->server[sd->account_id].name, server_name, sizeof(login->dbs->server[sd->account_id].name));
+ login->dbs->server[sd->account_id].fd = fd;
+ login->dbs->server[sd->account_id].ip = server_ip;
+ login->dbs->server[sd->account_id].port = server_port;
+ login->dbs->server[sd->account_id].users = 0;
+ login->dbs->server[sd->account_id].type = type;
+ login->dbs->server[sd->account_id].new_ = new_;
sockt->session[fd]->func_parse = login->parse_fromchar;
sockt->session[fd]->flag.server = 1;
@@ -1607,7 +1607,7 @@ bool login_config_read_log(const char *filename, struct config_t *config, bool i
bool login_config_read_account(const char *filename, struct config_t *config, bool imported)
{
struct config_setting_t *setting = NULL;
- AccountDB *db = account_engine[0].db;
+ AccountDB *db = login->dbs->account_engine->db;
bool retval = true;
nullpo_retr(false, filename);
@@ -1630,7 +1630,7 @@ bool login_config_read_account(const char *filename, struct config_t *config, bo
if (!db->set_property(db, config, imported))
retval = false;
- if (!ipban_config_read(filename, config, imported))
+ if (!ipban->config_read(filename, config, imported))
retval = false;
return retval;
@@ -1913,7 +1913,7 @@ bool login_config_read(const char *filename, bool imported)
if (!login->config_read_users(filename, &config, imported))
retval = false;
- if (!loginlog_config_read("conf/common/inter-server.conf", imported)) // Only inter-server
+ if (!loginlog->config_read("conf/common/inter-server.conf", imported)) // Only inter-server
retval = false;
if (!HPM->parse_conf(&config, filename, HPCT_LOGIN, imported))
@@ -1973,24 +1973,25 @@ int do_final(void)
login->clear_client_hash_nodes();
login->clear_dnsbl_servers();
- login_log(0, "login server", 100, "login server shutdown");
+ loginlog->log(0, "login server", 100, "login server shutdown");
if (login->config->log_login)
- loginlog_final();
+ loginlog->final();
- ipban_final();
+ ipban->final();
- if( account_engine[0].db )
+ if (login->dbs->account_engine->db)
{// destroy account engine
- account_engine[0].db->destroy(account_engine[0].db);
- account_engine[0].db = NULL;
+ login->dbs->account_engine->db->destroy(login->dbs->account_engine->db);
+ login->dbs->account_engine->db = NULL;
}
- accounts = NULL; // destroyed in account_engine
+ login->accounts = NULL; // destroyed in account_engine
+ accounts = NULL;
login->online_db->destroy(login->online_db, NULL);
login->auth_db->destroy(login->auth_db, NULL);
- for( i = 0; i < ARRAYLENGTH(server); ++i )
- chrif_server_destroy(i);
+ for (i = 0; i < ARRAYLENGTH(login->dbs->server); ++i)
+ lchrif->server_destroy(i);
if( login->fd != -1 )
{
@@ -2033,8 +2034,8 @@ void do_shutdown_login(void)
core->runflag = LOGINSERVER_ST_SHUTDOWN;
ShowStatus("Shutting down...\n");
// TODO proper shutdown procedure; kick all characters, wait for acks, ... [FlavioJS]
- for( id = 0; id < ARRAYLENGTH(server); ++id )
- chrif_server_reset(id);
+ for (id = 0; id < ARRAYLENGTH(login->dbs->server); ++id)
+ lchrif->server_reset(id);
sockt->flush_fifos();
core->runflag = CORE_ST_STOP;
}
@@ -2094,16 +2095,23 @@ int do_init(int argc, char** argv)
{
int i;
+ account_defaults();
+ login_defaults();
+
// initialize engine (to accept config settings)
- account_engine[0].db = account_engine[0].constructor();
- accounts = account_engine[0].db;
+ login->dbs->account_engine->constructor = account->db_sql;
+ login->dbs->account_engine->db = login->dbs->account_engine->constructor();
+ accounts = login->dbs->account_engine->db;
+ login->accounts = accounts;
if( accounts == NULL ) {
ShowFatalError("do_init: account engine 'sql' not found.\n");
exit(EXIT_FAILURE);
}
- login_defaults();
+ ipban_defaults();
+ lchrif_defaults();
lclif_defaults();
+ loginlog_defaults();
// read login-server configuration
login->config_set_defaults();
@@ -2142,15 +2150,15 @@ int do_init(int argc, char** argv)
login->config_read(login->LOGIN_CONF_NAME, false);
sockt->net_config_read(login->NET_CONF_NAME);
- for( i = 0; i < ARRAYLENGTH(server); ++i )
- chrif_server_init(i);
+ for (i = 0; i < ARRAYLENGTH(login->dbs->server); ++i)
+ lchrif->server_init(i);
// initialize logging
if (login->config->log_login)
- loginlog_init();
+ loginlog->init();
// initialize static and dynamic ipban system
- ipban_init();
+ ipban->init();
// Online user database init
login->online_db = idb_alloc(DB_OPT_RELEASE_DATA);
@@ -2196,18 +2204,23 @@ int do_init(int argc, char** argv)
#endif // CONSOLE_INPUT
ShowStatus("The login-server is "CL_GREEN"ready"CL_RESET" (Server is listening on the port %u).\n\n", login->config->login_port);
- login_log(0, "login server", 100, "login server started");
+ loginlog->log(0, "login server", 100, "login server started");
HPM->event(HPET_READY);
return 0;
}
-void login_defaults(void) {
+void login_defaults(void)
+{
login = &login_s;
login->config = &login_config_;
login->accounts = accounts;
+ login->dbs = &logindbs;
+ login->dbs->account_engine = &account_engine;
+ login->dbs->account_engine->constructor = NULL;
+ login->dbs->account_engine->db = NULL;
login->mmo_auth = login_mmo_auth;
login->mmo_auth_new = login_mmo_auth_new;
@@ -2279,3 +2292,12 @@ void login_defaults(void) {
login->LOGIN_CONF_NAME = NULL;
login->NET_CONF_NAME = NULL;
}
+
+void lchrif_defaults(void)
+{
+ lchrif = &lchrif_s;
+ lchrif->server_init = lchrif_server_init;
+ lchrif->server_destroy = lchrif_server_destroy;
+ lchrif->server_reset = lchrif_server_reset;
+ lchrif->on_disconnect = lchrif_on_disconnect;
+}
diff --git a/src/login/login.h b/src/login/login.h
index 3af54ef50..1a4a6d0a3 100644
--- a/src/login/login.h
+++ b/src/login/login.h
@@ -157,6 +157,11 @@ struct online_login_data {
#define MAX_SERVERS 30
+struct s_login_dbs {
+ struct mmo_char_server server[MAX_SERVERS];
+ struct Account_engine *account_engine;
+};
+
/**
* Login.c Interface
**/
@@ -166,6 +171,7 @@ struct login_interface {
int fd;
struct Login_Config *config;
struct AccountDB* accounts;
+ struct s_login_dbs *dbs;
int (*mmo_auth) (struct login_session_data* sd, bool isServer);
int (*mmo_auth_new) (const char* userid, const char* pass, const char sex, const char* last_ip);
@@ -234,12 +240,22 @@ struct login_interface {
char *NET_CONF_NAME; ///< Network configuration filename
};
-#ifdef HERCULES_CORE
-extern struct mmo_char_server server[MAX_SERVERS];
+/**
+ * Login.c Interface
+ **/
+struct lchrif_interface {
+ void (*server_init) (int id);
+ void (*server_destroy) (int id);
+ void (*server_reset) (int id);
+ void (*on_disconnect) (int id);
+};
+#ifdef HERCULES_CORE
void login_defaults(void);
+void lchrif_defaults(void);
#endif // HERCULES_CORE
HPShared struct login_interface *login;
+HPShared struct lchrif_interface *lchrif;
#endif /* LOGIN_LOGIN_H */
diff --git a/src/login/loginlog_sql.c b/src/login/loginlog.c
index 7dff14990..0e4cc79f0 100644
--- a/src/login/loginlog_sql.c
+++ b/src/login/loginlog.c
@@ -33,17 +33,10 @@
#include <stdlib.h> // exit
-// Sql settings
-static char log_db_hostname[32] = "127.0.0.1";
-static uint16 log_db_port = 3306;
-static char log_db_username[32] = "ragnarok";
-static char log_db_password[100] = "ragnarok";
-static char log_db_database[32] = "ragnarok";
-static char log_codepage[32] = "";
-static char log_login_db[256] = "loginlog";
-static struct Sql *sql_handle = NULL;
-static bool enabled = false;
+struct loginlog_interface loginlog_s;
+struct loginlog_interface *loginlog;
+struct s_loginlog_dbs loginlogdbs;
// Returns the number of failed login attempts by the ip in the last minutes.
@@ -51,19 +44,19 @@ unsigned long loginlog_failedattempts(uint32 ip, unsigned int minutes)
{
unsigned long failures = 0;
- if( !enabled )
+ if( !loginlog->enabled )
return 0;
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT count(*) FROM `%s` WHERE `ip` = '%s' AND `rcode` = '1' AND `time` > NOW() - INTERVAL %u MINUTE",
- log_login_db, sockt->ip2str(ip,NULL), minutes) )// how many times failed account? in one ip.
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(loginlog->sql_handle, "SELECT count(*) FROM `%s` WHERE `ip` = '%s' AND `rcode` = '1' AND `time` > NOW() - INTERVAL %u MINUTE",
+ loginlog->dbs->log_login_db, sockt->ip2str(ip,NULL), minutes) )// how many times failed account? in one ip.
+ Sql_ShowDebug(loginlog->sql_handle);
- if( SQL_SUCCESS == SQL->NextRow(sql_handle) )
+ if( SQL_SUCCESS == SQL->NextRow(loginlog->sql_handle) )
{
char* data;
- SQL->GetData(sql_handle, 0, &data, NULL);
+ SQL->GetData(loginlog->sql_handle, 0, &data, NULL);
failures = strtoul(data, NULL, 10);
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(loginlog->sql_handle);
}
return failures;
}
@@ -73,7 +66,7 @@ unsigned long loginlog_failedattempts(uint32 ip, unsigned int minutes)
* Records an event in the login log
*---------------------------------------------*/
// TODO: add an enum of rcode values
-void login_log(uint32 ip, const char* username, int rcode, const char* message)
+void loginlog_log(uint32 ip, const char* username, int rcode, const char* message)
{
char esc_username[NAME_LENGTH*2+1];
char esc_message[255*2+1];
@@ -81,43 +74,43 @@ void login_log(uint32 ip, const char* username, int rcode, const char* message)
nullpo_retv(username);
nullpo_retv(message);
- if( !enabled )
+ if( !loginlog->enabled )
return;
- SQL->EscapeStringLen(sql_handle, esc_username, username, strnlen(username, NAME_LENGTH));
- SQL->EscapeStringLen(sql_handle, esc_message, message, strnlen(message, 255));
+ SQL->EscapeStringLen(loginlog->sql_handle, esc_username, username, strnlen(username, NAME_LENGTH));
+ SQL->EscapeStringLen(loginlog->sql_handle, esc_message, message, strnlen(message, 255));
- retcode = SQL->Query(sql_handle,
+ retcode = SQL->Query(loginlog->sql_handle,
"INSERT INTO `%s`(`time`,`ip`,`user`,`rcode`,`log`) VALUES (NOW(), '%s', '%s', '%d', '%s')",
- log_login_db, sockt->ip2str(ip,NULL), esc_username, rcode, esc_message);
+ loginlog->dbs->log_login_db, sockt->ip2str(ip,NULL), esc_username, rcode, esc_message);
if( retcode != SQL_SUCCESS )
- Sql_ShowDebug(sql_handle);
+ Sql_ShowDebug(loginlog->sql_handle);
}
bool loginlog_init(void)
{
- sql_handle = SQL->Malloc();
+ loginlog->sql_handle = SQL->Malloc();
- if (SQL_ERROR == SQL->Connect(sql_handle, log_db_username, log_db_password,
- log_db_hostname, log_db_port, log_db_database)) {
- Sql_ShowDebug(sql_handle);
- SQL->Free(sql_handle);
+ if (SQL_ERROR == SQL->Connect(loginlog->sql_handle, loginlog->dbs->log_db_username, loginlog->dbs->log_db_password,
+ loginlog->dbs->log_db_hostname, loginlog->dbs->log_db_port, loginlog->dbs->log_db_database)) {
+ Sql_ShowDebug(loginlog->sql_handle);
+ SQL->Free(loginlog->sql_handle);
exit(EXIT_FAILURE);
}
- if (log_codepage[0] != '\0' && SQL_ERROR == SQL->SetEncoding(sql_handle, log_codepage))
- Sql_ShowDebug(sql_handle);
+ if (loginlog->dbs->log_codepage[0] != '\0' && SQL_ERROR == SQL->SetEncoding(loginlog->sql_handle, loginlog->dbs->log_codepage))
+ Sql_ShowDebug(loginlog->sql_handle);
- enabled = true;
+ loginlog->enabled = true;
return true;
}
bool loginlog_final(void)
{
- SQL->Free(sql_handle);
- sql_handle = NULL;
+ SQL->Free(loginlog->sql_handle);
+ loginlog->sql_handle = NULL;
return true;
}
@@ -145,7 +138,7 @@ bool loginlog_config_read_names(const char *filename, struct config_t *config, b
return false;
}
- libconfig->setting_lookup_mutable_string(setting, "login_db", log_login_db, sizeof(log_login_db));
+ libconfig->setting_lookup_mutable_string(setting, "login_db", loginlog->dbs->log_login_db, sizeof(loginlog->dbs->log_login_db));
return true;
}
@@ -174,13 +167,13 @@ bool loginlog_config_read_log(const char *filename, struct config_t *config, boo
return false;
}
- libconfig->setting_lookup_mutable_string(setting, "db_hostname", log_db_hostname, sizeof(log_db_hostname));
- libconfig->setting_lookup_mutable_string(setting, "db_database", log_db_database, sizeof(log_db_database));
- libconfig->setting_lookup_mutable_string(setting, "db_username", log_db_username, sizeof(log_db_username));
- libconfig->setting_lookup_mutable_string(setting, "db_password", log_db_password, sizeof(log_db_password));
+ libconfig->setting_lookup_mutable_string(setting, "db_hostname", loginlog->dbs->log_db_hostname, sizeof(loginlog->dbs->log_db_hostname));
+ libconfig->setting_lookup_mutable_string(setting, "db_database", loginlog->dbs->log_db_database, sizeof(loginlog->dbs->log_db_database));
+ libconfig->setting_lookup_mutable_string(setting, "db_username", loginlog->dbs->log_db_username, sizeof(loginlog->dbs->log_db_username));
+ libconfig->setting_lookup_mutable_string(setting, "db_password", loginlog->dbs->log_db_password, sizeof(loginlog->dbs->log_db_password));
- libconfig->setting_lookup_uint16(setting, "db_port", &log_db_port);
- libconfig->setting_lookup_mutable_string(setting, "codepage", log_codepage, sizeof(log_codepage));
+ libconfig->setting_lookup_uint16(setting, "db_port", &loginlog->dbs->log_db_port);
+ libconfig->setting_lookup_mutable_string(setting, "codepage", loginlog->dbs->log_codepage, sizeof(loginlog->dbs->log_codepage));
return true;
}
@@ -206,16 +199,16 @@ bool loginlog_config_read(const char *filename, bool imported)
if (!libconfig->load_file(&config, filename))
return false; // Error message is already shown by libconfig->load_file
- if (!loginlog_config_read_names(filename, &config, imported))
+ if (!loginlog->config_read_names(filename, &config, imported))
retval = false;
- if (!loginlog_config_read_log(filename, &config, imported))
+ if (!loginlog->config_read_log(filename, &config, imported))
retval = false;
if (libconfig->lookup_string(&config, "import", &import) == CONFIG_TRUE) {
if (strcmp(import, filename) == 0 || strcmp(import, "conf/common/inter-server.conf") == 0) {
ShowWarning("inter_config_read: Loop detected! Skipping 'import'...\n");
} else {
- if (!loginlog_config_read(import, true))
+ if (!loginlog->config_read(import, true))
retval = false;
}
}
@@ -223,3 +216,29 @@ bool loginlog_config_read(const char *filename, bool imported)
libconfig->destroy(&config);
return retval;
}
+
+void loginlog_defaults(void)
+{
+ loginlog = &loginlog_s;
+ loginlog->dbs = &loginlogdbs;
+
+ loginlog->sql_handle = NULL;
+ loginlog->enabled = false;
+
+ // Sql settings
+ strcpy(loginlog->dbs->log_db_hostname, "127.0.0.1");
+ loginlog->dbs->log_db_port = 3306;
+ strcpy(loginlog->dbs->log_db_username, "ragnarok");
+ strcpy(loginlog->dbs->log_db_password, "ragnarok");
+ strcpy(loginlog->dbs->log_db_database, "ragnarok");
+ *loginlog->dbs->log_codepage = 0;
+ strcpy(loginlog->dbs->log_login_db, "loginlog");
+
+ loginlog->failedattempts = loginlog_failedattempts;
+ loginlog->log = loginlog_log;
+ loginlog->init = loginlog_init;
+ loginlog->final = loginlog_final;
+ loginlog->config_read_names = loginlog_config_read_names;
+ loginlog->config_read_log = loginlog_config_read_log;
+ loginlog->config_read = loginlog_config_read;
+}
diff --git a/src/login/loginlog.h b/src/login/loginlog.h
index 589bc4fa1..fecb9b364 100644
--- a/src/login/loginlog.h
+++ b/src/login/loginlog.h
@@ -21,15 +21,41 @@
#ifndef LOGIN_LOGINLOG_H
#define LOGIN_LOGINLOG_H
+#include "common/hercules.h"
#include "common/cbasetypes.h"
+struct config_t;
+
+struct s_loginlog_dbs {
+ char log_db_hostname[32];
+ uint16 log_db_port;
+ char log_db_username[32];
+ char log_db_password[100];
+ char log_db_database[32];
+ char log_codepage[32];
+ char log_login_db[256];
+};
+
+/**
+ * Loginlog.c Interface
+ **/
+struct loginlog_interface {
+ struct Sql *sql_handle;
+ bool enabled;
+ struct s_loginlog_dbs *dbs;
+ unsigned long (*failedattempts) (uint32 ip, unsigned int minutes);
+ void (*log) (uint32 ip, const char* username, int rcode, const char* message);
+ bool (*init) (void);
+ bool (*final) (void);
+ bool (*config_read_names) (const char *filename, struct config_t *config, bool imported);
+ bool (*config_read_log) (const char *filename, struct config_t *config, bool imported);
+ bool (*config_read) (const char *filename, bool imported);
+};
+
#ifdef HERCULES_CORE
-// TODO: Interface
-unsigned long loginlog_failedattempts(uint32 ip, unsigned int minutes);
-void login_log(uint32 ip, const char* username, int rcode, const char* message);
-bool loginlog_init(void);
-bool loginlog_final(void);
-bool loginlog_config_read(const char *filename, bool imported);
+void loginlog_defaults(void);
#endif // HERCULES_CORE
+HPShared struct loginlog_interface *loginlog;
+
#endif /* LOGIN_LOGINLOG_H */
diff --git a/src/map/HPMmap.c b/src/map/HPMmap.c
index 381dbf599..17b4fd813 100644
--- a/src/map/HPMmap.c
+++ b/src/map/HPMmap.c
@@ -54,6 +54,7 @@
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/date.h"
#include "map/duel.h"
@@ -114,21 +115,22 @@ unsigned int atcommand_list_items = 0;
bool HPM_map_data_store_validate(enum HPluginDataTypes type, struct hplugin_data_store **storeptr, bool initialize)
{
switch (type) {
- case HPDT_MSD:
- case HPDT_NPCD:
- case HPDT_MAP:
- case HPDT_PARTY:
- case HPDT_GUILD:
- case HPDT_INSTANCE:
- case HPDT_MOBDB:
- case HPDT_MOBDATA:
- case HPDT_ITEMDATA:
- case HPDT_BGDATA:
- case HPDT_AUTOTRADE_VEND:
- // Initialized by the caller.
- return true;
- default:
- break;
+ case HPDT_MSD:
+ case HPDT_NPCD:
+ case HPDT_MAP:
+ case HPDT_PARTY:
+ case HPDT_GUILD:
+ case HPDT_INSTANCE:
+ case HPDT_MOBDB:
+ case HPDT_MOBDATA:
+ case HPDT_ITEMDATA:
+ case HPDT_BGDATA:
+ case HPDT_AUTOTRADE_VEND:
+ case HPDT_CLAN:
+ // Initialized by the caller.
+ return true;
+ default:
+ break;
}
return false;
}
diff --git a/src/map/Makefile.in b/src/map/Makefile.in
index 58d91506f..e6966d9a2 100644
--- a/src/map/Makefile.in
+++ b/src/map/Makefile.in
@@ -41,18 +41,19 @@ MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
MAP_C = atcommand.c battle.c battleground.c buyingstore.c channel.c chat.c \
- chrif.c clif.c date.c duel.c elemental.c guild.c homunculus.c HPMmap.c \
+ chrif.c clan.c clif.c date.c duel.c elemental.c guild.c homunculus.c HPMmap.c \
instance.c intif.c irc-bot.c itemdb.c log.c mail.c map.c mapreg_sql.c \
mercenary.c mob.c npc.c npc_chat.c party.c path.c pc.c pc_groups.c \
pet.c quest.c rodex.c script.c searchstore.c skill.c status.c storage.c \
trade.c unit.c vending.c
MAP_OBJ = $(addprefix obj_sql/, $(patsubst %c,%o,$(MAP_C)))
MAP_H = atcommand.h battle.h battleground.h buyingstore.h channel.h chat.h \
- chrif.h clif.h date.h duel.h elemental.h guild.h homunculus.h HPMmap.h \
+ chrif.h clan.h clif.h date.h duel.h elemental.h guild.h homunculus.h HPMmap.h \
instance.h intif.h irc-bot.h itemdb.h log.h mail.h map.h mapreg.h \
- mercenary.h mob.h npc.h packets.h packets_keys.h packets_shuffle.h \
- packets_struct.h party.h path.h pc.h pc_groups.h pet.h quest.h rodex.h \
- script.h searchstore.h skill.h status.h storage.h trade.h unit.h vending.h
+ mercenary.h mob.h npc.h packets.h packets_keys_main.h packets_keys_zero.h \
+ packets_shuffle_main.h packets_shuffle_zero.h packets_struct.h party.h \
+ path.h pc.h pc_groups.h pet.h quest.h rodex.h script.h searchstore.h \
+ skill.h status.h storage.h trade.h unit.h vending.h
MAP_PH =
HAVE_MYSQL=@HAVE_MYSQL@
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 1590c3f0c..b0ad24c11 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -28,6 +28,7 @@
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/duel.h"
#include "map/elemental.h"
@@ -950,6 +951,7 @@ ACMD(hide) {
//bugreport:2266
map->foreachinmovearea(clif->insight, &sd->bl, AREA_SIZE, sd->bl.x, sd->bl.y, BL_ALL, &sd->bl);
} else {
+ clif->clearunit_area(&sd->bl, CLR_OUTSIGHT);
sd->sc.option |= OPTION_INVISIBLE;
sd->vd.class = INVISIBLE_CLASS;
clif->message(fd, msg_fd(fd,11)); // Invisible: On
@@ -1677,6 +1679,45 @@ ACMD(gvgon)
/*==========================================
*
*------------------------------------------*/
+ACMD(cvcoff)
+{
+ if (!map->list[sd->bl.m].flag.cvc) {
+ clif->message(fd, msg_fd(fd, 141)); // CvC is already Off.
+ return false;
+ }
+
+ map->zone_change2(sd->bl.m, map->list[sd->bl.m].prev_zone);
+ map->list[sd->bl.m].flag.cvc = 0;
+ clif->map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
+ clif->maptypeproperty2(&sd->bl, ALL_SAMEMAP);
+ map->foreachinmap(atcommand->stopattack, sd->bl.m, BL_CHAR, 0);
+ clif->message(fd, msg_fd(fd, 137)); // CvC: Off.
+
+ return true;
+}
+
+/*==========================================
+ *
+ *------------------------------------------*/
+ACMD(cvcon)
+{
+ if (map->list[sd->bl.m].flag.cvc) {
+ clif->message(fd, msg_fd(fd, 142)); // CvC is already On.
+ return false;
+ }
+
+ map->zone_change2(sd->bl.m, strdb_get(map->zone_db, MAP_ZONE_CVC_NAME));
+ map->list[sd->bl.m].flag.cvc = 1;
+ clif->map_property_mapall(sd->bl.m, MAPPROPERTY_AGITZONE);
+ clif->maptypeproperty2(&sd->bl, ALL_SAMEMAP);
+ clif->message(fd, msg_fd(fd, 138)); // CvC: On.
+
+ return true;
+}
+
+/*==========================================
+ *
+ *------------------------------------------*/
ACMD(model)
{
int hair_style = 0, hair_color = 0, cloth_color = 0;
@@ -3798,6 +3839,9 @@ ACMD(mapinfo)
if (map->list[m_id].flag.battleground)
clif->message(fd, msg_fd(fd,1045)); // Battlegrounds ON
+ if (map->list[m_id].flag.cvc)
+ clif->message(fd, msg_fd(fd, 139)); // CvC ON
+
strcpy(atcmd_output,msg_fd(fd,1046)); // PvP Flags:
if (map->list[m_id].flag.pvp)
strcat(atcmd_output, msg_fd(fd,1047)); // Pvp ON |
@@ -5457,7 +5501,7 @@ void atcommand_getring(struct map_session_data* sd) {
if((flag = pc->additem(sd,&item_tmp,1,LOG_TYPE_COMMAND))) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
@@ -7551,11 +7595,11 @@ ACMD(mapflag) {
CHECKFLAG(noreturn); CHECKFLAG(monster_noteleport); CHECKFLAG(nosave); CHECKFLAG(nobranch);
CHECKFLAG(noexppenalty); CHECKFLAG(pvp); CHECKFLAG(pvp_noparty); CHECKFLAG(pvp_noguild);
CHECKFLAG(pvp_nightmaredrop); CHECKFLAG(pvp_nocalcrank); CHECKFLAG(gvg_castle); CHECKFLAG(gvg);
- CHECKFLAG(gvg_dungeon); CHECKFLAG(gvg_noparty); CHECKFLAG(battleground); CHECKFLAG(nozenypenalty);
- CHECKFLAG(notrade); CHECKFLAG(noskill); CHECKFLAG(nowarp); CHECKFLAG(nowarpto);
- CHECKFLAG(noicewall); CHECKFLAG(snow); CHECKFLAG(clouds); CHECKFLAG(clouds2);
- CHECKFLAG(fog); CHECKFLAG(fireworks); CHECKFLAG(sakura); CHECKFLAG(leaves);
- CHECKFLAG(nobaseexp);
+ CHECKFLAG(gvg_dungeon); CHECKFLAG(gvg_noparty); CHECKFLAG(battleground); CHECKFLAG(cvc);
+ CHECKFLAG(nozenypenalty); CHECKFLAG(notrade); CHECKFLAG(noskill); CHECKFLAG(nowarp);
+ CHECKFLAG(nowarpto); CHECKFLAG(noicewall); CHECKFLAG(snow); CHECKFLAG(clouds);
+ CHECKFLAG(clouds2); CHECKFLAG(fog); CHECKFLAG(fireworks); CHECKFLAG(sakura);
+ CHECKFLAG(leaves); CHECKFLAG(nobaseexp);
CHECKFLAG(nojobexp); CHECKFLAG(nomobloot); CHECKFLAG(nomvploot); CHECKFLAG(nightenabled);
CHECKFLAG(nodrop); CHECKFLAG(novending); CHECKFLAG(loadevent);
CHECKFLAG(nochat); CHECKFLAG(partylock); CHECKFLAG(guildlock); CHECKFLAG(src4instance);
@@ -7567,48 +7611,53 @@ ACMD(mapflag) {
}
for (i = 0; flag_name[i]; i++) flag_name[i] = TOLOWER(flag_name[i]); //lowercase
- if (strcmp( flag_name , "gvg" ) == 0) {
- if( flag && !map->list[sd->bl.m].flag.gvg )
- map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_GVG_NAME));
- else if ( !flag && map->list[sd->bl.m].flag.gvg )
- map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
- } else if ( strcmp( flag_name , "pvp" ) == 0 ) {
- if ( flag && !map->list[sd->bl.m].flag.pvp )
- map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_PVP_NAME));
- else if ( !flag && map->list[sd->bl.m].flag.pvp )
- map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
- } else if ( strcmp( flag_name , "battleground" ) == 0 ) {
- if ( flag && !map->list[sd->bl.m].flag.battleground )
- map->zone_change2(sd->bl.m,strdb_get(map->zone_db, MAP_ZONE_BG_NAME));
- else if ( !flag && map->list[sd->bl.m].flag.battleground )
- map->zone_change2(sd->bl.m,map->list[sd->bl.m].prev_zone);
+ if (strcmp(flag_name, "gvg") == 0) {
+ if (flag && !map->list[sd->bl.m].flag.gvg)
+ map->zone_change2(sd->bl.m, strdb_get(map->zone_db, MAP_ZONE_GVG_NAME));
+ else if (!flag && map->list[sd->bl.m].flag.gvg)
+ map->zone_change2(sd->bl.m, map->list[sd->bl.m].prev_zone);
+ } else if (strcmp(flag_name, "pvp") == 0) {
+ if (flag && !map->list[sd->bl.m].flag.pvp)
+ map->zone_change2(sd->bl.m, strdb_get(map->zone_db, MAP_ZONE_PVP_NAME));
+ else if (!flag && map->list[sd->bl.m].flag.pvp)
+ map->zone_change2(sd->bl.m, map->list[sd->bl.m].prev_zone);
+ } else if (strcmp(flag_name, "battleground") == 0) {
+ if (flag && !map->list[sd->bl.m].flag.battleground)
+ map->zone_change2(sd->bl.m, strdb_get(map->zone_db, MAP_ZONE_BG_NAME));
+ else if (!flag && map->list[sd->bl.m].flag.battleground)
+ map->zone_change2(sd->bl.m, map->list[sd->bl.m].prev_zone);
+ } else if (strcmp(flag_name, "cvc") == 0) {
+ if (flag && !map->list[sd->bl.m].flag.cvc)
+ map->zone_change2(sd->bl.m, strdb_get(map->zone_db, MAP_ZONE_CVC_NAME));
+ else if (!flag && map->list[sd->bl.m].flag.cvc)
+ map->zone_change2(sd->bl.m, map->list[sd->bl.m].prev_zone);
}
SETFLAG(autotrade); SETFLAG(allowks); SETFLAG(nomemo); SETFLAG(noteleport);
SETFLAG(noreturn); SETFLAG(monster_noteleport); SETFLAG(nosave); SETFLAG(nobranch);
SETFLAG(noexppenalty); SETFLAG(pvp); SETFLAG(pvp_noparty); SETFLAG(pvp_noguild);
SETFLAG(pvp_nightmaredrop); SETFLAG(pvp_nocalcrank); SETFLAG(gvg_castle); SETFLAG(gvg);
- SETFLAG(gvg_dungeon); SETFLAG(gvg_noparty); SETFLAG(battleground); SETFLAG(nozenypenalty);
- SETFLAG(notrade); SETFLAG(noskill); SETFLAG(nowarp); SETFLAG(nowarpto);
- SETFLAG(noicewall); SETFLAG(snow); SETFLAG(clouds); SETFLAG(clouds2);
- SETFLAG(fog); SETFLAG(fireworks); SETFLAG(sakura); SETFLAG(leaves);
- SETFLAG(nobaseexp);
- SETFLAG(nojobexp); SETFLAG(nomobloot); SETFLAG(nomvploot); SETFLAG(nightenabled);
- SETFLAG(nodrop); SETFLAG(novending); SETFLAG(loadevent);
- SETFLAG(nochat); SETFLAG(partylock); SETFLAG(guildlock); SETFLAG(src4instance);
- SETFLAG(notomb); SETFLAG(nocashshop); SETFLAG(noviewid);
-
- clif->message(sd->fd,msg_fd(fd,1314)); // Invalid flag name or flag.
- clif->message(sd->fd,msg_fd(fd,1312)); // Usage: "@mapflag monster_noteleport 1" (0=Off | 1=On)
- clif->message(sd->fd,msg_fd(fd,1315)); // Available Flags:
- clif->message(sd->fd,"----------------------------------");
- clif->message(sd->fd,"town, autotrade, allowks, nomemo, noteleport, noreturn, monster_noteleport, nosave,");
- clif->message(sd->fd,"nobranch, noexppenalty, pvp, pvp_noparty, pvp_noguild, pvp_nightmaredrop,");
- clif->message(sd->fd,"pvp_nocalcrank, gvg_castle, gvg, gvg_dungeon, gvg_noparty, battleground,");
- clif->message(sd->fd,"nozenypenalty, notrade, noskill, nowarp, nowarpto, noicewall, snow, clouds, clouds2,");
- clif->message(sd->fd,"fog, fireworks, sakura, leaves, nobaseexp, nojobexp, nomobloot,");
- clif->message(sd->fd,"nomvploot, nightenabled, nodrop, novending, loadevent, nochat, partylock,");
- clif->message(sd->fd,"guildlock, src4instance, notomb, nocashshop, noviewid");
+ SETFLAG(gvg_dungeon); SETFLAG(gvg_noparty); SETFLAG(battleground); SETFLAG(cvc);
+ SETFLAG(nozenypenalty); SETFLAG(notrade); SETFLAG(noskill); SETFLAG(nowarp);
+ SETFLAG(nowarpto); SETFLAG(noicewall); SETFLAG(snow); SETFLAG(clouds);
+ SETFLAG(clouds2); SETFLAG(fog); SETFLAG(fireworks); SETFLAG(sakura);
+ SETFLAG(leaves); SETFLAG(nobaseexp); SETFLAG(nojobexp); SETFLAG(nomobloot);
+ SETFLAG(nomvploot); SETFLAG(nightenabled); SETFLAG(nodrop); SETFLAG(novending);
+ SETFLAG(loadevent); SETFLAG(nochat); SETFLAG(partylock); SETFLAG(guildlock);
+ SETFLAG(src4instance); SETFLAG(notomb); SETFLAG(nocashshop); SETFLAG(noviewid);
+
+
+ clif->message(sd->fd, msg_fd(fd, 1314)); // Invalid flag name or flag.
+ clif->message(sd->fd, msg_fd(fd, 1312)); // Usage: "@mapflag monster_noteleport 1" (0=Off | 1=On)
+ clif->message(sd->fd, msg_fd(fd, 1315)); // Available Flags:
+ clif->message(sd->fd, "----------------------------------");
+ clif->message(sd->fd, "town, autotrade, allowks, nomemo, noteleport, noreturn, monster_noteleport, nosave,");
+ clif->message(sd->fd, "nobranch, noexppenalty, pvp, pvp_noparty, pvp_noguild, pvp_nightmaredrop,");
+ clif->message(sd->fd, "pvp_nocalcrank, gvg_castle, gvg, gvg_dungeon, gvg_noparty, battleground, cvc,");
+ clif->message(sd->fd, "nozenypenalty, notrade, noskill, nowarp, nowarpto, noicewall, snow, clouds, clouds2,");
+ clif->message(sd->fd, "fog, fireworks, sakura, leaves, nobaseexp, nojobexp, nomobloot,");
+ clif->message(sd->fd, "nomvploot, nightenabled, nodrop, novending, loadevent, nochat, partylock,");
+ clif->message(sd->fd, "guildlock, src4instance, notomb, nocashshop, noviewid");
#undef CHECKFLAG
#undef SETFLAG
@@ -8424,7 +8473,7 @@ void atcommand_commands_sub(struct map_session_data* sd, const int fd, AtCommand
}
}
if (count_bind > 0)
- clif->message(fd, line_buff); // Last Line
+ clif->message(fd, line_buff); // Last Line
count += count_bind;
}
@@ -9451,6 +9500,139 @@ ACMD(lang) {
return true;
}
+
+ACMD(claninfo)
+{
+ struct DBIterator *iter = db_iterator(clan->db);
+ struct clan *c;
+ int i, count;
+
+ for (c = dbi_first(iter); dbi_exists(iter); c = dbi_next(iter)) {
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "Clan #%d:", c->clan_id);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Name: %s", c->name);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Constant: %s", c->constant);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Master: %s", c->master);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Map: %s", c->map);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Max Member: %d", c->max_member);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Kick Time: %dh", c->kick_time / 3600);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Check Time: %dh", c->check_time / 3600000);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Connected Members: %d", c->connect_member);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Total Members: %d", c->member_count);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Allies: %d", VECTOR_LENGTH(c->allies));
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ count = 0;
+ for (i = 0; i < VECTOR_LENGTH(c->allies); i++) {
+ struct clan_relationship *ally = &VECTOR_INDEX(c->allies, i);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- - Ally #%d (Id: %d): %s", i + 1, ally->clan_id, ally->constant);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+ count++;
+ }
+
+ if (count == 0) {
+ clif->messagecolor_self(fd, COLOR_DEFAULT, "- - No Allies Found!");
+ }
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- Antagonists: %d", VECTOR_LENGTH(c->antagonists));
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+
+ count = 0;
+ for (i = 0; i < VECTOR_LENGTH(c->antagonists); i++) {
+ struct clan_relationship *antagonist = &VECTOR_INDEX(c->antagonists, i);
+
+ safesnprintf(atcmd_output, sizeof(atcmd_output), "- - Antagonist #%d (Id: %d): %s", i + 1, antagonist->clan_id, antagonist->constant);
+ clif->messagecolor_self(fd, COLOR_DEFAULT, atcmd_output);
+ count++;
+ }
+
+ if (count == 0) {
+ clif->messagecolor_self(fd, COLOR_DEFAULT, "- - No Antagonists Found!");
+ }
+
+ clif->messagecolor_self(fd, COLOR_DEFAULT, "============================");
+ }
+ dbi_destroy(iter);
+ return true;
+}
+
+/**
+ * Clan System: Joins in the given clan
+ */
+ACMD(joinclan)
+{
+ int clan_id;
+
+ if (*message == '\0') {
+ clif->message(fd, "Please enter a Clan ID (usage: @joinclan <clan ID>).");
+ return false;
+ }
+ if (sd->status.clan_id != 0) {
+ clif->messagecolor_self(fd, COLOR_RED, "You are already in a clan.");
+ return false;
+ } else if (sd->status.guild_id != 0) {
+ clif->messagecolor_self(fd, COLOR_RED, "You must leave your guild before enter in a clan.");
+ return false;
+ }
+
+ clan_id = atoi(message);
+ if (clan_id <= 0) {
+ clif->messagecolor_self(fd, COLOR_RED, "Invalid Clan ID.");
+ return false;
+ }
+ if (!clan->join(sd, clan_id)) {
+ clif->messagecolor_self(fd, COLOR_RED, "The clan couldn't be joined.");
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Clan System: Leaves current clan
+ */
+ACMD(leaveclan)
+{
+ if (sd->status.clan_id == 0) {
+ clif->messagecolor_self(fd, COLOR_RED, "You aren't in a clan.");
+ return false;
+ }
+ if (!clan->leave(sd, false)) {
+ clif->messagecolor_self(fd, COLOR_RED, "Failed on leaving clan.");
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Clan System: Reloads clan db
+ */
+ACMD(reloadclans)
+{
+ clan->reload();
+ clif->messagecolor_self(fd, COLOR_DEFAULT, "Clan configuration and database have been reloaded.");
+ return true;
+}
+
/**
* Fills the reference of available commands in atcommand DBMap
**/
@@ -9723,6 +9905,12 @@ void atcommand_basecommands(void) {
ACMD_DEF(cddebug),
ACMD_DEF(lang),
ACMD_DEF(bodystyle),
+ ACMD_DEF(cvcoff),
+ ACMD_DEF(cvcon),
+ ACMD_DEF(claninfo),
+ ACMD_DEF(joinclan),
+ ACMD_DEF(leaveclan),
+ ACMD_DEF(reloadclans),
};
int i;
@@ -9868,6 +10056,7 @@ bool atcommand_exec(const int fd, struct map_session_data *sd, const char *messa
{
char params[100], command[100];
char output[CHAT_SIZE_MAX];
+ bool logCommand;
// Reconstructed message
char atcmd_msg[CHAT_SIZE_MAX];
@@ -10011,6 +10200,7 @@ bool atcommand_exec(const int fd, struct map_session_data *sd, const char *messa
}
}
+ logCommand = info->log;
//Attempt to use the command
if ((info->func(fd, ssd, command, params,info) != true)) {
#ifdef AUTOTRADE_PERSISTENCY
@@ -10022,7 +10212,8 @@ bool atcommand_exec(const int fd, struct map_session_data *sd, const char *messa
return true;
}
- if (info->log) /* log only if this command should be logged [Ind/Hercules] */
+ // info->log cant be used here, because info can be freed [4144]
+ if (logCommand) /* log only if this command should be logged [Ind/Hercules] */
logs->atcommand(sd, is_atcommand ? atcmd_msg : message);
return true;
diff --git a/src/map/battle.c b/src/map/battle.c
index 70ebc4a08..bd7e31d05 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -25,6 +25,7 @@
#include "map/battleground.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/elemental.h"
#include "map/guild.h"
@@ -6774,14 +6775,17 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
return (flag&state)?1:-1;
}
- if( map_flag_vs(m) ) {
+ if (map_flag_vs(m)) {
//Check rivalry settings.
- int sbg_id = 0, tbg_id = 0;
- if( map->list[m].flag.battleground ) {
+ int sbg_id = 0, tbg_id = 0, s_clan = 0, t_clan = 0;
+ if (map->list[m].flag.battleground) {
sbg_id = bg->team_get_id(s_bl);
tbg_id = bg->team_get_id(t_bl);
+ } else if (map->list[m].flag.cvc) {
+ s_clan = clan->get_id(s_bl);
+ t_clan = clan->get_id(t_bl);
}
- if( flag&(BCT_PARTY|BCT_ENEMY) ) {
+ if (flag & (BCT_PARTY | BCT_ENEMY)) {
int s_party = status->get_party_id(s_bl);
int s_guild = status->get_guild_id(s_bl);
int t_guild = status->get_guild_id(t_bl);
@@ -6791,10 +6795,12 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if (s_guild != 0 && t_guild != 0 && (s_guild == t_guild || guild->isallied(s_guild, t_guild)))
state |= BCT_PARTY;
else
- state |= flag&BCT_ENEMY ? BCT_ENEMY : BCT_PARTY;
+ state |= flag & BCT_ENEMY ? BCT_ENEMY : BCT_PARTY;
} else if (!(map->list[m].flag.pvp && map->list[m].flag.pvp_noparty)
&& (!map->list[m].flag.battleground || sbg_id == tbg_id)) {
state |= BCT_PARTY;
+ } else if (!map->list[m].flag.cvc || s_clan == t_clan) {
+ state |= BCT_PARTY;
} else {
state |= BCT_ENEMY;
}
@@ -6802,18 +6808,22 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
state |= BCT_ENEMY;
}
}
- if( flag&(BCT_GUILD|BCT_ENEMY) ) {
+ if (flag & (BCT_GUILD | BCT_ENEMY)) {
int s_guild = status->get_guild_id(s_bl);
int t_guild = status->get_guild_id(t_bl);
- if( !(map->list[m].flag.pvp && map->list[m].flag.pvp_noguild)
+ if (!(map->list[m].flag.pvp && map->list[m].flag.pvp_noguild)
&& s_guild && t_guild
- && (s_guild == t_guild || (!(flag&BCT_SAMEGUILD) && guild->isallied(s_guild, t_guild)))
- && (!map->list[m].flag.battleground || sbg_id == tbg_id) )
+ && (s_guild == t_guild || (!(flag & BCT_SAMEGUILD) && guild->isallied(s_guild, t_guild)))
+ && (!map->list[m].flag.battleground || sbg_id == tbg_id)
+ && (!map->list[m].flag.cvc || s_clan == t_clan)
+ ) {
state |= BCT_GUILD;
- else
+ } else {
state |= BCT_ENEMY;
+ }
}
- if( state&BCT_ENEMY && map->list[m].flag.battleground && sbg_id && sbg_id == tbg_id )
+
+ if (state & BCT_ENEMY && ((map->list[m].flag.battleground && sbg_id && sbg_id == tbg_id) || (map->list[m].flag.cvc && s_clan && s_clan == t_clan)))
state &= ~BCT_ENEMY;
if (state&BCT_ENEMY && battle_config.pk_mode && !map_flag_gvg(m) && s_bl->type == BL_PC && t_bl->type == BL_PC) {
@@ -7299,7 +7309,7 @@ static const struct battle_data {
{ "max_body_style", &battle_config.max_body_style, 4, 0, SHRT_MAX, },
{ "save_body_style", &battle_config.save_body_style, 0, 0, 1, },
{ "player_warp_keep_direction", &battle_config.player_warp_keep_direction, 0, 0, 1, },
- { "atcommand_levelup_events", &battle_config.atcommand_levelup_events, 0, 0, 1, },
+ { "atcommand_levelup_events", &battle_config.atcommand_levelup_events, 0, 0, 1, },
{ "bow_unequip_arrow", &battle_config.bow_unequip_arrow, 1, 0, 1, },
{ "max_summoner_parameter", &battle_config.max_summoner_parameter, 120, 10, 10000, },
{ "mvp_exp_reward_message", &battle_config.mvp_exp_reward_message, 0, 0, 1, },
diff --git a/src/map/battle.h b/src/map/battle.h
index 429249dca..8b7fea29f 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -546,7 +546,7 @@ struct Battle_Config {
// Warp Face Direction
int player_warp_keep_direction;
- int atcommand_levelup_events; // Enable atcommands trigger level up events for NPCs
+ int atcommand_levelup_events; // Enable atcommands trigger level up events for NPCs
int bow_unequip_arrow;
diff --git a/src/map/clan.c b/src/map/clan.c
new file mode 100644
index 000000000..7aa9be5d4
--- /dev/null
+++ b/src/map/clan.c
@@ -0,0 +1,1075 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2017 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#define HERCULES_CORE
+
+#include "config/core.h"
+#include "clan.h"
+
+#include "map/clif.h"
+#include "map/chrif.h"
+#include "map/homunculus.h"
+#include "map/intif.h"
+#include "map/log.h"
+#include "map/mercenary.h"
+#include "map/mob.h"
+#include "map/npc.h"
+#include "map/pc.h"
+#include "map/pet.h"
+#include "map/script.h"
+#include "map/skill.h"
+#include "map/status.h"
+#include "common/HPM.h"
+#include "common/conf.h"
+#include "common/cbasetypes.h"
+#include "common/db.h"
+#include "common/memmgr.h"
+#include "common/mapindex.h"
+#include "common/nullpo.h"
+#include "common/showmsg.h"
+#include "common/socket.h"
+#include "common/strlib.h"
+#include "common/timer.h"
+#include "common/utils.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct clan_interface clan_s;
+struct clan_interface *clan;
+
+/**
+ * Searches a Clan by clan_id
+ *
+ * @param clan_id Clan ID
+ * @return struct clan*
+ */
+struct clan *clan_search(int clan_id)
+{
+ if (clan_id <= 0) {
+ return NULL;
+ }
+ return (struct clan *)idb_get(clan->db, clan_id);
+}
+
+/**
+ * Searches a Clan by clan_name or constant
+ *
+ * @param name Clan Name
+ * @return struct clan*
+ */
+struct clan *clan_searchname(const char *name)
+{
+ struct clan *c;
+ struct DBIterator *iter;
+
+ nullpo_retr(NULL, name);
+
+ iter = db_iterator(clan->db);
+ for (c = dbi_first(iter); dbi_exists(iter); c = dbi_next(iter)) {
+ if (strncmpi(c->name, name, NAME_LENGTH) == 0 || strncmpi(c->constant, name, NAME_LENGTH) == 0) {
+ break;
+ }
+ }
+ dbi_destroy(iter);
+ return c;
+}
+
+/**
+ * Returns the first online character of clan
+ *
+ * @param (struct clan *) c clan structure
+ * @return (struct map_session_data *)
+ */
+struct map_session_data *clan_getonlinesd(struct clan *c)
+{
+ int i;
+ nullpo_retr(NULL, c);
+
+ ARR_FIND(0, VECTOR_LENGTH(c->members), i, (VECTOR_INDEX(c->members, i).sd != NULL && VECTOR_INDEX(c->members, i).online == 1));
+ return (i < VECTOR_LENGTH(c->members)) ? VECTOR_INDEX(c->members, i).sd : NULL;
+}
+
+/**
+ * Returns the member index of given Player
+ *
+ * @param c Clan Data
+ * @param char_id Player's Char ID
+ * @return int
+ */
+int clan_getindex(const struct clan *c, int char_id)
+{
+ int i;
+ nullpo_retr(INDEX_NOT_FOUND, c);
+
+ ARR_FIND(0, VECTOR_LENGTH(c->members), i, VECTOR_INDEX(c->members, i).char_id == char_id);
+
+ if (i == VECTOR_LENGTH(c->members)) {
+ return INDEX_NOT_FOUND;
+ }
+ return i;
+}
+
+/**
+ * Starts clan buff
+ */
+void clan_buff_start(struct map_session_data *sd, struct clan *c)
+{
+ nullpo_retv(sd);
+ nullpo_retv(c);
+
+ if (c->buff.icon <= 0) {
+ return;
+ }
+
+ clif->sc_load(&sd->bl, sd->bl.id, SELF, c->buff.icon, 0, c->clan_id, 0);
+ script->run(c->buff.script, 0, sd->bl.id, npc->fake_nd->bl.id);
+}
+
+/**
+ * Ends clan buff
+ */
+void clan_buff_end(struct map_session_data *sd, struct clan *c)
+{
+ nullpo_retv(sd);
+ nullpo_retv(c);
+
+ if (c->buff.icon <= 0) {
+ return;
+ }
+
+ clif->sc_end(&sd->bl, sd->bl.id, SELF, c->buff.icon);
+}
+
+/**
+ * Joins a Player into a Clan
+ *
+ * @param sd Player's Map Session Data
+ * @param clan_id Clan which will add this player
+ * @return bool
+ */
+bool clan_join(struct map_session_data *sd, int clan_id)
+{
+ struct clan *c;
+ struct clan_member m;
+
+ nullpo_ret(sd);
+
+ // Already joined a guild or clan
+ if (sd->status.guild_id > 0 || sd->guild != NULL) {
+ ShowError("clan_join: Player already joined in a guild. char_id: %d\n", sd->status.char_id);
+ return false;
+ } else if ( sd->status.clan_id > 0 || sd->clan != NULL) {
+ ShowError("clan_join: Player already joined in a clan. char_id: %d\n", sd->status.char_id);
+ return false;
+ }
+
+ c = clan->search(clan_id);
+ if (c == NULL) {
+ ShowError("clan_join: Invalid Clan ID: %d\n", clan_id);
+ return false;
+ }
+
+ if (!c->received) {
+ return false;
+ }
+
+ if (clan->getindex(c, sd->status.char_id) != INDEX_NOT_FOUND) {
+ ShowError("clan_join: Player already joined this clan. char_id: %d clan_id: %d\n", sd->status.char_id, clan_id);
+ return false;
+ }
+
+ if (VECTOR_LENGTH(c->members) >= c->max_member || c->member_count >= c->max_member) {
+ ShowError("clan_join: Clan '%s' already reached its max capacity!\n", c->name);
+ return false;
+ }
+
+ VECTOR_ENSURE(c->members, 1, 1);
+
+ m.sd = sd;
+ m.char_id = sd->status.char_id;
+ m.online = 1;
+ m.last_login = sd->status.last_login;
+ VECTOR_PUSH(c->members, m);
+
+ c->connect_member++;
+ c->member_count++;
+
+ sd->status.clan_id = c->clan_id;
+ sd->clan = c;
+
+ sc_start2(NULL, &sd->bl, SC_CLAN_INFO, 10000, 0, c->clan_id, INFINITE_DURATION);
+ status_calc_pc(sd, SCO_FORCE);
+
+ chrif->save(sd, 0);
+ clif->clan_basicinfo(sd);
+ clif->clan_onlinecount(c);
+ return true;
+}
+
+/**
+ * Invoked when a player joins
+ * It assumes that clan_id is not 0
+ *
+ * @param sd Player Data
+ */
+void clan_member_online(struct map_session_data *sd, bool first)
+{
+ struct clan *c;
+ int i, inactivity;
+ nullpo_retv(sd);
+
+ // For invalid values we must reset it to 0 (no clan)
+ if (sd->status.clan_id < 0) {
+ ShowError("clan_member_online: Invalid clan id, changing to '0'. clan_id='%d' char_id='%d'\n", sd->status.clan_id, sd->status.char_id);
+ sd->status.clan_id = 0;
+ return;
+ }
+
+ c = clan->search(sd->status.clan_id);
+ if (c == NULL) {
+ // This is a silent return because it will reset clan_id in case
+ // a custom clan that was removed and this is a remaining member
+ sd->status.clan_id = 0;
+ sd->clan = NULL;
+ if (!first) {
+ status_change_end(&sd->bl, SC_CLAN_INFO, INVALID_TIMER); // Remove the status
+ status_calc_pc(sd, SCO_FORCE);
+ }
+ clif->clan_leave(sd);
+ return;
+ }
+
+ if (!c->received) {
+ return;
+ }
+
+ if (c->max_member <= c->member_count || VECTOR_LENGTH(c->members) >= c->max_member) {
+ ShowError("Clan System: More members than the maximum allowed in clan #%d\n", c->clan_id);
+ return;
+ }
+
+ i = clan->getindex(c, sd->status.char_id);
+ inactivity = (int)(time(NULL) - sd->status.last_login);
+ if (i == INDEX_NOT_FOUND) {
+ struct clan_member m;
+
+ if (c->kick_time > 0 && inactivity > c->kick_time) {
+ sd->status.clan_id = 0;
+ sd->clan = NULL;
+ clan->buff_end(sd, c);
+ status_change_end(&sd->bl, SC_CLAN_INFO, INVALID_TIMER);
+ clif->clan_leave(sd);
+ return;
+ }
+
+ VECTOR_ENSURE(c->members, 1, 1);
+
+ m.sd = sd;
+ m.char_id = sd->status.char_id;
+ m.online = 1;
+ m.last_login = sd->status.last_login;
+ VECTOR_PUSH(c->members, m);
+ } else {
+ struct clan_member *m = &VECTOR_INDEX(c->members, i);
+
+
+ if (c->kick_time > 0 && inactivity > c->kick_time) {
+ if (m->online == 1) {
+ m->online = 0;
+ m->sd = NULL;
+ c->connect_member--;
+ c->member_count--;
+ }
+ clan->buff_end(sd, c);
+ sd->status.clan_id = 0;
+ sd->clan = NULL;
+ status_change_end(&sd->bl, SC_CLAN_INFO, INVALID_TIMER);
+ VECTOR_ERASE(c->members, i);
+ clif->clan_leave(sd);
+ return;
+ }
+
+ m->sd = sd;
+ m->online = 1;
+ m->last_login = sd->status.last_login;
+ }
+
+ sd->clan = c;
+ c->connect_member++;
+
+ sc_start2(NULL, &sd->bl, SC_CLAN_INFO, 10000, 0, c->clan_id, INFINITE_DURATION);
+
+ if (!first) {
+ // When first called from pc.c we don't need to do status_calc
+ status_calc_pc(sd, SCO_FORCE);
+ }
+
+ clif->clan_basicinfo(sd);
+ clif->clan_onlinecount(c);
+}
+
+/**
+ * Re-join a player on its clan
+ */
+int clan_rejoin(struct map_session_data *sd, va_list ap)
+{
+ nullpo_ret(sd);
+
+ if (sd->status.clan_id != 0) {
+ // Note: Even if the value is invalid (lower than zero)
+ // the function will fix the invalid value
+ clan->member_online(sd, false);
+ }
+ return 0;
+}
+
+/**
+ * Removes Player from clan
+ */
+bool clan_leave(struct map_session_data *sd, bool first)
+{
+ int i;
+ struct clan *c;
+
+ nullpo_ret(sd);
+
+ c = sd->clan;
+
+ if (c == NULL) {
+ return false;
+ }
+
+ if (!c->received) {
+ return false;
+ }
+
+ i = clan->getindex(c, sd->status.char_id);
+ if (i != INDEX_NOT_FOUND) {
+ VECTOR_ERASE(c->members, i);
+ c->connect_member--;
+ c->member_count--;
+ }
+
+ sd->status.clan_id = 0;
+ sd->clan = NULL;
+ clan->buff_end(sd, c);
+
+ status_change_end(&sd->bl, SC_CLAN_INFO, INVALID_TIMER);
+ if (!first) {
+ status_calc_pc(sd, SCO_FORCE);
+ }
+
+ chrif->save(sd, 0);
+ clif->clan_onlinecount(c);
+ clif->clan_leave(sd);
+ return true;
+}
+
+/**
+ * Sets a player offline
+ *
+ * @param (struct map_session_data *) sd Player Data
+ */
+void clan_member_offline(struct map_session_data *sd)
+{
+ struct clan *c;
+ int i;
+
+ nullpo_retv(sd);
+
+ c = sd->clan;
+
+ if (c == NULL) {
+ return;
+ }
+
+ i = clan->getindex(c, sd->status.char_id);
+ if (i != INDEX_NOT_FOUND && VECTOR_INDEX(c->members, i).online == 1) {
+ // Only if it is online, because unit->free is called twice
+ VECTOR_INDEX(c->members, i).online = 0;
+ VECTOR_INDEX(c->members, i).sd = NULL;
+ c->connect_member--;
+ }
+ clif->clan_onlinecount(c);
+}
+
+
+/**
+ * Sends a message to the whole clan
+ */
+bool clan_send_message(struct map_session_data *sd, const char *mes)
+{
+ int len;
+ nullpo_retr(false, sd);
+ nullpo_retr(false, mes);
+
+ len = (int)strlen(mes);
+
+ if (sd->status.clan_id == 0) {
+ return false;
+ }
+ clan->recv_message(sd->clan, mes, len);
+
+ // Chat logging type 'C' / Clan Chat
+ logs->chat(LOG_CHAT_CLAN, sd->status.clan_id, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, mes);
+
+ return true;
+}
+
+/**
+ * Clan receive a message, will be displayed to whole clan
+ */
+void clan_recv_message(struct clan *c, const char *mes, int len)
+{
+ clif->clan_message(c, mes, len);
+}
+
+/**
+ * Set constants for each clan
+ */
+void clan_set_constants(void)
+{
+ struct DBIterator *iter = db_iterator(clan->db);
+ struct clan *c;
+
+ for (c = dbi_first(iter); dbi_exists(iter); c = dbi_next(iter)) {
+ script->set_constant2(c->constant, c->clan_id, false, false);
+ }
+
+ dbi_destroy(iter);
+}
+
+/**
+ * Returns the clan_id of bl
+ */
+int clan_get_id(const struct block_list *bl)
+{
+ nullpo_ret(bl);
+
+ switch (bl->type) {
+ case BL_PC: {
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
+ return sd->status.clan_id;
+ }
+ case BL_NPC: {
+ const struct npc_data *nd = BL_UCCAST(BL_NPC, bl);
+ return nd->clan_id;
+ }
+ case BL_PET: {
+ const struct pet_data *pd = BL_UCCAST(BL_PET, bl);
+ if (pd->msd != NULL)
+ return pd->msd->status.clan_id;
+ }
+ break;
+ case BL_MOB: {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ const struct map_session_data *msd;
+ if (md->special_state.ai != AI_NONE && (msd = map->id2sd(md->master_id)) != NULL) {
+ return msd->status.clan_id;
+ }
+ return md->clan_id;
+ }
+ case BL_HOM: {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ if (hd->master != NULL) {
+ return hd->master->status.clan_id;
+ }
+ }
+ break;
+ case BL_MER: {
+ const struct mercenary_data *md = BL_UCCAST(BL_MER, bl);
+ if (md->master != NULL) {
+ return md->master->status.clan_id;
+ }
+ }
+ break;
+ case BL_SKILL: {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, bl);
+ if (su->group != NULL)
+ return su->group->clan_id;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+/**
+ * Checks every clan player and remove those who are inactive
+ */
+int clan_inactivity_kick(int tid, int64 tick, int id, intptr_t data)
+{
+ struct clan *c = NULL;
+ int i;
+
+ if ((c = clan->search(id)) != NULL) {
+ if (!c->kick_time || c->tid != tid || tid == INVALID_TIMER || c->tid == INVALID_TIMER) {
+ ShowError("Timer Mismatch (Time: %d seconds) %d != %d", c->kick_time, c->tid, tid);
+ Assert_report(0);
+ return 0;
+ }
+ for (i = 0; i < VECTOR_LENGTH(c->members); i++) {
+ struct clan_member *m = &VECTOR_INDEX(c->members, i);
+ if (m->char_id <= 0 || m->online <= 0)
+ continue;
+
+ if (m->online) {
+ struct map_session_data *sd = m->sd;
+ if (DIFF_TICK32(sockt->last_tick, sd->idletime) > c->kick_time) {
+ clan->leave(sd, false);
+ }
+ } else if ((time(NULL) - m->last_login) > c->kick_time) {
+ VECTOR_ERASE(c->members, i);
+ c->member_count--;
+ clif->clan_onlinecount(c);
+ }
+ }
+ //Perform the kick for offline members that didn't connect after a server restart
+ c->received = false;
+ intif->clan_kickoffline(c->clan_id, c->kick_time);
+ c->tid = timer->add(timer->gettick() + c->check_time, clan->inactivity_kick, c->clan_id, 0);
+ }
+ return 1;
+}
+
+/**
+ * Timeout for the request of offline kick
+ */
+int clan_request_kickoffline(int tid, int64 tick, int id, intptr_t data)
+{
+ struct clan *c = NULL;
+
+ if ((c = clan->search(id)) != NULL) {
+ if (c->req_kick_tid != tid || c->req_kick_tid == INVALID_TIMER) {
+ ShowError("Timer Mismatch %d != %d", c->tid, tid);
+ return 0;
+ }
+
+ if (c->received) {
+ c->req_kick_tid = INVALID_TIMER;
+ return 1;
+ }
+
+ intif->clan_kickoffline(c->clan_id, c->kick_time);
+ c->req_kick_tid = timer->add(timer->gettick() + clan->req_timeout, clan->request_kickoffline, c->clan_id, 0);
+ }
+ return 1;
+}
+
+/**
+ * Timeout of the request for counting members
+ */
+int clan_request_membercount(int tid, int64 tick, int id, intptr_t data)
+{
+ struct clan *c = NULL;
+
+ if ((c = clan->search(id)) != NULL) {
+ if (c->req_count_tid != tid || c->req_count_tid == INVALID_TIMER) {
+ ShowError("Timer Mismatch %d != %d", c->tid, tid);
+ return 0;
+ }
+
+ if (c->received) {
+ c->req_count_tid = INVALID_TIMER;
+ return 1;
+ }
+
+ intif->clan_membercount(c->clan_id, c->kick_time);
+ c->req_count_tid = timer->add(timer->gettick() + clan->req_timeout, clan->request_membercount, c->clan_id, 0);
+ }
+ return 1;
+}
+
+/**
+ * Processes any (plugin-defined) additional fields for a clan entry.
+ *
+ * @param[in, out] entry The destination clan entry, already initialized (clan_id is expected to be already set).
+ * @param[in] t The libconfig entry.
+ * @param[in] n Ordinal number of the entry, to be displayed in case of validation errors.
+ * @param[in] source Source of the entry (file name), to be displayed in case of validation errors.
+ */
+void clan_read_db_additional_fields(struct clan *entry, struct config_setting_t *t, int n, const char *source)
+{
+ // do nothing. plugins can do own work
+}
+
+void clan_read_buffs(struct clan *c, struct config_setting_t *buff, const char *source)
+{
+ struct clan_buff *b;
+ const char *str = NULL;
+
+ nullpo_retv(c);
+ nullpo_retv(buff);
+
+ b = &c->buff;
+
+ if (!libconfig->setting_lookup_int(buff, "Icon", &b->icon)) {
+ const char *temp_str = NULL;
+ if (libconfig->setting_lookup_string(buff, "Icon", &temp_str)) {
+ if (*temp_str && !script->get_constant(temp_str, &b->icon)) {
+ ShowWarning("Clan %d: Invalid Buff icon value. Defaulting to SI_BLANK.\n", c->clan_id);
+ b->icon = -1; // SI_BLANK
+ }
+ }
+ }
+
+ if (libconfig->setting_lookup_string(buff, "Script", &str)) {
+ b->script = *str ? script->parse(str, source, -b->icon, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+ }
+}
+
+/**
+ * Processes one clandb entry from the libconfig file, loading and inserting it
+ * into the clan database.
+ *
+ * @param settings Libconfig setting entry. It is expected to be valid and it
+ * won't be freed (it is care of the caller to do so if
+ * necessary).
+ * @param source Source of the entry (file name), to be displayed in case of
+ * validation errors.
+ * @return int.
+ */
+int clan_read_db_sub(struct config_setting_t *settings, const char *source, bool reload)
+{
+ int total, s, valid = 0;
+
+ nullpo_retr(false, settings);
+
+ total = libconfig->setting_length(settings);
+
+ for (s = 0; s < total; s++) {
+ struct clan *c;
+ struct config_setting_t *cl, *buff, *allies, *antagonists;
+ const char *aName, *aLeader, *aMap, *aConst;
+ int max_members, kicktime = 0, kickchecktime = 0, id, i, j;
+
+ cl = libconfig->setting_get_elem(settings, s);
+
+ if (libconfig->setting_lookup_int(cl, "Id", &id)) {
+ if (id <= 0) {
+ ShowError("clan_read_db: Invalid Clan Id %d, skipping...\n", id);
+ return false;
+ }
+
+ if (clan->search(id) != NULL) {
+ ShowError("clan_read_db: Duplicate entry for Clan Id %d, skipping...\n", id);
+ return false;
+ }
+ } else {
+ ShowError("clan_read_db: failed to find 'Id' for clan #%d\n", s);
+ return false;
+ }
+
+ if (libconfig->setting_lookup_string(cl, "Const", &aConst)) {
+ if (!*aConst) {
+ ShowError("clan_read_db: Invalid Clan Const '%s', skipping...\n", aConst);
+ return false;
+ }
+
+ if (strlen(aConst) > NAME_LENGTH) {
+ ShowError("clan_read_db: Clan Name '%s' is longer than %d characters, skipping...\n", aConst, NAME_LENGTH);
+ return false;
+ }
+
+ if (clan->searchname(aConst) != NULL) {
+ ShowError("clan_read_db: Duplicate entry for Clan Const '%s', skipping...\n", aConst);
+ return false;
+ }
+ } else {
+ ShowError("clan_read_db: failed to find 'Const' for clan #%d\n", s);
+ return false;
+ }
+
+ if (libconfig->setting_lookup_string(cl, "Name", &aName)) {
+ if (!*aName) {
+ ShowError("clan_read_db: Invalid Clan Name '%s', skipping...\n", aName);
+ return false;
+ }
+
+ if (strlen(aName) > NAME_LENGTH) {
+ ShowError("clan_read_db: Clan Name '%s' is longer than %d characters, skipping...\n", aName, NAME_LENGTH);
+ return false;
+ }
+
+ if (clan->searchname(aName) != NULL) {
+ ShowError("clan_read_db: Duplicate entry for Clan Name '%s', skipping...\n", aName);
+ return false;
+ }
+ } else {
+ ShowError("clan_read_db: failed to find 'Name' for clan #%d\n", s);
+ return false;
+ }
+
+ if (!libconfig->setting_lookup_string(cl, "Leader", &aLeader)) {
+ ShowError("clan_read_db: failed to find 'Leader' for clan #%d\n", s);
+ return false;
+ }
+
+ if (!libconfig->setting_lookup_string(cl, "Map", &aMap)) {
+ ShowError("clan_read_db: failed to find 'Map' for clan #%d\n", s);
+ return false;
+ }
+
+ CREATE(c, struct clan, 1);
+
+ c->clan_id = id;
+ safestrncpy(c->constant, aConst, NAME_LENGTH);
+ safestrncpy(c->name, aName, NAME_LENGTH);
+ safestrncpy(c->master, aLeader, NAME_LENGTH);
+ safestrncpy(c->map, aMap, MAP_NAME_LENGTH_EXT);
+ c->connect_member = 0;
+ c->member_count = 0; // Char server will count members for us
+ c->received = false;
+ c->req_count_tid = INVALID_TIMER;
+ c->req_kick_tid = INVALID_TIMER;
+ c->tid = INVALID_TIMER;
+
+ if (libconfig->setting_lookup_int(cl, "MaxMembers", &max_members)) {
+ if (max_members > 0) {
+ c->max_member = max_members;
+ } else {
+ ShowError("clan_read_db: Clan #%d has invalid value for 'MaxMembers' setting, defaulting to 'clan->max'...\n", id);
+ c->max_member = clan->max;
+ }
+ } else {
+ c->max_member = clan->max;
+ }
+
+ if (libconfig->setting_lookup_int(cl, "KickTime", &kicktime)) {
+ c->kick_time = 60 * 60 * kicktime;
+ } else {
+ c->kick_time = clan->kicktime;
+ }
+
+ if (libconfig->setting_lookup_int(cl, "CheckTime", &kickchecktime)) {
+ c->check_time = 60 * 60 * max(1, kickchecktime) * 1000;
+ } else {
+ c->check_time = clan->checktime;
+ }
+
+ if ((buff = libconfig->setting_get_member(cl, "Buff")) != NULL) {
+ clan->read_buffs(c, buff, source);
+ }
+
+ allies = libconfig->setting_get_member(cl, "Allies");
+
+ if (allies != NULL) {
+ int a = libconfig->setting_length(allies);
+
+ VECTOR_INIT(c->allies);
+ if (a > 0 && clan->max_relations > 0) {
+ const char *allyConst;
+
+ if (a > clan->max_relations) {
+ ShowWarning("clan_read_db: Clan %d has more allies(%d) than allowed(%d), reading only the first %d...\n", c->clan_id, a, clan->max_relations, clan->max_relations);
+ a = clan->max_relations;
+ }
+
+ VECTOR_ENSURE(c->allies, a, 1);
+ for (i = 0; i < a; i++) {
+ struct clan_relationship r;
+ if ((allyConst = libconfig->setting_get_string_elem(allies, i)) != NULL) {
+ ARR_FIND(0, VECTOR_LENGTH(c->allies), j, strcmp(VECTOR_INDEX(c->allies, j).constant, allyConst) == 0);
+ if (j != VECTOR_LENGTH(c->allies)) {
+ ShowError("clan_read_db: Duplicate entry '%s' in allies for Clan %d in '%s', skipping...\n", allyConst, c->clan_id, source);
+ continue;
+ } else if (strcmp(allyConst, c->constant) == 0) {
+ ShowError("clan_read_db: Clans can't be allies of themselves! Clan Id: %d, in '%s'\n", c->clan_id, source);
+ continue;
+ }
+ safestrncpy(r.constant, allyConst, NAME_LENGTH);
+ VECTOR_PUSH(c->allies, r);
+ }
+
+ }
+ }
+ }
+ antagonists = libconfig->setting_get_member(cl, "Antagonists");
+
+ if (antagonists != NULL) {
+ int a = libconfig->setting_length(antagonists);
+
+ VECTOR_INIT(c->antagonists);
+ if (a > 0 && clan->max_relations > 0) {
+ const char *antagonistConst;
+
+ if (a > clan->max_relations) {
+ ShowWarning("clan_read_db: Clan %d has more antagonists(%d) than allowed(%d), reading only the first %d...\n", c->clan_id, a, clan->max_relations, clan->max_relations);
+ a = clan->max_relations;
+ }
+
+ VECTOR_ENSURE(c->antagonists, a, 1);
+ for (i = 0; i < a; i++) {
+ struct clan_relationship r;
+ if ((antagonistConst = libconfig->setting_get_string_elem(antagonists, i)) != NULL) {
+ ARR_FIND(0, VECTOR_LENGTH(c->antagonists), j, strcmp(VECTOR_INDEX(c->antagonists, j).constant, antagonistConst) == 0);
+ if (j != VECTOR_LENGTH(c->antagonists)) {
+ ShowError("clan_read_db: Duplicate entry '%s' in antagonists for Clan %d in '%s', skipping...\n", antagonistConst, c->clan_id, source);
+ continue;
+ } else if (strcmp(antagonistConst, c->constant) == 0) {
+ ShowError("clan_read_db: Clans can't be antagonists of themselves! Clan Id: %d, in '%s'\n", c->clan_id, source);
+ continue;
+ }
+ safestrncpy(r.constant, antagonistConst, NAME_LENGTH);
+ VECTOR_PUSH(c->antagonists, r);
+ }
+ }
+ }
+ }
+
+ clan->read_db_additional_fields(c, cl, s, source);
+ if (c->kick_time > 0) {
+ c->tid = timer->add(timer->gettick() + c->check_time, clan->inactivity_kick, c->clan_id, 0);
+ }
+ c->received = false;
+ c->req_state = reload ? CLAN_REQ_RELOAD : CLAN_REQ_FIRST;
+ c->req_count_tid = timer->add(timer->gettick() + clan->req_timeout, clan->request_membercount, c->clan_id, 0);
+ idb_put(clan->db, c->clan_id, c);
+ VECTOR_INIT(c->members);
+ valid++;
+ }
+
+ // Validating Relations
+ if (valid > 0) {
+ struct DBIterator *iter = db_iterator(clan->db);
+ struct clan *c_ok, *c;
+ int i;
+
+ for (c_ok = dbi_first(iter); dbi_exists(iter); c_ok = dbi_next(iter)) {
+ i = VECTOR_LENGTH(c_ok->allies);
+ while ( i > 0) {
+ struct clan_relationship *r;
+
+ i--;
+ r = &VECTOR_INDEX(c_ok->allies, i);
+ if ((c = clan->searchname(r->constant)) == NULL) {
+ ShowError("clan_read_db: Invalid (nonexistent) Ally '%s' for clan %d in '%s', skipping ally...\n", r->constant, c_ok->clan_id, source);
+ VECTOR_ERASE(c_ok->allies, i);
+ } else {
+ r->clan_id = c->clan_id;
+ }
+ }
+
+ i = VECTOR_LENGTH(c_ok->antagonists);
+ while ( i > 0) {
+ struct clan_relationship *r;
+
+ i--;
+ r = &VECTOR_INDEX(c_ok->antagonists, i);
+ if ((c = clan->searchname(r->constant)) == NULL) {
+ ShowError("clan_read_db: Invalid (nonexistent) Antagonist '%s' for clan %d in '%s', skipping antagonist...", r->constant, c_ok->clan_id, source);
+ VECTOR_ERASE(c_ok->antagonists, i);
+ } else {
+ r->clan_id = c->clan_id;
+ }
+ }
+ }
+ dbi_destroy(iter);
+ }
+
+ ShowStatus("Done reading '" CL_WHITE "%d" CL_RESET "' valid clans of '" CL_WHITE "%d" CL_RESET "' entries in '" CL_WHITE "%s" CL_RESET "'.\n", valid, total, source);
+ return valid;
+}
+
+/**
+ * Reads Clan DB included by clan configuration file.
+ *
+ * @param settings The Settings Group from config file.
+ * @param source File name.
+ */
+void clan_read_db(struct config_setting_t *settings, const char *source, bool reload)
+{
+ struct config_setting_t *clans;
+
+ nullpo_retv(settings);
+
+ if ((clans = libconfig->setting_get_member(settings, "clans")) != NULL) {
+ int read;
+
+ read = clan->read_db_sub(clans, source, reload);
+ if (read > 0) {
+ clan->set_constants();
+ }
+ } else {
+ ShowError("clan_read_db: Can't find setting 'clans' in '%s'. No Clans found.\n", source);
+ }
+}
+
+/**
+ * Reads clan config file
+ *
+ * @param bool clear Whether to clear clan->db before reading clans
+ */
+bool clan_config_read(bool reload)
+{
+ struct config_t clan_conf;
+ struct config_setting_t *settings = NULL;
+ const char *config_filename = "conf/clans.conf"; // FIXME: hardcoded name
+ int kicktime = 0, kickchecktime = 0;
+
+ if (reload) {
+ struct DBIterator *iter = db_iterator(clan->db);
+ struct clan *c_clear;
+
+ for (c_clear = dbi_first(iter); dbi_exists(iter); c_clear = dbi_next(iter)) {
+ if (c_clear->buff.script != NULL) {
+ script->free_code(c_clear->buff.script);
+ }
+ if (c_clear->tid != INVALID_TIMER) {
+ timer->delete(c_clear->tid, clan->inactivity_kick);
+ }
+ VECTOR_CLEAR(c_clear->allies);
+ VECTOR_CLEAR(c_clear->antagonists);
+ VECTOR_CLEAR(c_clear->members);
+ HPM->data_store_destroy(&c_clear->hdata);
+ }
+ dbi_destroy(iter);
+ clan->db->clear(clan->db, NULL);
+ }
+
+ if (!libconfig->load_file(&clan_conf, config_filename)) {
+ return false;
+ }
+
+ if ((settings = libconfig->lookup(&clan_conf, "clan_configuration")) == NULL) {
+ ShowError("clan_config_read: failed to find 'clan_configuration'.\n");
+ return false;
+ }
+
+ libconfig->setting_lookup_int(settings, "MaxMembers", &clan->max);
+ libconfig->setting_lookup_int(settings, "MaxRelations", &clan->max_relations);
+ libconfig->setting_lookup_int(settings, "InactivityKickTime", &kicktime);
+ if (!libconfig->setting_lookup_int(settings, "InactivityCheckTime", &kickchecktime)) {
+ ShowError("clan_config_read: failed to find InactivityCheckTime using official value.\n");
+ kickchecktime = 24;
+ }
+
+ // On config file we set the time in hours but here we use in seconds
+ clan->kicktime = 60 * 60 * kicktime;
+ clan->checktime = 60 * 60 * max(kickchecktime, 1) * 1000;
+
+ clan->config_read_additional_settings(settings, config_filename);
+ clan->read_db(settings, config_filename, reload);
+ libconfig->destroy(&clan_conf);
+ return true;
+}
+
+/**
+ * Processes any (plugin-defined) additional settings for clan config.
+ *
+ * @param settings The Settings Group from config file.
+ * @param source Source of the entry (file name), to be displayed in
+ * case of validation errors.
+ */
+void clan_config_read_additional_settings(struct config_setting_t *settings, const char *source)
+{
+ // do nothing. plugins can do own work
+}
+
+/**
+ * Reloads Clan DB
+ */
+void clan_reload(void)
+{
+ clan->config_read(true);
+}
+
+/**
+ *
+ */
+void do_init_clan(bool minimal)
+{
+ clan->db = idb_alloc(DB_OPT_RELEASE_DATA);
+
+ if (minimal) {
+ return;
+ }
+ clan->config_read(false);
+ timer->add_func_list(clan->inactivity_kick, "clan_inactivity_kick");
+}
+
+/**
+ *
+ */
+void do_final_clan(void)
+{
+ struct DBIterator *iter = db_iterator(clan->db);
+ struct clan *c;
+
+ for (c = dbi_first(iter); dbi_exists(iter); c = dbi_next(iter)) {
+ if (c->buff.script) {
+ script->free_code(c->buff.script);
+ }
+ if (c->tid != INVALID_TIMER) {
+ timer->delete(c->tid, clan->inactivity_kick);
+ }
+ VECTOR_CLEAR(c->allies);
+ VECTOR_CLEAR(c->antagonists);
+ VECTOR_CLEAR(c->members);
+ HPM->data_store_destroy(&c->hdata);
+ }
+ dbi_destroy(iter);
+ db_destroy(clan->db);
+}
+
+/**
+ * Inits Clan Defaults
+ */
+void clan_defaults(void)
+{
+ clan = &clan_s;
+
+ clan->init = do_init_clan;
+ clan->final = do_final_clan;
+ /* */
+ clan->db = NULL;
+ clan->max = 0;
+ clan->max_relations = 0;
+ clan->kicktime = 0;
+ clan->checktime = 0;
+ clan->req_timeout = 60;
+ /* */
+ clan->config_read = clan_config_read;
+ clan->config_read_additional_settings = clan_config_read_additional_settings;
+ clan->read_db = clan_read_db;
+ clan->read_db_sub = clan_read_db_sub;
+ clan->read_db_additional_fields = clan_read_db_additional_fields;
+ clan->read_buffs = clan_read_buffs;
+ clan->search = clan_search;
+ clan->searchname = clan_searchname;
+ clan->getonlinesd = clan_getonlinesd;
+ clan->getindex = clan_getindex;
+ clan->join = clan_join;
+ clan->member_online = clan_member_online;
+ clan->leave = clan_leave;
+ clan->send_message = clan_send_message;
+ clan->recv_message = clan_recv_message;
+ clan->member_offline = clan_member_offline;
+ clan->set_constants = clan_set_constants;
+ clan->get_id = clan_get_id;
+ clan->buff_start = clan_buff_start;
+ clan->buff_end = clan_buff_end;
+ clan->reload = clan_reload;
+ clan->rejoin = clan_rejoin;
+ clan->inactivity_kick = clan_inactivity_kick;
+ clan->request_kickoffline = clan_request_kickoffline;
+ clan->request_membercount = clan_request_membercount;
+}
diff --git a/src/map/clan.h b/src/map/clan.h
new file mode 100644
index 000000000..15ed52680
--- /dev/null
+++ b/src/map/clan.h
@@ -0,0 +1,85 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2017 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef MAP_CLAN_H
+#define MAP_CLAN_H
+
+#include "map/map.h"
+#include "common/hercules.h"
+#include "common/db.h"
+#include "common/mmo.h"
+
+struct map_session_data;
+
+enum clan_req_state {
+ CLAN_REQ_NONE = 0,
+ CLAN_REQ_FIRST = 1,
+ CLAN_REQ_RELOAD = 2,
+ CLAN_REQ_AFTER_KICK = 3,
+};
+
+/**
+ * clan Interface
+ **/
+struct clan_interface {
+ struct DBMap *db; // int clan_id -> struct clan*
+
+ int max;
+ int max_relations;
+ int kicktime;
+ int checktime;
+ int req_timeout;
+
+ void (*init) (bool minimal);
+ void (*final) (void);
+
+ bool (*config_read) (bool reload);
+ void (*config_read_additional_settings) (struct config_setting_t *settings, const char *source);
+ void (*read_db) (struct config_setting_t *settings, const char *source, bool reload);
+ int (*read_db_sub) (struct config_setting_t *settings, const char *source, bool reload);
+ void (*read_db_additional_fields) (struct clan *entry, struct config_setting_t *t, int n, const char *source);
+ void (*read_buffs) (struct clan *c, struct config_setting_t *buff, const char *source);
+ struct clan *(*search) (int clan_id);
+ struct clan *(*searchname) (const char *name);
+ struct map_session_data *(*getonlinesd) (struct clan *c);
+ int (*getindex) (const struct clan *c, int char_id);
+ bool (*join) (struct map_session_data *sd, int clan_id);
+ void (*member_online) (struct map_session_data *sd, bool first);
+ bool (*leave) (struct map_session_data *sd, bool first);
+ bool (*send_message) (struct map_session_data *sd, const char *mes);
+ void (*recv_message) (struct clan *c, const char *mes, int len);
+ void (*member_offline) (struct map_session_data *sd);
+ void (*set_constants) (void);
+ int (*get_id) (const struct block_list *bl);
+ void (*buff_start) (struct map_session_data *sd, struct clan *c);
+ void (*buff_end) (struct map_session_data *sd, struct clan *c);
+ void (*reload) (void);
+ int (*rejoin) (struct map_session_data *sd, va_list ap);
+ int (*inactivity_kick) (int tid, int64 tick, int id, intptr_t data);
+ int (*request_kickoffline) (int tid, int64 tick, int id, intptr_t data);
+ int (*request_membercount) (int tid, int64 tick, int id, intptr_t data);
+};
+
+#ifdef HERCULES_CORE
+void clan_defaults (void);
+#endif // HERCULES_CORE
+
+HPShared struct clan_interface *clan;
+
+#endif /* MAP_CLAN_H */
diff --git a/src/map/clif.c b/src/map/clif.c
index 17faf02c8..4f98d2c9c 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -29,6 +29,7 @@
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/elemental.h"
#include "map/guild.h"
#include "map/homunculus.h"
@@ -419,8 +420,14 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
sd = BL_CAST(BL_PC, bl);
- switch(type) {
+ if (sd != NULL && pc_isinvisible(sd)) {
+ if (type == AREA || type == BG || type == BG_AREA)
+ type = SELF;
+ else if (type == AREA_WOS || type == BG_WOS || type == BG_AREA_WOS)
+ return true;
+ }
+ switch(type) {
case ALL_CLIENT: //All player clients.
iter = mapit_getallusers();
while ((tsd = BL_UCAST(BL_PC, mapit->next(iter))) != NULL) {
@@ -659,6 +666,22 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
}
break;
+ case CLAN:
+ if (sd && sd->status.clan_id) {
+ struct clan *c = clan->search(sd->status.clan_id);
+
+ nullpo_retr(false, c);
+
+ for (i = 0; i < VECTOR_LENGTH(c->members); i++) {
+ if (VECTOR_INDEX(c->members, i).online == 0 || (sd = VECTOR_INDEX(c->members, i).sd) == NULL || (fd = sd->fd) <= 0)
+ continue;
+ WFIFOHEAD(fd, len);
+ memcpy(WFIFOP(fd, 0), buf, len);
+ WFIFOSET(fd, len);
+ }
+ }
+ break;
+
default:
ShowError("clif_send: Unrecognized type %u\n", type);
return false;
@@ -796,7 +819,15 @@ void clif_dropflooritem(struct flooritem_data* fitem) {
p.subX = fitem->subx;
p.subY = fitem->suby;
p.count = fitem->item_data.amount;
-
+#ifdef PACKETVER_ZERO
+ if (fitem->showdropeffect) {
+ p.showdropeffect = itemdb_showdropeffect(fitem->item_data.nameid);
+ p.dropeffectmode = itemdb_dropeffectmode(fitem->item_data.nameid);
+ } else {
+ p.showdropeffect = 0;
+ p.dropeffectmode = 0;
+ }
+#endif
clif->send(&p, sizeof(p), &fitem->bl, AREA);
}
@@ -1526,6 +1557,8 @@ bool clif_spawn(struct block_list *bl)
clif->specialeffect(&nd->bl,423,AREA);
else if (nd->size == SZ_MEDIUM)
clif->specialeffect(&nd->bl,421,AREA);
+ if (nd->clan_id > 0)
+ clif->sc_load(&nd->bl, nd->bl.id, AREA, status->dbs->IconChangeTable[SC_CLAN_INFO], 0, nd->clan_id, 0);
}
break;
case BL_PET:
@@ -1902,19 +1935,25 @@ void clif_changemap(struct map_session_data *sd, short m, int x, int y) {
/// Notifies the client of a position change to coordinates on given map, which is on another map-server (ZC_NPCACK_SERVERMOVE).
/// 0092 <map name>.16B <x>.W <y>.W <ip>.L <port>.W
+/// 0ac7 <map name>.16B <x>.W <y>.W <ip>.L <port>.W <zero>.128B
void clif_changemapserver(struct map_session_data* sd, unsigned short map_index, int x, int y, uint32 ip, uint16 port) {
int fd;
+#if PACKETVER >= 20170315
+ const int cmd = 0xac7;
+#else
+ const int cmd = 0x92;
+#endif
nullpo_retv(sd);
fd = sd->fd;
- WFIFOHEAD(fd,packet_len(0x92));
- WFIFOW(fd,0) = 0x92;
- mapindex->getmapname_ext(mapindex_id2name(map_index), WFIFOP(fd,2));
- WFIFOW(fd,18) = x;
- WFIFOW(fd,20) = y;
- WFIFOL(fd,22) = htonl(ip);
- WFIFOW(fd,26) = sockt->ntows(htons(port)); // [!] LE byte order here [!]
- WFIFOSET(fd,packet_len(0x92));
+ WFIFOHEAD(fd, packet_len(cmd));
+ WFIFOW(fd, 0) = cmd;
+ mapindex->getmapname_ext(mapindex_id2name(map_index), WFIFOP(fd, 2));
+ WFIFOW(fd, 18) = x;
+ WFIFOW(fd, 20) = y;
+ WFIFOL(fd, 22) = htonl(ip);
+ WFIFOW(fd, 26) = sockt->ntows(htons(port)); // [!] LE byte order here [!]
+ WFIFOSET(fd, packet_len(cmd));
}
void clif_blown(struct block_list *bl)
@@ -4374,6 +4413,8 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) {
clif->specialeffect_single(bl,423,sd->fd);
else if (nd->size == SZ_MEDIUM)
clif->specialeffect_single(bl,421,sd->fd);
+ if (nd->clan_id > 0)
+ clif->sc_load(&nd->bl, nd->bl.id, AREA, status->dbs->IconChangeTable[SC_CLAN_INFO], 0, nd->clan_id, 0);
}
break;
case BL_MOB:
@@ -6047,14 +6088,29 @@ void clif_wis_end(int fd, int flag) {
/// Returns character name requested by char_id (ZC_ACK_REQNAME_BYGID).
/// 0194 <char id>.L <name>.24B
+/// 0af7 <flag>.W <char id>.L <name>.24B
void clif_solved_charname(int fd, int charid, const char* name)
{
nullpo_retv(name);
- WFIFOHEAD(fd,packet_len(0x194));
- WFIFOW(fd,0)=0x194;
- WFIFOL(fd,2)=charid;
- safestrncpy(WFIFOP(fd,6), name, NAME_LENGTH);
- WFIFOSET(fd,packet_len(0x194));
+#if !defined(PACKETVER_ZERO) && (PACKETVER >= 20180307 || (defined(PACKETVER_RE) && PACKETVER >= 20180221))
+ WFIFOHEAD(fd, packet_len(0x0af7));
+ WFIFOW(fd, 0) = 0xaf7;
+ if (*name == 0) {
+ WFIFOW(fd, 2) = 2;
+ memset(WFIFOP(fd, 8), 0, NAME_LENGTH);
+ } else {
+ WFIFOW(fd, 2) = 3;
+ safestrncpy(WFIFOP(fd, 8), name, NAME_LENGTH);
+ }
+ WFIFOL(fd, 4) = charid;
+ WFIFOSET(fd, packet_len(0x0af7));
+#else
+ WFIFOHEAD(fd, packet_len(0x194));
+ WFIFOW(fd, 0) = 0x194;
+ WFIFOL(fd, 2) = charid;
+ safestrncpy(WFIFOP(fd, 6), name, NAME_LENGTH);
+ WFIFOSET(fd, packet_len(0x194));
+#endif
}
/// Presents a list of items that can be carded/composed (ZC_ITEMCOMPOSITION_LIST).
@@ -6580,9 +6636,6 @@ void clif_party_created(struct map_session_data *sd,int result)
}
/// Adds new member to a party.
-/// 0104 <account id>.L <role>.L <x>.W <y>.W <state>.B <party name>.24B <char name>.24B <map name>.16B (ZC_ADD_MEMBER_TO_GROUP)
-/// 01e9 <account id>.L <role>.L <x>.W <y>.W <state>.B <party name>.24B <char name>.24B <map name>.16B <item pickup rule>.B <item share rule>.B (ZC_ADD_MEMBER_TO_GROUP2)
-/// 0a43 <account id>.L <role>.L <class>.W <base level>.W <x>.W <y>.W <state>.B <party name>.24B <char name>.24B <map name>.16B <item pickup rule>.B <item share rule>.B (ZC_ADD_MEMBER_TO_GROUP3)
/// role:
/// 0 = leader
/// 1 = normal
@@ -6592,19 +6645,12 @@ void clif_party_created(struct map_session_data *sd,int result)
void clif_party_member_info(struct party_data *p, struct map_session_data *sd)
{
int i;
-#if PACKETVER < 20170502
- unsigned char buf[81];
- const int cmd = 0x1e9;
- const int offset = 0;
-#else
- unsigned char buf[85];
-// [4144] probably 0xa43 packet can works on older clients because in client was added in 2015-10-07
- const int cmd = 0xa43;
- int offset = 4;
-#endif
+ struct PACKET_ZC_ADD_MEMBER_TO_GROUP packet;
nullpo_retv(p);
nullpo_retv(sd);
+
+ memset(&packet, 0, sizeof(packet));
if (!sd) { //Pick any party member (this call is used when changing item share rules)
ARR_FIND(0, MAX_PARTY, i, p->data[i].sd != 0);
} else {
@@ -6614,27 +6660,28 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd)
return; //Should never happen...
sd = p->data[i].sd;
- WBUFW(buf, 0) = cmd;
- WBUFL(buf, 2) = sd->status.account_id;
- WBUFL(buf, 6) = (p->party.member[i].leader) ? 0 : 1;
+ packet.packetType = partymemberinfo;
+ packet.AID = sd->status.account_id;
+#if PACKETVER >= 20171207
+ packet.GID = sd->status.char_id;
+#endif
+ packet.leader = (p->party.member[i].leader) ? 0 : 1;
#if PACKETVER >= 20170502
- WBUFW(buf, 10) = sd->status.class;
- WBUFW(buf, 12) = sd->status.base_level;
+ packet.class = sd->status.class;
+ packet.baseLevel = sd->status.base_level;
#endif
- WBUFW(buf, offset + 10) = sd->bl.x;
- WBUFW(buf, offset + 12) = sd->bl.y;
- WBUFB(buf, offset + 14) = (p->party.member[i].online) ? 0 : 1;
- memcpy(WBUFP(buf, offset + 15), p->party.name, NAME_LENGTH);
- memcpy(WBUFP(buf, offset + 39), sd->status.name, NAME_LENGTH);
- mapindex->getmapname_ext(map->list[sd->bl.m].custom_name ? map->list[map->list[sd->bl.m].instance_src_map].name : map->list[sd->bl.m].name, WBUFP(buf, offset + 63));
- WBUFB(buf, offset + 79) = (p->party.item & 1) ? 1 : 0;
- WBUFB(buf, offset + 80) = (p->party.item & 2) ? 1 : 0;
- clif->send(buf, packet_len(cmd), &sd->bl, PARTY);
+ packet.x = sd->bl.x;
+ packet.y = sd->bl.y;
+ packet.offline = (p->party.member[i].online) ? 0 : 1;
+ memcpy(packet.partyName, p->party.name, NAME_LENGTH);
+ memcpy(packet.playerName, sd->status.name, NAME_LENGTH);
+ mapindex->getmapname_ext(map->list[sd->bl.m].custom_name ? map->list[map->list[sd->bl.m].instance_src_map].name : map->list[sd->bl.m].name, packet.mapName);
+ packet.sharePickup = (p->party.item & 1) ? 1 : 0;
+ packet.shareLoot = (p->party.item & 2) ? 1 : 0;
+ clif->send(&packet, sizeof(packet), &sd->bl, PARTY);
}
/// Sends party information (ZC_GROUP_LIST).
-/// 00fb <packet len>.W <party name>.24B { <account id>.L <nick>.24B <map name>.16B <role>.B <state>.B }*
-/// 0a44 <packet len>.W <party name>.24B { <account id>.L <nick>.24B <map name>.16B <role>.B <state>.B <class>.W <base level>.W }* <item pickup rule>.B <item share rule>.B <unknown>.L
/// role:
/// 0 = leader
/// 1 = normal
@@ -6643,23 +6690,16 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd)
/// 1 = disconnected
void clif_party_info(struct party_data* p, struct map_session_data *sd)
{
+ struct PACKET_ZC_GROUP_LIST *packet;
struct map_session_data* party_sd = NULL;
int i, c;
-#if PACKETVER < 20170502
- const int cmd = 0xfb;
- const int size = 46;
- unsigned char buf[2 + 2 + NAME_LENGTH + 46 * MAX_PARTY];
-#else
-// [4144] probably 0xa44 packet can works on older clients because in client was added in 2015-10-07
- const int cmd = 0xa44;
- const int size = 50;
- unsigned char buf[2 + 2 + NAME_LENGTH + 50 * MAX_PARTY + 6];
-#endif
-
+ unsigned char buf[sizeof(*packet) + sizeof(struct PACKET_ZC_GROUP_LIST_SUB) * MAX_PARTY];
nullpo_retv(p);
- WBUFW(buf, 0) = cmd;
- memcpy(WBUFP(buf, 4), p->party.name, NAME_LENGTH);
+ memset(buf, 0, sizeof(buf));
+ packet = (struct PACKET_ZC_GROUP_LIST *)buf;
+ packet->packetType = partyinfo;
+ memcpy(packet->partyName, p->party.name, NAME_LENGTH);
for(i = 0, c = 0; i < MAX_PARTY; i++)
{
struct party_member *m = &p->party.member[i];
@@ -6669,30 +6709,26 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd)
if (party_sd == NULL)
party_sd = p->data[i].sd;
- WBUFL(buf, 28 + c * size) = m->account_id;
- memcpy(WBUFP(buf, 28 + c * size + 4), m->name, NAME_LENGTH);
- mapindex->getmapname_ext(mapindex_id2name(m->map), WBUFP(buf, 28 + c * size + 28));
- WBUFB(buf, 28 + c * size + 44) = (m->leader) ? 0 : 1;
- WBUFB(buf, 28 + c * size + 45) = (m->online) ? 0 : 1;
+ packet->members[c].AID = m->account_id;
+#if PACKETVER >= 20171207
+ packet->members[c].GID = m->char_id;
+#endif
+ memcpy(packet->members[c].playerName, m->name, NAME_LENGTH);
+ mapindex->getmapname_ext(mapindex_id2name(m->map), packet->members[c].mapName);
+ packet->members[c].leader = (m->leader) ? 0 : 1;
+ packet->members[c].offline = (m->online) ? 0 : 1;
#if PACKETVER >= 20170502
- WBUFW(buf, 28 + c * size + 46) = m->class;
- WBUFW(buf, 28 + c * size + 48) = m->lv;
+ packet->members[c].class = m->class;
+ packet->members[c].baseLevel = m->lv;
#endif
c++;
}
-#if PACKETVER < 20170502
- WBUFW(buf, 2) = 28 + c * size;
-#else
- WBUFB(buf, 28 + c * size) = (p->party.item & 1) ? 1 : 0;
- WBUFB(buf, 28 + c * size + 1) = (p->party.item & 2) ? 1 : 0;
- WBUFL(buf, 28 + c * size + 2) = 0; // unknown
- WBUFW(buf, 2) = 28 + c * size + 6;
-#endif
+ packet->packetLen = sizeof(*packet) + c * sizeof(struct PACKET_ZC_GROUP_LIST_SUB);
if (sd) { // send only to self
- clif->send(buf, WBUFW(buf, 2), &sd->bl, SELF);
+ clif->send(buf, packet->packetLen, &sd->bl, SELF);
} else if (party_sd) { // send to whole party
- clif->send(buf, WBUFW(buf, 2), &party_sd->bl, PARTY);
+ clif->send(buf, packet->packetLen, &party_sd->bl, PARTY);
}
}
@@ -7388,7 +7424,7 @@ void clif_mvp_item(struct map_session_data *sd,int nameid)
/// 010b <exp>.L
void clif_mvp_exp(struct map_session_data *sd, unsigned int exp)
{
-#if PACKETVER >= 20131223 // Kro removed this packet [Napster]
+#if PACKETVER >= 20131223 // Kro removed this packet [Napster]
if (battle_config.mvp_exp_reward_message) {
char e_msg[CHAT_SIZE_MAX];
sprintf(e_msg, msg_txt(855), exp);
@@ -9915,7 +9951,6 @@ void clif_parse_Hotkey(int fd, struct map_session_data *sd) {
/// Displays cast-like progress bar (ZC_PROGRESS).
/// 02f0 <color>.L <time>.L
-/* TODO ZC_PROGRESS_ACTOR <account_id>.L */
void clif_progressbar(struct map_session_data * sd, unsigned int color, unsigned int second)
{
int fd;
@@ -9944,6 +9979,30 @@ void clif_progressbar_abort(struct map_session_data * sd)
WFIFOSET(fd,packet_len(0x2f2));
}
+/**
+* Displays cast-like progress bar on a unit.
+* 09d1 <id>.L <color>.L <time>.L
+*
+* @param bl Source block list.
+* @param color Message color (RGB format: 0xRRGGBB).
+* @param time Time in seconds.
+*/
+void clif_progressbar_unit(struct block_list *bl, uint32 color, uint32 time)
+{
+#if PACKETVER >= 20130821
+ struct ZC_PROGRESS_ACTOR p;
+ nullpo_retv(bl);
+
+ p.PacketType = progressbarunit;
+ p.GID = bl->id;
+ p.color = color;
+ p.time = time;
+ clif->send(&p, sizeof(p), bl, AREA);
+#else
+ ShowWarning("clif_progressbar_unit: Using progressbar with units available for PACKETVER >= 20130821 only.");
+#endif
+}
+
void clif_parse_progressbar(int fd, struct map_session_data * sd) __attribute__((nonnull (2)));
/// Notification from the client, that the progress bar has reached 100% (CZ_PROGRESS).
/// 02f1
@@ -10955,13 +11014,21 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) __attribute_
void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd)
{
int len = RFIFOW(fd,2)-15;
- int limit = RFIFOW(fd,4);
- bool pub = (RFIFOB(fd,6) != 0);
- const char *password = RFIFOP(fd,7); //not zero-terminated
- const char *title = RFIFOP(fd,15); // not zero-terminated
+ int limit;
+ bool pub;
+ const char *password; //not zero-terminated
+ const char *title; // not zero-terminated
char s_password[CHATROOM_PASS_SIZE];
char s_title[CHATROOM_TITLE_SIZE];
+ if (len < 1)
+ return;
+
+ limit = RFIFOW(fd, 4);
+ pub = (RFIFOB(fd, 6) != 0);
+ password = RFIFOP(fd, 7); //not zero-terminated
+ title = RFIFOP(fd, 15); // not zero-terminated
+
if (pc_ismuted(&sd->sc, MANNER_NOROOM))
return;
if(battle_config.basic_skill_check && !pc->check_basicskill(sd, 4)) {
@@ -10977,9 +11044,6 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd)
return;
}
- if( len <= 0 )
- return; // invalid input
-
safestrncpy(s_password, password, CHATROOM_PASS_SIZE);
safestrncpy(s_title, title, min(len+1,CHATROOM_TITLE_SIZE)); //NOTE: assumes that safestrncpy will not access the len+1'th byte
@@ -11006,15 +11070,20 @@ void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data* sd) __attr
void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data* sd)
{
int len = RFIFOW(fd,2)-15;
- int limit = RFIFOW(fd,4);
- bool pub = (RFIFOB(fd,6) != 0);
- const char *password = RFIFOP(fd,7); // not zero-terminated
- const char *title = RFIFOP(fd,15); // not zero-terminated
+ int limit;
+ bool pub;
+ const char *password; // not zero-terminated
+ const char *title; // not zero-terminated
char s_password[CHATROOM_PASS_SIZE];
char s_title[CHATROOM_TITLE_SIZE];
- if( len <= 0 )
- return; // invalid input
+ if (len < 1)
+ return;
+
+ limit = RFIFOW(fd, 4);
+ pub = (RFIFOB(fd, 6) != 0);
+ password = RFIFOP(fd, 7); // not zero-terminated
+ title = RFIFOP(fd, 15); // not zero-terminated
safestrncpy(s_password, password, CHATROOM_PASS_SIZE);
safestrncpy(s_title, title, min(len+1,CHATROOM_TITLE_SIZE)); //NOTE: assumes that safestrncpy will not access the len+1'th byte
@@ -11030,7 +11099,7 @@ void clif_parse_ChangeChatOwner(int fd, struct map_session_data* sd) __attribute
/// 1 = normal
void clif_parse_ChangeChatOwner(int fd, struct map_session_data* sd)
{
- chat->change_owner(sd, RFIFOP(fd,6));
+ chat->change_owner(sd, RFIFOP(fd,6)); // non null terminated
}
void clif_parse_KickFromChat(int fd,struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -11038,7 +11107,7 @@ void clif_parse_KickFromChat(int fd,struct map_session_data *sd) __attribute__((
/// 00e2 <name>.24B
void clif_parse_KickFromChat(int fd,struct map_session_data *sd)
{
- chat->kick(sd, RFIFOP(fd,2));
+ chat->kick(sd, RFIFOP(fd,2)); // non null terminated
}
void clif_parse_ChatLeave(int fd, struct map_session_data* sd) __attribute__((nonnull (2)));
@@ -11797,17 +11866,21 @@ void clif_parse_NpcStringInput(int fd, struct map_session_data* sd) __attribute_
/// 01d5 <packet len>.W <npc id>.L <string>.?B
void clif_parse_NpcStringInput(int fd, struct map_session_data* sd)
{
+ int len = RFIFOW(fd, 2);
// [4144] can't confirm exact client version. At least >= correct for 20150513
#if PACKETVER >= 20151029
- int message_len = RFIFOW(fd, 2) - 7;
+ int message_len = len - 7;
#else
- int message_len = RFIFOW(fd, 2) - 8;
+ int message_len = len - 8;
#endif
- int npcid = RFIFOL(fd,4);
- const char *message = RFIFOP(fd,8);
+ int npcid;
+ const char *message;
+
+ if (len < 9)
+ return;
- if( message_len <= 0 )
- return; // invalid input
+ npcid = RFIFOL(fd, 4);
+ message = RFIFOP(fd, 8);
safestrncpy(sd->npc_str, message, min(message_len,CHATBOX_SIZE));
npc->scriptcont(sd, npcid, false);
@@ -11845,8 +11918,8 @@ void clif_parse_ItemIdentify(int fd,struct map_session_data *sd)
clif_menuskill_clear(sd);
}
-/// Identifying item with right-click (CZ_REQ_ONECLICK_ITEMIDENTIFY).
-/// 0A35 <index>.W
+/// Identifying item with right-click (CZ_REQ_ONECLICK_ITEMIDENTIFY).
+/// 0A35 <index>.W
void clif_parse_OneClick_ItemIdentify(int fd, struct map_session_data *sd)
{
int cmd = RFIFOW(fd,0);
@@ -12961,9 +13034,15 @@ void clif_parse_PurchaseReq(int fd, struct map_session_data* sd) __attribute__((
/// 0134 <packet len>.W <account id>.L { <amount>.W <index>.W }*
void clif_parse_PurchaseReq(int fd, struct map_session_data* sd)
{
- int len = (int)RFIFOW(fd,2) - 8;
- int id = RFIFOL(fd,4);
- const uint8 *data = RFIFOP(fd,8);
+ int len = (int)RFIFOW(fd, 2) - 8;
+ int id;
+ const uint8 *data;
+
+ if (len < 1)
+ return;
+
+ id = RFIFOL(fd, 4);
+ data = RFIFOP(fd, 8);
vending->purchase(sd, id, sd->vended_id, data, len/4);
@@ -12976,10 +13055,16 @@ void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd) __attribute__(
/// 0801 <packet len>.W <account id>.L <unique id>.L { <amount>.W <index>.W }*
void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd)
{
- int len = (int)RFIFOW(fd,2) - 12;
- int aid = RFIFOL(fd,4);
- int uid = RFIFOL(fd,8);
- const uint8 *data = RFIFOP(fd,12);
+ int len = (int)RFIFOW(fd, 2) - 12;
+ int aid;
+ int uid;
+ const uint8 *data;
+
+ if (len < 1)
+ return;
+ aid = RFIFOL(fd, 4);
+ uid = RFIFOL(fd, 8);
+ data = RFIFOP(fd, 12);
vending->purchase(sd, aid, uid, data, len/4);
@@ -12996,9 +13081,16 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd) __attribute__((
/// 1 = open
void clif_parse_OpenVending(int fd, struct map_session_data* sd) {
short len = (short)RFIFOW(fd,2) - 85;
- const char *message = RFIFOP(fd,4);
- bool flag = (RFIFOB(fd,84) != 0) ? true : false;
- const uint8 *data = RFIFOP(fd,85);
+ const char *message;
+ bool flag;
+ const uint8 *data;
+
+ if (len < 1)
+ return;
+
+ message = RFIFOP(fd,4);
+ flag = (RFIFOB(fd,84) != 0) ? true : false;
+ data = RFIFOP(fd,85);
if( !flag )
sd->state.prevend = sd->state.workinprogress = 0;
@@ -13091,12 +13183,14 @@ void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd) __a
void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd)
{
int i;
+ int count = (RFIFOW(fd, 2) - 4) / 40;
- if(!sd->state.gmaster_flag)
+ if (!sd->state.gmaster_flag)
return;
- for(i = 4; i < RFIFOW(fd,2); i += 40 ){
- guild->change_position(sd->status.guild_id, RFIFOL(fd,i), RFIFOL(fd,i+4), RFIFOL(fd,i+12), RFIFOP(fd,i+16));
+ for (i = 0; i < count; i ++ ) {
+ int idx = i * 40 + 4;
+ guild->change_position(sd->status.guild_id, RFIFOL(fd, idx), RFIFOL(fd, idx + 4), RFIFOL(fd, idx + 12), RFIFOP(fd, idx + 16));
}
}
@@ -13107,6 +13201,7 @@ void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd)
{
int i;
int len = RFIFOW(fd, 2);
+ int count = (len - 4) / 12;
if(!sd->state.gmaster_flag)
return;
@@ -13117,10 +13212,11 @@ void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd)
return;
}
- for(i=4;i<RFIFOW(fd,2);i+=12){
- int position = RFIFOL(fd, i + 8);
- if (position > 0) {
- guild->change_memberposition(sd->status.guild_id, RFIFOL(fd, i), RFIFOL(fd, i + 4), position);
+ for (i = 0; i < count; i++) {
+ int idx = i * 12 + 4;
+ int position = RFIFOL(fd, idx + 8);
+ if (position > 0 && position < MAX_GUILDPOSITION) {
+ guild->change_memberposition(sd->status.guild_id, RFIFOL(fd, idx), RFIFOL(fd, idx + 4), position);
}
}
}
@@ -13323,6 +13419,12 @@ bool clif_sub_guild_invite(int fd, struct map_session_data *sd, struct map_sessi
return false;
}
+ // Players in a clan can't join a guild
+ if (t_sd->clan != NULL) {
+ clif->message(fd, msg_fd(fd, 140)); // You can't join in a clan if you're in a guild.
+ return false;
+ }
+
guild->invite(sd,t_sd);
return true;
}
@@ -13498,12 +13600,15 @@ void clif_parse_GuildBreak(int fd, struct map_session_data *sd) __attribute__((n
/// key:
/// now guild name; might have been (intended) email, since the
/// field name and size is same as the one in CH_DELETE_CHAR.
-void clif_parse_GuildBreak(int fd, struct map_session_data *sd) {
+void clif_parse_GuildBreak(int fd, struct map_session_data *sd)
+{
+ char key[40];
if( map->list[sd->bl.m].flag.guildlock ) {
clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
- guild->dobreak(sd, RFIFOP(fd,2));
+ safestrncpy(key, RFIFOP(fd, 2), 40);
+ guild->dobreak(sd, key);
}
/// Pet
@@ -14092,6 +14197,7 @@ void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
/// Toggles a single friend online/offline [Skotlex] (ZC_FRIENDS_STATE).
/// 0206 <account id>.L <char id>.L <state>.B
+/// 0206 <account id>.L <char id>.L <state>.B <name>.24B
/// state:
/// 0 = online
/// 1 = offline
@@ -14111,7 +14217,13 @@ void clif_friendslist_toggle(struct map_session_data *sd,int account_id, int cha
WFIFOW(fd, 0) = 0x206;
WFIFOL(fd, 2) = sd->status.friends[i].account_id;
WFIFOL(fd, 6) = sd->status.friends[i].char_id;
- WFIFOB(fd,10) = !online; //Yeah, a 1 here means "logged off", go figure...
+ WFIFOB(fd, 10) = !online; //Yeah, a 1 here means "logged off", go figure...
+#ifndef PACKETVER_ZERO
+#if PACKETVER >= 20180307 || (defined(PACKETVER_RE) && PACKETVER >= 20180221)
+ memcpy(WFIFOP(fd, 11), sd->status.friends[i].name, NAME_LENGTH);
+#endif
+#endif // PACKETVER_ZERO
+
WFIFOSET(fd, packet_len(0x206));
}
@@ -14128,22 +14240,30 @@ int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap)
/// Sends the whole friends list (ZC_FRIENDS_LIST).
/// 0201 <packet len>.W { <account id>.L <char id>.L <name>.24B }*
+/// 0201 <packet len>.W { <account id>.L <char id>.L }*
void clif_friendslist_send(struct map_session_data *sd)
{
int i = 0, n, fd = sd->fd;
+#if !defined(PACKETVER_ZERO) && (PACKETVER >= 20180307 || (defined(PACKETVER_RE) && PACKETVER >= 20180221))
+ const int offset = 8;
+#else
+ const int offset = 32;
+#endif
nullpo_retv(sd);
// Send friends list
- WFIFOHEAD(fd, MAX_FRIENDS * 32 + 4);
+ WFIFOHEAD(fd, MAX_FRIENDS * offset + 4);
WFIFOW(fd, 0) = 0x201;
for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) {
- WFIFOL(fd, 4 + 32 * i + 0) = sd->status.friends[i].account_id;
- WFIFOL(fd, 4 + 32 * i + 4) = sd->status.friends[i].char_id;
- memcpy(WFIFOP(fd, 4 + 32 * i + 8), &sd->status.friends[i].name, NAME_LENGTH);
+ WFIFOL(fd, 4 + offset * i + 0) = sd->status.friends[i].account_id;
+ WFIFOL(fd, 4 + offset * i + 4) = sd->status.friends[i].char_id;
+#if !(!defined(PACKETVER_ZERO) && (PACKETVER >= 20180307 || (defined(PACKETVER_RE) && PACKETVER >= 20180221)))
+ memcpy(WFIFOP(fd, 4 + offset * i + 8), &sd->status.friends[i].name, NAME_LENGTH);
+#endif
}
if (i) {
- WFIFOW(fd,2) = 4 + 32 * i;
+ WFIFOW(fd,2) = 4 + offset * i;
WFIFOSET(fd, WFIFOW(fd,2));
}
@@ -15252,17 +15372,19 @@ void clif_parse_Mail_winopen(int fd, struct map_session_data *sd)
void clif_parse_Mail_send(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
/// Request to send mail (CZ_MAIL_SEND).
/// 0248 <packet len>.W <recipient>.24B <title>.40B <body len>.B <body>.?B
+
void clif_parse_Mail_send(int fd, struct map_session_data *sd)
{
struct mail_message msg;
int body_len;
+ int len = RFIFOW(fd, 2);
if( !chrif->isconnected() )
return;
if( sd->state.trading )
return;
- if( RFIFOW(fd,2) < 69 ) {
+ if (len < 69) {
ShowWarning("Invalid Msg Len from account %d.\n", sd->status.account_id);
return;
}
@@ -15278,6 +15400,11 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd)
if (body_len > MAIL_BODY_LENGTH)
body_len = MAIL_BODY_LENGTH;
+ if (body_len + 69 > len) {
+ ShowWarning("Invalid Msg Len from account %d.\n", sd->status.account_id);
+ return;
+ }
+
memset(&msg, 0, sizeof(msg));
if (!mail->setattachment(sd, &msg)) { // Invalid Append condition
clif->mail_send(sd->fd, true); // fail
@@ -15783,15 +15910,24 @@ void clif_parse_cashshop_buy(int fd, struct map_session_data *sd)
fail = npc->cashshop_buy(sd, nameid, amount, points);
#else
int len = RFIFOW(fd,2);
- int points = RFIFOL(fd,4);
- int count = RFIFOW(fd,8);
+ int points;
+ int count;
struct itemlist item_list = { 0 };
int i;
- if( len < 10 || len != 10 + count * 4) {
+ if (len < 10) {
+ ShowWarning("Player %d sent incorrect cash shop buy packet (len %d)!\n", sd->status.char_id, len);
+ return;
+ }
+
+ points = RFIFOL(fd, 4);
+ count = RFIFOW(fd, 8);
+
+ if (len != 10 + count * 4) {
ShowWarning("Player %d sent incorrect cash shop buy packet (len %d:%d)!\n", sd->status.char_id, len, 10 + count * 4);
return;
}
+
VECTOR_INIT(item_list);
VECTOR_ENSURE(item_list, count, 1);
for (i = 0; i < count; i++) {
@@ -16516,15 +16652,15 @@ void clif_bg_message(struct battleground_data *bgd, int src_id, const char *name
return;
len = (int)strlen(mes);
- Assert_retv(len <= INT16_MAX - NAME_LENGTH - 8);
- buf = (unsigned char*)aMalloc((len + NAME_LENGTH + 8)*sizeof(unsigned char));
+ Assert_retv(len <= INT16_MAX - NAME_LENGTH - 9);
+ buf = (unsigned char *)aCalloc(len + NAME_LENGTH + 9, sizeof(unsigned char));
- WBUFW(buf,0) = 0x2dc;
- WBUFW(buf,2) = len + NAME_LENGTH + 8;
- WBUFL(buf,4) = src_id;
- memcpy(WBUFP(buf,8), name, NAME_LENGTH);
- memcpy(WBUFP(buf,32), mes, len); // [!] no NUL terminator
- clif->send(buf,WBUFW(buf,2), &sd->bl, BG);
+ WBUFW(buf, 0) = 0x2dc;
+ WBUFW(buf, 2) = len + NAME_LENGTH + 9;
+ WBUFL(buf, 4) = src_id;
+ safestrncpy(WBUFP(buf, 8), name, NAME_LENGTH);
+ safestrncpy(WBUFP(buf, 32), mes, len + 1);
+ clif->send(buf, WBUFW(buf, 2), &sd->bl, BG);
aFree(buf);
}
@@ -16829,7 +16965,7 @@ void clif_parse_ItemListWindowSelected(int fd, struct map_session_data *sd) __at
/// S 07e4 <length>.w <option>.l <val>.l {<index>.w <amount>.w).4b*
void clif_parse_ItemListWindowSelected(int fd, struct map_session_data *sd)
{
- int n = ((int)RFIFOW(fd,2) - 12) / 4;
+ int n = ((int)RFIFOW(fd, 2) - 12) / 4;
int type = RFIFOL(fd,4);
int flag = RFIFOL(fd,8); // Button clicked: 0 = Cancel, 1 = OK
struct itemlist item_list = { 0 };
@@ -16960,7 +17096,7 @@ void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data* sd) {
char storename[MESSAGE_SIZE];
unsigned char result;
int zenylimit;
- unsigned int count, packet_len;
+ int count, packet_len;
struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
packet_len = RFIFOW(fd,info->pos[0]);
@@ -16968,7 +17104,7 @@ void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data* sd) {
// TODO: Make this check global for all variable length packets.
if( packet_len < 89 )
{// minimum packet length
- ShowError("clif_parse_ReqOpenBuyingStore: Malformed packet (expected length=%u, length=%u, account_id=%d).\n", 89U, packet_len, sd->bl.id);
+ ShowError("clif_parse_ReqOpenBuyingStore: Malformed packet (expected length=%u, length=%d, account_id=%d).\n", 89U, packet_len, sd->bl.id);
return;
}
@@ -16980,9 +17116,12 @@ void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data* sd) {
// so that buyingstore_create knows, how many elements it has access to
packet_len-= info->pos[4];
+ if (packet_len < 0)
+ return;
+
if( packet_len%blocksize )
{
- ShowError("clif_parse_ReqOpenBuyingStore: Unexpected item list size %u (account_id=%d, block size=%u)\n", packet_len, sd->bl.id, blocksize);
+ ShowError("clif_parse_ReqOpenBuyingStore: Unexpected item list size %d (account_id=%d, block size=%u)\n", packet_len, sd->bl.id, blocksize);
return;
}
count = packet_len/blocksize;
@@ -17151,14 +17290,15 @@ void clif_parse_ReqTradeBuyingStore(int fd, struct map_session_data* sd) {
const unsigned int blocksize = 6;
const uint8 *itemlist;
int account_id;
- unsigned int count, packet_len, buyer_id;
+ unsigned int buyer_id;
+ int count, packet_len;
struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
packet_len = RFIFOW(fd,info->pos[0]);
if( packet_len < 12 )
{// minimum packet length
- ShowError("clif_parse_ReqTradeBuyingStore: Malformed packet (expected length=%u, length=%u, account_id=%d).\n", 12U, packet_len, sd->bl.id);
+ ShowError("clif_parse_ReqTradeBuyingStore: Malformed packet (expected length=%u, length=%d, account_id=%d).\n", 12U, packet_len, sd->bl.id);
return;
}
@@ -17168,10 +17308,12 @@ void clif_parse_ReqTradeBuyingStore(int fd, struct map_session_data* sd) {
// so that buyingstore_trade knows, how many elements it has access to
packet_len-= info->pos[3];
+ if (packet_len < 0)
+ return;
if( packet_len%blocksize )
{
- ShowError("clif_parse_ReqTradeBuyingStore: Unexpected item list size %u (account_id=%d, buyer_id=%d, block size=%u)\n", packet_len, sd->bl.id, account_id, blocksize);
+ ShowError("clif_parse_ReqTradeBuyingStore: Unexpected item list size %d (account_id=%d, buyer_id=%d, block size=%u)\n", packet_len, sd->bl.id, account_id, blocksize);
return;
}
count = packet_len/blocksize;
@@ -17290,14 +17432,15 @@ void clif_parse_SearchStoreInfo(int fd, struct map_session_data* sd) {
const uint8* itemlist;
const uint8* cardlist;
unsigned char type;
- unsigned int min_price, max_price, packet_len, count, item_count, card_count;
+ unsigned int min_price, max_price;
+ int packet_len, count, item_count, card_count;
struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
packet_len = RFIFOW(fd,info->pos[0]);
if( packet_len < 15 )
{// minimum packet length
- ShowError("clif_parse_SearchStoreInfo: Malformed packet (expected length=%u, length=%u, account_id=%d).\n", 15U, packet_len, sd->bl.id);
+ ShowError("clif_parse_SearchStoreInfo: Malformed packet (expected length=%u, length=%d, account_id=%d).\n", 15U, packet_len, sd->bl.id);
return;
}
@@ -17307,24 +17450,28 @@ void clif_parse_SearchStoreInfo(int fd, struct map_session_data* sd) {
item_count = RFIFOB(fd,info->pos[4]);
card_count = RFIFOB(fd,info->pos[5]);
itemlist = RFIFOP(fd,info->pos[6]);
- cardlist = RFIFOP(fd,info->pos[6]+blocksize*item_count);
// check, if there is enough data for the claimed count of items
packet_len-= info->pos[6];
+ if (packet_len < 0)
+ return;
+
if( packet_len%blocksize )
{
- ShowError("clif_parse_SearchStoreInfo: Unexpected item list size %u (account_id=%d, block size=%u)\n", packet_len, sd->bl.id, blocksize);
+ ShowError("clif_parse_SearchStoreInfo: Unexpected item list size %d (account_id=%d, block size=%u)\n", packet_len, sd->bl.id, blocksize);
return;
}
count = packet_len/blocksize;
if( count < item_count+card_count )
{
- ShowError("clif_parse_SearchStoreInfo: Malformed packet (expected count=%u, count=%u, account_id=%d).\n", item_count+card_count, count, sd->bl.id);
+ ShowError("clif_parse_SearchStoreInfo: Malformed packet (expected count=%d, count=%d, account_id=%d).\n", item_count+card_count, count, sd->bl.id);
return;
}
+ cardlist = RFIFOP(fd, info->pos[6] + blocksize * item_count);
+
searchstore->query(sd, type, min_price, max_price, (const unsigned short*)itemlist, item_count, (const unsigned short*)cardlist, card_count);
}
@@ -17944,16 +18091,30 @@ void clif_parse_CashShopSchedule(int fd, struct map_session_data *sd)
#endif
}
+/// R 0848 <len>.W <limit>.W <kafra pay>.L (<item id>.L <amount>.L <tab>.W)*
void clif_parse_CashShopBuy(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
void clif_parse_CashShopBuy(int fd, struct map_session_data *sd) {
- unsigned short limit = RFIFOW(fd, 4), i, j;
- unsigned int kafra_pay = RFIFOL(fd, 6);// [Ryuuzaki] - These are free cash points (strangely #CASH = main cash currently for us, confusing)
+ int len = RFIFOW(fd, 2);
+ unsigned short limit, i, j;
+ unsigned int kafra_pay;
+ int count;
if (map->list[sd->bl.m].flag.nocashshop) {
clif->messagecolor_self(fd, COLOR_RED, msg_fd(fd,1489)); //Cash Shop is disabled in this map
return;
}
+ if (len < 10)
+ return;
+
+ limit = RFIFOW(fd, 4);
+ kafra_pay = RFIFOL(fd, 6); // [Ryuuzaki] - These are free cash points (strangely #CASH = main cash currently for us, confusing)
+ count = (len - 10) / 10;
+ if (count != limit) {
+ ShowError("Wrong cash shop limit: %d\n", limit);
+ return;
+ }
+
for(i = 0; i < limit; i++) {
int qty = RFIFOL(fd, 14 + ( i * 10 ));
int id = RFIFOL(fd, 10 + ( i * 10 ));
@@ -18425,19 +18586,19 @@ void clif_parse_BankWithdraw(int fd, struct map_session_data *sd)
void clif_parse_BankCheck(int fd, struct map_session_data* sd) __attribute__((nonnull (2)));
void clif_parse_BankCheck(int fd, struct map_session_data* sd)
{
-#if PACKETVER >= 20130313
+#if PACKETVER >= 20130320
struct packet_banking_check p;
+ p.PacketType = banking_checkType;
if (!battle_config.feature_banking) {
- clif->messagecolor_self(fd, COLOR_RED, msg_fd(fd,1483));
- return;
+ p.Money = 0;
+ p.Reason = (short)1;
+ } else {
+ p.Money = (int)sd->status.bank_vault;
+ p.Reason = (short)0;
}
- p.PacketType = banking_checkType;
- p.Money = (int)sd->status.bank_vault;
- p.Reason = (short)0;
-
- clif->send(&p,sizeof(p), &sd->bl, SELF);
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
#endif
}
@@ -19265,6 +19426,156 @@ const char *clif_get_bl_name(const struct block_list *bl)
return name;
}
+/**
+ * Clan System: Sends the basic clan informations to client.
+ * 098a <length>.W <clan id>.L <clan name>.24B <clan master>.24B <clan map>.16B <alliance count>.B
+ * <antagonist count>.B { <alliance>.24B } * alliance count { <antagonist>.24B } * antagonist count (ZC_CLANINFO)
+ */
+void clif_clan_basicinfo(struct map_session_data *sd)
+{
+#if PACKETVER >= 20120716
+ int len, i, fd;
+ struct clan *c, *ally, *antagonist;
+ struct PACKET_ZC_CLANINFO *packet = NULL;
+
+ nullpo_retv(sd);
+ nullpo_retv(c = sd->clan);
+
+ len = sizeof(struct PACKET_ZC_CLANINFO);
+ fd = sd->fd;
+
+ WFIFOHEAD(fd, len);
+ packet = WFIFOP(fd, 0);
+
+ packet->PacketType = clanBasicInfo;
+ packet->ClanID = c->clan_id;
+
+ safestrncpy(packet->ClanName, c->name, NAME_LENGTH);
+ safestrncpy(packet->MasterName, c->master, NAME_LENGTH);
+
+ mapindex->getmapname_ext(c->map, packet->Map);
+
+ packet->AllyCount = VECTOR_LENGTH(c->allies);
+ packet->AntagonistCount = VECTOR_LENGTH(c->antagonists);
+
+ // All allies and antagonists are assumed as valid entries
+ // since it only gets inside the vector after the validation
+ // on clan->config_read
+ for (i = 0; i < VECTOR_LENGTH(c->allies); i++) {
+ struct clan_relationship *al = &VECTOR_INDEX(c->allies, i);
+
+ if ((ally = clan->search(al->clan_id)) != NULL) {
+ safestrncpy(WFIFOP(fd, len), ally->name, NAME_LENGTH);
+ len += NAME_LENGTH;
+ }
+ }
+
+ for (i = 0; i < VECTOR_LENGTH(c->antagonists); i++) {
+ struct clan_relationship *an = &VECTOR_INDEX(c->antagonists, i);
+
+ if ((antagonist = clan->search(an->clan_id)) != NULL) {
+ safestrncpy(WFIFOP(fd, len), antagonist->name, NAME_LENGTH);
+ len += NAME_LENGTH;
+ }
+ }
+
+ packet->PacketLength = len;
+ WFIFOSET(fd, len);
+#endif
+}
+
+/**
+ * Clan System: Updates the online and maximum player count of a clan.
+ * 0988 <online count>.W <maximum member amount>.W (ZC_NOTIFY_CLAN_CONNECTINFO)
+ */
+void clif_clan_onlinecount(struct clan *c)
+{
+#if PACKETVER >= 20120716
+ struct map_session_data *sd;
+ struct PACKET_ZC_NOTIFY_CLAN_CONNECTINFO p;
+
+ nullpo_retv(c);
+
+ p.PacketType = clanOnlineCount;
+ p.NumConnect = c->connect_member;
+ p.NumTotal = c->max_member;
+
+ if ((sd = clan->getonlinesd(c)) != NULL) {
+ clif->send(&p, sizeof(p), &sd->bl, CLAN);
+ }
+#endif
+}
+
+/**
+* Clan System: Notifies the client that the player has left his clan.
+* 0989 (ZC_ACK_CLAN_LEAVE)
+**/
+void clif_clan_leave(struct map_session_data* sd)
+{
+#if PACKETVER >= 20131223
+ struct PACKET_ZC_ACK_CLAN_LEAVE p;
+
+ nullpo_retv(sd);
+
+ p.PacketType = clanLeave;
+
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#endif
+}
+
+/**
+ * Clan System: Sends a clan message to a player
+ * 098e <length>.W <name>.24B <message>.?B (ZC_NOTIFY_CLAN_CHAT)
+ */
+void clif_clan_message(struct clan *c, const char *mes, int len)
+{
+#if PACKETVER >= 20120716
+ struct map_session_data *sd;
+ struct PACKET_ZC_NOTIFY_CLAN_CHAT *p;
+ unsigned int max_len = CHAT_SIZE_MAX - 5 - NAME_LENGTH;
+ int packet_length;
+
+ nullpo_retv(c);
+ nullpo_retv(mes);
+
+ if (len == 0) {
+ return;
+ } else if (len > max_len) {
+ ShowWarning("clif_clan_message: Truncated message '%s' (len=%d, max=%u, clan_id=%d).\n", mes, len, max_len, c->clan_id);
+ len = max_len;
+ }
+
+ packet_length = sizeof(*p) + len + 1;
+ p = (struct PACKET_ZC_NOTIFY_CLAN_CHAT *)aMalloc(packet_length);
+ p->PacketType = clanMessage;
+ p->PacketLength = packet_length;
+ // p->MemberName is being ignored on the client side.
+ safestrncpy(p->Message, mes, len + 1);
+
+ if ((sd = clan->getonlinesd(c)) != NULL)
+ clif->send(p, packet_length, &sd->bl, CLAN);
+ aFree(p);
+#endif
+}
+
+void clif_parse_ClanMessage(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
+/**
+ * Clan System: Parses a clan message from a player.
+ * 098d <length>.W <text>.?B (<name> : <message>) (CZ_CLAN_CHAT)
+ */
+void clif_parse_ClanMessage(int fd, struct map_session_data *sd)
+{
+#if PACKETVER >= 20120716
+ const struct packet_chat_message *packet = RP2PTR(fd);
+ char message[CHAT_SIZE_MAX + NAME_LENGTH + 3 + 1];
+
+ if (clif->process_chat_message(sd, packet, message, sizeof(message)) == NULL)
+ return;
+
+ clan->send_message(sd, message);
+#endif
+}
+
/* */
unsigned short clif_decrypt_cmd( int cmd, struct map_session_data *sd ) {
if( sd ) {
@@ -19520,7 +19831,7 @@ void clif_rodex_send_maillist(int fd, struct map_session_data *sd, int8 open_typ
continue;
inner->MailID = msg->id;
- inner->Isread = msg->is_read == true ? 1 : 0;
+ inner->Isread = (msg->is_read == true || msg->sender_read == true) ? 1 : 0;
inner->type = msg->type;
#if PACKETVER >= 20170419
inner->openType = msg->opentype;
@@ -19552,7 +19863,7 @@ void clif_rodex_send_maillist(int fd, struct map_session_data *sd, int8 open_typ
#endif
}
-void clif_rodex_send_mails_all(int fd, struct map_session_data *sd)
+void clif_rodex_send_mails_all(int fd, struct map_session_data *sd, int64 mail_id)
{
#if PACKETVER >= 20170419
struct PACKET_ZC_MAIL_LIST *packet;
@@ -19560,18 +19871,24 @@ void clif_rodex_send_mails_all(int fd, struct map_session_data *sd)
int16 size = sizeof(*packet);
int packetMailCount = 0;
int mailListCount = 0;
- int mailsSize = VECTOR_LENGTH(sd->rodex.messages);
- int i;
+ int mailsSize, i;
+ int j = -1;
nullpo_retv(sd);
+ mailsSize = VECTOR_LENGTH(sd->rodex.messages);
+
+ if (mail_id > 0)
+ ARR_FIND(0, VECTOR_LENGTH(sd->rodex.messages), j, (VECTOR_INDEX(sd->rodex.messages, j)).id == mail_id);
+
WFIFOHEAD(fd, sizeof(*packet) + (sizeof(*inner) + RODEX_TITLE_LENGTH) * RODEX_MAIL_PER_PAGE);
packet = WFIFOP(fd, 0);
packet->PacketType = rodexmailList;
inner = WFIFOP(fd, size);
i = mailsSize - 1;
- while (i >= 0) {
+ mailsSize -= (j + 1);
+ while (i > j) {
struct rodex_message *msg = &VECTOR_INDEX(sd->rodex.messages, i);
--i;
@@ -19579,7 +19896,7 @@ void clif_rodex_send_mails_all(int fd, struct map_session_data *sd)
continue;
inner->MailID = msg->id;
- inner->Isread = msg->is_read == true ? 1 : 0;
+ inner->Isread = (msg->is_read == true || msg->sender_read == true) ? 1 : 0;
inner->type = msg->type;
inner->openType = msg->opentype;
inner->expireDateTime = msg->expire_date - (int)time(NULL);
@@ -19646,7 +19963,7 @@ void clif_rodex_send_refresh(int fd, struct map_session_data *sd, int8 open_type
continue;
inner->MailID = msg->id;
- inner->Isread = msg->is_read == true ? 1 : 0;
+ inner->Isread = (msg->is_read == true || msg->sender_read == true) ? 1 : 0;
inner->type = msg->type;
#if PACKETVER >= 20170419
inner->openType = msg->opentype;
@@ -20117,10 +20434,22 @@ void packetdb_loaddb(void) {
#define packet(id, size, ...) packetdb_addpacket((id), (size), ##__VA_ARGS__, 0xFFFF)
#include "packets.h" /* load structure data */
-#include "packets_shuffle.h"
+#ifdef PACKETVER_ZERO
+#include "packets_shuffle_zero.h"
+#else // PACKETVER_ZERO
+#include "packets_shuffle_main.h"
+#endif // PACKETVER_ZERO
#undef packet
#define packetKeys(a,b,c) do { clif->cryptKey[0] = (a); clif->cryptKey[1] = (b); clif->cryptKey[2] = (c); } while(0)
-#include "packets_keys.h"
+#if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3)
+ packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3);
+#else // defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3)
+#ifdef PACKETVER_ZERO
+#include "packets_keys_zero.h"
+#else // PACKETVER_ZERO
+#include "packets_keys_main.h"
+#endif // PACKETVER_ZERO
+#endif // defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3)
#undef packetKeys
}
void clif_bc_ready(void) {
@@ -20367,6 +20696,7 @@ void clif_defaults(void) {
clif->font = clif_font;
clif->progressbar = clif_progressbar;
clif->progressbar_abort = clif_progressbar_abort;
+ clif->progressbar_unit = clif_progressbar_unit;
clif->showdigit = clif_showdigit;
clif->elementalconverter_list = clif_elementalconverter_list;
clif->spellbook_list = clif_spellbook_list;
@@ -20976,4 +21306,10 @@ void clif_defaults(void) {
clif->rodex_icon = clif_rodex_icon;
clif->rodex_send_mails_all = clif_rodex_send_mails_all;
clif->skill_scale = clif_skill_scale;
+ // -- Clan system
+ clif->clan_basicinfo = clif_clan_basicinfo;
+ clif->clan_onlinecount = clif_clan_onlinecount;
+ clif->clan_leave = clif_clan_leave;
+ clif->clan_message = clif_clan_message;
+ clif->pClanMessage = clif_parse_ClanMessage;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index e348bbb08..acf79c373 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -110,6 +110,8 @@ typedef enum send_target {
BG_AREA_WOS,
BG_QUEUE,
+
+ CLAN, // Clan System
} send_target;
typedef enum broadcast_flags {
@@ -796,6 +798,7 @@ struct clif_interface {
void (*font) (struct map_session_data *sd);
void (*progressbar) (struct map_session_data * sd, unsigned int color, unsigned int second);
void (*progressbar_abort) (struct map_session_data * sd);
+ void (*progressbar_unit) (struct block_list *bl, uint32 color, uint32 time);
void (*showdigit) (struct map_session_data* sd, unsigned char type, int value);
int (*elementalconverter_list) (struct map_session_data *sd);
int (*spellbook_list) (struct map_session_data *sd);
@@ -1386,7 +1389,7 @@ struct clif_interface {
void (*rodex_send_mail_result) (int fd, struct map_session_data *sd, int8 result);
void (*rodex_send_maillist) (int fd, struct map_session_data *sd, int8 open_type, int64 page_start);
void (*rodex_send_refresh) (int fd, struct map_session_data *sd, int8 open_type, int count);
- void (*rodex_send_mails_all) (int fd, struct map_session_data *sd);
+ void (*rodex_send_mails_all) (int fd, struct map_session_data *sd, int64 mail_id);
void (*pRodexReadMail) (int fd, struct map_session_data *sd);
void (*rodex_read_mail) (struct map_session_data *sd, int8 opentype, struct rodex_message *msg);
void (*pRodexNextMaillist) (int fd, struct map_session_data *sd);
@@ -1404,6 +1407,12 @@ struct clif_interface {
void (*rodex_request_items) (struct map_session_data *sd, int8 opentype, int64 mail_id, int8 result);
void (*rodex_icon) (int fd, bool show);
void (*skill_scale) (struct block_list *bl, int src_id, int x, int y, uint16 skill_id, uint16 skill_lv, int casttime);
+ /* Clan System */
+ void (*clan_basicinfo) (struct map_session_data *sd);
+ void (*clan_onlinecount) (struct clan *c);
+ void (*clan_leave) (struct map_session_data *sd);
+ void (*clan_message) (struct clan *c, const char *mes, int len);
+ void (*pClanMessage) (int fd, struct map_session_data* sd);
};
#ifdef HERCULES_CORE
diff --git a/src/map/constants.inc b/src/map/constants.inc
new file mode 100644
index 000000000..355e2a825
--- /dev/null
+++ b/src/map/constants.inc
@@ -0,0 +1,1029 @@
+ script->constdb_comment("Status Icons");
+
+ script->set_constant("SI_BLANK", SI_BLANK, false, false);
+
+ script->set_constant("SI_PROVOKE", SI_PROVOKE, false, false);
+ script->set_constant("SI_ENDURE", SI_ENDURE, false, false);
+ script->set_constant("SI_TWOHANDQUICKEN", SI_TWOHANDQUICKEN, false, false);
+ script->set_constant("SI_CONCENTRATION", SI_CONCENTRATION, false, false);
+ script->set_constant("SI_HIDING", SI_HIDING, false, false);
+ script->set_constant("SI_CLOAKING", SI_CLOAKING, false, false);
+ script->set_constant("SI_ENCHANTPOISON", SI_ENCHANTPOISON, false, false);
+ script->set_constant("SI_POISONREACT", SI_POISONREACT, false, false);
+ script->set_constant("SI_QUAGMIRE", SI_QUAGMIRE, false, false);
+ script->set_constant("SI_ANGELUS", SI_ANGELUS, false, false);
+ script->set_constant("SI_BLESSING", SI_BLESSING, false, false);
+ script->set_constant("SI_CRUCIS", SI_CRUCIS, false, false);
+ script->set_constant("SI_INC_AGI", SI_INC_AGI, false, false);
+ script->set_constant("SI_DEC_AGI", SI_DEC_AGI, false, false);
+ script->set_constant("SI_SLOWPOISON", SI_SLOWPOISON, false, false);
+ script->set_constant("SI_IMPOSITIO", SI_IMPOSITIO, false, false);
+ script->set_constant("SI_SUFFRAGIUM", SI_SUFFRAGIUM, false, false);
+ script->set_constant("SI_ASPERSIO", SI_ASPERSIO, false, false);
+ script->set_constant("SI_BENEDICTIO", SI_BENEDICTIO, false, false);
+ script->set_constant("SI_KYRIE", SI_KYRIE, false, false);
+ script->set_constant("SI_MAGNIFICAT", SI_MAGNIFICAT, false, false);
+ script->set_constant("SI_GLORIA", SI_GLORIA, false, false);
+ script->set_constant("SI_LEXAETERNA", SI_LEXAETERNA, false, false);
+ script->set_constant("SI_ADRENALINE", SI_ADRENALINE, false, false);
+ script->set_constant("SI_WEAPONPERFECT", SI_WEAPONPERFECT, false, false);
+ script->set_constant("SI_OVERTHRUST", SI_OVERTHRUST, false, false);
+ script->set_constant("SI_MAXIMIZE", SI_MAXIMIZE, false, false);
+ script->set_constant("SI_RIDING", SI_RIDING, false, false);
+ script->set_constant("SI_FALCON", SI_FALCON, false, false);
+ script->set_constant("SI_TRICKDEAD", SI_TRICKDEAD, false, false);
+ script->set_constant("SI_SHOUT", SI_SHOUT, false, false);
+ script->set_constant("SI_ENERGYCOAT", SI_ENERGYCOAT, false, false);
+ script->set_constant("SI_BROKENARMOR", SI_BROKENARMOR, false, false);
+ script->set_constant("SI_BROKENWEAPON", SI_BROKENWEAPON, false, false);
+ script->set_constant("SI_ILLUSION", SI_ILLUSION, false, false);
+ script->set_constant("SI_WEIGHTOVER50", SI_WEIGHTOVER50, false, false);
+ script->set_constant("SI_WEIGHTOVER90", SI_WEIGHTOVER90, false, false);
+ script->set_constant("SI_ATTHASTE_POTION1", SI_ATTHASTE_POTION1, false, false);
+ script->set_constant("SI_ATTHASTE_POTION2", SI_ATTHASTE_POTION2, false, false);
+ script->set_constant("SI_ATTHASTE_POTION3", SI_ATTHASTE_POTION3, false, false);
+ script->set_constant("SI_ATTHASTE_INFINITY", SI_ATTHASTE_INFINITY, false, false);
+ script->set_constant("SI_MOVHASTE_POTION", SI_MOVHASTE_POTION, false, false);
+ script->set_constant("SI_MOVHASTE_INFINITY", SI_MOVHASTE_INFINITY, false, false);
+ //script->set_constant("SI_AUTOCOUNTER", SI_AUTOCOUNTER, false, false);
+ //script->set_constant("SI_SPLASHER", SI_SPLASHER, false, false);
+ script->set_constant("SI_ANKLESNARE", SI_ANKLESNARE, false, false);
+ script->set_constant("SI_POSTDELAY", SI_POSTDELAY, false, false);
+ //script->set_constant("SI_NOACTION", SI_NOACTION, false, false);
+ //script->set_constant("SI_IMPOSSIBLEPICKUP", SI_IMPOSSIBLEPICKUP, false, false);
+ //script->set_constant("SI_BARRIER", SI_BARRIER, false, false);
+
+ script->set_constant("SI_NOEQUIPWEAPON", SI_NOEQUIPWEAPON, false, false);
+ script->set_constant("SI_NOEQUIPSHIELD", SI_NOEQUIPSHIELD, false, false);
+ script->set_constant("SI_NOEQUIPARMOR", SI_NOEQUIPARMOR, false, false);
+ script->set_constant("SI_NOEQUIPHELM", SI_NOEQUIPHELM, false, false);
+ script->set_constant("SI_PROTECTWEAPON", SI_PROTECTWEAPON, false, false);
+ script->set_constant("SI_PROTECTSHIELD", SI_PROTECTSHIELD, false, false);
+ script->set_constant("SI_PROTECTARMOR", SI_PROTECTARMOR, false, false);
+ script->set_constant("SI_PROTECTHELM", SI_PROTECTHELM, false, false);
+ script->set_constant("SI_AUTOGUARD", SI_AUTOGUARD, false, false);
+ script->set_constant("SI_REFLECTSHIELD", SI_REFLECTSHIELD, false, false);
+ //script->set_constant("SI_DEVOTION", SI_DEVOTION, false, false);
+ script->set_constant("SI_PROVIDENCE", SI_PROVIDENCE, false, false);
+ script->set_constant("SI_DEFENDER", SI_DEFENDER, false, false);
+ //script->set_constant("SI_MAGICROD", SI_MAGICROD, false, false);
+ //script->set_constant("SI_WEAPONPROPERTY", SI_WEAPONPROPERTY, false, false);
+ script->set_constant("SI_AUTOSPELL", SI_AUTOSPELL, false, false);
+ //script->set_constant("SI_SPECIALZONE", SI_SPECIALZONE, false, false);
+ //script->set_constant("SI_MASK", SI_MASK, false, false);
+ script->set_constant("SI_SPEARQUICKEN", SI_SPEARQUICKEN, false, false);
+ //script->set_constant("SI_BDPLAYING", SI_BDPLAYING, false, false);
+ //script->set_constant("SI_WHISTLE", SI_WHISTLE, false, false);
+ //script->set_constant("SI_ASSASSINCROSS", SI_ASSASSINCROSS, false, false);
+ //script->set_constant("SI_POEMBRAGI", SI_POEMBRAGI, false, false);
+ //script->set_constant("SI_APPLEIDUN", SI_APPLEIDUN, false, false);
+ //script->set_constant("SI_HUMMING", SI_HUMMING, false, false);
+ //script->set_constant("SI_DONTFORGETME", SI_DONTFORGETME, false, false);
+ //script->set_constant("SI_FORTUNEKISS", SI_FORTUNEKISS, false, false);
+ //script->set_constant("SI_SERVICEFORYOU", SI_SERVICEFORYOU, false, false);
+ //script->set_constant("SI_RICHMANKIM", SI_RICHMANKIM, false, false);
+ //script->set_constant("SI_ETERNALCHAOS", SI_ETERNALCHAOS, false, false);
+ //script->set_constant("SI_DRUMBATTLEFIELD", SI_DRUMBATTLEFIELD, false, false);
+ //script->set_constant("SI_RINGNIBELUNGEN", SI_RINGNIBELUNGEN, false, false);
+ //script->set_constant("SI_ROKISWEIL", SI_ROKISWEIL, false, false);
+ //script->set_constant("SI_INTOABYSS", SI_INTOABYSS, false, false);
+ //script->set_constant("SI_SIEGFRIED", SI_SIEGFRIED, false, false);
+ //script->set_constant("SI_BLADESTOP", SI_BLADESTOP, false, false);
+ script->set_constant("SI_EXPLOSIONSPIRITS", SI_EXPLOSIONSPIRITS, false, false);
+ script->set_constant("SI_STEELBODY", SI_STEELBODY, false, false);
+ script->set_constant("SI_EXTREMITYFIST", SI_EXTREMITYFIST, false, false);
+ //script->set_constant("SI_COMBOATTACK", SI_COMBOATTACK, false, false);
+ script->set_constant("SI_PROPERTYFIRE", SI_PROPERTYFIRE, false, false);
+ script->set_constant("SI_PROPERTYWATER", SI_PROPERTYWATER, false, false);
+ script->set_constant("SI_PROPERTYWIND", SI_PROPERTYWIND, false, false);
+ script->set_constant("SI_PROPERTYGROUND", SI_PROPERTYGROUND, false, false);
+ //script->set_constant("SI_MAGICATTACK", SI_MAGICATTACK, false, false);
+ script->set_constant("SI_STOP", SI_STOP, false, false);
+ //script->set_constant("SI_WEAPONBRAKER", SI_WEAPONBRAKER, false, false);
+ script->set_constant("SI_PROPERTYUNDEAD", SI_PROPERTYUNDEAD, false, false);
+ //script->set_constant("SI_POWERUP", SI_POWERUP, false, false);
+ //script->set_constant("SI_AGIUP", SI_AGIUP, false, false);
+
+ //script->set_constant("SI_SIEGEMODE", SI_SIEGEMODE, false, false);
+ //script->set_constant("SI_INVISIBLE", SI_INVISIBLE, false, false);
+ //script->set_constant("SI_STATUSONE", SI_STATUSONE, false, false);
+ script->set_constant("SI_AURABLADE", SI_AURABLADE, false, false);
+ script->set_constant("SI_PARRYING", SI_PARRYING, false, false);
+ script->set_constant("SI_LKCONCENTRATION", SI_LKCONCENTRATION, false, false);
+ script->set_constant("SI_TENSIONRELAX", SI_TENSIONRELAX, false, false);
+ script->set_constant("SI_BERSERK", SI_BERSERK, false, false);
+ //script->set_constant("SI_SACRIFICE", SI_SACRIFICE, false, false);
+ //script->set_constant("SI_GOSPEL", SI_GOSPEL, false, false);
+ script->set_constant("SI_ASSUMPTIO", SI_ASSUMPTIO, false, false);
+ //script->set_constant("SI_BASILICA", SI_BASILICA, false, false);
+ script->set_constant("SI_GROUNDMAGIC", SI_GROUNDMAGIC, false, false);
+ script->set_constant("SI_MAGICPOWER", SI_MAGICPOWER, false, false);
+ script->set_constant("SI_EDP", SI_EDP, false, false);
+ script->set_constant("SI_TRUESIGHT", SI_TRUESIGHT, false, false);
+ script->set_constant("SI_WINDWALK", SI_WINDWALK, false, false);
+ script->set_constant("SI_MELTDOWN", SI_MELTDOWN, false, false);
+ script->set_constant("SI_CARTBOOST", SI_CARTBOOST, false, false);
+ //script->set_constant("SI_CHASEWALK", SI_CHASEWALK, false, false);
+ script->set_constant("SI_SWORDREJECT", SI_SWORDREJECT, false, false);
+ script->set_constant("SI_MARIONETTE_MASTER", SI_MARIONETTE_MASTER, false, false);
+ script->set_constant("SI_MARIONETTE", SI_MARIONETTE, false, false);
+ script->set_constant("SI_MOON", SI_MOON, false, false);
+ script->set_constant("SI_BLOODING", SI_BLOODING, false, false);
+ script->set_constant("SI_JOINTBEAT", SI_JOINTBEAT, false, false);
+ //script->set_constant("SI_MINDBREAKER", SI_MINDBREAKER, false, false);
+ //script->set_constant("SI_MEMORIZE", SI_MEMORIZE, false, false);
+ //script->set_constant("SI_FOGWALL", SI_FOGWALL, false, false);
+ //script->set_constant("SI_SPIDERWEB", SI_SPIDERWEB, false, false);
+ script->set_constant("SI_PROTECTEXP", SI_PROTECTEXP, false, false);
+ //script->set_constant("SI_SUB_WEAPONPROPERTY", SI_SUB_WEAPONPROPERTY, false, false);
+ script->set_constant("SI_AUTOBERSERK", SI_AUTOBERSERK, false, false);
+ script->set_constant("SI_RUN", SI_RUN, false, false);
+ script->set_constant("SI_TING", SI_TING, false, false);
+ script->set_constant("SI_STORMKICK_ON", SI_STORMKICK_ON, false, false);
+ script->set_constant("SI_STORMKICK_READY", SI_STORMKICK_READY, false, false);
+ script->set_constant("SI_DOWNKICK_ON", SI_DOWNKICK_ON, false, false);
+ script->set_constant("SI_DOWNKICK_READY", SI_DOWNKICK_READY, false, false);
+ script->set_constant("SI_TURNKICK_ON", SI_TURNKICK_ON, false, false);
+ script->set_constant("SI_TURNKICK_READY", SI_TURNKICK_READY, false, false);
+ script->set_constant("SI_COUNTER_ON", SI_COUNTER_ON, false, false);
+ script->set_constant("SI_COUNTER_READY", SI_COUNTER_READY, false, false);
+ script->set_constant("SI_DODGE_ON", SI_DODGE_ON, false, false);
+ script->set_constant("SI_DODGE_READY", SI_DODGE_READY, false, false);
+ script->set_constant("SI_STRUP", SI_STRUP, false, false);
+ script->set_constant("SI_PROPERTYDARK", SI_PROPERTYDARK, false, false);
+ script->set_constant("SI_ADRENALINE2", SI_ADRENALINE2, false, false);
+ script->set_constant("SI_PROPERTYTELEKINESIS", SI_PROPERTYTELEKINESIS, false, false);
+ script->set_constant("SI_SOULLINK", SI_SOULLINK, false, false);
+
+ script->set_constant("SI_PLUSATTACKPOWER", SI_PLUSATTACKPOWER, false, false);
+ script->set_constant("SI_PLUSMAGICPOWER", SI_PLUSMAGICPOWER, false, false);
+ script->set_constant("SI_DEVIL1", SI_DEVIL1, false, false);
+ script->set_constant("SI_KAITE", SI_KAITE, false, false);
+ //script->set_constant("SI_SWOO", SI_SWOO, false, false);
+ //script->set_constant("SI_STAR2", SI_STAR2, false, false);
+ script->set_constant("SI_KAIZEL", SI_KAIZEL, false, false);
+ script->set_constant("SI_KAAHI", SI_KAAHI, false, false);
+ script->set_constant("SI_KAUPE", SI_KAUPE, false, false);
+ script->set_constant("SI_SMA_READY", SI_SMA_READY, false, false);
+ script->set_constant("SI_SKE", SI_SKE, false, false);
+ script->set_constant("SI_ONEHANDQUICKEN", SI_ONEHANDQUICKEN, false, false);
+ //script->set_constant("SI_FRIEND", SI_FRIEND, false, false);
+ //script->set_constant("SI_FRIENDUP", SI_FRIENDUP, false, false);
+ //script->set_constant("SI_SG_WARM", SI_SG_WARM, false, false);
+ script->set_constant("SI_SG_SUN_WARM", SI_SG_SUN_WARM, false, false);
+ //script->set_constant("SI_SG_MOON_WARM", SI_SG_MOON_WARM, false, false);
+ //script->set_constant("SI_SG_STAR_WARM", SI_SG_STAR_WARM, false, false);
+ //script->set_constant("SI_EMOTION", SI_EMOTION, false, false);
+ script->set_constant("SI_SUN_COMFORT", SI_SUN_COMFORT, false, false);
+ script->set_constant("SI_MOON_COMFORT", SI_MOON_COMFORT, false, false);
+ script->set_constant("SI_STAR_COMFORT", SI_STAR_COMFORT, false, false);
+ //script->set_constant("SI_EXPUP", SI_EXPUP, false, false);
+ //script->set_constant("SI_GDSKILL_BATTLEORDER", SI_GDSKILL_BATTLEORDER, false, false);
+ //script->set_constant("SI_GDSKILL_REGENERATION", SI_GDSKILL_REGENERATION, false, false);
+ //script->set_constant("SI_GDSKILL_POSTDELAY", SI_GDSKILL_POSTDELAY, false, false);
+ //script->set_constant("SI_RESISTHANDICAP", SI_RESISTHANDICAP, false, false);
+ //script->set_constant("SI_MAXHPPERCENT", SI_MAXHPPERCENT, false, false);
+ //script->set_constant("SI_MAXSPPERCENT", SI_MAXSPPERCENT, false, false);
+ //script->set_constant("SI_DEFENCE", SI_DEFENCE, false, false);
+ //script->set_constant("SI_SLOWDOWN", SI_SLOWDOWN, false, false);
+ script->set_constant("SI_PRESERVE", SI_PRESERVE, false, false);
+ script->set_constant("SI_INCSTR", SI_INCSTR, false, false);
+ //script->set_constant("SI_NOT_EXTREMITYFIST", SI_NOT_EXTREMITYFIST, false, false);
+ script->set_constant("SI_CLAIRVOYANCE", SI_CLAIRVOYANCE, false, false);
+ script->set_constant("SI_MOVESLOW_POTION", SI_MOVESLOW_POTION, false, false);
+ script->set_constant("SI_DOUBLECASTING", SI_DOUBLECASTING, false, false);
+ //script->set_constant("SI_GRAVITATION", SI_GRAVITATION, false, false);
+ script->set_constant("SI_OVERTHRUSTMAX", SI_OVERTHRUSTMAX, false, false);
+ //script->set_constant("SI_LONGING", SI_LONGING, false, false);
+ //script->set_constant("SI_HERMODE", SI_HERMODE, false, false);
+ script->set_constant("SI_TAROTCARD", SI_TAROTCARD, false, false);
+ //script->set_constant("SI_HLIF_AVOID", SI_HLIF_AVOID, false, false);
+ //script->set_constant("SI_HFLI_FLEET", SI_HFLI_FLEET, false, false);
+ //script->set_constant("SI_HFLI_SPEED", SI_HFLI_SPEED, false, false);
+ //script->set_constant("SI_HLIF_CHANGE", SI_HLIF_CHANGE, false, false);
+ //script->set_constant("SI_HAMI_BLOODLUST", SI_HAMI_BLOODLUST, false, false);
+ script->set_constant("SI_CR_SHRINK", SI_CR_SHRINK, false, false);
+ script->set_constant("SI_WZ_SIGHTBLASTER", SI_WZ_SIGHTBLASTER, false, false);
+ script->set_constant("SI_DC_WINKCHARM", SI_DC_WINKCHARM, false, false);
+
+ script->set_constant("SI_RG_CCONFINE_M", SI_RG_CCONFINE_M, false, false);
+ script->set_constant("SI_RG_CCONFINE_S", SI_RG_CCONFINE_S, false, false);
+ //script->set_constant("SI_DISABLEMOVE", SI_DISABLEMOVE, false, false);
+ script->set_constant("SI_GS_MADNESSCANCEL", SI_GS_MADNESSCANCEL, false, false);
+ script->set_constant("SI_GS_GATLINGFEVER", SI_GS_GATLINGFEVER, false, false);
+ script->set_constant("SI_EARTHSCROLL", SI_EARTHSCROLL, false, false);
+ script->set_constant("SI_NJ_UTSUSEMI", SI_NJ_UTSUSEMI, false, false);
+ script->set_constant("SI_NJ_BUNSINJYUTSU", SI_NJ_BUNSINJYUTSU, false, false);
+ script->set_constant("SI_NJ_NEN", SI_NJ_NEN, false, false);
+ script->set_constant("SI_GS_ADJUSTMENT", SI_GS_ADJUSTMENT, false, false);
+ script->set_constant("SI_GS_ACCURACY", SI_GS_ACCURACY, false, false);
+ script->set_constant("SI_NJ_SUITON", SI_NJ_SUITON, false, false);
+ //script->set_constant("SI_PET", SI_PET, false, false);
+ //script->set_constant("SI_MENTAL", SI_MENTAL, false, false);
+ //script->set_constant("SI_EXPMEMORY", SI_EXPMEMORY, false, false);
+ //script->set_constant("SI_PERFORMANCE", SI_PERFORMANCE, false, false);
+ //script->set_constant("SI_GAIN", SI_GAIN, false, false);
+ //script->set_constant("SI_GRIFFON", SI_GRIFFON, false, false);
+ //script->set_constant("SI_DRIFT", SI_DRIFT, false, false);
+ //script->set_constant("SI_WALLSHIFT", SI_WALLSHIFT, false, false);
+ //script->set_constant("SI_REINCARNATION", SI_REINCARNATION, false, false);
+ //script->set_constant("SI_PATTACK", SI_PATTACK, false, false);
+ //script->set_constant("SI_PSPEED", SI_PSPEED, false, false);
+ //script->set_constant("SI_PDEFENSE", SI_PDEFENSE, false, false);
+ //script->set_constant("SI_PCRITICAL", SI_PCRITICAL, false, false);
+ //script->set_constant("SI_RANKING", SI_RANKING, false, false);
+ //script->set_constant("SI_PTRIPLE", SI_PTRIPLE, false, false);
+ //script->set_constant("SI_DENERGY", SI_DENERGY, false, false);
+ //script->set_constant("SI_WAVE1", SI_WAVE1, false, false);
+ //script->set_constant("SI_WAVE2", SI_WAVE2, false, false);
+ //script->set_constant("SI_WAVE3", SI_WAVE3, false, false);
+ //script->set_constant("SI_WAVE4", SI_WAVE4, false, false);
+ //script->set_constant("SI_DAURA", SI_DAURA, false, false);
+ //script->set_constant("SI_DFREEZER", SI_DFREEZER, false, false);
+ //script->set_constant("SI_DPUNISH", SI_DPUNISH, false, false);
+ //script->set_constant("SI_DBARRIER", SI_DBARRIER, false, false);
+ //script->set_constant("SI_DWARNING", SI_DWARNING, false, false);
+ //script->set_constant("SI_MOUSEWHEEL", SI_MOUSEWHEEL, false, false);
+ //script->set_constant("SI_DGAUGE", SI_DGAUGE, false, false);
+ //script->set_constant("SI_DACCEL", SI_DACCEL, false, false);
+ //script->set_constant("SI_DBLOCK", SI_DBLOCK, false, false);
+ script->set_constant("SI_FOOD_STR", SI_FOOD_STR, false, false);
+ script->set_constant("SI_FOOD_AGI", SI_FOOD_AGI, false, false);
+ script->set_constant("SI_FOOD_VIT", SI_FOOD_VIT, false, false);
+ script->set_constant("SI_FOOD_DEX", SI_FOOD_DEX, false, false);
+ script->set_constant("SI_FOOD_INT", SI_FOOD_INT, false, false);
+ script->set_constant("SI_FOOD_LUK", SI_FOOD_LUK, false, false);
+ script->set_constant("SI_FOOD_BASICAVOIDANCE", SI_FOOD_BASICAVOIDANCE, false, false);
+ script->set_constant("SI_FOOD_BASICHIT", SI_FOOD_BASICHIT, false, false);
+ script->set_constant("SI_FOOD_CRITICALSUCCESSVALUE", SI_FOOD_CRITICALSUCCESSVALUE, false, false);
+
+ script->set_constant("SI_CASH_PLUSEXP", SI_CASH_PLUSEXP, false, false);
+ script->set_constant("SI_CASH_DEATHPENALTY", SI_CASH_DEATHPENALTY, false, false);
+ script->set_constant("SI_CASH_RECEIVEITEM", SI_CASH_RECEIVEITEM, false, false);
+ script->set_constant("SI_CASH_BOSS_ALARM", SI_CASH_BOSS_ALARM, false, false);
+ //script->set_constant("SI_DA_ENERGY", SI_DA_ENERGY, false, false);
+ //script->set_constant("SI_DA_FIRSTSLOT", SI_DA_FIRSTSLOT, false, false);
+ //script->set_constant("SI_DA_HEADDEF", SI_DA_HEADDEF, false, false);
+ //script->set_constant("SI_DA_SPACE", SI_DA_SPACE, false, false);
+ //script->set_constant("SI_DA_TRANSFORM", SI_DA_TRANSFORM, false, false);
+ //script->set_constant("SI_DA_ITEMREBUILD", SI_DA_ITEMREBUILD, false, false);
+ //script->set_constant("SI_DA_ILLUSION", SI_DA_ILLUSION, false, false);
+ //script->set_constant("SI_DA_DARKPOWER", SI_DA_DARKPOWER, false, false);
+ //script->set_constant("SI_DA_EARPLUG", SI_DA_EARPLUG, false, false);
+ //script->set_constant("SI_DA_CONTRACT", SI_DA_CONTRACT, false, false);
+ //script->set_constant("SI_DA_BLACK", SI_DA_BLACK, false, false);
+ //script->set_constant("SI_DA_MAGICCART", SI_DA_MAGICCART, false, false);
+ //script->set_constant("SI_CRYSTAL", SI_CRYSTAL, false, false);
+ //script->set_constant("SI_DA_REBUILD", SI_DA_REBUILD, false, false);
+ //script->set_constant("SI_DA_EDARKNESS", SI_DA_EDARKNESS, false, false);
+ //script->set_constant("SI_DA_EGUARDIAN", SI_DA_EGUARDIAN, false, false);
+ //script->set_constant("SI_DA_TIMEOUT", SI_DA_TIMEOUT, false, false);
+ script->set_constant("SI_FOOD_STR_CASH", SI_FOOD_STR_CASH, false, false);
+ script->set_constant("SI_FOOD_AGI_CASH", SI_FOOD_AGI_CASH, false, false);
+ script->set_constant("SI_FOOD_VIT_CASH", SI_FOOD_VIT_CASH, false, false);
+ script->set_constant("SI_FOOD_DEX_CASH", SI_FOOD_DEX_CASH, false, false);
+ script->set_constant("SI_FOOD_INT_CASH", SI_FOOD_INT_CASH, false, false);
+ script->set_constant("SI_FOOD_LUK_CASH", SI_FOOD_LUK_CASH, false, false);
+ script->set_constant("SI_MER_FLEE", SI_MER_FLEE, false, false);
+ script->set_constant("SI_MER_ATK", SI_MER_ATK, false, false);
+ script->set_constant("SI_MER_HP", SI_MER_HP, false, false);
+ script->set_constant("SI_MER_SP", SI_MER_SP, false, false);
+ script->set_constant("SI_MER_HIT", SI_MER_HIT, false, false);
+ script->set_constant("SI_SLOWCAST", SI_SLOWCAST, false, false);
+ //script->set_constant("SI_MAGICMIRROR", SI_MAGICMIRROR, false, false);
+ //script->set_constant("SI_STONESKIN", SI_STONESKIN, false, false);
+ //script->set_constant("SI_ANTIMAGIC", SI_ANTIMAGIC, false, false);
+ script->set_constant("SI_CRITICALWOUND", SI_CRITICALWOUND, false, false);
+ //script->set_constant("SI_NPC_DEFENDER", SI_NPC_DEFENDER, false, false);
+ //script->set_constant("SI_NOACTION_WAIT", SI_NOACTION_WAIT, false, false);
+ script->set_constant("SI_MOVHASTE_HORSE", SI_MOVHASTE_HORSE, false, false);
+ script->set_constant("SI_PROTECT_DEF", SI_PROTECT_DEF, false, false);
+ script->set_constant("SI_PROTECT_MDEF", SI_PROTECT_MDEF, false, false);
+ script->set_constant("SI_HEALPLUS", SI_HEALPLUS, false, false);
+ script->set_constant("SI_S_LIFEPOTION", SI_S_LIFEPOTION, false, false);
+ script->set_constant("SI_L_LIFEPOTION", SI_L_LIFEPOTION, false, false);
+ script->set_constant("SI_CRITICALPERCENT", SI_CRITICALPERCENT, false, false);
+ script->set_constant("SI_PLUSAVOIDVALUE", SI_PLUSAVOIDVALUE, false, false);
+ script->set_constant("SI_ATKER_ASPD", SI_ATKER_ASPD, false, false);
+ script->set_constant("SI_TARGET_ASPD", SI_TARGET_ASPD, false, false);
+ script->set_constant("SI_ATKER_MOVESPEED", SI_ATKER_MOVESPEED, false, false);
+
+ script->set_constant("SI_ATKER_BLOOD", SI_ATKER_BLOOD, false, false);
+ script->set_constant("SI_TARGET_BLOOD", SI_TARGET_BLOOD, false, false);
+ script->set_constant("SI_ARMOR_PROPERTY", SI_ARMOR_PROPERTY, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_A", SI_REUSE_LIMIT_A, false, false);
+ script->set_constant("SI_HELLPOWER", SI_HELLPOWER, false, false);
+ script->set_constant("SI_STEAMPACK", SI_STEAMPACK, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_B", SI_REUSE_LIMIT_B, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_C", SI_REUSE_LIMIT_C, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_D", SI_REUSE_LIMIT_D, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_E", SI_REUSE_LIMIT_E, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_F", SI_REUSE_LIMIT_F, false, false);
+ script->set_constant("SI_INVINCIBLE", SI_INVINCIBLE, false, false);
+ script->set_constant("SI_CASH_PLUSONLYJOBEXP", SI_CASH_PLUSONLYJOBEXP, false, false);
+ script->set_constant("SI_PARTYFLEE", SI_PARTYFLEE, false, false);
+ script->set_constant("SI_ANGEL_PROTECT", SI_ANGEL_PROTECT, false, false);
+ //script->set_constant("SI_ENDURE_MDEF", SI_ENDURE_MDEF, false, false);
+ script->set_constant("SI_ENCHANTBLADE", SI_ENCHANTBLADE, false, false);
+ script->set_constant("SI_DEATHBOUND", SI_DEATHBOUND, false, false);
+ script->set_constant("SI_REFRESH", SI_REFRESH, false, false);
+ script->set_constant("SI_GIANTGROWTH", SI_GIANTGROWTH, false, false);
+ script->set_constant("SI_STONEHARDSKIN", SI_STONEHARDSKIN, false, false);
+ script->set_constant("SI_VITALITYACTIVATION", SI_VITALITYACTIVATION, false, false);
+ script->set_constant("SI_FIGHTINGSPIRIT", SI_FIGHTINGSPIRIT, false, false);
+ script->set_constant("SI_ABUNDANCE", SI_ABUNDANCE, false, false);
+ script->set_constant("SI_REUSE_MILLENNIUMSHIELD", SI_REUSE_MILLENNIUMSHIELD, false, false);
+ script->set_constant("SI_REUSE_CRUSHSTRIKE", SI_REUSE_CRUSHSTRIKE, false, false);
+ script->set_constant("SI_REUSE_REFRESH", SI_REUSE_REFRESH, false, false);
+ script->set_constant("SI_REUSE_STORMBLAST", SI_REUSE_STORMBLAST, false, false);
+ script->set_constant("SI_VENOMIMPRESS", SI_VENOMIMPRESS, false, false);
+ script->set_constant("SI_EPICLESIS", SI_EPICLESIS, false, false);
+ script->set_constant("SI_ORATIO", SI_ORATIO, false, false);
+ script->set_constant("SI_LAUDAAGNUS", SI_LAUDAAGNUS, false, false);
+ script->set_constant("SI_LAUDARAMUS", SI_LAUDARAMUS, false, false);
+ script->set_constant("SI_CLOAKINGEXCEED", SI_CLOAKINGEXCEED, false, false);
+ script->set_constant("SI_HALLUCINATIONWALK", SI_HALLUCINATIONWALK, false, false);
+ script->set_constant("SI_HALLUCINATIONWALK_POSTDELAY", SI_HALLUCINATIONWALK_POSTDELAY, false, false);
+ script->set_constant("SI_RENOVATIO", SI_RENOVATIO, false, false);
+ script->set_constant("SI_WEAPONBLOCKING", SI_WEAPONBLOCKING, false, false);
+ script->set_constant("SI_WEAPONBLOCKING_POSTDELAY", SI_WEAPONBLOCKING_POSTDELAY, false, false);
+ script->set_constant("SI_ROLLINGCUTTER", SI_ROLLINGCUTTER, false, false);
+ script->set_constant("SI_EXPIATIO", SI_EXPIATIO, false, false);
+ script->set_constant("SI_POISONINGWEAPON", SI_POISONINGWEAPON, false, false);
+ script->set_constant("SI_TOXIN", SI_TOXIN, false, false);
+ script->set_constant("SI_PARALYSE", SI_PARALYSE, false, false);
+ script->set_constant("SI_VENOMBLEED", SI_VENOMBLEED, false, false);
+ script->set_constant("SI_MAGICMUSHROOM", SI_MAGICMUSHROOM, false, false);
+ script->set_constant("SI_DEATHHURT", SI_DEATHHURT, false, false);
+ script->set_constant("SI_PYREXIA", SI_PYREXIA, false, false);
+ script->set_constant("SI_OBLIVIONCURSE", SI_OBLIVIONCURSE, false, false);
+ script->set_constant("SI_LEECHESEND", SI_LEECHESEND, false, false);
+
+ script->set_constant("SI_DUPLELIGHT", SI_DUPLELIGHT, false, false);
+ script->set_constant("SI_FROSTMISTY", SI_FROSTMISTY, false, false);
+ script->set_constant("SI_FEARBREEZE", SI_FEARBREEZE, false, false);
+ script->set_constant("SI_ELECTRICSHOCKER", SI_ELECTRICSHOCKER, false, false);
+ script->set_constant("SI_MARSHOFABYSS", SI_MARSHOFABYSS, false, false);
+ script->set_constant("SI_RECOGNIZEDSPELL", SI_RECOGNIZEDSPELL, false, false);
+ script->set_constant("SI_STASIS", SI_STASIS, false, false);
+ script->set_constant("SI_WUGRIDER", SI_WUGRIDER, false, false);
+ script->set_constant("SI_WUGDASH", SI_WUGDASH, false, false);
+ script->set_constant("SI_WUGBITE", SI_WUGBITE, false, false);
+ script->set_constant("SI_CAMOUFLAGE", SI_CAMOUFLAGE, false, false);
+ script->set_constant("SI_ACCELERATION", SI_ACCELERATION, false, false);
+ script->set_constant("SI_HOVERING", SI_HOVERING, false, false);
+ script->set_constant("SI_SPHERE_1", SI_SPHERE_1, false, false);
+ script->set_constant("SI_SPHERE_2", SI_SPHERE_2, false, false);
+ script->set_constant("SI_SPHERE_3", SI_SPHERE_3, false, false);
+ script->set_constant("SI_SPHERE_4", SI_SPHERE_4, false, false);
+ script->set_constant("SI_SPHERE_5", SI_SPHERE_5, false, false);
+ script->set_constant("SI_MVPCARD_TAOGUNKA", SI_MVPCARD_TAOGUNKA, false, false);
+ script->set_constant("SI_MVPCARD_MISTRESS", SI_MVPCARD_MISTRESS, false, false);
+ script->set_constant("SI_MVPCARD_ORCHERO", SI_MVPCARD_ORCHERO, false, false);
+ script->set_constant("SI_MVPCARD_ORCLORD", SI_MVPCARD_ORCLORD, false, false);
+ script->set_constant("SI_OVERHEAT_LIMITPOINT", SI_OVERHEAT_LIMITPOINT, false, false);
+ script->set_constant("SI_OVERHEAT", SI_OVERHEAT, false, false);
+ script->set_constant("SI_SHAPESHIFT", SI_SHAPESHIFT, false, false);
+ script->set_constant("SI_INFRAREDSCAN", SI_INFRAREDSCAN, false, false);
+ script->set_constant("SI_MAGNETICFIELD", SI_MAGNETICFIELD, false, false);
+ script->set_constant("SI_NEUTRALBARRIER", SI_NEUTRALBARRIER, false, false);
+ script->set_constant("SI_NEUTRALBARRIER_MASTER", SI_NEUTRALBARRIER_MASTER, false, false);
+ script->set_constant("SI_STEALTHFIELD", SI_STEALTHFIELD, false, false);
+ script->set_constant("SI_STEALTHFIELD_MASTER", SI_STEALTHFIELD_MASTER, false, false);
+ script->set_constant("SI_MANU_ATK", SI_MANU_ATK, false, false);
+ script->set_constant("SI_MANU_DEF", SI_MANU_DEF, false, false);
+ script->set_constant("SI_SPL_ATK", SI_SPL_ATK, false, false);
+ script->set_constant("SI_SPL_DEF", SI_SPL_DEF, false, false);
+ script->set_constant("SI_REPRODUCE", SI_REPRODUCE, false, false);
+ script->set_constant("SI_MANU_MATK", SI_MANU_MATK, false, false);
+ script->set_constant("SI_SPL_MATK", SI_SPL_MATK, false, false);
+ script->set_constant("SI_STR_SCROLL", SI_STR_SCROLL, false, false);
+ script->set_constant("SI_INT_SCROLL", SI_INT_SCROLL, false, false);
+ script->set_constant("SI_LG_REFLECTDAMAGE", SI_LG_REFLECTDAMAGE, false, false);
+ script->set_constant("SI_FORCEOFVANGUARD", SI_FORCEOFVANGUARD, false, false);
+ script->set_constant("SI_BUCHEDENOEL", SI_BUCHEDENOEL, false, false);
+ script->set_constant("SI_AUTOSHADOWSPELL", SI_AUTOSHADOWSPELL, false, false);
+ script->set_constant("SI_SHADOWFORM", SI_SHADOWFORM, false, false);
+ script->set_constant("SI_RAID", SI_RAID, false, false);
+ script->set_constant("SI_SHIELDSPELL_DEF", SI_SHIELDSPELL_DEF, false, false);
+ script->set_constant("SI_SHIELDSPELL_MDEF", SI_SHIELDSPELL_MDEF, false, false);
+ script->set_constant("SI_SHIELDSPELL_REF", SI_SHIELDSPELL_REF, false, false);
+ script->set_constant("SI_BODYPAINT", SI_BODYPAINT, false, false);
+
+ script->set_constant("SI_EXEEDBREAK", SI_EXEEDBREAK, false, false);
+ script->set_constant("SI_ADORAMUS", SI_ADORAMUS, false, false);
+ script->set_constant("SI_PRESTIGE", SI_PRESTIGE, false, false);
+ script->set_constant("SI_INVISIBILITY", SI_INVISIBILITY, false, false);
+ script->set_constant("SI_DEADLYINFECT", SI_DEADLYINFECT, false, false);
+ script->set_constant("SI_BANDING", SI_BANDING, false, false);
+ script->set_constant("SI_EARTHDRIVE", SI_EARTHDRIVE, false, false);
+ script->set_constant("SI_INSPIRATION", SI_INSPIRATION, false, false);
+ script->set_constant("SI_ENERVATION", SI_ENERVATION, false, false);
+ script->set_constant("SI_GROOMY", SI_GROOMY, false, false);
+ script->set_constant("SI_RAISINGDRAGON", SI_RAISINGDRAGON, false, false);
+ script->set_constant("SI_IGNORANCE", SI_IGNORANCE, false, false);
+ script->set_constant("SI_LAZINESS", SI_LAZINESS, false, false);
+ script->set_constant("SI_LIGHTNINGWALK", SI_LIGHTNINGWALK, false, false);
+ script->set_constant("SI_ACARAJE", SI_ACARAJE, false, false);
+ script->set_constant("SI_UNLUCKY", SI_UNLUCKY, false, false);
+ script->set_constant("SI_CURSEDCIRCLE_ATKER", SI_CURSEDCIRCLE_ATKER, false, false);
+ script->set_constant("SI_CURSEDCIRCLE_TARGET", SI_CURSEDCIRCLE_TARGET, false, false);
+ script->set_constant("SI_WEAKNESS", SI_WEAKNESS, false, false);
+ script->set_constant("SI_CRESCENTELBOW", SI_CRESCENTELBOW, false, false);
+ script->set_constant("SI_NOEQUIPACCESSARY", SI_NOEQUIPACCESSARY, false, false);
+ script->set_constant("SI_STRIPACCESSARY", SI_STRIPACCESSARY, false, false);
+ script->set_constant("SI_MANHOLE", SI_MANHOLE, false, false);
+ script->set_constant("SI_POPECOOKIE", SI_POPECOOKIE, false, false);
+ script->set_constant("SI_FALLENEMPIRE", SI_FALLENEMPIRE, false, false);
+ script->set_constant("SI_GENTLETOUCH_ENERGYGAIN", SI_GENTLETOUCH_ENERGYGAIN, false, false);
+ script->set_constant("SI_GENTLETOUCH_CHANGE", SI_GENTLETOUCH_CHANGE, false, false);
+ script->set_constant("SI_GENTLETOUCH_REVITALIZE", SI_GENTLETOUCH_REVITALIZE, false, false);
+ script->set_constant("SI_BLOODYLUST", SI_BLOODYLUST, false, false);
+ script->set_constant("SI_SWINGDANCE", SI_SWINGDANCE, false, false);
+ script->set_constant("SI_SYMPHONYOFLOVERS", SI_SYMPHONYOFLOVERS, false, false);
+ script->set_constant("SI_PROPERTYWALK", SI_PROPERTYWALK, false, false);
+ script->set_constant("SI_SPELLFIST", SI_SPELLFIST, false, false);
+ script->set_constant("SI_NETHERWORLD", SI_NETHERWORLD, false, false);
+ script->set_constant("SI_SIREN", SI_SIREN, false, false);
+ script->set_constant("SI_DEEPSLEEP", SI_DEEPSLEEP, false, false);
+ script->set_constant("SI_SIRCLEOFNATURE", SI_SIRCLEOFNATURE, false, false);
+ script->set_constant("SI_COLD", SI_COLD, false, false);
+ script->set_constant("SI_GLOOMYDAY", SI_GLOOMYDAY, false, false);
+ script->set_constant("SI_SONG_OF_MANA", SI_SONG_OF_MANA, false, false);
+ script->set_constant("SI_CLOUDKILL", SI_CLOUDKILL, false, false);
+ script->set_constant("SI_DANCEWITHWUG", SI_DANCEWITHWUG, false, false);
+ script->set_constant("SI_RUSHWINDMILL", SI_RUSHWINDMILL, false, false);
+ script->set_constant("SI_ECHOSONG", SI_ECHOSONG, false, false);
+ script->set_constant("SI_HARMONIZE", SI_HARMONIZE, false, false);
+ script->set_constant("SI_STRIKING", SI_STRIKING, false, false);
+ //script->set_constant("SI_WARMER", SI_WARMER, false, false);
+ script->set_constant("SI_MOONLITSERENADE", SI_MOONLITSERENADE, false, false);
+ script->set_constant("SI_SATURDAYNIGHTFEVER", SI_SATURDAYNIGHTFEVER, false, false);
+ script->set_constant("SI_SITDOWN_FORCE", SI_SITDOWN_FORCE, false, false);
+
+ script->set_constant("SI_ANALYZE", SI_ANALYZE, false, false);
+ script->set_constant("SI_LERADSDEW", SI_LERADSDEW, false, false);
+ script->set_constant("SI_MELODYOFSINK", SI_MELODYOFSINK, false, false);
+ script->set_constant("SI_WARCRYOFBEYOND", SI_WARCRYOFBEYOND, false, false);
+ script->set_constant("SI_UNLIMITEDHUMMINGVOICE", SI_UNLIMITEDHUMMINGVOICE, false, false);
+ script->set_constant("SI_SPELLBOOK1", SI_SPELLBOOK1, false, false);
+ script->set_constant("SI_SPELLBOOK2", SI_SPELLBOOK2, false, false);
+ script->set_constant("SI_SPELLBOOK3", SI_SPELLBOOK3, false, false);
+ script->set_constant("SI_FREEZE_SP", SI_FREEZE_SP, false, false);
+ script->set_constant("SI_GN_TRAINING_SWORD", SI_GN_TRAINING_SWORD, false, false);
+ script->set_constant("SI_GN_REMODELING_CART", SI_GN_REMODELING_CART, false, false);
+ script->set_constant("SI_CARTSBOOST", SI_CARTSBOOST, false, false);
+ script->set_constant("SI_FIXEDCASTINGTM_REDUCE", SI_FIXEDCASTINGTM_REDUCE, false, false);
+ script->set_constant("SI_THORNTRAP", SI_THORNTRAP, false, false);
+ script->set_constant("SI_BLOODSUCKER", SI_BLOODSUCKER, false, false);
+ script->set_constant("SI_SPORE_EXPLOSION", SI_SPORE_EXPLOSION, false, false);
+ script->set_constant("SI_DEMONIC_FIRE", SI_DEMONIC_FIRE, false, false);
+ script->set_constant("SI_FIRE_EXPANSION_SMOKE_POWDER", SI_FIRE_EXPANSION_SMOKE_POWDER, false, false);
+ script->set_constant("SI_FIRE_EXPANSION_TEAR_GAS", SI_FIRE_EXPANSION_TEAR_GAS, false, false);
+ script->set_constant("SI_BLOCKING_PLAY", SI_BLOCKING_PLAY, false, false);
+ script->set_constant("SI_MANDRAGORA", SI_MANDRAGORA, false, false);
+ script->set_constant("SI_ACTIVATE", SI_ACTIVATE, false, false);
+ script->set_constant("SI_SECRAMENT", SI_SECRAMENT, false, false);
+ script->set_constant("SI_ASSUMPTIO2", SI_ASSUMPTIO2, false, false);
+ script->set_constant("SI_TK_SEVENWIND", SI_TK_SEVENWIND, false, false);
+ script->set_constant("SI_LIMIT_ODINS_RECALL", SI_LIMIT_ODINS_RECALL, false, false);
+ script->set_constant("SI_STOMACHACHE", SI_STOMACHACHE, false, false);
+ script->set_constant("SI_MYSTERIOUS_POWDER", SI_MYSTERIOUS_POWDER, false, false);
+ script->set_constant("SI_MELON_BOMB", SI_MELON_BOMB, false, false);
+ script->set_constant("SI_BANANA_BOMB_SITDOWN_POSTDELAY", SI_BANANA_BOMB_SITDOWN_POSTDELAY, false, false);
+ script->set_constant("SI_PROMOTE_HEALTH_RESERCH", SI_PROMOTE_HEALTH_RESERCH, false, false);
+ script->set_constant("SI_ENERGY_DRINK_RESERCH", SI_ENERGY_DRINK_RESERCH, false, false);
+ script->set_constant("SI_EXTRACT_WHITE_POTION_Z", SI_EXTRACT_WHITE_POTION_Z, false, false);
+ script->set_constant("SI_VITATA_500", SI_VITATA_500, false, false);
+ script->set_constant("SI_EXTRACT_SALAMINE_JUICE", SI_EXTRACT_SALAMINE_JUICE, false, false);
+ script->set_constant("SI_BOOST500", SI_BOOST500, false, false);
+ script->set_constant("SI_FULL_SWING_K", SI_FULL_SWING_K, false, false);
+ script->set_constant("SI_MANA_PLUS", SI_MANA_PLUS, false, false);
+ script->set_constant("SI_MUSTLE_M", SI_MUSTLE_M, false, false);
+ script->set_constant("SI_LIFE_FORCE_F", SI_LIFE_FORCE_F, false, false);
+ script->set_constant("SI_VACUUM_EXTREME", SI_VACUUM_EXTREME, false, false);
+ script->set_constant("SI_SAVAGE_STEAK", SI_SAVAGE_STEAK, false, false);
+ script->set_constant("SI_COCKTAIL_WARG_BLOOD", SI_COCKTAIL_WARG_BLOOD, false, false);
+ script->set_constant("SI_MINOR_BBQ", SI_MINOR_BBQ, false, false);
+ script->set_constant("SI_SIROMA_ICE_TEA", SI_SIROMA_ICE_TEA, false, false);
+ script->set_constant("SI_DROCERA_HERB_STEAMED", SI_DROCERA_HERB_STEAMED, false, false);
+ script->set_constant("SI_PUTTI_TAILS_NOODLES", SI_PUTTI_TAILS_NOODLES, false, false);
+ script->set_constant("SI_BANANA_BOMB", SI_BANANA_BOMB, false, false);
+ script->set_constant("SI_SUMMON_AGNI", SI_SUMMON_AGNI, false, false);
+ script->set_constant("SI_SPELLBOOK4", SI_SPELLBOOK4, false, false);
+
+ script->set_constant("SI_SPELLBOOK5", SI_SPELLBOOK5, false, false);
+ script->set_constant("SI_SPELLBOOK6", SI_SPELLBOOK6, false, false);
+ script->set_constant("SI_SPELLBOOK7", SI_SPELLBOOK7, false, false);
+ script->set_constant("SI_ELEMENTAL_AGGRESSIVE", SI_ELEMENTAL_AGGRESSIVE, false, false);
+ script->set_constant("SI_RETURN_TO_ELDICASTES", SI_RETURN_TO_ELDICASTES, false, false);
+ script->set_constant("SI_BANDING_DEFENCE", SI_BANDING_DEFENCE, false, false);
+ script->set_constant("SI_SKELSCROLL", SI_SKELSCROLL, false, false);
+ script->set_constant("SI_DISTRUCTIONSCROLL", SI_DISTRUCTIONSCROLL, false, false);
+ script->set_constant("SI_ROYALSCROLL", SI_ROYALSCROLL, false, false);
+ script->set_constant("SI_IMMUNITYSCROLL", SI_IMMUNITYSCROLL, false, false);
+ script->set_constant("SI_MYSTICSCROLL", SI_MYSTICSCROLL, false, false);
+ script->set_constant("SI_BATTLESCROLL", SI_BATTLESCROLL, false, false);
+ script->set_constant("SI_ARMORSCROLL", SI_ARMORSCROLL, false, false);
+ script->set_constant("SI_FREYJASCROLL", SI_FREYJASCROLL, false, false);
+ script->set_constant("SI_SOULSCROLL", SI_SOULSCROLL, false, false);
+ script->set_constant("SI_CIRCLE_OF_FIRE", SI_CIRCLE_OF_FIRE, false, false);
+ script->set_constant("SI_CIRCLE_OF_FIRE_OPTION", SI_CIRCLE_OF_FIRE_OPTION, false, false);
+ script->set_constant("SI_FIRE_CLOAK", SI_FIRE_CLOAK, false, false);
+ script->set_constant("SI_FIRE_CLOAK_OPTION", SI_FIRE_CLOAK_OPTION, false, false);
+ script->set_constant("SI_WATER_SCREEN", SI_WATER_SCREEN, false, false);
+ script->set_constant("SI_WATER_SCREEN_OPTION", SI_WATER_SCREEN_OPTION, false, false);
+ script->set_constant("SI_WATER_DROP", SI_WATER_DROP, false, false);
+ script->set_constant("SI_WATER_DROP_OPTION", SI_WATER_DROP_OPTION, false, false);
+ script->set_constant("SI_WIND_STEP", SI_WIND_STEP, false, false);
+ script->set_constant("SI_WIND_STEP_OPTION", SI_WIND_STEP_OPTION, false, false);
+ script->set_constant("SI_WIND_CURTAIN", SI_WIND_CURTAIN, false, false);
+ script->set_constant("SI_WIND_CURTAIN_OPTION", SI_WIND_CURTAIN_OPTION, false, false);
+ script->set_constant("SI_WATER_BARRIER", SI_WATER_BARRIER, false, false);
+ script->set_constant("SI_ZEPHYR", SI_ZEPHYR, false, false);
+ script->set_constant("SI_SOLID_SKIN", SI_SOLID_SKIN, false, false);
+ script->set_constant("SI_SOLID_SKIN_OPTION", SI_SOLID_SKIN_OPTION, false, false);
+ script->set_constant("SI_STONE_SHIELD", SI_STONE_SHIELD, false, false);
+ script->set_constant("SI_STONE_SHIELD_OPTION", SI_STONE_SHIELD_OPTION, false, false);
+ script->set_constant("SI_POWER_OF_GAIA", SI_POWER_OF_GAIA, false, false);
+ //script->set_constant("SI_EL_WAIT", SI_EL_WAIT, false, false);
+ //script->set_constant("SI_EL_PASSIVE", SI_EL_PASSIVE, false, false);
+ //script->set_constant("SI_EL_DEFENSIVE", SI_EL_DEFENSIVE, false, false);
+ //script->set_constant("SI_EL_OFFENSIVE", SI_EL_OFFENSIVE, false, false);
+ //script->set_constant("SI_EL_COST", SI_EL_COST, false, false);
+ script->set_constant("SI_PYROTECHNIC", SI_PYROTECHNIC, false, false);
+ script->set_constant("SI_PYROTECHNIC_OPTION", SI_PYROTECHNIC_OPTION, false, false);
+ script->set_constant("SI_HEATER", SI_HEATER, false, false);
+ script->set_constant("SI_HEATER_OPTION", SI_HEATER_OPTION, false, false);
+ script->set_constant("SI_TROPIC", SI_TROPIC, false, false);
+ script->set_constant("SI_TROPIC_OPTION", SI_TROPIC_OPTION, false, false);
+ script->set_constant("SI_AQUAPLAY", SI_AQUAPLAY, false, false);
+ script->set_constant("SI_AQUAPLAY_OPTION", SI_AQUAPLAY_OPTION, false, false);
+ script->set_constant("SI_COOLER", SI_COOLER, false, false);
+ script->set_constant("SI_COOLER_OPTION", SI_COOLER_OPTION, false, false);
+ script->set_constant("SI_CHILLY_AIR", SI_CHILLY_AIR, false, false);
+
+ script->set_constant("SI_CHILLY_AIR_OPTION", SI_CHILLY_AIR_OPTION, false, false);
+ script->set_constant("SI_GUST", SI_GUST, false, false);
+ script->set_constant("SI_GUST_OPTION", SI_GUST_OPTION, false, false);
+ script->set_constant("SI_BLAST", SI_BLAST, false, false);
+ script->set_constant("SI_BLAST_OPTION", SI_BLAST_OPTION, false, false);
+ script->set_constant("SI_WILD_STORM", SI_WILD_STORM, false, false);
+ script->set_constant("SI_WILD_STORM_OPTION", SI_WILD_STORM_OPTION, false, false);
+ script->set_constant("SI_PETROLOGY", SI_PETROLOGY, false, false);
+ script->set_constant("SI_PETROLOGY_OPTION", SI_PETROLOGY_OPTION, false, false);
+ script->set_constant("SI_CURSED_SOIL", SI_CURSED_SOIL, false, false);
+ script->set_constant("SI_CURSED_SOIL_OPTION", SI_CURSED_SOIL_OPTION, false, false);
+ script->set_constant("SI_UPHEAVAL", SI_UPHEAVAL, false, false);
+ script->set_constant("SI_UPHEAVAL_OPTION", SI_UPHEAVAL_OPTION, false, false);
+ script->set_constant("SI_TIDAL_WEAPON", SI_TIDAL_WEAPON, false, false);
+ script->set_constant("SI_TIDAL_WEAPON_OPTION", SI_TIDAL_WEAPON_OPTION, false, false);
+ script->set_constant("SI_ROCK_CRUSHER", SI_ROCK_CRUSHER, false, false);
+ script->set_constant("SI_ROCK_CRUSHER_ATK", SI_ROCK_CRUSHER_ATK, false, false);
+ script->set_constant("SI_FIRE_INSIGNIA", SI_FIRE_INSIGNIA, false, false);
+ script->set_constant("SI_WATER_INSIGNIA", SI_WATER_INSIGNIA, false, false);
+ script->set_constant("SI_WIND_INSIGNIA", SI_WIND_INSIGNIA, false, false);
+ script->set_constant("SI_EARTH_INSIGNIA", SI_EARTH_INSIGNIA, false, false);
+ script->set_constant("SI_EQUIPED_FLOOR", SI_EQUIPED_FLOOR, false, false);
+ script->set_constant("SI_GUARDIAN_RECALL", SI_GUARDIAN_RECALL, false, false);
+ script->set_constant("SI_MORA_BUFF", SI_MORA_BUFF, false, false);
+ script->set_constant("SI_REUSE_LIMIT_G", SI_REUSE_LIMIT_G, false, false);
+ script->set_constant("SI_REUSE_LIMIT_H", SI_REUSE_LIMIT_H, false, false);
+ script->set_constant("SI_NEEDLE_OF_PARALYZE", SI_NEEDLE_OF_PARALYZE, false, false);
+ script->set_constant("SI_PAIN_KILLER", SI_PAIN_KILLER, false, false);
+ script->set_constant("SI_G_LIFEPOTION", SI_G_LIFEPOTION, false, false);
+ script->set_constant("SI_VITALIZE_POTION", SI_VITALIZE_POTION, false, false);
+ script->set_constant("SI_LIGHT_OF_REGENE", SI_LIGHT_OF_REGENE, false, false);
+ script->set_constant("SI_OVERED_BOOST", SI_OVERED_BOOST, false, false);
+ script->set_constant("SI_SILENT_BREEZE", SI_SILENT_BREEZE, false, false);
+ script->set_constant("SI_ODINS_POWER", SI_ODINS_POWER, false, false);
+ script->set_constant("SI_STYLE_CHANGE", SI_STYLE_CHANGE, false, false);
+ script->set_constant("SI_SONIC_CLAW_POSTDELAY", SI_SONIC_CLAW_POSTDELAY, false, false);
+ // 586
+ // 587
+ // 588
+ // 589
+ // 590
+ // 591
+ // 592
+ // 593
+ // 594
+ // 595
+ script->set_constant("SI_SILVERVEIN_RUSH_POSTDELAY", SI_SILVERVEIN_RUSH_POSTDELAY, false, false);
+ script->set_constant("SI_MIDNIGHT_FRENZY_POSTDELAY", SI_MIDNIGHT_FRENZY_POSTDELAY, false, false);
+ script->set_constant("SI_GOLDENE_FERSE", SI_GOLDENE_FERSE, false, false);
+ script->set_constant("SI_ANGRIFFS_MODUS", SI_ANGRIFFS_MODUS, false, false);
+
+ script->set_constant("SI_TINDER_BREAKER", SI_TINDER_BREAKER, false, false);
+ script->set_constant("SI_TINDER_BREAKER_POSTDELAY", SI_TINDER_BREAKER_POSTDELAY, false, false);
+ script->set_constant("SI_CBC", SI_CBC, false, false);
+ script->set_constant("SI_CBC_POSTDELAY", SI_CBC_POSTDELAY, false, false);
+ script->set_constant("SI_EQC", SI_EQC, false, false);
+ script->set_constant("SI_MAGMA_FLOW", SI_MAGMA_FLOW, false, false);
+ script->set_constant("SI_GRANITIC_ARMOR", SI_GRANITIC_ARMOR, false, false);
+ script->set_constant("SI_PYROCLASTIC", SI_PYROCLASTIC, false, false);
+ script->set_constant("SI_VOLCANIC_ASH", SI_VOLCANIC_ASH, false, false);
+ script->set_constant("SI_SPIRITS_SAVEINFO1", SI_SPIRITS_SAVEINFO1, false, false);
+ script->set_constant("SI_SPIRITS_SAVEINFO2", SI_SPIRITS_SAVEINFO2, false, false);
+ script->set_constant("SI_MAGIC_CANDY", SI_MAGIC_CANDY, false, false);
+ script->set_constant("SI_SEARCH_STORE_INFO", SI_SEARCH_STORE_INFO, false, false);
+ script->set_constant("SI_ALL_RIDING", SI_ALL_RIDING, false, false);
+ script->set_constant("SI_ALL_RIDING_REUSE_LIMIT", SI_ALL_RIDING_REUSE_LIMIT, false, false);
+ script->set_constant("SI_MACRO", SI_MACRO, false, false);
+ script->set_constant("SI_MACRO_POSTDELAY", SI_MACRO_POSTDELAY, false, false);
+ script->set_constant("SI_BEER_BOTTLE_CAP", SI_BEER_BOTTLE_CAP, false, false);
+ script->set_constant("SI_OVERLAPEXPUP", SI_OVERLAPEXPUP, false, false);
+ script->set_constant("SI_PC_IZ_DUN05", SI_PC_IZ_DUN05, false, false);
+ script->set_constant("SI_CRUSHSTRIKE", SI_CRUSHSTRIKE, false, false);
+ script->set_constant("SI_MONSTER_TRANSFORM", SI_MONSTER_TRANSFORM, false, false);
+ script->set_constant("SI_SIT", SI_SIT, false, false);
+ script->set_constant("SI_ONAIR", SI_ONAIR, false, false);
+ script->set_constant("SI_MTF_ASPD", SI_MTF_ASPD, false, false);
+ script->set_constant("SI_MTF_RANGEATK", SI_MTF_RANGEATK, false, false);
+ script->set_constant("SI_MTF_MATK", SI_MTF_MATK, false, false);
+ script->set_constant("SI_MTF_MLEATKED", SI_MTF_MLEATKED, false, false);
+ script->set_constant("SI_MTF_CRIDAMAGE", SI_MTF_CRIDAMAGE, false, false);
+ script->set_constant("SI_REUSE_LIMIT_MTF", SI_REUSE_LIMIT_MTF, false, false);
+ script->set_constant("SI_MACRO_PERMIT", SI_MACRO_PERMIT, false, false);
+ script->set_constant("SI_MACRO_PLAY", SI_MACRO_PLAY, false, false);
+ script->set_constant("SI_SKF_CAST", SI_SKF_CAST, false, false);
+ script->set_constant("SI_SKF_ASPD", SI_SKF_ASPD, false, false);
+ script->set_constant("SI_SKF_ATK", SI_SKF_ATK, false, false);
+ script->set_constant("SI_SKF_MATK", SI_SKF_MATK, false, false);
+ script->set_constant("SI_REWARD_PLUSONLYJOBEXP", SI_REWARD_PLUSONLYJOBEXP, false, false);
+ script->set_constant("SI_HANDICAPSTATE_NORECOVER", SI_HANDICAPSTATE_NORECOVER, false, false);
+ script->set_constant("SI_SET_NUM_DEF", SI_SET_NUM_DEF, false, false);
+ script->set_constant("SI_SET_NUM_MDEF", SI_SET_NUM_MDEF, false, false);
+ script->set_constant("SI_SET_PER_DEF", SI_SET_PER_DEF, false, false);
+ script->set_constant("SI_SET_PER_MDEF", SI_SET_PER_MDEF, false, false);
+ script->set_constant("SI_PARTYBOOKING_SEARCH_DEALY", SI_PARTYBOOKING_SEARCH_DEALY, false, false);
+ script->set_constant("SI_PARTYBOOKING_REGISTER_DEALY", SI_PARTYBOOKING_REGISTER_DEALY, false, false);
+ script->set_constant("SI_PERIOD_TIME_CHECK_DETECT_SKILL", SI_PERIOD_TIME_CHECK_DETECT_SKILL, false, false);
+ script->set_constant("SI_KO_JYUMONJIKIRI", SI_KO_JYUMONJIKIRI, false, false);
+ script->set_constant("SI_MEIKYOUSISUI", SI_MEIKYOUSISUI, false, false);
+ script->set_constant("SI_ATTHASTE_CASH", SI_ATTHASTE_CASH, false, false);
+ script->set_constant("SI_EQUIPPED_DIVINE_ARMOR", SI_EQUIPPED_DIVINE_ARMOR, false, false);
+ script->set_constant("SI_EQUIPPED_HOLY_ARMOR", SI_EQUIPPED_HOLY_ARMOR, false, false);
+
+ script->set_constant("SI_2011RWC", SI_2011RWC, false, false);
+ script->set_constant("SI_KYOUGAKU", SI_KYOUGAKU, false, false);
+ script->set_constant("SI_IZAYOI", SI_IZAYOI, false, false);
+ script->set_constant("SI_ZENKAI", SI_ZENKAI, false, false);
+ script->set_constant("SI_KG_KAGEHUMI", SI_KG_KAGEHUMI, false, false);
+ script->set_constant("SI_KYOMU", SI_KYOMU, false, false);
+ script->set_constant("SI_KAGEMUSYA", SI_KAGEMUSYA, false, false);
+ script->set_constant("SI_ZANGETSU", SI_ZANGETSU, false, false);
+ script->set_constant("SI_PHI_DEMON", SI_PHI_DEMON, false, false);
+ script->set_constant("SI_GENSOU", SI_GENSOU, false, false);
+ script->set_constant("SI_AKAITSUKI", SI_AKAITSUKI, false, false);
+ script->set_constant("SI_TETANY", SI_TETANY, false, false);
+ script->set_constant("SI_GM_BATTLE", SI_GM_BATTLE, false, false);
+ script->set_constant("SI_GM_BATTLE2", SI_GM_BATTLE2, false, false);
+ script->set_constant("SI_2011RWC_SCROLL", SI_2011RWC_SCROLL, false, false);
+ script->set_constant("SI_ACTIVE_MONSTER_TRANSFORM", SI_ACTIVE_MONSTER_TRANSFORM, false, false);
+ script->set_constant("SI_MYSTICPOWDER", SI_MYSTICPOWDER, false, false);
+ script->set_constant("SI_ECLAGE_RECALL", SI_ECLAGE_RECALL, false, false);
+ script->set_constant("SI_ENTRY_QUEUE_APPLY_DELAY", SI_ENTRY_QUEUE_APPLY_DELAY, false, false);
+ script->set_constant("SI_REUSE_LIMIT_ECL", SI_REUSE_LIMIT_ECL, false, false);
+ script->set_constant("SI_M_LIFEPOTION", SI_M_LIFEPOTION, false, false);
+ script->set_constant("SI_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT", SI_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT, false, false);
+ script->set_constant("SI_UNKNOWN_NAME", SI_UNKNOWN_NAME, false, false);
+ script->set_constant("SI_ON_PUSH_CART", SI_ON_PUSH_CART, false, false);
+ script->set_constant("SI_HAT_EFFECT", SI_HAT_EFFECT, false, false);
+ script->set_constant("SI_FLOWER_LEAF", SI_FLOWER_LEAF, false, false);
+ script->set_constant("SI_RAY_OF_PROTECTION", SI_RAY_OF_PROTECTION, false, false);
+ script->set_constant("SI_GLASTHEIM_ATK", SI_GLASTHEIM_ATK, false, false);
+ script->set_constant("SI_GLASTHEIM_DEF", SI_GLASTHEIM_DEF, false, false);
+ script->set_constant("SI_GLASTHEIM_HEAL", SI_GLASTHEIM_HEAL, false, false);
+ script->set_constant("SI_GLASTHEIM_HIDDEN", SI_GLASTHEIM_HIDDEN, false, false);
+ script->set_constant("SI_GLASTHEIM_STATE", SI_GLASTHEIM_STATE, false, false);
+ script->set_constant("SI_GLASTHEIM_ITEMDEF", SI_GLASTHEIM_ITEMDEF, false, false);
+ script->set_constant("SI_GLASTHEIM_HPSP", SI_GLASTHEIM_HPSP, false, false);
+ script->set_constant("SI_HOMUN_SKILL_POSTDELAY", SI_HOMUN_SKILL_POSTDELAY, false, false);
+ script->set_constant("SI_ALMIGHTY", SI_ALMIGHTY, false, false);
+ script->set_constant("SI_GVG_GIANT", SI_GVG_GIANT, false, false);
+ script->set_constant("SI_GVG_GOLEM", SI_GVG_GOLEM, false, false);
+ script->set_constant("SI_GVG_STUN", SI_GVG_STUN, false, false);
+ script->set_constant("SI_GVG_STONE", SI_GVG_STONE, false, false);
+ script->set_constant("SI_GVG_FREEZ", SI_GVG_FREEZ, false, false);
+ script->set_constant("SI_GVG_SLEEP", SI_GVG_SLEEP, false, false);
+ script->set_constant("SI_GVG_CURSE", SI_GVG_CURSE, false, false);
+ script->set_constant("SI_GVG_SILENCE", SI_GVG_SILENCE, false, false);
+ script->set_constant("SI_GVG_BLIND", SI_GVG_BLIND, false, false);
+ script->set_constant("SI_CLIENT_ONLY_EQUIP_ARROW", SI_CLIENT_ONLY_EQUIP_ARROW, false, false);
+ script->set_constant("SI_CLAN_INFO", SI_CLAN_INFO, false, false);
+ script->set_constant("SI_JP_EVENT01", SI_JP_EVENT01, false, false);
+ script->set_constant("SI_JP_EVENT02", SI_JP_EVENT02, false, false);
+ script->set_constant("SI_JP_EVENT03", SI_JP_EVENT03, false, false);
+
+ script->set_constant("SI_JP_EVENT04", SI_JP_EVENT04, false, false);
+ script->set_constant("SI_TELEPORT_FIXEDCASTINGDELAY", SI_TELEPORT_FIXEDCASTINGDELAY, false, false);
+ script->set_constant("SI_GEFFEN_MAGIC1", SI_GEFFEN_MAGIC1, false, false);
+ script->set_constant("SI_GEFFEN_MAGIC2", SI_GEFFEN_MAGIC2, false, false);
+ script->set_constant("SI_GEFFEN_MAGIC3", SI_GEFFEN_MAGIC3, false, false);
+ script->set_constant("SI_QUEST_BUFF1", SI_QUEST_BUFF1, false, false);
+ script->set_constant("SI_QUEST_BUFF2", SI_QUEST_BUFF2, false, false);
+ script->set_constant("SI_QUEST_BUFF3", SI_QUEST_BUFF3, false, false);
+ script->set_constant("SI_REUSE_LIMIT_RECALL", SI_REUSE_LIMIT_RECALL, false, false);
+ script->set_constant("SI_SAVEPOSITION", SI_SAVEPOSITION, false, false);
+ script->set_constant("SI_HANDICAPSTATE_ICEEXPLO", SI_HANDICAPSTATE_ICEEXPLO, false, false);
+ script->set_constant("SI_FENRIR_CARD", SI_FENRIR_CARD, false, false);
+ script->set_constant("SI_REUSE_LIMIT_ASPD_POTION", SI_REUSE_LIMIT_ASPD_POTION, false, false);
+ script->set_constant("SI_MAXPAIN", SI_MAXPAIN, false, false);
+ script->set_constant("SI_PC_STOP", SI_PC_STOP, false, false);
+ script->set_constant("SI_FRIGG_SONG", SI_FRIGG_SONG, false, false);
+ script->set_constant("SI_OFFERTORIUM", SI_OFFERTORIUM, false, false);
+ script->set_constant("SI_TELEKINESIS_INTENSE", SI_TELEKINESIS_INTENSE, false, false);
+ script->set_constant("SI_MOONSTAR", SI_MOONSTAR, false, false);
+ script->set_constant("SI_STRANGELIGHTS", SI_STRANGELIGHTS, false, false);
+ script->set_constant("SI_FULL_THROTTLE", SI_FULL_THROTTLE, false, false);
+ script->set_constant("SI_REBOUND", SI_REBOUND, false, false);
+ script->set_constant("SI_UNLIMIT", SI_UNLIMIT, false, false);
+ script->set_constant("SI_KINGS_GRACE", SI_KINGS_GRACE, false, false);
+ script->set_constant("SI_ITEM_ATKMAX", SI_ITEM_ATKMAX, false, false);
+ script->set_constant("SI_ITEM_ATKMIN", SI_ITEM_ATKMIN, false, false);
+ script->set_constant("SI_ITEM_MATKMAX", SI_ITEM_MATKMAX, false, false);
+ script->set_constant("SI_ITEM_MATKMIN", SI_ITEM_MATKMIN, false, false);
+ script->set_constant("SI_SUPER_STAR", SI_SUPER_STAR, false, false);
+ script->set_constant("SI_HIGH_RANKER", SI_HIGH_RANKER, false, false);
+ script->set_constant("SI_DARKCROW", SI_DARKCROW, false, false);
+ script->set_constant("SI_2013_VALENTINE1", SI_2013_VALENTINE1, false, false);
+ script->set_constant("SI_2013_VALENTINE2", SI_2013_VALENTINE2, false, false);
+ script->set_constant("SI_2013_VALENTINE3", SI_2013_VALENTINE3, false, false);
+ script->set_constant("SI_ILLUSIONDOPING", SI_ILLUSIONDOPING, false, false);
+ //script->set_constant("SI_WIDEWEB", SI_WIDEWEB, false, false);
+ script->set_constant("SI_CHILL", SI_CHILL, false, false);
+ script->set_constant("SI_BURNT", SI_BURNT, false, false);
+ //script->set_constant("SI_PCCAFE_PLAY_TIME", SI_PCCAFE_PLAY_TIME, false, false);
+ //script->set_constant("SI_TWISTED_TIME", SI_TWISTED_TIME, false, false);
+ script->set_constant("SI_FLASHCOMBO", SI_FLASHCOMBO, false, false);
+ //script->set_constant("SI_JITTER_BUFF1", SI_JITTER_BUFF1, false, false);
+ //script->set_constant("SI_JITTER_BUFF2", SI_JITTER_BUFF2, false, false);
+ //script->set_constant("SI_JITTER_BUFF3", SI_JITTER_BUFF3, false, false);
+ //script->set_constant("SI_JITTER_BUFF4", SI_JITTER_BUFF4, false, false);
+ //script->set_constant("SI_JITTER_BUFF5", SI_JITTER_BUFF5, false, false);
+ //script->set_constant("SI_JITTER_BUFF6", SI_JITTER_BUFF6, false, false);
+ //script->set_constant("SI_JITTER_BUFF7", SI_JITTER_BUFF7, false, false);
+ //script->set_constant("SI_JITTER_BUFF8", SI_JITTER_BUFF8, false, false);
+ //script->set_constant("SI_JITTER_BUFF9", SI_JITTER_BUFF9, false, false);
+
+ //script->set_constant("SI_JITTER_BUFF10", SI_JITTER_BUFF10, false, false);
+ script->set_constant("SI_CUP_OF_BOZA", SI_CUP_OF_BOZA, false, false);
+ script->set_constant("SI_B_TRAP", SI_B_TRAP, false, false);
+ script->set_constant("SI_E_CHAIN", SI_E_CHAIN, false, false);
+ script->set_constant("SI_E_QD_SHOT_READY", SI_E_QD_SHOT_READY, false, false);
+ script->set_constant("SI_C_MARKER", SI_C_MARKER, false, false);
+ script->set_constant("SI_H_MINE", SI_H_MINE, false, false);
+ script->set_constant("SI_H_MINE_SPLASH", SI_H_MINE_SPLASH, false, false);
+ script->set_constant("SI_P_ALTER", SI_P_ALTER, false, false);
+ script->set_constant("SI_HEAT_BARREL", SI_HEAT_BARREL, false, false);
+ script->set_constant("SI_ANTI_M_BLAST", SI_ANTI_M_BLAST, false, false);
+ script->set_constant("SI_SLUGSHOT", SI_SLUGSHOT, false, false);
+ script->set_constant("SI_SWORDCLAN", SI_SWORDCLAN, false, false);
+ script->set_constant("SI_ARCWANDCLAN", SI_ARCWANDCLAN, false, false);
+ script->set_constant("SI_GOLDENMACECLAN", SI_GOLDENMACECLAN, false, false);
+ script->set_constant("SI_CROSSBOWCLAN", SI_CROSSBOWCLAN, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE1", SI_PACKING_ENVELOPE1, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE2", SI_PACKING_ENVELOPE2, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE3", SI_PACKING_ENVELOPE3, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE4", SI_PACKING_ENVELOPE4, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE5", SI_PACKING_ENVELOPE5, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE6", SI_PACKING_ENVELOPE6, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE7", SI_PACKING_ENVELOPE7, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE8", SI_PACKING_ENVELOPE8, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE9", SI_PACKING_ENVELOPE9, false, false);
+ script->set_constant("SI_PACKING_ENVELOPE10", SI_PACKING_ENVELOPE10, false, false);
+ script->set_constant("SI_GLASTHEIM_TRANS", SI_GLASTHEIM_TRANS, false, false);
+ //script->set_constant("SI_ZONGZI_POUCH_TRANS", SI_ZONGZI_POUCH_TRANS, false, false);
+ script->set_constant("SI_HEAT_BARREL_AFTER", SI_HEAT_BARREL_AFTER, false, false);
+ script->set_constant("SI_DECORATION_OF_MUSIC", SI_DECORATION_OF_MUSIC, false, false);
+ //script->set_constant("SI_OVERSEAEXPUP", SI_OVERSEAEXPUP, false, false);
+ //script->set_constant("SI_CLOWN_N_GYPSY_CARD", SI_CLOWN_N_GYPSY_CARD, false, false);
+ //script->set_constant("SI_OPEN_NPC_MARKET", SI_OPEN_NPC_MARKET, false, false);
+ //script->set_constant("SI_BEEF_RIB_STEW", SI_BEEF_RIB_STEW, false, false);
+ //script->set_constant("SI_PORK_RIB_STEW", SI_PORK_RIB_STEW, false, false);
+ //script->set_constant("SI_CHUSEOK_MONDAY", SI_CHUSEOK_MONDAY, false, false);
+ //script->set_constant("SI_CHUSEOK_TUESDAY", SI_CHUSEOK_TUESDAY, false, false);
+ //script->set_constant("SI_CHUSEOK_WEDNESDAY", SI_CHUSEOK_WEDNESDAY, false, false);
+ //script->set_constant("SI_CHUSEOK_THURSDAY", SI_CHUSEOK_THURSDAY, false, false);
+ //script->set_constant("SI_CHUSEOK_FRIDAY", SI_CHUSEOK_FRIDAY, false, false);
+ //script->set_constant("SI_CHUSEOK_WEEKEND", SI_CHUSEOK_WEEKEND, false, false);
+ //script->set_constant("SI_ALL_LIGHTGUARD", SI_ALL_LIGHTGUARD, false, false);
+ //script->set_constant("SI_ALL_LIGHTGUARD_COOL_TIME", SI_ALL_LIGHTGUARD_COOL_TIME, false, false);
+ script->set_constant("SI_MTF_MHP", SI_MTF_MHP, false, false);
+ script->set_constant("SI_MTF_MSP", SI_MTF_MSP, false, false);
+ script->set_constant("SI_MTF_PUMPKIN", SI_MTF_PUMPKIN, false, false);
+ script->set_constant("SI_MTF_HITFLEE", SI_MTF_HITFLEE, false, false);
+ //script->set_constant("SI_MTF_CRIDAMAGE2", SI_MTF_CRIDAMAGE2, false, false);
+ //script->set_constant("SI_MTF_SPDRAIN", SI_MTF_SPDRAIN, false, false);
+ //script->set_constant("SI_ACUO_MINT_GUM", SI_ACUO_MINT_GUM, false, false);
+
+ //script->set_constant("SI_S_HEALPOTION", SI_S_HEALPOTION, false, false);
+ //script->set_constant("SI_REUSE_LIMIT_S_HEAL_POTION", SI_REUSE_LIMIT_S_HEAL_POTION, false, false);
+ //script->set_constant("SI_PLAYTIME_STATISTICS", SI_PLAYTIME_STATISTICS, false, false);
+ //script->set_constant("SI_GN_CHANGEMATERIAL_OPERATOR", SI_GN_CHANGEMATERIAL_OPERATOR, false, false);
+ //script->set_constant("SI_GN_MIX_COOKING_OPERATOR", SI_GN_MIX_COOKING_OPERATOR, false, false);
+ //script->set_constant("SI_GN_MAKEBOMB_OPERATOR", SI_GN_MAKEBOMB_OPERATOR, false, false);
+ //script->set_constant("SI_GN_S_PHARMACY_OPERATOR", SI_GN_S_PHARMACY_OPERATOR, false, false);
+ //script->set_constant("SI_SO_EL_ANALYSIS_DISASSEMBLY_OPERATOR", SI_SO_EL_ANALYSIS_DISASSEMBLY_OPERATOR, false, false);
+ //script->set_constant("SI_SO_EL_ANALYSIS_COMBINATION_OPERATOR", SI_SO_EL_ANALYSIS_COMBINATION_OPERATOR, false, false);
+ //script->set_constant("SI_NC_MAGICDECOY_OPERATOR", SI_NC_MAGICDECOY_OPERATOR, false, false);
+ //script->set_constant("SI_GUILD_STORAGE", SI_GUILD_STORAGE, false, false);
+ //script->set_constant("SI_GC_POISONINGWEAPON_OPERATOR", SI_GC_POISONINGWEAPON_OPERATOR, false, false);
+ //script->set_constant("SI_WS_WEAPONREFINE_OPERATOR", SI_WS_WEAPONREFINE_OPERATOR, false, false);
+ //script->set_constant("SI_BS_REPAIRWEAPON_OPERATOR", SI_BS_REPAIRWEAPON_OPERATOR, false, false);
+ //script->set_constant("SI_GET_MAILBOX", SI_GET_MAILBOX, false, false);
+ //script->set_constant("SI_JUMPINGCLAN", SI_JUMPINGCLAN, false, false);
+ //script->set_constant("SI_JP_OTP", SI_JP_OTP, false, false);
+ //script->set_constant("SI_HANDICAPTOLERANCE_LEVELGAP", SI_HANDICAPTOLERANCE_LEVELGAP, false, false);
+ //script->set_constant("SI_MTF_RANGEATK2", SI_MTF_RANGEATK2, false, false);
+ //script->set_constant("SI_MTF_ASPD2", SI_MTF_ASPD2, false, false);
+ //script->set_constant("SI_MTF_MATK2", SI_MTF_MATK2, false, false);
+ //script->set_constant("SI_SHOW_NPCHPBAR", SI_SHOW_NPCHPBAR, false, false);
+ script->set_constant("SI_FLOWERSMOKE", SI_FLOWERSMOKE, false, false);
+ script->set_constant("SI_FSTONE", SI_FSTONE, false, false);
+ //script->set_constant("SI_DAILYSENDMAILCNT", SI_DAILYSENDMAILCNT, false, false);
+ //script->set_constant("SI_QSCARABA", SI_QSCARABA, false, false);
+ script->set_constant("SI_LJOSALFAR", SI_LJOSALFAR, false, false);
+ //script->set_constant("SI_PAD_READER_KNIGHT", SI_PAD_READER_KNIGHT, false, false);
+ //script->set_constant("SI_PAD_READER_CRUSADER", SI_PAD_READER_CRUSADER, false, false);
+ //script->set_constant("SI_PAD_READER_BLACKSMITH", SI_PAD_READER_BLACKSMITH, false, false);
+ //script->set_constant("SI_PAD_READER_ALCHEMIST", SI_PAD_READER_ALCHEMIST, false, false);
+ //script->set_constant("SI_PAD_READER_ASSASSIN", SI_PAD_READER_ASSASSIN, false, false);
+ //script->set_constant("SI_PAD_READER_ROGUE", SI_PAD_READER_ROGUE, false, false);
+ //script->set_constant("SI_PAD_READER_WIZARD", SI_PAD_READER_WIZARD, false, false);
+ //script->set_constant("SI_PAD_READER_SAGE", SI_PAD_READER_SAGE, false, false);
+ //script->set_constant("SI_PAD_READER_PRIEST", SI_PAD_READER_PRIEST, false, false);
+ //script->set_constant("SI_PAD_READER_MONK", SI_PAD_READER_MONK, false, false);
+ //script->set_constant("SI_PAD_READER_HUNTER", SI_PAD_READER_HUNTER, false, false);
+ //script->set_constant("SI_PAD_READER_BARD", SI_PAD_READER_BARD, false, false);
+ //script->set_constant("SI_PAD_READER_DANCER", SI_PAD_READER_DANCER, false, false);
+ //script->set_constant("SI_PAD_READER_TAEKWON", SI_PAD_READER_TAEKWON, false, false);
+ //script->set_constant("SI_PAD_READER_NINJA", SI_PAD_READER_NINJA, false, false);
+ //script->set_constant("SI_PAD_READER_GUNSLINGER", SI_PAD_READER_GUNSLINGER, false, false);
+ //script->set_constant("SI_PAD_READER_SUPERNOVICE", SI_PAD_READER_SUPERNOVICE, false, false);
+ //script->set_constant("SI_ESSENCE_OF_TIME", SI_ESSENCE_OF_TIME, false, false);
+ //script->set_constant("SI_MINIGAME_ROULETTE", SI_MINIGAME_ROULETTE, false, false);
+ //script->set_constant("SI_MINIGAME_GOLD_POINT", SI_MINIGAME_GOLD_POINT, false, false);
+ //script->set_constant("SI_MINIGAME_SILVER_POINT", SI_MINIGAME_SILVER_POINT, false, false);
+ //script->set_constant("SI_MINIGAME_BRONZE_POINT", SI_MINIGAME_BRONZE_POINT, false, false);
+ script->set_constant("SI_HAPPINESS_STAR", SI_HAPPINESS_STAR, false, false);
+
+ //script->set_constant("SI_SUMMEREVENT01", SI_SUMMEREVENT01, false, false);
+ //script->set_constant("SI_SUMMEREVENT02", SI_SUMMEREVENT02, false, false);
+ //script->set_constant("SI_SUMMEREVENT03", SI_SUMMEREVENT03, false, false);
+ //script->set_constant("SI_SUMMEREVENT04", SI_SUMMEREVENT04, false, false);
+ //script->set_constant("SI_SUMMEREVENT05", SI_SUMMEREVENT05, false, false);
+ //script->set_constant("SI_MINIGAME_ROULETTE_BONUS_ITEM", SI_MINIGAME_ROULETTE_BONUS_ITEM, false, false);
+ //script->set_constant("SI_DRESS_UP", SI_DRESS_UP, false, false);
+ script->set_constant("SI_MAPLE_FALLS", SI_MAPLE_FALLS, false, false);
+ //script->set_constant("SI_ALL_NIFLHEIM_RECALL", SI_ALL_NIFLHEIM_RECALL, false, false);
+ // 859
+ //script->set_constant("SI_MTF_MARIONETTE", SI_MTF_MARIONETTE, false, false);
+ //script->set_constant("SI_MTF_LUDE", SI_MTF_LUDE, false, false);
+ //script->set_constant("SI_MTF_CRUISER", SI_MTF_CRUISER, false, false);
+ script->set_constant("SI_MERMAID_LONGING", SI_MERMAID_LONGING, false, false);
+ script->set_constant("SI_MAGICAL_FEATHER", SI_MAGICAL_FEATHER, false, false);
+ //script->set_constant("SI_DRACULA_CARD", SI_DRACULA_CARD, false, false);
+ // 866
+ //script->set_constant("SI_LIMIT_POWER_BOOSTER", SI_LIMIT_POWER_BOOSTER, false, false);
+ // 868
+ // 869
+ // 870
+ // 871
+ script->set_constant("SI_TIME_ACCESSORY", SI_TIME_ACCESSORY, false, false);
+ //script->set_constant("SI_EP16_DEF", SI_EP16_DEF, false, false);
+ //script->set_constant("SI_NORMAL_ATKED_SP", SI_NORMAL_ATKED_SP, false, false);
+ //script->set_constant("SI_BODYSTATE_STONECURSE", SI_BODYSTATE_STONECURSE, false, false);
+ //script->set_constant("SI_BODYSTATE_FREEZING", SI_BODYSTATE_FREEZING, false, false);
+ //script->set_constant("SI_BODYSTATE_STUN", SI_BODYSTATE_STUN, false, false);
+ //script->set_constant("SI_BODYSTATE_SLEEP", SI_BODYSTATE_SLEEP, false, false);
+ //script->set_constant("SI_BODYSTATE_UNDEAD", SI_BODYSTATE_UNDEAD, false, false);
+ //script->set_constant("SI_BODYSTATE_STONECURSE_ING", SI_BODYSTATE_STONECURSE_ING, false, false);
+ //script->set_constant("SI_BODYSTATE_BURNNING", SI_BODYSTATE_BURNNING, false, false);
+ //script->set_constant("SI_BODYSTATE_IMPRISON", SI_BODYSTATE_IMPRISON, false, false);
+ //script->set_constant("SI_HEALTHSTATE_POISON", SI_HEALTHSTATE_POISON, false, false);
+ //script->set_constant("SI_HEALTHSTATE_CURSE", SI_HEALTHSTATE_CURSE, false, false);
+ //script->set_constant("SI_HEALTHSTATE_SILENCE", SI_HEALTHSTATE_SILENCE, false, false);
+ //script->set_constant("SI_HEALTHSTATE_CONFUSION", SI_HEALTHSTATE_CONFUSION, false, false);
+ //script->set_constant("SI_HEALTHSTATE_BLIND", SI_HEALTHSTATE_BLIND, false, false);
+ //script->set_constant("SI_HEALTHSTATE_ANGELUS", SI_HEALTHSTATE_ANGELUS, false, false);
+ //script->set_constant("SI_HEALTHSTATE_BLOODING", SI_HEALTHSTATE_BLOODING, false, false);
+ //script->set_constant("SI_HEALTHSTATE_HEAVYPOISON", SI_HEALTHSTATE_HEAVYPOISON, false, false);
+ //script->set_constant("SI_HEALTHSTATE_FEAR", SI_HEALTHSTATE_FEAR, false, false);
+ //script->set_constant("SI_CHERRY_BLOSSOM_CAKE", SI_CHERRY_BLOSSOM_CAKE, false, false);
+ script->set_constant("SI_SU_STOOP", SI_SU_STOOP, false, false);
+ script->set_constant("SI_CATNIPPOWDER", SI_CATNIPPOWDER, false, false);
+ script->set_constant("SI_BLOSSOM_FLUTTERING", SI_BLOSSOM_FLUTTERING, false, false);
+ script->set_constant("SI_SV_ROOTTWIST", SI_SV_ROOTTWIST, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_NOTHING", SI_ATTACK_PROPERTY_NOTHING, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_WATER", SI_ATTACK_PROPERTY_WATER, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_GROUND", SI_ATTACK_PROPERTY_GROUND, false, false);
+
+ //script->set_constant("SI_ATTACK_PROPERTY_FIRE", SI_ATTACK_PROPERTY_FIRE, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_WIND", SI_ATTACK_PROPERTY_WIND, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_POISON", SI_ATTACK_PROPERTY_POISON, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_SAINT", SI_ATTACK_PROPERTY_SAINT, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_DARKNESS", SI_ATTACK_PROPERTY_DARKNESS, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_TELEKINESIS", SI_ATTACK_PROPERTY_TELEKINESIS, false, false);
+ //script->set_constant("SI_ATTACK_PROPERTY_UNDEAD", SI_ATTACK_PROPERTY_UNDEAD, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_NOTHING", SI_RESIST_PROPERTY_NOTHING, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_WATER", SI_RESIST_PROPERTY_WATER, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_GROUND", SI_RESIST_PROPERTY_GROUND, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_FIRE", SI_RESIST_PROPERTY_FIRE, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_WIND", SI_RESIST_PROPERTY_WIND, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_POISON", SI_RESIST_PROPERTY_POISON, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_SAINT", SI_RESIST_PROPERTY_SAINT, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_DARKNESS", SI_RESIST_PROPERTY_DARKNESS, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_TELEKINESIS", SI_RESIST_PROPERTY_TELEKINESIS, false, false);
+ //script->set_constant("SI_RESIST_PROPERTY_UNDEAD", SI_RESIST_PROPERTY_UNDEAD, false, false);
+ script->set_constant("SI_BITESCAR", SI_BITESCAR, false, false);
+ script->set_constant("SI_ARCLOUSEDASH", SI_ARCLOUSEDASH, false, false);
+ script->set_constant("SI_TUNAPARTY", SI_TUNAPARTY, false, false);
+ script->set_constant("SI_SHRIMP", SI_SHRIMP, false, false);
+ script->set_constant("SI_FRESHSHRIMP", SI_FRESHSHRIMP, false, false);
+ //script->set_constant("SI_PERIOD_RECEIVEITEM", SI_PERIOD_RECEIVEITEM, false, false);
+ //script->set_constant("SI_PERIOD_PLUSEXP", SI_PERIOD_PLUSEXP, false, false);
+ //script->set_constant("SI_PERIOD_PLUSJOBEXP", SI_PERIOD_PLUSJOBEXP, false, false);
+ //script->set_constant("SI_RUNEHELM", SI_RUNEHELM, false, false);
+ //script->set_constant("SI_HELM_VERKANA", SI_HELM_VERKANA, false, false);
+ //script->set_constant("SI_HELM_RHYDO", SI_HELM_RHYDO, false, false);
+ //script->set_constant("SI_HELM_TURISUS", SI_HELM_TURISUS, false, false);
+ //script->set_constant("SI_HELM_HAGALAS", SI_HELM_HAGALAS, false, false);
+ //script->set_constant("SI_HELM_ISIA", SI_HELM_ISIA, false, false);
+ //script->set_constant("SI_HELM_ASIR", SI_HELM_ASIR, false, false);
+ //script->set_constant("SI_HELM_URJ", SI_HELM_URJ, false, false);
+ script->set_constant("SI_SUHIDE", SI_SUHIDE, false, false);
+ // 934
+ //script->set_constant("SI_DORAM_BUF_01", SI_DORAM_BUF_01, false, false);
+ //script->set_constant("SI_DORAM_BUF_02", SI_DORAM_BUF_02, false, false);
+ script->set_constant("SI_SPRITEMABLE", SI_SPRITEMABLE, false, false);
+ //script->set_constant("SI_AID_PERIOD_RECEIVEITEM", SI_AID_PERIOD_RECEIVEITEM, false, false);
+ //script->set_constant("SI_AID_PERIOD_PLUSEXP", SI_AID_PERIOD_PLUSEXP, false, false);
+ //script->set_constant("SI_AID_PERIOD_PLUSJOBEXP", SI_AID_PERIOD_PLUSJOBEXP, false, false);
+ //script->set_constant("SI_AID_PERIOD_DEADPENALTY", SI_AID_PERIOD_DEADPENALTY, false, false);
+ //script->set_constant("SI_AID_PERIOD_ADDSTOREITEMCOUNT", SI_AID_PERIOD_ADDSTOREITEMCOUNT, false, false);
+ // 943
+ // 944
+ // 945
+ // 946
+ // 947
+ // 948
+ // 949
+ //script->set_constant("SI_HISS", SI_HISS, false, false);
+ // 951
+ //script->set_constant("SI_NYANGGRASS", SI_NYANGGRASS, false, false);
+ //script->set_constant("SI_CHATTERING", SI_CHATTERING, false, false);
+ // 954
+ // 955
+ // 956
+ // 957
+ // 958
+ // 959
+ // 960
+ //script->set_constant("SI_GROOMING", SI_GROOMING, false, false);
+ //script->set_constant("SI_PROTECTIONOFSHRIMP", SI_PROTECTIONOFSHRIMP, false, false);
+ //script->set_constant("SI_EP16_2_BUFF_SS", SI_EP16_2_BUFF_SS, false, false);
+ //script->set_constant("SI_EP16_2_BUFF_SC", SI_EP16_2_BUFF_SC, false, false);
+ //script->set_constant("SI_EP16_2_BUFF_AC", SI_EP16_2_BUFF_AC, false, false);
+ //script->set_constant("SI_GS_MAGICAL_BULLET", SI_GS_MAGICAL_BULLET, false, false);
+ // 967
+ // 968
+ // 969
+ // 970
+ // 971
+ // 972
+ // 973
+ // 974
+ // 975
+ //script->set_constant("SI_FALLEN_ANGEL", SI_FALLEN_ANGEL, false, false);
+ // 977
+ // 978
+ //script->set_constant("SI_BLAZE_BEAD", SI_BLAZE_BEAD, false, false);
+ //script->set_constant("SI_FROZEN_BEAD", SI_FROZEN_BEAD, false, false);
+ //script->set_constant("SI_BREEZE_BEAD", SI_BREEZE_BEAD, false, false);
+ // 982
+ //script->set_constant("SI_AID_PERIOD_RECEIVEITEM_2ND", SI_AID_PERIOD_RECEIVEITEM_2ND, false, false);
+ //script->set_constant("SI_AID_PERIOD_PLUSEXP_2ND", SI_AID_PERIOD_PLUSEXP_2ND, false, false);
+ //script->set_constant("SI_AID_PERIOD_PLUSJOBEXP_2ND", SI_AID_PERIOD_PLUSJOBEXP_2ND, false, false);
+ //script->set_constant("SI_PRONTERA_JP", SI_PRONTERA_JP, false, false);
+ // 987
+ //script->set_constant("SI_GLOOM_CARD", SI_GLOOM_CARD, false, false);
+ //script->set_constant("SI_PHARAOH_CARD", SI_PHARAOH_CARD, false, false);
+ //script->set_constant("SI_KIEL_CARD", SI_KIEL_CARD, false, false);
+ // 991
+ //script->set_constant("SI_CHEERUP", SI_CHEERUP, false, false);
+ // 993
+ // 994
+ //script->set_constant("SI_S_MANAPOTION", SI_S_MANAPOTION, false, false);
+ //script->set_constant("SI_M_DEFSCROLL", SI_M_DEFSCROLL, false, false);
+ // 997
+ // 998
+ // 999
+ //script->set_constant("SI_AS_RAGGED_GOLEM_CARD", SI_AS_RAGGED_GOLEM_CARD, false, false);
+ //script->set_constant("SI_LHZ_DUN_N1", SI_LHZ_DUN_N1, false, false);
+ //script->set_constant("SI_LHZ_DUN_N2", SI_LHZ_DUN_N2, false, false);
+ //script->set_constant("SI_LHZ_DUN_N3", SI_LHZ_DUN_N3, false, false);
+ //script->set_constant("SI_LHZ_DUN_N4", SI_LHZ_DUN_N4, false, false);
+
+ script->set_constant("SI_MAX", SI_MAX, false, false);
diff --git a/src/map/guild.c b/src/map/guild.c
index bb0484477..11609ec81 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -365,6 +365,11 @@ int guild_create(struct map_session_data *sd, const char *name)
nullpo_ret(sd);
nullpo_ret(name);
+ if (sd->clan != NULL) {
+ clif->messagecolor_self(sd->fd, COLOR_RED, "You cannot create a guild because you are in a clan.");
+ return 0;
+ }
+
safestrncpy(tname, name, NAME_LENGTH);
trim(tname);
diff --git a/src/map/intif.c b/src/map/intif.c
index 60edc8d8b..f656a0df9 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -26,6 +26,7 @@
#include "map/atcommand.h"
#include "map/battle.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/elemental.h"
#include "map/guild.h"
@@ -744,6 +745,81 @@ int intif_party_leaderchange(int party_id,int account_id,int char_id)
return 0;
}
+//=========================
+// Clan System
+//-------------------------
+
+/**
+ * Request clan member count
+ *
+ * @param clan_id Id of the clan to have members counted
+ * @param kick_interval Interval of the inactivity kick
+ */
+int intif_clan_membercount(int clan_id, int kick_interval)
+{
+ if (intif->CheckForCharServer() || clan_id == 0 || kick_interval <= 0)
+ return 0;
+
+ WFIFOHEAD(inter_fd, 10);
+ WFIFOW(inter_fd, 0) = 0x3044;
+ WFIFOL(inter_fd, 2) = clan_id;
+ WFIFOL(inter_fd, 6) = kick_interval;
+ WFIFOSET(inter_fd, 10);
+ return 1;
+}
+
+int intif_clan_kickoffline(int clan_id, int kick_interval)
+{
+ if (intif->CheckForCharServer() || clan_id == 0 || kick_interval <= 0)
+ return 0;
+
+ WFIFOHEAD(inter_fd, 10);
+ WFIFOW(inter_fd, 0) = 0x3045;
+ WFIFOL(inter_fd, 2) = clan_id;
+ WFIFOL(inter_fd, 6) = kick_interval;
+ WFIFOSET(inter_fd, 10);
+ return 1;
+}
+
+void intif_parse_RecvClanMemberAction(int fd)
+{
+ struct clan *c;
+ int clan_id = RFIFOL(fd, 2);
+ int count = RFIFOL(fd, 6);
+
+ if ((c = clan->search(clan_id)) == NULL) {
+ ShowError("intif_parse_RecvClanMemberAction: Received invalid clan_id '%d'\n", clan_id);
+ return;
+ }
+
+ if (count < 0) {
+ ShowError("intif_parse_RecvClanMemberAction: Received invalid member count value '%d'\n", count);
+ return;
+ }
+
+ c->received = true;
+ if (c->req_count_tid != INVALID_TIMER) {
+ timer->delete(c->req_count_tid, clan->request_membercount);
+ c->req_count_tid = INVALID_TIMER;
+ }
+
+ c->member_count = count;
+ switch (c->req_state) {
+ case CLAN_REQ_AFTER_KICK:
+ if (c->req_kick_tid != INVALID_TIMER) {
+ timer->delete(c->req_kick_tid, clan->request_kickoffline);
+ c->req_kick_tid = INVALID_TIMER;
+ }
+ break;
+ case CLAN_REQ_RELOAD:
+ map->foreachpc(clan->rejoin);
+ break;
+ default:
+ break;
+ }
+ c->req_state = CLAN_REQ_NONE;
+}
+
// Request a Guild creation
int intif_guild_create(const char *name,const struct guild_member *master)
{
@@ -2438,7 +2514,11 @@ void intif_parse_RequestRodexOpenInbox(int fd)
#endif
int8 flag = RFIFOB(fd, 9);
int8 is_end = RFIFOB(fd, 10);
- int count = RFIFOL(fd, 11);
+ int is_first = RFIFOB(fd, 11);
+ int count = RFIFOL(fd, 12);
+#if PACKETVER >= 20170419
+ int64 mail_id = RFIFOQ(fd, 16);
+#endif
int i, j;
sd = map->charid2sd(RFIFOL(fd, 4));
@@ -2446,16 +2526,25 @@ void intif_parse_RequestRodexOpenInbox(int fd)
if (sd == NULL) // user is not online anymore
return;
- sd->rodex.total = count;
- if (RFIFOW(fd, 2) - 15 != sd->rodex.total * sizeof(struct rodex_message)) {
- ShowError("intif_parse_RodexInboxOpenReceived: data size mismatch %d != %"PRIuS"\n", RFIFOW(fd, 2) - 15, sd->rodex.total * sizeof(struct rodex_message));
+ if (is_first == false && sd->rodex.total == 0) {
+ ShowError("intif_parse_RodexInboxOpenReceived: mail list received in wrong order.\n");
return;
}
- if (flag == 0)
+ if (is_first)
+ sd->rodex.total = count;
+ else
+ sd->rodex.total += count;
+
+ if (RFIFOW(fd, 2) - 24 != count * sizeof(struct rodex_message)) {
+ ShowError("intif_parse_RodexInboxOpenReceived: data size mismatch %d != %"PRIuS"\n", RFIFOW(fd, 2) - 24, count * sizeof(struct rodex_message));
+ return;
+ }
+
+ if (flag == 0 && is_first)
VECTOR_CLEAR(sd->rodex.messages);
- for (i = 0, j = 15; i < count; ++i, j += sizeof(struct rodex_message)) {
+ for (i = 0, j = 24; i < count; ++i, j += sizeof(struct rodex_message)) {
struct rodex_message msg = { 0 };
VECTOR_ENSURE(sd->rodex.messages, 1, 1);
memcpy(&msg, RFIFOP(fd, j), sizeof(struct rodex_message));
@@ -2464,7 +2553,7 @@ void intif_parse_RequestRodexOpenInbox(int fd)
if (is_end == true) {
#if PACKETVER >= 20170419
- clif->rodex_send_mails_all(sd->fd, sd);
+ clif->rodex_send_mails_all(sd->fd, sd, mail_id);
#else
if (flag == 0)
clif->rodex_send_maillist(sd->fd, sd, opentype, VECTOR_LENGTH(sd->rodex.messages) - 1);
@@ -2513,10 +2602,11 @@ void intif_parse_RodexNotifications(int fd)
/// Updates a mail
/// flag:
-/// 0 - user Read
-/// 1 - user got Zeny
-/// 2 - user got Items
-/// 3 - delete
+/// 0 - receiver Read
+/// 1 - user got Zeny
+/// 2 - user got Items
+/// 3 - delete
+/// 4 - sender Read (returned mail)
int intif_rodex_updatemail(int64 mail_id, int8 flag)
{
if (intif->CheckForCharServer())
@@ -2734,6 +2824,9 @@ int intif_parse(int fd)
case 0x3896: intif->pRodexHasNew(fd); break;
case 0x3897: intif->pRodexSendMail(fd); break;
case 0x3898: intif->pRodexCheckName(fd); break;
+
+ // Clan System
+ case 0x3858: intif->pRecvClanMemberAction(fd); break;
default:
ShowError("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0));
return 0;
@@ -2755,7 +2848,7 @@ void intif_defaults(void) {
39,-1,15,15, 14,19, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0, //0x3820
10,-1,15, 0, 79,19, 7,-1, 0,-1,-1,-1, 14,67,186,-1, //0x3830
-1, 0, 0,14, 0, 0, 0, 0, -1,74,-1,11, 11,-1, 0, 0, //0x3840
- -1,-1, 7, 7, 7,11, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3850 Auctions [Zephyrus] itembound[Akinari]
+ -1,-1, 7, 7, 7,11, 8, 0, 10, 0, 0, 0, 0, 0, 0, 0, //0x3850 Auctions [Zephyrus] itembound[Akinari] Clan System[Murilo BiO]
-1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3860 Quests [Kevin] [Inkfish]
-1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 3, 3, 0, //0x3870 Mercenaries [Zephyrus] / Elemental [pakpil]
12,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3880
@@ -2847,6 +2940,9 @@ void intif_defaults(void) {
intif->rodex_updatemail = intif_rodex_updatemail;
intif->rodex_sendmail = intif_rodex_sendmail;
intif->rodex_checkname = intif_rodex_checkname;
+ /* Clan System */
+ intif->clan_kickoffline = intif_clan_kickoffline;
+ intif->clan_membercount = intif_clan_membercount;
/* @accinfo */
intif->request_accinfo = intif_request_accinfo;
/* */
@@ -2923,4 +3019,6 @@ void intif_defaults(void) {
intif->pRodexHasNew = intif_parse_RodexNotifications;
intif->pRodexSendMail = intif_parse_RodexSendMail;
intif->pRodexCheckName = intif_parse_RodexCheckName;
+ /* Clan System */
+ intif->pRecvClanMemberAction = intif_parse_RecvClanMemberAction;
}
diff --git a/src/map/intif.h b/src/map/intif.h
index 4bca5f167..be8ff4181 100644
--- a/src/map/intif.h
+++ b/src/map/intif.h
@@ -138,6 +138,9 @@ struct intif_interface {
int(*rodex_updatemail) (int64 mail_id, int8 flag);
int(*rodex_sendmail) (struct rodex_message *msg);
int(*rodex_checkname) (struct map_session_data *sd, const char *name);
+ /* Clan System */
+ int (*clan_kickoffline) (int clan_id, int kick_interval);
+ int (*clan_membercount) (int clan_id, int kick_interval);
/* @accinfo */
void (*request_accinfo) (int u_fd, int aid, int group_lv, char* query);
/* */
@@ -212,6 +215,8 @@ struct intif_interface {
void(*pRodexHasNew) (int fd);
void(*pRodexSendMail) (int fd);
void(*pRodexCheckName) (int fd);
+ /* Clan System */
+ void (*pRecvClanMemberAction) (int fd);
};
#ifdef HERCULES_CORE
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 7fedb19ae..17a73400a 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -2070,6 +2070,12 @@ int itemdb_readdb_libconfig_sub(struct config_setting_t *it, int n, const char *
if ((t = libconfig->setting_get_member(it, "DisableOptions")))
id.flag.no_options = libconfig->setting_get_bool(t) ? 1 : 0;
+ if ((t = libconfig->setting_get_member(it, "ShowDropEffect")))
+ id.flag.showdropeffect = libconfig->setting_get_bool(t) ? 1 : 0;
+
+ if (itemdb->lookup_const(it, "DropEffectMode", &i32) && i32 >= 0)
+ id.dropeffectmode = i32;
+
if (itemdb->lookup_const(it, "ViewSprite", &i32) && i32 >= 0)
id.view_sprite = i32;
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index d2d3b6c73..5344a7cd6 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -472,6 +472,7 @@ struct item_data {
int view_id;
int matk;
int elvmax;/* maximum level for this item */
+ int dropeffectmode;
int delay;
uint64 class_base[3]; ///< Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
@@ -495,6 +496,7 @@ struct item_data {
unsigned force_serial : 1;
unsigned no_options: 1; // < disallows use of item options on the item. (non-equippable items are automatically flagged) [Smokexyz]
unsigned drop_announce : 1; // Official Drop Announce [Jedzkie]
+ unsigned showdropeffect: 1; // < Allow showing effect on item drop [Asheraf]
} flag;
struct {// item stacking limitation
unsigned short amount;
@@ -538,6 +540,8 @@ struct item_data {
#define itemdb_value_sell(n) (itemdb->search(n)->value_sell)
#define itemdb_canrefine(n) (!itemdb->search(n)->flag.no_refine)
#define itemdb_allowoption(n) (!itemdb->search(n)->flag.no_options)
+#define itemdb_showdropeffect(n) (itemdb->search(n)->flag.showdropeffect)
+#define itemdb_dropeffectmode(n) (itemdb->search(n)->dropeffectmode)
#define itemdb_is_element(n) ((n) >= ITEMID_SCARLET_PTS && (n) <= ITEMID_LIME_GREEN_PTS)
#define itemdb_is_spellbook(n) ((n) >= ITEMID_MAGIC_BOOK_FB && (n) <= ITEMID_MAGIC_BOOK_DL)
diff --git a/src/map/log.c b/src/map/log.c
index 6419c4766..c3fec077e 100644
--- a/src/map/log.c
+++ b/src/map/log.c
@@ -82,13 +82,21 @@ char log_picktype2char(e_log_pick_type type) {
}
/// obtain log type character for chat logs
-char log_chattype2char(e_log_chat_type type) {
- switch( type ) {
- case LOG_CHAT_GLOBAL: return 'O'; // Gl(O)bal
- case LOG_CHAT_WHISPER: return 'W'; // (W)hisper
- case LOG_CHAT_PARTY: return 'P'; // (P)arty
- case LOG_CHAT_GUILD: return 'G'; // (G)uild
- case LOG_CHAT_MAINCHAT: return 'M'; // (M)ain chat
+char log_chattype2char(e_log_chat_type type)
+{
+ switch (type) {
+ case LOG_CHAT_GLOBAL:
+ return 'O'; // Gl(O)bal
+ case LOG_CHAT_WHISPER:
+ return 'W'; // (W)hisper
+ case LOG_CHAT_PARTY:
+ return 'P'; // (P)arty
+ case LOG_CHAT_GUILD:
+ return 'G'; // (G)uild
+ case LOG_CHAT_MAINCHAT:
+ return 'M'; // (M)ain chat
+ case LOG_CHAT_CLAN:
+ return 'C'; // (C)lan
}
// should not get here, fallback
diff --git a/src/map/log.h b/src/map/log.h
index 7ff36d126..e7eb72713 100644
--- a/src/map/log.h
+++ b/src/map/log.h
@@ -52,6 +52,7 @@ typedef enum e_log_chat_type {
LOG_CHAT_PARTY = 0x04,
LOG_CHAT_GUILD = 0x08,
LOG_CHAT_MAINCHAT = 0x10,
+ LOG_CHAT_CLAN = 0x20,
// all
LOG_CHAT_ALL = 0xFF,
} e_log_chat_type;
diff --git a/src/map/map.c b/src/map/map.c
index 5a647625f..780e6f535 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -30,6 +30,7 @@
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/duel.h"
#include "map/elemental.h"
@@ -65,6 +66,7 @@
#include "common/core.h"
#include "common/ers.h"
#include "common/grfio.h"
+#include "common/md5calc.h"
#include "common/memmgr.h"
#include "common/nullpo.h"
#include "common/random.h"
@@ -1694,8 +1696,9 @@ bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x, int16
* @m, @x, @y mapid,x,y
* @first_charid, @second_charid, @third_charid, looting priority
* @flag: &1 MVP item. &2 do stacking check.
+ * @showdropeffect: show effect when the item is dropped.
*------------------------------------------*/
-int map_addflooritem(const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags)
+int map_addflooritem(const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags, bool showdropeffect)
{
int r;
struct flooritem_data *fitem=NULL;
@@ -1714,6 +1717,7 @@ int map_addflooritem(const struct block_list *bl, struct item *item_data, int am
fitem->bl.x = x;
fitem->bl.y = y;
fitem->bl.id = map->get_new_object_id();
+ fitem->showdropeffect = showdropeffect;
if(fitem->bl.id==0){
ers_free(map->flooritem_ers, fitem);
return 0;
@@ -1902,6 +1906,9 @@ int map_quit(struct map_session_data *sd) {
if( sd->bg_id && !sd->bg_queue.arena ) /* TODO: dump this chunk after bg_queue is fully enabled */
bg->team_leave(sd,BGTL_QUIT);
+ if (sd->status.clan_id)
+ clan->member_offline(sd);
+
if (sd->state.autotrade && core->runflag != MAPSERVER_ST_SHUTDOWN && !channel->config->closing)
pc->autotrade_update(sd,PAUC_REMOVE);
@@ -2893,21 +2900,26 @@ int map_cell2gat(struct mapcell cell) {
ShowWarning("map_cell2gat: cell has no matching gat type\n");
return 1; // default to 'wall'
}
-void map_cellfromcache(struct map_data *m) {
- struct map_cache_map_info *info;
+/**
+ * Extracts a map's cell data from its compressed mapcache.
+ *
+ * @param[in, out] m The target map.
+ */
+void map_cellfromcache(struct map_data *m)
+{
nullpo_retv(m);
- info = (struct map_cache_map_info *)m->cellPos;
- if (info) {
+ if (m->cell_buf.data != NULL) {
char decode_buffer[MAX_MAP_SIZE];
unsigned long size, xy;
int i;
- size = (unsigned long)info->xs*(unsigned long)info->ys;
+ size = (unsigned long)m->xs * (unsigned long)m->ys;
// TO-DO: Maybe handle the scenario, if the decoded buffer isn't the same size as expected? [Shinryo]
- grfio->decode_zip(decode_buffer, &size, m->cellPos+sizeof(struct map_cache_map_info), info->len);
+ grfio->decode_zip(decode_buffer, &size, m->cell_buf.data, m->cell_buf.len);
+
CREATE(m->cell, struct mapcell, size);
// Set cell properties
@@ -3247,97 +3259,125 @@ int map_eraseipport(unsigned short map_index, uint32 ip, uint16 port) {
return 0;
}
-/*==========================================
- * [Shinryo]: Init the mapcache
- *------------------------------------------*/
-char *map_init_mapcache(FILE *fp) {
- struct map_cache_main_header header;
- size_t size = 0;
- char *buffer;
-
- // No file open? Return..
- nullpo_ret(fp);
+/**
+ * Reads a map's compressed cell data from its mapcache file.
+ *
+ * @param[in,out] m The target map.
+ * @return The loading success state.
+ * @retval false in case of errors.
+ */
+bool map_readfromcache(struct map_data *m)
+{
+ unsigned int file_size;
+ char file_path[256];
+ FILE *fp = NULL;
+ bool retval = false;
+ int16 version;
- // Get file size
- fseek(fp, 0, SEEK_END);
- size = ftell(fp);
- fseek(fp, 0, SEEK_SET);
+ nullpo_retr(false, m);
- // Allocate enough space
- CREATE(buffer, char, size);
+ snprintf(file_path, sizeof(file_path), "%s%s%s.%s", "maps/", DBPATH, m->name, "mcache");
+ fp = fopen(file_path, "rb");
- // No memory? Return..
- nullpo_ret(buffer);
+ if (fp == NULL) {
+ ShowWarning("map_readfromcache: Could not open the mapcache file for map '%s' at path '%s'.\n", m->name, file_path);
+ return false;
+ }
- // Read file into buffer..
- if(fread(buffer, sizeof(char), size, fp) != size) {
- ShowError("map_init_mapcache: Could not read entire mapcache file\n");
- aFree(buffer);
- return NULL;
+ if (fread(&version, sizeof(version), 1, fp) < 1) {
+ ShowError("map_readfromcache: Could not read file version for map '%s'.\n", m->name);
+ fclose(fp);
+ return false;
}
- rewind(fp);
+ fseek(fp, 0, SEEK_END);
+ file_size = (unsigned int)ftell(fp);
+ fseek(fp, 0, SEEK_SET); // Rewind file pointer before passing it to the read function.
- // Get main header to verify if data is corrupted
- if( fread(&header, sizeof(header), 1, fp) != 1 ) {
- ShowError("map_init_mapcache: Error obtaining main header!\n");
- aFree(buffer);
- return NULL;
- }
- if( GetULong((unsigned char *)&(header.file_size)) != size ) {
- ShowError("map_init_mapcache: Map cache is corrupted!\n");
- aFree(buffer);
- return NULL;
+ switch(version) {
+ case 1:
+ retval = map->readfromcache_v1(fp, m, file_size);
+ break;
+ default:
+ ShowError("map_readfromcache: Mapcache file has unknown version '%d' for map '%s'.\n", version, m->name);
+ break;
}
- return buffer;
+ fclose(fp);
+ return retval;
}
-/*==========================================
- * Map cache reading
- * [Shinryo]: Optimized some behaviour to speed this up
- *==========================================*/
-int map_readfromcache(struct map_data *m, char *buffer) {
- int i;
- struct map_cache_main_header *header = (struct map_cache_main_header *)buffer;
- struct map_cache_map_info *info = NULL;
- char *p = buffer + sizeof(struct map_cache_main_header);
-
- nullpo_ret(m);
- nullpo_ret(buffer);
-
- for(i = 0; i < header->map_count; i++) {
- info = (struct map_cache_map_info *)p;
+/**
+ * Reads a map's compressed cell data from its mapcache file (file format
+ * version 1).
+ *
+ * @param[in] fp The file pointer to read from (opened and closed by
+ * the caller).
+ * @param[in,out] m The target map.
+ * @param[in] file_size The size of the file to load from.
+ * @return The loading success state.
+ * @retval false in case of errors.
+ */
+bool map_readfromcache_v1(FILE *fp, struct map_data *m, unsigned int file_size)
+{
+ struct map_cache_header mheader = { 0 };
+ uint8 md5buf[16] = { 0 };
+ int map_size;
+ nullpo_retr(false, fp);
+ nullpo_retr(false, m);
+
+ if (file_size <= sizeof(mheader) || fread(&mheader, sizeof(mheader), 1, fp) < 1) {
+ ShowError("map_readfromcache: Failed to read cache header for map '%s'.\n", m->name);
+ return false;
+ }
- if( strcmp(m->name, info->name) == 0 )
- break; // Map found
+ if (mheader.len <= 0) {
+ ShowError("map_readfromcache: A file with negative or zero compressed length passed '%d'.\n", mheader.len);
+ return false;
+ }
- // Jump to next entry..
- p += sizeof(struct map_cache_map_info) + info->len;
+ if (file_size < sizeof(mheader) + mheader.len) {
+ ShowError("map_readfromcache: An incomplete file passed for map '%s'.\n", m->name);
+ return false;
}
- if( info && i < header->map_count ) {
- unsigned long size;
+ if (mheader.ys <= 0 || mheader.xs <= 0) {
+ ShowError("map_readfromcache: A map with invalid size passed '%s' xs: '%d' ys: '%d'.\n", m->name, mheader.xs, mheader.ys);
+ return false;
+ }
- if( info->xs <= 0 || info->ys <= 0 )
- return 0;// Invalid
+ m->xs = mheader.xs;
+ m->ys = mheader.ys;
+ map_size = (int)mheader.xs * (int)mheader.ys;
- m->xs = info->xs;
- m->ys = info->ys;
- size = (unsigned long)info->xs*(unsigned long)info->ys;
+ if (map_size > MAX_MAP_SIZE) {
+ ShowWarning("map_readfromcache: %s exceeded MAX_MAP_SIZE of %d.\n", m->name, MAX_MAP_SIZE);
+ return false;
+ }
- if(size > MAX_MAP_SIZE) {
- ShowWarning("map_readfromcache: %s exceeded MAX_MAP_SIZE of %d\n", info->name, MAX_MAP_SIZE);
- return 0; // Say not found to remove it from list.. [Shinryo]
- }
+ CREATE(m->cell_buf.data, uint8, mheader.len);
+ m->cell_buf.len = mheader.len;
+ if (fread(m->cell_buf.data, mheader.len, 1, fp) < 1) {
+ ShowError("mapreadfromcache: Could not load the compressed cell data for map '%s'.\n", m->name);
+ aFree(m->cell_buf.data);
+ m->cell_buf.data = NULL;
+ m->cell_buf.len = 0;
+ return false;
+ }
- m->cellPos = p;
- m->cell = (struct mapcell *)0xdeadbeaf;
+ md5->binary(m->cell_buf.data, m->cell_buf.len, md5buf);
- return 1;
+ if (memcmp(md5buf, mheader.md5_checksum, sizeof(md5buf)) != 0) {
+ ShowError("mapreadfromcache: md5 checksum check failed for map '%s'\n", m->name);
+ aFree(m->cell_buf.data);
+ m->cell_buf.data = NULL;
+ m->cell_buf.len = 0;
+ return false;
}
- return 0; // Not found
+ m->cell = (struct mapcell *)0xdeadbeaf;
+
+ return true;
}
/**
@@ -3741,26 +3781,12 @@ void map_removemapdb(struct map_data *m) {
*--------------------------------------*/
int map_readallmaps (void) {
int i;
- FILE* fp=NULL;
int maps_removed = 0;
- if( map->enable_grf )
+ if (map->enable_grf) {
ShowStatus("Loading maps (using GRF files)...\n");
- else {
- char mapcachefilepath[256];
- safesnprintf(mapcachefilepath, 256, "%s/%s%s", map->db_path, DBPATH, "map_cache.dat");
- ShowStatus("Loading maps (using %s as map cache)...\n", mapcachefilepath);
- if( (fp = fopen(mapcachefilepath, "rb")) == NULL ) {
- ShowFatalError("Unable to open map cache file "CL_WHITE"%s"CL_RESET"\n", mapcachefilepath);
- exit(EXIT_FAILURE); //No use launching server if maps can't be read.
- }
-
- // Init mapcache data.. [Shinryo]
- map->cache_buffer = map->init_mapcache(fp);
- if(!map->cache_buffer) {
- ShowFatalError("Failed to initialize mapcache data (%s)..\n", mapcachefilepath);
- exit(EXIT_FAILURE);
- }
+ } else {
+ ShowStatus("Loading maps using map cache files...\n");
}
for(i = 0; i < map->count; i++) {
@@ -3774,7 +3800,7 @@ int map_readallmaps (void) {
if( !
(map->enable_grf?
map->readgat(&map->list[i])
- :map->readfromcache(&map->list[i], map->cache_buffer))
+ :map->readfromcache(&map->list[i]))
) {
map->delmapid(i);
maps_removed++;
@@ -3816,10 +3842,6 @@ int map_readallmaps (void) {
// intialization and configuration-dependent adjustments of mapflags
map->flags_init();
- if( !map->enable_grf ) {
- fclose(fp);
- }
-
// finished map loading
ShowInfo("Successfully loaded '"CL_WHITE"%d"CL_RESET"' maps."CL_CLL"\n",map->count);
instance->start_id = map->count; // Next Map Index will be instances
@@ -4496,6 +4518,8 @@ void map_zone_change2(int m, struct map_zone_data *zone)
{
const char *empty = "";
+ if (zone == NULL)
+ return;
Assert_retv(m >= 0 && m < map->count);
if( map->list[m].zone == zone )
return;
@@ -4813,6 +4837,15 @@ bool map_zone_mf_cache(int m, char *flag, char *params) {
else if( map->list[m].flag.battleground )
map_zone_mf_cache_add(m,"battleground");
}
+ } else if (!strcmpi(flag,"cvc")) {
+ if (state && map->list[m].flag.cvc) {
+ ;/* nothing to do */
+ } else {
+ if (state)
+ map_zone_mf_cache_add(m,"cvc\toff");
+ else if (map->list[m].flag.cvc)
+ map_zone_mf_cache_add(m,"cvc");
+ }
} else if (!strcmpi(flag,"noexppenalty")) {
if( state && map->list[m].flag.noexppenalty )
;/* nothing to do */
@@ -5837,6 +5870,8 @@ void read_map_zone_db(void) {
zone->merge_type = MZMT_MERGEABLE;
if( (zone = strdb_get(map->zone_db, MAP_ZONE_BG_NAME)) )
zone->merge_type = MZMT_MERGEABLE;
+ if ((zone = strdb_get(map->zone_db, MAP_ZONE_CVC_NAME)))
+ zone->merge_type = MZMT_MERGEABLE;
}
/* not supposed to go in here but in skill_final whatever */
libconfig->destroy(&map_zone_db);
@@ -5997,6 +6032,7 @@ int do_final(void) {
ircbot->final();/* before channel. */
channel->final();
chrif->final();
+ clan->final();
clif->final();
npc->final();
quest->final();
@@ -6042,6 +6078,11 @@ int do_final(void) {
ers_destroy(map->iterator_ers);
ers_destroy(map->flooritem_ers);
+ for (i = 0; i < map->count; ++i) {
+ if (map->list[i].cell_buf.data != NULL)
+ aFree(map->list[i].cell_buf.data);
+ map->list[i].cell_buf.len = 0;
+ }
aFree(map->list);
if( map->block_free )
@@ -6049,9 +6090,6 @@ int do_final(void) {
if( map->bl_list )
aFree(map->bl_list);
- if( !map->enable_grf )
- aFree(map->cache_buffer);
-
aFree(map->MAP_CONF_NAME);
aFree(map->BATTLE_CONF_FILENAME);
aFree(map->ATCOMMAND_CONF_FILENAME);
@@ -6183,6 +6221,7 @@ void map_load_defaults(void) {
battleground_defaults();
buyingstore_defaults();
channel_defaults();
+ clan_defaults();
clif_defaults();
chrif_defaults();
guild_defaults();
@@ -6515,6 +6554,7 @@ int do_init(int argc, char *argv[])
ircbot->init(minimal);
script->init(minimal);
itemdb->init(minimal);
+ clan->init(minimal);
skill->init(minimal);
if (!minimal)
map->read_zone_db();/* read after item and skill initialization */
@@ -6665,7 +6705,6 @@ void map_defaults(void) {
map->list = NULL;
map->iterator_ers = NULL;
- map->cache_buffer = NULL;
map->flooritem_ers = NULL;
/* */
@@ -6812,8 +6851,8 @@ void map_defaults(void) {
map->iwall_nextxy = map_iwall_nextxy;
map->create_map_data_other_server = create_map_data_other_server;
map->eraseallipport_sub = map_eraseallipport_sub;
- map->init_mapcache = map_init_mapcache;
map->readfromcache = map_readfromcache;
+ map->readfromcache_v1 = map_readfromcache_v1;
map->addmap = map_addmap;
map->delmapid = map_delmapid;
map->zone_db_clear = map_zone_db_clear;
diff --git a/src/map/map.h b/src/map/map.h
index 5835b5abc..5c4c6d59d 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -352,6 +352,7 @@ STATIC_ASSERT(((MAPID_1_1_MAX - 1) | MAPID_BASEMASK) == MAPID_BASEMASK, "First c
|| map->list[m].flag.gvg \
|| ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle) \
|| map->list[m].flag.battleground \
+ || map->list[m].flag.cvc \
)
// Specifies maps that have special GvG/WoE restrictions
#define map_flag_gvg(m) (map->list[m].flag.gvg || ((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle))
@@ -531,6 +532,7 @@ struct flooritem_data {
int first_get_charid,second_get_charid,third_get_charid;
int64 first_get_tick,second_get_tick,third_get_tick;
struct item item_data;
+ bool showdropeffect;
};
enum status_point_types { //we better clean up this enum and change it name [Hemagx]
@@ -736,6 +738,7 @@ enum map_zone_merge_type {
#define MAP_ZONE_PVP_NAME "PvP"
#define MAP_ZONE_GVG_NAME "GvG"
#define MAP_ZONE_BG_NAME "Battlegrounds"
+#define MAP_ZONE_CVC_NAME "CvC"
#define MAP_ZONE_PK_NAME "PK Mode"
#define MAP_ZONE_MAPFLAG_LENGTH 50
@@ -822,6 +825,7 @@ struct map_data {
unsigned gvg_dungeon : 1; // Celest
unsigned gvg_noparty : 1;
unsigned battleground : 2; // [BattleGround System]
+ unsigned cvc : 1;
unsigned nozenypenalty : 1;
unsigned notrade : 1;
unsigned noskill : 1;
@@ -905,7 +909,10 @@ struct map_data {
/* */
int (*getcellp)(struct map_data* m, const struct block_list *bl, int16 x, int16 y, cell_chk cellchk);
void (*setcell) (int16 m, int16 x, int16 y, cell_t cell, bool flag);
- char *cellPos;
+ struct {
+ uint8 *data;
+ int len;
+ } cell_buf;
/* ShowEvent Data Cache */
struct questinfo *qi_data;
@@ -1060,20 +1067,20 @@ struct charid2nick {
struct charid_request* requests;// requests of notification on this nick
};
-// This is the main header found at the very beginning of the map cache
-struct map_cache_main_header {
- uint32 file_size;
- uint16 map_count;
-};
-
-// This is the header appended before every compressed map cells info in the map cache
-struct map_cache_map_info {
- char name[MAP_NAME_LENGTH];
+// New mcache file format header
+#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
+#pragma pack(push, 1)
+#endif // not NetBSD < 6 / Solaris
+struct map_cache_header {
+ int16 version;
+ uint8 md5_checksum[16];
int16 xs;
int16 ys;
int32 len;
-};
-
+} __attribute__((packed));
+#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
+#pragma pack(pop)
+#endif // not NetBSD < 6 / Solaris
/*=====================================
* Interface : map.h
@@ -1163,7 +1170,6 @@ END_ZEROED_BLOCK;
struct map_data *list;
/* [Ind/Hercules] */
struct eri *iterator_ers;
- char *cache_buffer; // Has the uncompressed gat data of all maps, so just one allocation has to be made
/* */
struct eri *flooritem_ers;
/* */
@@ -1208,7 +1214,7 @@ END_ZEROED_BLOCK;
int (*clearflooritem_timer) (int tid, int64 tick, int id, intptr_t data);
int (*removemobs_timer) (int tid, int64 tick, int id, intptr_t data);
void (*clearflooritem) (struct block_list* bl);
- int (*addflooritem) (const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags);
+ int (*addflooritem) (const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags, bool showdropeffect);
// player to map session
void (*addnickdb) (int charid, const char* nick);
void (*delnickdb) (int charid, const char* nick);
@@ -1313,8 +1319,8 @@ END_ZEROED_BLOCK;
void (*iwall_nextxy) (int16 x, int16 y, int8 dir, int pos, int16 *x1, int16 *y1);
struct DBData (*create_map_data_other_server) (union DBKey key, va_list args);
int (*eraseallipport_sub) (union DBKey key, struct DBData *data, va_list va);
- char* (*init_mapcache) (FILE *fp);
- int (*readfromcache) (struct map_data *m, char *buffer);
+ bool (*readfromcache) (struct map_data *m);
+ bool (*readfromcache_v1) (FILE *fp, struct map_data *m, unsigned int file_size);
int (*addmap) (const char *mapname);
void (*delmapid) (int id);
void (*zone_db_clear) (void);
diff --git a/src/map/mob.c b/src/map/mob.c
index f509ecace..e93c9009d 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1838,11 +1838,13 @@ int mob_ai_hard(int tid, int64 tick, int id, intptr_t data) {
/*==========================================
* Initializes the delay drop structure for mob-dropped items.
*------------------------------------------*/
-struct item_drop* mob_setdropitem(int nameid, int qty, struct item_data *data) {
+struct item_drop* mob_setdropitem(int nameid, int qty, struct item_data *data)
+{
struct item_drop *drop = ers_alloc(item_drop_ers, struct item_drop);
drop->item_data.nameid = nameid;
drop->item_data.amount = qty;
drop->item_data.identify = data ? itemdb->isidentified2(data) : itemdb->isidentified(nameid);
+ drop->showdropeffect = true;
drop->next = NULL;
return drop;
}
@@ -1857,6 +1859,7 @@ struct item_drop* mob_setlootitem(struct item* item)
nullpo_retr(NULL, item);
drop = ers_alloc(item_drop_ers, struct item_drop);
memcpy(&drop->item_data, item, sizeof(struct item));
+ drop->showdropeffect = false;
drop->next = NULL;
return drop;
}
@@ -1864,7 +1867,8 @@ struct item_drop* mob_setlootitem(struct item* item)
/*==========================================
* item drop with delay (timer function)
*------------------------------------------*/
-int mob_delay_item_drop(int tid, int64 tick, int id, intptr_t data) {
+int mob_delay_item_drop(int tid, int64 tick, int id, intptr_t data)
+{
struct item_drop_list *list;
struct item_drop *ditem;
list=(struct item_drop_list *)data;
@@ -1872,8 +1876,9 @@ int mob_delay_item_drop(int tid, int64 tick, int id, intptr_t data) {
while (ditem) {
struct item_drop *ditem_prev;
map->addflooritem(NULL, &ditem->item_data,ditem->item_data.amount,
- list->m,list->x,list->y,
- list->first_charid,list->second_charid,list->third_charid,0);
+ list->m,list->x,list->y,
+ list->first_charid,list->second_charid,list->third_charid,0,
+ ditem->showdropeffect);
ditem_prev = ditem;
ditem = ditem->next;
ers_free(item_drop_ers, ditem_prev);
@@ -2586,7 +2591,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
if((temp = pc->additem(mvp_sd,&item,1,LOG_TYPE_PICKDROP_PLAYER)) != 0) {
clif->additem(mvp_sd,0,0,temp);
- map->addflooritem(&md->bl, &item, 1, mvp_sd->bl.m, mvp_sd->bl.x, mvp_sd->bl.y, mvp_sd->status.char_id, (second_sd?second_sd->status.char_id : 0), (third_sd ? third_sd->status.char_id : 0), 1);
+ map->addflooritem(&md->bl, &item, 1, mvp_sd->bl.m, mvp_sd->bl.x, mvp_sd->bl.y, mvp_sd->status.char_id, (second_sd?second_sd->status.char_id : 0), (third_sd ? third_sd->status.char_id : 0), 1, true);
}
//Logs items, MVP prizes [Lupus]
diff --git a/src/map/mob.h b/src/map/mob.h
index 83e022899..3d1b3aadf 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -208,6 +208,7 @@ struct mob_data {
int target_id,attacked_id;
int areanpc_id; //Required in OnTouchNPC (to avoid multiple area touchs)
unsigned int bg_id; // BattleGround System
+ int clan_id; // Clan System
int64 next_walktime, last_thinktime, last_linktime, last_pcneartime, dmgtick;
short move_fail_count;
@@ -406,6 +407,7 @@ enum mob_id {
// The data structures for storing delayed item drops
struct item_drop {
struct item item_data;
+ bool showdropeffect;
struct item_drop* next;
};
struct item_drop_list {
diff --git a/src/map/npc.c b/src/map/npc.c
index d3dfb39d2..94ab57bd9 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -25,6 +25,7 @@
#include "map/battle.h"
#include "map/chat.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/guild.h"
#include "map/instance.h"
@@ -4144,6 +4145,11 @@ const char *npc_parse_mapflag(const char *w1, const char *w2, const char *w3, co
ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing GvG flags from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
if (retval) *retval = EXIT_FAILURE;
}
+ if (state && map->list[m].flag.cvc) {
+ map->list[m].flag.cvc = 0;
+ ShowWarning("npc_parse_mapflag: You can't set CvC and PvP flags for the same map! Removing CvC flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer, start-buffer));
+ if (retval) *retval = EXIT_FAILURE;
+ }
if( state && map->list[m].flag.battleground ) {
map->list[m].flag.battleground = 0;
ShowWarning("npc_parse_mapflag: You can't set PvP and BattleGround flags for the same map! Removing BattleGround flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
@@ -4196,6 +4202,11 @@ const char *npc_parse_mapflag(const char *w1, const char *w2, const char *w3, co
ShowWarning("npc_parse_mapflag: You can't set PvP and GvG flags for the same map! Removing PvP flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
if (retval) *retval = EXIT_FAILURE;
}
+ if (state && map->list[m].flag.cvc) {
+ map->list[m].flag.cvc = 0;
+ ShowWarning("npc_parse_mapflag: You can't set CvC and GvG flags for the same map! Removing CvC flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer, start-buffer));
+ if (retval) *retval = EXIT_FAILURE;
+ }
if( state && map->list[m].flag.battleground ) {
map->list[m].flag.battleground = 0;
ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing BattleGround flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
@@ -4238,11 +4249,47 @@ const char *npc_parse_mapflag(const char *w1, const char *w2, const char *w3, co
ShowWarning("npc_parse_mapflag: You can't set GvG and BattleGround flags for the same map! Removing GvG flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
if (retval) *retval = EXIT_FAILURE;
}
+ if (map->list[m].flag.cvc) {
+ map->list[m].flag.cvc = 0;
+ ShowWarning("npc_parse_mapflag: You can't set CvC and BattleGround flags for the same map! Removing CvC flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer, start-buffer));
+ if (retval) *retval = EXIT_FAILURE;
+ }
if( state && (zone = strdb_get(map->zone_db, MAP_ZONE_BG_NAME)) != NULL && map->list[m].zone != zone ) {
map->zone_change(m,zone,start,buffer,filepath);
}
}
+ else if (!strcmpi(w3, "cvc")) {
+ struct map_zone_data *zone;
+
+ map->list[m].flag.cvc = state;
+ if (state && (map->list[m].flag.gvg || map->list[m].flag.gvg_dungeon || map->list[m].flag.gvg_castle)) {
+ map->list[m].flag.gvg = 0;
+ map->list[m].flag.gvg_dungeon = 0;
+ map->list[m].flag.gvg_castle = 0;
+ ShowWarning("npc_parse_mapflag: You can't set GvG and CvC flags for the same map! Removing GvG flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer, start-buffer));
+ if (retval) {
+ *retval = EXIT_FAILURE;
+ }
+ }
+ if (state && map->list[m].flag.pvp) {
+ map->list[m].flag.pvp = 0;
+ ShowWarning("npc_parse_mapflag: You can't set PvP and CvC flags for the same map! Removing PvP flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer, start-buffer));
+ if (retval) {
+ *retval = EXIT_FAILURE;
+ }
+ }
+ if (state && map->list[m].flag.battleground) {
+ map->list[m].flag.battleground = 0;
+ ShowWarning("npc_parse_mapflag: You can't set CvC and BattleGround flags for the same map! Removing BattleGround flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer, start-buffer));
+ if (retval) {
+ *retval = EXIT_FAILURE;
+ }
+ }
+ if (state && (zone = strdb_get(map->zone_db, MAP_ZONE_CVC_NAME)) != NULL && map->list[m].zone != zone) {
+ map->zone_change(m, zone, start, buffer, filepath);
+ }
+ }
else if (!strcmpi(w3,"noexppenalty"))
map->list[m].flag.noexppenalty=state;
else if (!strcmpi(w3,"nozenypenalty"))
@@ -4887,6 +4934,7 @@ int npc_reload(void) {
// Reprocess npc files and reload constants
itemdb->name_constants();
+ clan->set_constants();
npc_process_files( npc_new_min );
instance->reload();
@@ -5026,6 +5074,7 @@ int do_init_npc(bool minimal) {
// Should be loaded before npc processing, otherwise labels could overwrite constant values
// and lead to undefined behavior [Panikon]
itemdb->name_constants();
+ clan->set_constants();
if (!minimal) {
npc->timer_event_ers = ers_new(sizeof(struct timer_event_data),"clif.c::timer_event_ers",ERS_OPT_NONE);
diff --git a/src/map/npc.h b/src/map/npc.h
index 8bb38f252..64a2b3a51 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -83,6 +83,8 @@ struct npc_data {
uint8 dir;
uint8 area_size;
+ int clan_id;
+
unsigned size : 2;
struct status_data status;
diff --git a/src/map/packets.h b/src/map/packets.h
index 451acce47..462efd31b 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -2179,6 +2179,12 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x0960,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
+//2012-07-02
+#if PACKETVER >= 20120702
+// new packets
+ packet(0x098a, -1); // ZC_CLANINFO
+#endif
+
//2012-07-10
#if PACKETVER >= 20120710
packet(0x0886,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
@@ -2218,6 +2224,15 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x0436,4,clif->pDull); // CZ_GANGSI_RANK
#endif
+//2012-07-16aRagExe
+#if PACKETVER >= 20120716
+// new packets
+ packet(0x0988, 6); // ZC_NOTIFY_CLAN_CONNECTINFO
+ packet(0x0989, 2); // ZC_ACK_CLAN_LEAVE
+ packet(0x098d, -1, clif->pClanMessage, 2, 4); // CZ_CLAN_CHAT
+ packet(0x098e, -1); // ZC_NOTIFY_CLAN_CHAT
+#endif
+
// 2012-09-25aRagexe
#if PACKETVER >= 20120925
// new packets (not all)
@@ -3914,4 +3929,119 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
#endif // PACKETVER_ZERO
+// 2017-12-13bRagexe
+#if PACKETVER >= 20171213
+// new packets
+ packet(0x0ae3,-1); // AC_LOGIN_OTP
+ packet(0x0ae6,30);
+ packet(0x0ae7,30);
+// changed packet sizes
+#endif
+
+// 2017-12-20aRagexe
+#if PACKETVER >= 20171220
+// new packets
+ packet(0x0ae8,2);
+ packet(0x0ae9,64);
+ packet(0x0aea,11);
+// changed packet sizes
+#endif
+
+// 2017-12-27aRagexe
+#if PACKETVER >= 20171227
+// new packets
+ packet(0x0aeb,11);
+ packet(0x0aec,2);
+// changed packet sizes
+ packet(0x0aea,2);
+#endif
+
+// 2018-01-03aRagexe
+#if PACKETVER >= 20180103
+// new packets
+ packet(0x0aed,2);
+ packet(0x0aee,2);
+// changed packet sizes
+#ifdef PACKETVER_RE
+ packet(0x09a0,6); // HC_CHARLIST_NOTIFY
+#endif
+// changed packet sizes
+#endif
+
+#if PACKETVER >= 20180117
+// new packets
+ packet(0x0aef,2);
+ packet(0x0af0,10);
+// changed packet sizes
+ packet(0x0ae9,13);
+#endif
+
+// 2018-01-24bRagexeRE
+#if PACKETVER >= 20180124
+// new packets
+ packet(0x0af2,40,clif->pDull/*,XXX*/);
+ packet(0x0af3,-1,clif->pDull/*,XXX*/);
+// changed packet sizes
+#ifndef PACKETVER_RE
+ packet(0x0821,102,clif->pDull/*,XXX*/); // AC_OTP_USER
+#endif
+#endif
+
+#ifdef PACKETVER_ZERO
+// 2018-01-31dRagexe_zero
+#if PACKETVER >= 20180131
+// new packets
+ packet(0x0af2,40,clif->pDull/*,XXX*/);
+ packet(0x0af3,-1,clif->pDull/*,XXX*/);
+ packet(0x0af4,11,clif->pDull/*,XXX*/);
+// changed packet sizes
+ packet(0x0ae6,10,clif->pDull/*,XXX*/);
+#endif
+#endif // PACKETVER_ZERO
+
+#if PACKETVER >= 20180131
+// changed packet sizes
+ packet(0x0821,102); // AC_OTP_USER
+#endif
+
+#ifdef PACKETVER_ZERO
+// 2018-02-07bRagexe_zero
+#if PACKETVER >= 20180207
+// new packets
+ packet(0x0af5,3);
+ packet(0x0af6,88);
+ packet(0x0af7,32);
+// changed packet sizes
+#endif
+#else // PACKETVER_ZERO
+// 2018-02-07bRagexeRE, 2018-02-07bRagexe
+#if PACKETVER >= 20180207
+// new packets
+ packet(0x0af4,11);
+ packet(0x0af5,3);
+ packet(0x0af6,88);
+ packet(0x0af7,32);
+// changed packet sizes
+ packet(0x0ae6,10);
+#endif
+#endif // PACKETVER_ZERO
+
+#ifdef PACKETVER_RE
+// 2018-02-21aRagexeRE
+#if PACKETVER >= 20180221
+// new packets
+// changed packet sizes
+ packet(0x0206,35); // ZC_FRIENDS_STATE
+#endif
+#endif // PACKETVER_RE
+
+#ifndef PACKETVER_ZERO
+// 2018-03-07bRagexe
+#if PACKETVER >= 20180307
+// new packets
+// changed packet sizes
+ packet(0x0206,35); // ZC_FRIENDS_STATE
+#endif
+#endif // PACKETVER_ZERO
+
#endif /* MAP_PACKETS_H */
diff --git a/src/map/packets_keys.h b/src/map/packets_keys_main.h
index 61b1ac2b5..066e7d2c3 100644
--- a/src/map/packets_keys.h
+++ b/src/map/packets_keys_main.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,8 +18,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef MAP_PACKETS_KEYS_H
-#define MAP_PACKETS_KEYS_H
+#ifndef MAP_PACKETS_MAIN_KEYS_H
+#define MAP_PACKETS_MAIN_KEYS_H
#ifndef packetKeys
#define packetKeys(a,b,c)
@@ -27,8 +27,12 @@
/* PacketKeys: http://herc.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */
+/* This file is autogenerated, please do not commit manual changes */
+
// 2010-11-23aRagexe, 2010-11-24aRagexe, 2010-11-24dRagexe, 2010-11-24eRagexe, 2010-11-24fRagexe, 2010-11-26aRagexe
-#if PACKETVER == 20101123 || PACKETVER == 20101124 || PACKETVER == 20101126
+#if PACKETVER == 20101123 || \
+ PACKETVER == 20101124 || \
+ PACKETVER == 20101126
packetKeys(0x49357D72,0x22C370A1,0x5F836591);
#endif
@@ -73,17 +77,21 @@
#endif
// 2011-01-25aRagexe, 2011-01-26aRagexe, 2011-01-26bRagexe, 2011-01-31aRagexe
-#if PACKETVER == 20110125 || PACKETVER == 20110126 || PACKETVER == 20110131
+#if PACKETVER == 20110125 || \
+ PACKETVER == 20110126 || \
+ PACKETVER == 20110131
packetKeys(0x6BB84BB0,0x4C004382,0x10AE3260);
#endif
// 2011-01-31bRagexe, 2011-02-01aRagexe
-#if PACKETVER == 20110131 || PACKETVER == 20110201
+#if PACKETVER == 20110131 || \
+ PACKETVER == 20110201
packetKeys(0x68871E62,0x60D17266,0x74726DAA);
#endif
// 2011-02-08aRagexe, 2011-02-10aRagexe, 2011-02-10bRagexe
-#if PACKETVER == 20110208 || PACKETVER == 20110210
+#if PACKETVER == 20110208 || \
+ PACKETVER == 20110210
packetKeys(0x72BA4E9D,0x281E1DF1,0x208255AA);
#endif
@@ -93,7 +101,10 @@
#endif
// 2011-02-22aRagexe, 2011-02-23aRagexe, 2011-02-23bRagexe, 2011-02-24aRagexe, 2011-02-25aRagexe, 2011-02-25bRagexe
-#if PACKETVER == 20110222 || PACKETVER == 20110223 || PACKETVER == 20110224 || PACKETVER == 20110225
+#if PACKETVER == 20110222 || \
+ PACKETVER == 20110223 || \
+ PACKETVER == 20110224 || \
+ PACKETVER == 20110225
packetKeys(0x48F73B56,0x155F7D66,0x44AB57CE);
#endif
@@ -103,12 +114,14 @@
#endif
// 2011-03-08aRagexe, 2011-03-09aRagexe, 2011-03-09bRagexe, 2011-03-09cRagexe, 2011-03-09dRagexe
-#if PACKETVER == 20110308 || PACKETVER == 20110309
+#if PACKETVER == 20110308 || \
+ PACKETVER == 20110309
packetKeys(0x003F1B20,0x7A1E12A3,0x34994AAD);
#endif
// 2011-03-15aRagexe, 2011-03-16aRagexe
-#if PACKETVER == 20110315 || PACKETVER == 20110316
+#if PACKETVER == 20110315 || \
+ PACKETVER == 20110316
packetKeys(0x62967D7D,0x34833D1A,0x26D45ECA);
#endif
@@ -118,7 +131,8 @@
#endif
// 2011-03-29aRagexe, 2011-03-30aRagexe
-#if PACKETVER == 20110329 || PACKETVER == 20110330
+#if PACKETVER == 20110329 || \
+ PACKETVER == 20110330
packetKeys(0x06900BB7,0x45DB687B,0x197B017B);
#endif
@@ -158,7 +172,8 @@
#endif
// 2011-05-23aRagexe, 2011-05-26bRagexe
-#if PACKETVER == 20110523 || PACKETVER == 20110526
+#if PACKETVER == 20110523 || \
+ PACKETVER == 20110526
packetKeys(0x69166916,0x69166916,0x69166916);
#endif
@@ -168,7 +183,9 @@
#endif
// 2011-06-07aRagexe, 2011-06-08aRagexe, 2011-06-08bRagexe, 2011-06-08cRagexe, 2011-06-09aRagexe
-#if PACKETVER == 20110607 || PACKETVER == 20110608 || PACKETVER == 20110609
+#if PACKETVER == 20110607 || \
+ PACKETVER == 20110608 || \
+ PACKETVER == 20110609
packetKeys(0x76B0426C,0x0DD74DEB,0x1F92228E);
#endif
@@ -193,7 +210,8 @@
#endif
// 2011-07-11bRagexe, 2011-07-13aRagexe, 2011-07-13bRagexe
-#if PACKETVER == 20110711 || PACKETVER == 20110713
+#if PACKETVER == 20110711 || \
+ PACKETVER == 20110713
packetKeys(0x489C544B,0x33BA1C25,0x2DE66E4E);
#endif
@@ -218,12 +236,14 @@
#endif
// 2011-08-16aRagexe, 2011-08-16aRagexeRE, 2011-08-17aRagexe, 2011-08-17aRagexeRE, 2011-08-17bRagexe, 2011-08-17bRagexeRE
-#if PACKETVER == 20110816 || PACKETVER == 20110817
+#if PACKETVER == 20110816 || \
+ PACKETVER == 20110817
packetKeys(0x053D5CED,0x3DED6DED,0x6DED6DED);
#endif
// 2011-08-23aRagexe, 2011-08-23aRagexeRE, 2011-08-24aRagexe, 2011-08-24aRagexeRE, 2011-08-24bRagexeRE
-#if PACKETVER == 20110823 || PACKETVER == 20110824
+#if PACKETVER == 20110823 || \
+ PACKETVER == 20110824
packetKeys(0x35C91401,0x262A5556,0x28FA03AA);
#endif
@@ -233,7 +253,8 @@
#endif
// 2011-09-06aRagexe, 2011-09-06aRagexeRE, 2011-09-14aRagexe, 2011-09-14aRagexeRE
-#if PACKETVER == 20110906 || PACKETVER == 20110914
+#if PACKETVER == 20110906 || \
+ PACKETVER == 20110914
packetKeys(0x350124EC,0x39A14595,0x0DE56125);
#endif
@@ -243,22 +264,27 @@
#endif
// 2011-09-28aRagexe, 2011-09-28aRagexe-retry, 2011-09-28aRagexeRE, 2011-09-29aRagexe, 2011-09-29aRagexeRE
-#if PACKETVER == 20110928 || PACKETVER == 20110929
+#if PACKETVER == 20110928 || \
+ PACKETVER == 20110929
packetKeys(0x26567512,0x4B0732DF,0x57D266C6);
#endif
// 2011-10-04aRagexe, 2011-10-04aRagexeRE, 2011-10-05aRagexe, 2011-10-05aRagexeRE
-#if PACKETVER == 20111004 || PACKETVER == 20111005
+#if PACKETVER == 20111004 || \
+ PACKETVER == 20111005
packetKeys(0x291E6762,0x77CD391A,0x60AC2F16);
#endif
// 2011-10-10aRagexe, 2011-10-10bRagexeRE, 2011-10-12aRagexeRE, 2011-10-12bRagexe
-#if PACKETVER == 20111010 || PACKETVER == 20111012
+#if PACKETVER == 20111010 || \
+ PACKETVER == 20111012
packetKeys(0x7F3C2D29,0x59B01DE6,0x1DBB44CA);
#endif
// 2011-10-17aRagexe, 2011-10-17aRagexeRE, 2011-10-19aRagexeRE, 2011-10-19bRagexeRE, 2011-10-21aRagexe, 2011-10-21aRagexeRE, 2011-10-21cRagexe
-#if PACKETVER == 20111017 || PACKETVER == 20111019 || PACKETVER == 20111021
+#if PACKETVER == 20111017 || \
+ PACKETVER == 20111019 || \
+ PACKETVER == 20111021
packetKeys(0x357D55DC,0x5A8D759F,0x245C30F5);
#endif
@@ -268,22 +294,26 @@
#endif
// 2011-11-01cRagexe, 2011-11-01cRagexeRE, 2011-11-02aRagexe, 2011-11-02aRagexeRE
-#if PACKETVER == 20111101 || PACKETVER == 20111102
+#if PACKETVER == 20111101 || \
+ PACKETVER == 20111102
packetKeys(0x5324329D,0x5D545D52,0x06137269);
#endif
// 2011-11-08aRagexe, 2011-11-08aRagexeRE, 2011-11-09aRagexe, 2011-11-09aRagexeRE, 2011-11-09bRagexe, 2011-11-09cRagexe, 2011-11-09dRagexe, 2011-11-09eRagexe
-#if PACKETVER == 20111108 || PACKETVER == 20111109
+#if PACKETVER == 20111108 || \
+ PACKETVER == 20111109
packetKeys(0x0B642BDA,0x6ECB1D1C,0x61C7454B);
#endif
// 2011-11-14aRagexe, 2011-11-14aRagexeRE, 2011-11-16aRagexe, 2011-11-16aRagexeRE
-#if PACKETVER == 20111114 || PACKETVER == 20111116
+#if PACKETVER == 20111114 || \
+ PACKETVER == 20111116
packetKeys(0x419D0DB0,0x74916BF4,0x027371B4);
#endif
// 2011-11-22aRagexe, 2011-11-22aRagexeRE, 2011-11-23aRagexe
-#if PACKETVER == 20111122 || PACKETVER == 20111123
+#if PACKETVER == 20111122 || \
+ PACKETVER == 20111123
packetKeys(0x3B550F07,0x1F666C7C,0x60304EF5);
#endif
@@ -293,7 +323,8 @@
#endif
// 2011-12-13aRagexe, 2011-12-13aRagexeRE, 2011-12-14aRagexe, 2011-12-14aRagexeRE, 2011-12-14bRagexeRE, 2011-12-14cRagexeRE
-#if PACKETVER == 20111213 || PACKETVER == 20111214
+#if PACKETVER == 20111213 || \
+ PACKETVER == 20111214
packetKeys(0x5151306B,0x7AE32886,0x53060628);
#endif
@@ -303,12 +334,14 @@
#endif
// 2011-12-27aRagexe, 2011-12-27aRagexeRE, 2011-12-28aRagexe, 2011-12-28aRagexeRE
-#if PACKETVER == 20111227 || PACKETVER == 20111228
+#if PACKETVER == 20111227 || \
+ PACKETVER == 20111228
packetKeys(0x0FF87E93,0x6CFF7860,0x3A3D1DEC);
#endif
// 2012-01-03aRagexe, 2012-01-03bRagexeRE, 2012-01-04aRagexe, 2012-01-04aRagexeRE, 2012-01-04bRagexe
-#if PACKETVER == 20120103 || PACKETVER == 20120104
+#if PACKETVER == 20120103 || \
+ PACKETVER == 20120104
packetKeys(0x262034A1,0x674542A5,0x73A50BA5);
#endif
@@ -318,7 +351,8 @@
#endif
// 2012-01-17aRagexe, 2012-01-17aRagexeRE, 2012-01-18aRagexe
-#if PACKETVER == 20120117 || PACKETVER == 20120118
+#if PACKETVER == 20120117 || \
+ PACKETVER == 20120118
packetKeys(0x24E32C2E,0x48DD17A5,0x64F8771A);
#endif
@@ -328,27 +362,34 @@
#endif
// 2012-01-31aRagexe, 2012-01-31cRagexeRE, 2012-02-01aRagexeRE, 2012-02-02aRagexe, 2012-02-02aRagexeRE, 2012-02-02bRagexe, 2012-02-02bRagexeRE
-#if PACKETVER == 20120131 || PACKETVER == 20120201 || PACKETVER == 20120202
+#if PACKETVER == 20120131 || \
+ PACKETVER == 20120201 || \
+ PACKETVER == 20120202
packetKeys(0x2CFC0A71,0x2BA91D8D,0x087E39E0);
#endif
// 2012-02-07bRagexe, 2012-02-07bRagexeRE, 2012-02-08aRagexe, 2012-02-09aRagexe
-#if PACKETVER == 20120207 || PACKETVER == 20120208 || PACKETVER == 20120209
+#if PACKETVER == 20120207 || \
+ PACKETVER == 20120208 || \
+ PACKETVER == 20120209
packetKeys(0x1D373F5D,0x5ACD604D,0x1C4D7C4D);
#endif
// 2012-02-14bRagexe, 2012-02-14bRagexeRE, 2012-02-15aRagexe
-#if PACKETVER == 20120214 || PACKETVER == 20120215
+#if PACKETVER == 20120214 || \
+ PACKETVER == 20120215
packetKeys(0x7A255EFA,0x30977276,0x2D4A0448);
#endif
// 2012-02-21aRagexe, 2012-02-21aRagexeRE, 2012-02-22aRagexe, 2012-02-22aRagexeRE
-#if PACKETVER == 20120221 || PACKETVER == 20120222
+#if PACKETVER == 20120221 || \
+ PACKETVER == 20120222
packetKeys(0x1CA5130F,0x43ED240A,0x7FEA3BE0);
#endif
// 2012-02-28bRagexe, 2012-02-28bRagexeRE, 2012-02-29aRagexe, 2012-02-29aRagexeRE
-#if PACKETVER == 20120228 || PACKETVER == 20120229
+#if PACKETVER == 20120228 || \
+ PACKETVER == 20120229
packetKeys(0x520B4C64,0x2800407D,0x47651458);
#endif
@@ -363,7 +404,8 @@
#endif
// 2012-03-20aRagexe, 2012-03-20aRagexeRE, 2012-03-21aRagexeRE
-#if PACKETVER == 20120320 || PACKETVER == 20120321
+#if PACKETVER == 20120320 || \
+ PACKETVER == 20120321
packetKeys(0x21F9683F,0x710C5CA5,0x1FD910E9);
#endif
@@ -383,7 +425,8 @@
#endif
// 2012-04-17aRagexe, 2012-04-17aRagexeRE, 2012-04-18aRagexeRE
-#if PACKETVER == 20120417 || PACKETVER == 20120418
+#if PACKETVER == 20120417 || \
+ PACKETVER == 20120418
packetKeys(0x01540E48,0x13041224,0x31247924);
#endif
@@ -393,12 +436,14 @@
#endif
// 2012-05-02aRagexeRE, 2012-05-03aRagexe, 2012-05-03aRagexeRE, 2012-05-03bRagexe
-#if PACKETVER == 20120502 || PACKETVER == 20120503
+#if PACKETVER == 20120502 || \
+ PACKETVER == 20120503
packetKeys(0x37A91D19,0x10190019,0x00190019);
#endif
// 2012-05-08aRagexe, 2012-05-08aRagexeRE, 2012-05-09aRagexeRE, 2012-05-09bRagexeRE
-#if PACKETVER == 20120508 || PACKETVER == 20120509
+#if PACKETVER == 20120508 || \
+ PACKETVER == 20120509
packetKeys(0x16CF3301,0x1F472B9B,0x0B4A3CD2);
#endif
@@ -408,7 +453,9 @@
#endif
// 2012-05-22aRagexe, 2012-05-23aRagexe, 2012-05-23aRagexeRE, 2012-05-23bRagexeRE, 2012-05-25aRagexeRE
-#if PACKETVER == 20120522 || PACKETVER == 20120523 || PACKETVER == 20120525
+#if PACKETVER == 20120522 || \
+ PACKETVER == 20120523 || \
+ PACKETVER == 20120525
packetKeys(0x70EB4CCB,0x0487713C,0x398D4B08);
#endif
@@ -418,7 +465,9 @@
#endif
// 2012-06-01aRagexeRE, 2012-06-04aRagexe, 2012-06-05aRagexeRE
-#if PACKETVER == 20120601 || PACKETVER == 20120604 || PACKETVER == 20120605
+#if PACKETVER == 20120601 || \
+ PACKETVER == 20120604 || \
+ PACKETVER == 20120605
packetKeys(0x68CA3080,0x31B74BDD,0x505208F1);
#endif
@@ -433,7 +482,8 @@
#endif
// 2012-06-26aRagexe, 2012-06-26aRagexeRE, 2012-06-27aRagexe, 2012-06-27aRagexeRE
-#if PACKETVER == 20120626 || PACKETVER == 20120627
+#if PACKETVER == 20120626 || \
+ PACKETVER == 20120627
packetKeys(0x02277E66,0x045723F1,0x7107392C);
#endif
@@ -443,7 +493,8 @@
#endif
// 2012-07-10aRagexe, 2012-07-10aRagexeRE, 2012-07-12aRagexe, 2012-07-12aRagexeRE
-#if PACKETVER == 20120710 || PACKETVER == 20120712
+#if PACKETVER == 20120710 || \
+ PACKETVER == 20120712
packetKeys(0x0E8B7AFB,0x6930362D,0x42D33A57);
#endif
@@ -498,12 +549,14 @@
#endif
// 2012-09-25aRagexe, 2012-09-25aRagexeRE, 2012-09-26aRagexe, 2012-09-26aRagexeRE
-#if PACKETVER == 20120925 || PACKETVER == 20120926
+#if PACKETVER == 20120925 || \
+ PACKETVER == 20120926
packetKeys(0x43A66E22,0x36C2229F,0x08172ECE);
#endif
// 2012-10-10aRagexe, 2012-10-10aRagexeRE, 2012-10-10bRagexe, 2012-10-10bRagexeRE, 2012-10-11aRagexeRE
-#if PACKETVER == 20121010 || PACKETVER == 20121011
+#if PACKETVER == 20121010 || \
+ PACKETVER == 20121011
packetKeys(0x169733E2,0x4C4640DC,0x31636531);
#endif
@@ -563,7 +616,8 @@
#endif
// 2013-01-03aRagexe, 2013-01-03aRagexeRE, 2013-01-07aRagexe
-#if PACKETVER == 20130103 || PACKETVER == 20130107
+#if PACKETVER == 20130103 || \
+ PACKETVER == 20130107
packetKeys(0x1E1A559A,0x199A799A,0x799A799A);
#endif
@@ -573,7 +627,8 @@
#endif
// 2013-01-15aRagexeRE, 2013-01-15bRagexe, 2013-01-16aRagexe, 2013-01-16aRagexeRE, 2013-01-16bRagexe
-#if PACKETVER == 20130115 || PACKETVER == 20130116
+#if PACKETVER == 20130115 || \
+ PACKETVER == 20130116
packetKeys(0x273C25CD,0x06AA48AF,0x45A01BD4);
#endif
@@ -662,17 +717,17 @@
packetKeys(0x75794A38,0x58A96BC1,0x296E6FB8);
#endif
-// 2013-05-22Ragexe, 2013-05-22aRagexe, 2013-05-22aRagexeRE
+// 2013-05-22aRagexe, 2013-05-22aRagexeRE
#if PACKETVER == 20130522
packetKeys(0x6948050B,0x06511D9D,0x725D4DF1);
#endif
-// 2013-05-29Ragexe, 2013-05-29aRagexe, 2013-05-29aRagexeRE
+// 2013-05-29aRagexe, 2013-05-29aRagexeRE
#if PACKETVER == 20130529
packetKeys(0x023A6C87,0x14BF1F1E,0x5CC70CC9);
#endif
-// 2013-06-05Ragexe, 2013-06-05aRagexe, 2013-06-05bRagexe, 2013-06-05cRagexeRE
+// 2013-06-05aRagexe, 2013-06-05bRagexe, 2013-06-05cRagexeRE
#if PACKETVER == 20130605
packetKeys(0x646E08D9,0x5F153AB5,0x61B509B5);
#endif
@@ -682,12 +737,12 @@
packetKeys(0x6D166F66,0x3C000FCF,0x295B0FCB);
#endif
-// 2013-06-18aRagexe, 2013-06-18aRagexeRE
+// 2013-06-18#1aRagexe, 2013-06-18#1aRagexeRE, 2013-06-18aRagexe, 2013-06-18aRagexeRE
#if PACKETVER == 20130618
packetKeys(0x434115DE,0x34A10FE9,0x6791428E);
#endif
-// 2013-06-26aRagexeRE, 2013-06-26bRagexe, 2013-06-26bRagexeRE, 2013-06-26cRagexe
+// 2013-06-26_3bRagexeRE, 2013-06-26_3cRagexe, 2013-06-26aRagexeRE, 2013-06-26bRagexe, 2013-06-26bRagexeRE, 2013-06-26cRagexe
#if PACKETVER == 20130626
packetKeys(0x38F453EF,0x6A040FD8,0x65BD6668);
#endif
@@ -782,8 +837,10 @@
packetKeys(0x4A6A3EFF,0x7E2D5237,0x01CA019E);
#endif
-// 2013-11-06aRagexe, 2013-11-06aRagexeRE, 2013-11-07aRagexe, 2013-11-07cRagexe, 2013-11-08aRagexe
-#if PACKETVER == 20131106 || PACKETVER == 20131107 || PACKETVER == 20131108
+// 2013-11-06aRagexe, 2013-11-06aRagexeRE, 2013-11-07aRagexe, 2013-11-07bRagexe, 2013-11-07cRagexe, 2013-11-08aRagexe
+#if PACKETVER == 20131106 || \
+ PACKETVER == 20131107 || \
+ PACKETVER == 20131108
packetKeys(0x143E528F,0x5CA05899,0x44B85B23);
#endif
@@ -807,7 +864,7 @@
packetKeys(0x792760B2,0x5AF45387,0x36165603);
#endif
-// 2013-12-11cRagexeRE, 2013-12-11dRagexe, 2013-12-11eRagexeRE
+// 2013-12-11cRagexe, 2013-12-11cRagexeRE, 2013-12-11dRagexe, 2013-12-11eRagexeRE
#if PACKETVER == 20131211
packetKeys(0x55B0394E,0x4D341FF2,0x60BC1DC3);
#endif
@@ -817,8 +874,11 @@
packetKeys(0x6A596301,0x76866D0E,0x32294A45);
#endif
-// 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-06-11eRagexe, 2015-02-25hRagexe
-#if PACKETVER == 20131223 || PACKETVER == 20140508 || PACKETVER == 20140611 || PACKETVER == 20150225
+// 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe
+#if PACKETVER == 20131223 || \
+ PACKETVER == 20140508 || \
+ PACKETVER == 20140611 || \
+ PACKETVER == 20150225
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
@@ -837,7 +897,7 @@
packetKeys(0x4A1E26F2,0x231E7EFE,0x61FE19FE);
#endif
-// 2014-01-15aRagexe, 2014-01-15bRagexe, 2014-01-15cRagexeRE, 2014-01-15dRagexeRE, 2014-01-15eRagexe, 2014-01-15eRagexeRE
+// 2014-01-15aRagexe, 2014-01-15bRagexe, 2014-01-15cRagexe, 2014-01-15cRagexeRE, 2014-01-15dRagexeRE, 2014-01-15eRagexe, 2014-01-15eRagexeRE
#if PACKETVER == 20140115
packetKeys(0x63224335,0x0F3A1F27,0x6D217B24);
#endif
@@ -882,7 +942,7 @@
packetKeys(0x48911E4E,0x58CB2EB3,0x05232619);
#endif
-// 2014-03-19aRagexeRE
+// 2014-03-19aRagexe, 2014-03-19aRagexeRE
#if PACKETVER == 20140319
packetKeys(0x3DA44383,0x1ABB165F,0x5B6846B9);
#endif
@@ -912,7 +972,7 @@
packetKeys(0x7E0D6B56,0x74673CD3,0x2EBA4940);
#endif
-// 2014-04-30aRagexeRE
+// 2014-04-30aRagexe, 2014-04-30aRagexeRE
#if PACKETVER == 20140430
packetKeys(0x400145D8,0x3FE50155,0x11624F70);
#endif
@@ -943,7 +1003,9 @@
#endif
// 2014-06-11bRagexeRE, 2014-06-11cRagexe, 2014-06-11dRagexe, 2014-06-11hRagexe, 2014-06-12aRagexe, 2014-06-13aRagexe
-#if PACKETVER == 20140611 || PACKETVER == 20140612 || PACKETVER == 20140613
+#if PACKETVER == 20140611 || \
+ PACKETVER == 20140612 || \
+ PACKETVER == 20140613
packetKeys(0x4FC83479,0x3AB04D1F,0x477B4010);
#endif
@@ -988,7 +1050,8 @@
#endif
// 2014-08-13aRagexe, 2014-08-13aRagexeRE, 2014-08-13bRagexe, 2014-08-14aRagexe
-#if PACKETVER == 20140813 || PACKETVER == 20140814
+#if PACKETVER == 20140813 || \
+ PACKETVER == 20140814
packetKeys(0x7AD51E0A,0x28C72C46,0x210205BD);
#endif
@@ -997,7 +1060,7 @@
packetKeys(0x374F15D0,0x64C87DEC,0x65CE2A41);
#endif
-// 2014-08-27aRagexe
+// 2014-08-27aRagexe, 2014-08-27aRagexeRE
#if PACKETVER == 20140827
packetKeys(0x53814CA2,0x27DE193E,0x503E683E);
#endif
@@ -1007,7 +1070,7 @@
packetKeys(0x2F386F34,0x0F935365,0x76A43888);
#endif
-// 2014-09-17aRagexe
+// 2014-09-17aRagexe, 2014-09-17cRagexeRE
#if PACKETVER == 20140917
packetKeys(0x180118EA,0x440134CF,0x3A99179D);
#endif
@@ -1028,7 +1091,8 @@
#endif
// 2014-10-15bRagexe, 2014-10-15bRagexeRE, 2014-10-15cRagexe, 2014-10-15dRagexe, 2014-10-16aRagexe, 2014-10-16aRagexeRE
-#if PACKETVER == 20141015 || PACKETVER == 20141016
+#if PACKETVER == 20141015 || \
+ PACKETVER == 20141016
packetKeys(0x2DFF467C,0x444B37EE,0x2C1B634F);
#endif
@@ -1072,13 +1136,14 @@
packetKeys(0x0B0B1DD3,0x26EF1797,0x4F40370B);
#endif
-// 2014-12-17aRagexeRE
+// 2014-12-17aRagexe, 2014-12-17aRagexeRE
#if PACKETVER == 20141217
packetKeys(0x01AB478C,0x0FDE58F2,0x1DAC7303);
#endif
// 2014-12-23cRagexeRE, 2014-12-24aRagexe
-#if PACKETVER == 20141223 || PACKETVER == 20141224
+#if PACKETVER == 20141223 || \
+ PACKETVER == 20141224
packetKeys(0x2E8936E6,0x34463C46,0x67CD3885);
#endif
@@ -1103,7 +1168,9 @@
#endif
// 2015-01-28aRagexe, 2015-01-28aRagexeRE, 2015-01-29aRagexe, 2015-01-30aRagexe
-#if PACKETVER == 20150128 || PACKETVER == 20150129 || PACKETVER == 20150130
+#if PACKETVER == 20150128 || \
+ PACKETVER == 20150129 || \
+ PACKETVER == 20150130
packetKeys(0x77CA2D55,0x28B608F0,0x75B47957);
#endif
@@ -1123,7 +1190,8 @@
#endif
// 2015-02-25aRagexeRE, 2015-02-25bRagexeRE, 2015-02-25cRagexeRE, 2015-02-25dRagexeRE, 2015-02-25eRagexe, 2015-02-25eRagexeRE, 2015-02-25fRagexe, 2015-02-25gRagexe, 2015-02-25iRagexe, 2015-02-25jRagexe, 2015-02-26aRagexe, 2015-02-26aRagexeRE
-#if PACKETVER == 20150225 || PACKETVER == 20150226
+#if PACKETVER == 20150225 || \
+ PACKETVER == 20150226
packetKeys(0x57FD4B7B,0x19CC16FB,0x0D255D72);
#endif
@@ -1203,7 +1271,8 @@
#endif
// 2015-06-17aRagexe, 2015-06-17aRagexeRE, 2015-06-18aRagexe, 2015-06-18aRagexeRE
-#if PACKETVER == 20150617 || PACKETVER == 20150618
+#if PACKETVER == 20150617 || \
+ PACKETVER == 20150618
packetKeys(0x250F7E09,0x25416076,0x029A780E);
#endif
@@ -1212,8 +1281,9 @@
packetKeys(0x440B0E24,0x1BEA7A4C,0x2C646784);
#endif
-// 2015-07-01bRagexeRE, 2015-07-02aRagexe
-#if PACKETVER == 20150701 || PACKETVER == 20150702
+// 2015-07-01bRagexe, 2015-07-01bRagexeRE, 2015-07-02aRagexe
+#if PACKETVER == 20150701 || \
+ PACKETVER == 20150702
packetKeys(0x4DD55F9B,0x70C67B03,0x78C60DB6);
#endif
@@ -1227,7 +1297,7 @@
packetKeys(0x1F805483,0x67745585,0x7FCE189C);
#endif
-// 2015-07-22bRagexeRE
+// 2015-07-22bRagexe, 2015-07-22bRagexeRE
#if PACKETVER == 20150722
packetKeys(0x41FA53D4,0x2CF044E2,0x663A3F1D);
#endif
@@ -1267,12 +1337,12 @@
packetKeys(0x19AB2BF0,0x04754299,0x48770736);
#endif
-// 2015-09-16aRagexe, 2015-09-16aRagexeRE, 2015-09-16cRagexe, 2015-09-16cRagexeRE
+// 2015-09-16aRagexe, 2015-09-16cRagexe, 2015-09-16cRagexeRE
#if PACKETVER == 20150916
packetKeys(0x17F83A19,0x116944F4,0x1CC541E9);
#endif
-// 2015-09-23bRagexe, 2015-09-23bRagexeRE, 2015-09-23cRagexe, 2015-09-23eRagexe, 2015-09-23eRagexeRE, 2015-09-23fRagexe, 2015-09-23fRagexeRE
+// 2015-09-23bRagexe, 2015-09-23bRagexeRE, 2015-09-23cRagexe, 2015-09-23dRagexe, 2015-09-23eRagexe, 2015-09-23eRagexeRE, 2015-09-23fRagexe, 2015-09-23fRagexeRE
#if PACKETVER == 20150923
packetKeys(0x765742B9,0x22D61C2F,0x7DA94FB2);
#endif
@@ -1292,13 +1362,15 @@
packetKeys(0x402728A8,0x5D0E309F,0x240018FD);
#endif
-// 2015-10-21aRagexe, 2015-10-22aRagexe, 2015-10-22aRagexeRE
-#if PACKETVER == 20151021 || PACKETVER == 20151022
+// 2015-10-21aRagexe, 2015-10-21aRagexeRE, 2015-10-22aRagexe, 2015-10-22aRagexeRE
+#if PACKETVER == 20151021 || \
+ PACKETVER == 20151022
packetKeys(0x0311104D,0x46C326D6,0x00E82720);
#endif
-// 2015-10-28cRagexe, 2015-10-28cRagexeRE, 2015-10-28dRagexe, 2015-10-28dRagexeRE, 2015-10-29aRagexe, 2015-10-29aRagexeRE
-#if PACKETVER == 20151028 || PACKETVER == 20151029
+// 2015-10-28bRagexeRE, 2015-10-28bRagexeRE_2, 2015-10-28cRagexe, 2015-10-28cRagexeRE, 2015-10-28dRagexe, 2015-10-28dRagexeRE, 2015-10-29aRagexe, 2015-10-29aRagexeRE
+#if PACKETVER == 20151028 || \
+ PACKETVER == 20151029
packetKeys(0x45B945B9,0x45B945B9,0x45B945B9);
#endif
@@ -1342,7 +1414,7 @@
packetKeys(0x347D68D0,0x2C705320,0x7B4A199D);
#endif
-// 2015-12-30aRagexe
+// 2015-12-30aRagexe, 2015-12-30aRagexeRE
#if PACKETVER == 20151230
packetKeys(0x54C51241,0x33883499,0x3CDA35F0);
#endif
@@ -1352,7 +1424,7 @@
packetKeys(0x40520265,0x33FE26FC,0x7136294F);
#endif
-// 2016-01-13aRagexe, 2016-01-13aRagexeRE, 2016-01-13bRagexe, 2016-01-13bRagexeRE, 2016-01-13cRagexeRE
+// 2016-01-13aRagexe, 2016-01-13aRagexeRE, 2016-01-13bRagexe, 2016-01-13bRagexeRE, 2016-01-13bRagexeRE_2, 2016-01-13bRagexe_2, 2016-01-13cRagexeRE
#if PACKETVER == 20160113
packetKeys(0x18005C4B,0x19A94A72,0x73F678EC);
#endif
@@ -1362,7 +1434,7 @@
packetKeys(0x51495149,0x51495149,0x51495149);
#endif
-// 2016-01-27aRagexeRE, 2016-01-27bRagexeRE, 2016-01-27cRagexe, 2016-01-27dRagexe
+// 2016-01-27aRagexeRE, 2016-01-27aRagexeRE_2, 2016-01-27bRagexeRE, 2016-01-27cRagexe, 2016-01-27dRagexe
#if PACKETVER == 20160127
packetKeys(0x6B1E7146,0x612C47E6,0x274E56EE);
#endif
@@ -1377,7 +1449,7 @@
packetKeys(0x613813EA,0x05251DAB,0x1FD35E33);
#endif
-// 2016-02-17aRagexe, 2016-02-17aRagexeRE, 2016-02-17bRagexeRE, 2016-02-17cRagexeRE
+// 2016-02-17aRagexe, 2016-02-17aRagexeRE, 2016-02-17bRagexeRE, 2016-02-17bRagexeRE_2, 2016-02-17cRagexeRE
#if PACKETVER == 20160217
packetKeys(0x25895A8E,0x09421C19,0x763A2D7A);
#endif
@@ -1398,11 +1470,12 @@
#endif
// 2016-03-16aRagexe, 2016-03-16aRagexeRE, 2016-03-18aRagexe
-#if PACKETVER == 20160316 || PACKETVER == 20160318
+#if PACKETVER == 20160316 || \
+ PACKETVER == 20160318
packetKeys(0x62363E36,0x3E363E36,0x3E363E36);
#endif
-// 2016-03-23aRagexe, 2016-03-23aRagexeRE, 2016-03-23bRagexe
+// 2016-03-23aRagexe, 2016-03-23aRagexeRE, 2016-03-23bRagexe, 2016-03-23bRagexeRE
#if PACKETVER == 20160323
packetKeys(0x73E35A83,0x62142FA8,0x12BA36BD);
#endif
@@ -1417,7 +1490,7 @@
packetKeys(0x568611EA,0x32457D8D,0x2B020477);
#endif
-// 2016-04-14aRagexe, 2016-04-14aRagexeRE, 2016-04-14bRagexe, 2016-04-14bRagexeRE, 2016-04-14cRagexe
+// 2016-04-14aRagexe, 2016-04-14aRagexeRE, 2016-04-14bRagexe, 2016-04-14bRagexeRE, 2016-04-14bRagexe_2, 2016-04-14cRagexe
#if PACKETVER == 20160414
packetKeys(0x31BD479A,0x40C61398,0x397C1A80);
#endif
@@ -1427,7 +1500,7 @@
packetKeys(0x67D2163A,0x3068215B,0x4835474D);
#endif
-// 2016-04-27aRagexeRE
+// 2016-04-27aRagexe, 2016-04-27aRagexeRE
#if PACKETVER == 20160427
packetKeys(0x12DC378E,0x4E3E7EBE,0x0ABE2ABE);
#endif
@@ -1448,7 +1521,8 @@
#endif
// 2016-05-25aRagexe, 2016-05-25aRagexeRE, 2016-05-26aRagexe
-#if PACKETVER == 20160525 || PACKETVER == 20160526
+#if PACKETVER == 20160525 || \
+ PACKETVER == 20160526
packetKeys(0x485C45B6,0x47DC6192,0x76B34A36);
#endif
@@ -1458,7 +1532,8 @@
#endif
// 2016-06-08aRagexe, 2016-06-08aRagexeRE, 2016-06-08bRagexe, 2016-06-08bRagexeRE, 2016-06-09aRagexe
-#if PACKETVER == 20160608 || PACKETVER == 20160609
+#if PACKETVER == 20160608 || \
+ PACKETVER == 20160609
packetKeys(0x11D74609,0x77C43E8A,0x44290F53);
#endif
@@ -1473,7 +1548,8 @@
#endif
// 2016-06-29aRagexe, 2016-06-29aRagexeRE, 2016-06-30aRagexe, 2016-06-30aRagexeRE
-#if PACKETVER == 20160629 || PACKETVER == 20160630
+#if PACKETVER == 20160629 || \
+ PACKETVER == 20160630
packetKeys(0x0DF31CCC,0x54281606,0x5C4C6855);
#endif
@@ -1482,37 +1558,42 @@
packetKeys(0x33A766D0,0x743F04F8,0x0FA0276C);
#endif
-// 2016-07-13aRagexeRE, 2016-07-13bRagexeRE, 2016-07-13dRagexe
+// 2016-07-13aRagexe, 2016-07-13aRagexeRE, 2016-07-13bRagexe, 2016-07-13bRagexeRE, 2016-07-13cRagexe, 2016-07-13dRagexe
#if PACKETVER == 20160713
packetKeys(0x714F2495,0x7DDC6F32,0x3FD8533D);
#endif
-// 2016-07-20aRagexe, 2016-07-20aRagexeRE, 2016-07-20bRagexeRE
+// 2016-07-20aRagexe, 2016-07-20aRagexeRE, 2016-07-20bRagexe, 2016-07-20bRagexeRE
#if PACKETVER == 20160720
packetKeys(0x4F8A19C0,0x2D8E085C,0x37BB67D6);
#endif
-// 2016-07-27aRagexeRE, 2016-07-27bRagexeRE
+// 2016-07-27aRagexe, 2016-07-27aRagexeRE, 2016-07-27bRagexe, 2016-07-27bRagexeRE
#if PACKETVER == 20160727
packetKeys(0x3C6952AB,0x26E4077F,0x37E25DF7);
#endif
-// 2016-08-03bRagexeRE
+// 2016-08-03bRagexe, 2016-08-03bRagexeRE
#if PACKETVER == 20160803
packetKeys(0x67F438C2,0x512A4EB7,0x2D353182);
#endif
-// 2016-08-10aRagexeRE
+// 2016-08-10aRagexe, 2016-08-10aRagexeRE
#if PACKETVER == 20160810
packetKeys(0x2F252886,0x242234A2,0x48BC5032);
#endif
-// 2016-08-17aRagexe
+// 2016-08-17aRagexe, 2016-08-17aRagexeRE
#if PACKETVER == 20160817
packetKeys(0x675E6900,0x3F8E1D16,0x58D650E5);
#endif
-// 2016-08-31aRagexeRE, 2016-08-31bRagexeRE
+// 2016-08-24aRagexe, 2016-08-24aRagexeRE
+#if PACKETVER == 20160824
+ packetKeys(0x2FA92FA9,0x2FA92FA9,0x2FA92FA9);
+#endif
+
+// 2016-08-31aRagexe, 2016-08-31aRagexeRE, 2016-08-31bRagexe, 2016-08-31bRagexeRE
#if PACKETVER == 20160831
packetKeys(0x564E13B0,0x7F680549,0x382D273B);
#endif
@@ -1527,42 +1608,43 @@
packetKeys(0x7C79748F,0x1AA03B1D,0x6EAC4747);
#endif
-// 2016-09-21bRagexeRE
+// 2016-09-21aRagexe, 2016-09-21bRagexeRE
#if PACKETVER == 20160921
packetKeys(0x11CD15CD,0x15CD15CD,0x15CD15CD);
#endif
-// 2016-09-28cRagexeRE, 2016-09-28dRagexeRE
+// 2016-09-28cRagexe, 2016-09-28cRagexeRE, 2016-09-28dRagexeRE
#if PACKETVER == 20160928
packetKeys(0x2F8C67F5,0x22D42C38,0x57513774);
#endif
-// 2016-10-05aRagexeRE
+// 2016-10-05aRagexe, 2016-10-05aRagexeRE
#if PACKETVER == 20161005
packetKeys(0x5BAE21F8,0x021E2FFC,0x3BEB7C31);
#endif
-// 2016-10-12aRagexeRE
+// 2016-10-12aRagexe, 2016-10-12aRagexeRE
#if PACKETVER == 20161012
packetKeys(0x5E2311F2,0x14FD012C,0x76EB64F6);
#endif
-// 2016-10-19aRagexeRE
+// 2016-10-19aRagexe, 2016-10-19aRagexeRE
#if PACKETVER == 20161019
packetKeys(0x34882F11,0x7C870E70,0x7E61350D);
#endif
-// 2016-10-26bRagexeRE, 2016-10-26cRagexeRE
+// 2016-10-26bRagexe, 2016-10-26bRagexeRE, 2016-10-26cRagexe, 2016-10-26cRagexeRE
#if PACKETVER == 20161026
packetKeys(0x2CB86AE6,0x7D12660E,0x1B004DEB);
#endif
-// 2016-11-02aRagexe, 2016-11-02aRagexeRE, 2016-11-03aRagexeRE
-#if PACKETVER == 20161102 || PACKETVER == 20161103
+// 2016-11-02aRagexe, 2016-11-02aRagexeRE, 2016-11-03aRagexe, 2016-11-03aRagexeRE
+#if PACKETVER == 20161102 || \
+ PACKETVER == 20161103
packetKeys(0x76725C17,0x72FE4EC1,0x07A91BFD);
#endif
-// 2016-11-09aRagexe, 2016-11-09aRagexeRE, 2016-11-09bRagexeRE, 2016-11-09cRagexeRE, 2016-11-09dRagexeRE
+// 2016-11-09aRagexe, 2016-11-09aRagexeRE, 2016-11-09bRagexe, 2016-11-09bRagexeRE, 2016-11-09cRagexeRE, 2016-11-09dRagexeRE
#if PACKETVER == 20161109
packetKeys(0x0A5277C0,0x2DB17506,0x0E8F26DA);
#endif
@@ -1577,22 +1659,22 @@
packetKeys(0x66FF559F,0x00D3535B,0x236246F7);
#endif
-// 2016-11-30aRagexeRE, 2016-11-30bRagexeRE
+// 2016-11-30aRagexe, 2016-11-30aRagexeRE, 2016-11-30bRagexe, 2016-11-30bRagexeRE
#if PACKETVER == 20161130
packetKeys(0x2ED80296,0x0D837373,0x20266F9A);
#endif
-// 2016-12-07cRagexeRE, 2016-12-07dRagexeRE, 2016-12-07eRagexeRE
+// 2016-12-07cRagexe, 2016-12-07cRagexeRE, 2016-12-07dRagexeRE, 2016-12-07eRagexe, 2016-12-07eRagexeRE
#if PACKETVER == 20161207
packetKeys(0x52D267AA,0x4FE42156,0x1292153E);
#endif
-// 2016-12-14bRagexeRE, 2016-12-14cRagexe, 2016-12-14cRagexeRE
+// 2016-12-14bRagexe, 2016-12-14bRagexeRE, 2016-12-14cRagexe, 2016-12-14cRagexeRE
#if PACKETVER == 20161214
packetKeys(0x4DDE217B,0x07863AE0,0x5B591656);
#endif
-// 2016-12-21aRagexeRE, 2016-12-21bRagexeRE, 2016-12-21cRagexeRE, 2016-12-21dRagexeRE
+// 2016-12-21aRagexe, 2016-12-21aRagexeRE, 2016-12-21bRagexe, 2016-12-21bRagexeRE, 2016-12-21cRagexeRE, 2016-12-21dRagexeRE
#if PACKETVER == 20161221
packetKeys(0x69CB4F56,0x793C165E,0x673A2354);
#endif
@@ -1602,12 +1684,12 @@
packetKeys(0x09366971,0x005672F1,0x6F3712AE);
#endif
-// 2017-01-04bRagexeRE
+// 2017-01-04aRagexe, 2017-01-04bRagexeRE
#if PACKETVER == 20170104
packetKeys(0x44416BC3,0x6C8D1817,0x072D75D5);
#endif
-// 2017-01-11aRagexeRE
+// 2017-01-11aRagexe, 2017-01-11aRagexeRE
#if PACKETVER == 20170111
packetKeys(0x19B637F9,0x0E9C378A,0x41673186);
#endif
@@ -1627,12 +1709,12 @@
packetKeys(0x2011228E,0x00453005,0x628E7F0A);
#endif
-// 2017-02-08aRagexeRE, 2017-02-08bRagexeRE
+// 2017-02-08aRagexeRE, 2017-02-08bRagexe, 2017-02-08bRagexeRE
#if PACKETVER == 20170208
packetKeys(0x6A764E5F,0x0609570D,0x28AE07FA);
#endif
-// 2017-02-15aRagexeRE
+// 2017-02-15aRagexe, 2017-02-15aRagexeRE
#if PACKETVER == 20170215
packetKeys(0x50C01315,0x51012A42,0x679E16C3);
#endif
@@ -1647,7 +1729,7 @@
packetKeys(0x771D4F2B,0x20EF1F4C,0x0D5135C8);
#endif
-// 2017-03-08bRagexeRE
+// 2017-03-08aRagexe, 2017-03-08bRagexeRE
#if PACKETVER == 20170308
packetKeys(0x653470A9,0x6B316A71,0x5C712C71);
#endif
@@ -1657,12 +1739,12 @@
packetKeys(0x399A0856,0x56642A94,0x7F77157D);
#endif
-// 2017-03-22aRagexeRE, 2017-03-22bRagexeRE
+// 2017-03-22aRagexe, 2017-03-22aRagexeRE, 2017-03-22bRagexe, 2017-03-22bRagexeRE
#if PACKETVER == 20170322
packetKeys(0x2050167B,0x01731233,0x40337033);
#endif
-// 2017-03-29cRagexe, 2017-03-29cRagexeRE, 2017-03-29dRagexeRE
+// 2017-03-29bRagexe, 2017-03-29cRagexe, 2017-03-29cRagexeRE, 2017-03-29dRagexeRE
#if PACKETVER == 20170329
packetKeys(0x18B31A80,0x1B0B1D56,0x16857D6A);
#endif
@@ -1677,167 +1759,167 @@
packetKeys(0x39223393,0x5C847779,0x10217985);
#endif
-// 2017-04-19bRagexeRE
+// 2017-04-19aRagexe, 2017-04-19bRagexeRE
#if PACKETVER == 20170419
packetKeys(0x1F8F4B3F,0x2E481F03,0x39ED4178);
#endif
-// 2017-04-26dRagexeRE
+// 2017-04-26bRagexe, 2017-04-26dRagexeRE
#if PACKETVER == 20170426
packetKeys(0x167642A7,0x1DEC3D26,0x6D046D4C);
#endif
-// 2017-05-02dRagexeRE
+// 2017-05-02aRagexe, 2017-05-02bRagexe, 2017-05-02dRagexeRE
#if PACKETVER == 20170502
packetKeys(0x05224194,0x466D4204,0x31F02EE0);
#endif
-// 2017-05-17aRagexeRE, 2017-05-17bRagexeRE
+// 2017-05-17aRagexe, 2017-05-17aRagexeRE, 2017-05-17bRagexeRE
#if PACKETVER == 20170517
packetKeys(0x2CC4749A,0x1FA954DC,0x72276857);
#endif
-// 2017-05-24aRagexeRE
+// 2017-05-24aRagexe, 2017-05-24aRagexeRE, 2017-05-24bRagexe
#if PACKETVER == 20170524
packetKeys(0x0B4E03A6,0x2B93427C,0x583D4477);
#endif
-// 2017-05-31aRagexeRE
+// 2017-05-31aRagexe, 2017-05-31aRagexeRE
#if PACKETVER == 20170531
packetKeys(0x03FA5A97,0x20B802D5,0x339F1977);
#endif
-// 2017-06-07bRagexeRE, 2017-06-07cRagexeRE
+// 2017-06-07bRagexeRE, 2017-06-07cRagexe, 2017-06-07cRagexeRE
#if PACKETVER == 20170607
packetKeys(0x50564ACD,0x79CA4E15,0x405F4894);
#endif
-// 2017-06-14bRagexeRE
+// 2017-06-14bRagexe, 2017-06-14bRagexeRE
#if PACKETVER == 20170614
packetKeys(0x5ED10A48,0x667F4301,0x2E5D761F);
#endif
-// 2017-06-21aRagexeRE
+// 2017-06-21aRagexeRE, 2017-06-21bRagexe
#if PACKETVER == 20170621
packetKeys(0x155F34EC,0x2D943FA9,0x3D9170EB);
#endif
-// 2017-06-28bRagexeRE
+// 2017-06-28bRagexe, 2017-06-28bRagexeRE
#if PACKETVER == 20170628
packetKeys(0x04691C86,0x43C210E2,0x2FE277E2);
#endif
-// 2017-07-05aRagexeRE
+// 2017-07-05aRagexe, 2017-07-05aRagexeRE
#if PACKETVER == 20170705
packetKeys(0x7EB000AE,0x02FB1DBC,0x5CB131E6);
#endif
-// 2017-07-12bRagexeRE
+// 2017-07-12bRagexe, 2017-07-12bRagexeRE
#if PACKETVER == 20170712
packetKeys(0x2C3C202C,0x3F2C2F2C,0x2F2C2F2C);
#endif
-// 2017-07-19aRagexeRE
+// 2017-07-19aRagexe, 2017-07-19aRagexeRE
#if PACKETVER == 20170719
packetKeys(0x46465C88,0x10116F66,0x200866F9);
#endif
-// 2017-07-26cRagexeRE
+// 2017-07-26aRagexe, 2017-07-26cRagexeRE
#if PACKETVER == 20170726
packetKeys(0x102F23DB,0x7E767751,0x3BC172EF);
#endif
-// 2017-08-01aRagexeRE
+// 2017-08-01aRagexe, 2017-08-01aRagexeRE, 2017-08-01bRagexe
#if PACKETVER == 20170801
packetKeys(0x26B52A7F,0x5377619D,0x4F580AC4);
#endif
-// 2017-08-09cRagexeRE
+// 2017-08-09cRagexe, 2017-08-09cRagexeRE
#if PACKETVER == 20170809
packetKeys(0x452156CB,0x71442624,0x2EE66D1C);
#endif
-// 2017-08-16cRagexeRE, 2017-08-16dRagexeRE
+// 2017-08-16cRagexe, 2017-08-16cRagexeRE, 2017-08-16dRagexe, 2017-08-16dRagexeRE
#if PACKETVER == 20170816
packetKeys(0x78914673,0x3F8B7634,0x55B814BC);
#endif
-// 2017-08-23aRagexeRE
+// 2017-08-23aRagexe, 2017-08-23aRagexeRE
#if PACKETVER == 20170823
packetKeys(0x22677205,0x393D1002,0x58DC6BB4);
#endif
-// 2017-08-30aRagexeRE, 2017-08-30bRagexeRE
+// 2017-08-30aRagexe, 2017-08-30aRagexeRE, 2017-08-30bRagexe, 2017-08-30bRagexeRE
#if PACKETVER == 20170830
packetKeys(0x1D49592B,0x00970C17,0x1E640103);
#endif
-// 2017-09-06cRagexeRE
+// 2017-09-06cRagexe, 2017-09-06cRagexeRE
#if PACKETVER == 20170906
packetKeys(0x7DEF7677,0x351F36E6,0x52303485);
#endif
-// 2017-09-13bRagexeRE
+// 2017-09-13bRagexeRE, 2017-09-13cRagexe
#if PACKETVER == 20170913
packetKeys(0x7A645935,0x1DA05062,0x5A7A4C43);
#endif
-// 2017-09-20bRagexeRE
+// 2017-09-20aRagexe, 2017-09-20bRagexeRE
#if PACKETVER == 20170920
packetKeys(0x53024DA5,0x04EC212D,0x0BF87CD4);
#endif
-// 2017-09-27bRagexeRE, 2017-09-27dRagexeRE
+// 2017-09-27bRagexe, 2017-09-27bRagexeRE, 2017-09-27cRagexe, 2017-09-27dRagexe, 2017-09-27dRagexeRE
#if PACKETVER == 20170927
packetKeys(0x15624100,0x0CE1463E,0x0E5D6534);
#endif
-// 2017-10-02cRagexeRE
+// 2017-10-02cRagexe, 2017-10-02cRagexeRE
#if PACKETVER == 20171002
packetKeys(0x15E1716C,0x4E765B63,0x357D2370);
#endif
-// 2017-10-11aRagexeRE, 2017-10-11bRagexeRE
+// 2017-10-11aRagexe, 2017-10-11aRagexeRE, 2017-10-11bRagexe, 2017-10-11bRagexeRE
#if PACKETVER == 20171011
packetKeys(0x4F121B3E,0x12670E17,0x19896C11);
#endif
-// 2017-10-18aRagexeRE
+// 2017-10-18aRagexe, 2017-10-18aRagexeRE
#if PACKETVER == 20171018
packetKeys(0x2CAA109C,0x158C1EC2,0x7A5E58F3);
#endif
-// 2017-10-25bRagexeRE, 2017-10-25cRagexeRE, 2017-10-25dRagexeRE, 2017-10-25eRagexeRE
+// 2017-10-25bRagexe, 2017-10-25bRagexeRE, 2017-10-25cRagexe, 2017-10-25cRagexeRE, 2017-10-25dRagexe, 2017-10-25dRagexeRE, 2017-10-25eRagexe, 2017-10-25eRagexeRE
#if PACKETVER == 20171025
packetKeys(0x165C565C,0x565C565C,0x565C565C);
#endif
-// 2017-11-01bRagexeRE
+// 2017-11-01aRagexe, 2017-11-01bRagexeRE
#if PACKETVER == 20171101
packetKeys(0x7056317F,0x7EEE0589,0x02672373);
#endif
-// 2017-11-08bRagexeRE
+// 2017-11-08aRagexe, 2017-11-08bRagexeRE
#if PACKETVER == 20171108
packetKeys(0x03695685,0x7FAC12CE,0x182F7A7B);
#endif
-// 2017-11-15aRagexeRE
+// 2017-11-15aRagexe, 2017-11-15aRagexeRE
#if PACKETVER == 20171115
packetKeys(0x23B97A3B,0x34610993,0x2892070E);
#endif
-// 2017-11-22bRagexeRE
+// 2017-11-22aRagexe, 2017-11-22bRagexeRE
#if PACKETVER == 20171122
packetKeys(0x03221B0E,0x73AB7A5F,0x0DD80FD4);
#endif
-// 2017-11-29aRagexeRE
+// 2017-11-29aRagexe, 2017-11-29aRagexeRE
#if PACKETVER == 20171129
packetKeys(0x581B77A7,0x62F74D7A,0x4F102173);
#endif
-// 2017-12-06aRagexeRE, 2017-12-06cRagexe
+// 2017-12-06aRagexeRE, 2017-12-06bRagexe, 2017-12-06cRagexe
#if PACKETVER == 20171206
packetKeys(0x39D54BD3,0x577A0C21,0x4C1C316E);
#endif
@@ -1847,57 +1929,52 @@
packetKeys(0x44E41107,0x3B126921,0x00E06AAC);
#endif
-// keys for zero clients
-#ifdef PACKETVER_ZERO
-// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero
-#if PACKETVER == 20171018 || PACKETVER == 20171019 || PACKETVER == 20171023 || PACKETVER == 20171024 || PACKETVER == 20171025 || PACKETVER == 20171027 || PACKETVER == 20171030 || PACKETVER == 20171031 || PACKETVER == 20171109 || PACKETVER == 20171113
- packetKeys(0x00000000,0x00000000,0x00000000);
+// 2017-12-20aRagexe, 2017-12-20aRagexeRE
+#if PACKETVER == 20171220
+ packetKeys(0x6EFE009A,0x440B7BFA,0x052339C8);
#endif
-// 2017-11-15aRagexe_zero, 2017-11-15bRagexe_zero, 2017-11-16aRagexe_zero, 2017-11-17aRagexe_zero
-#if PACKETVER == 20171115 || PACKETVER == 20171116 || PACKETVER == 20171117
- packetKeys(0x3B93061D,0x3CB50DCD,0x410A197E);
+// 2017-12-27aRagexe, 2017-12-27aRagexeRE
+#if PACKETVER == 20171227
+ packetKeys(0x257A2F6E,0x51140EEE,0x00FA4452);
#endif
-// 2017-11-21aRagexe_zero, 2017-11-22aRagexe_zero
-#if PACKETVER == 20171121 || PACKETVER == 20171122
- packetKeys(0x195B4DA8,0x6E3A473B,0x126F4B61);
+// 2018-01-03aRagexe, 2018-01-03aRagexeRE, 2018-01-03bRagexe, 2018-01-03bRagexeRE
+#if PACKETVER == 20180103
+ packetKeys(0x348F4BD7,0x7A425A54,0x628F589A);
#endif
-// 2017-11-23dRagexe_zero
-#if PACKETVER == 20171123
- packetKeys(0x6087733A,0x5C5C4AEE,0x0F10408F);
+// 2018-01-17aRagexe, 2018-01-17aRagexeRE
+#if PACKETVER == 20180117
+ packetKeys(0x21F477F4,0x37F437F4,0x37F437F4);
#endif
-// 2017-11-27aRagexe_zero, 2017-11-27cRagexe_zero, 2017-11-28aRagexe_zero
-#if PACKETVER == 20171127 || PACKETVER == 20171128
- packetKeys(0x141C135C,0x675C275C,0x275C275C);
+// 2018-01-24bRagexe, 2018-01-24bRagexeRE, 2018-01-31Ragexe
+#if PACKETVER == 20180124 || \
+ PACKETVER == 20180131
+ packetKeys(0x7EAA1CE0,0x415D1CFD,0x4C8F19FA);
#endif
-// 2017-11-30bRagexe_zero
-#if PACKETVER == 20171130
- packetKeys(0x31A04B32,0x3AC96B76,0x1742085D);
+// 2018-02-07bRagexe, 2018-02-07bRagexeRE, 2018-02-07cRagexe
+#if PACKETVER == 20180207
+ packetKeys(0x45AA1B44,0x20E716B7,0x5388105C);
#endif
-// 2017-12-04bRagexe_zero
-#if PACKETVER == 20171204
- packetKeys(0x06A109F1,0x6A953256,0x0A6040A3);
+// 2018-02-13aRagexe, 2018-02-13aRagexeRE, 2018-02-13bRagexe
+#if PACKETVER == 20180213
+ packetKeys(0x189D69B2,0x43B85EAD,0x2B7A687E);
#endif
-// 2017-12-06aRagexe_zero, 2017-12-06bRagexe_zero, 2017-12-06cRagexe_zero, 2017-12-06dRagexe_zero, 2017-12-08aRagexe_zero, 2017-12-08cRagexe_zero, 2017-12-08dRagexe_zero, 2017-12-09bRagexe_zero, 2017-12-09cRagexe_zero, 2017-12-10aRagexe_zero, 2017-12-11bRagexe_zero, 2017-12-12aRagexe_zero, 2017-12-13aRagexe_zero, 2017-12-13bRagexe_zero, 2017-12-13cRagexe_zero
-#if PACKETVER == 20171206 || PACKETVER == 20171208 || PACKETVER == 20171209 || PACKETVER == 20171210 || PACKETVER == 20171211 || PACKETVER == 20171212 || PACKETVER == 20171213
- packetKeys(0x718D0388,0x56A11525,0x20042F67);
+// 2018-02-21aRagexeRE, 2018-02-21bRagexe, 2018-02-21bRagexeRE
+#if PACKETVER == 20180221
+ packetKeys(0x6E2F6233,0x193B0A66,0x0D1D2CA5);
#endif
-// 2017-12-14cRagexe_zero
-#if PACKETVER == 20171214
- packetKeys(0x6CE1021D,0x77703B04,0x4E722232);
+// 2018-03-07bRagexe, 2018-03-07bRagexeRE, 2018-03-09aRagexe
+#if PACKETVER == 20180307 || \
+ PACKETVER == 20180309
+ packetKeys(0x47DA10EB,0x4B922CCF,0x765C5055);
#endif
-#endif // PACKETVER_ZERO
-
-#if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3)
- packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3);
-#endif
-#endif /* MAP_PACKETS_KEYS_H */
+#endif /* MAP_PACKETS_MAIN_KEYS_H */
diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h
new file mode 100644
index 000000000..75196e6b4
--- /dev/null
+++ b/src/map/packets_keys_zero.h
@@ -0,0 +1,145 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2013-2018 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef MAP_PACKETS_ZERO_KEYS_H
+#define MAP_PACKETS_ZERO_KEYS_H
+
+#ifndef packetKeys
+ #define packetKeys(a,b,c)
+#endif
+
+/* PacketKeys: http://herc.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */
+
+/* This file is autogenerated, please do not commit manual changes */
+
+// 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero
+#if PACKETVER == 20171019 || \
+ PACKETVER == 20171023 || \
+ PACKETVER == 20171024 || \
+ PACKETVER == 20171025 || \
+ PACKETVER == 20171027 || \
+ PACKETVER == 20171030 || \
+ PACKETVER == 20171031 || \
+ PACKETVER == 20171109 || \
+ PACKETVER == 20171113
+ packetKeys(0x00000000,0x00000000,0x00000000);
+#endif
+
+// 2017-11-15aRagexe_zero, 2017-11-15bRagexe_zero, 2017-11-16aRagexe_zero, 2017-11-17aRagexe_zero
+#if PACKETVER == 20171115 || \
+ PACKETVER == 20171116 || \
+ PACKETVER == 20171117
+ packetKeys(0x3B93061D,0x3CB50DCD,0x410A197E);
+#endif
+
+// 2017-11-21aRagexe_zero, 2017-11-22aRagexe_zero
+#if PACKETVER == 20171121 || \
+ PACKETVER == 20171122
+ packetKeys(0x195B4DA8,0x6E3A473B,0x126F4B61);
+#endif
+
+// 2017-11-23dRagexe_zero
+#if PACKETVER == 20171123
+ packetKeys(0x6087733A,0x5C5C4AEE,0x0F10408F);
+#endif
+
+// 2017-11-27aRagexe_zero, 2017-11-27cRagexe_zero, 2017-11-28aRagexe_zero
+#if PACKETVER == 20171127 || \
+ PACKETVER == 20171128
+ packetKeys(0x141C135C,0x675C275C,0x275C275C);
+#endif
+
+// 2017-11-30bRagexe_zero
+#if PACKETVER == 20171130
+ packetKeys(0x31A04B32,0x3AC96B76,0x1742085D);
+#endif
+
+// 2017-12-04bRagexe_zero
+#if PACKETVER == 20171204
+ packetKeys(0x06A109F1,0x6A953256,0x0A6040A3);
+#endif
+
+// 2017-12-06aRagexe_zero, 2017-12-06bRagexe_zero, 2017-12-06cRagexe_zero, 2017-12-06dRagexe_zero, 2017-12-08aRagexe_zero, 2017-12-08cRagexe_zero, 2017-12-08dRagexe_zero, 2017-12-09bRagexe_zero, 2017-12-09cRagexe_zero, 2017-12-10aRagexe_zero, 2017-12-11bRagexe_zero, 2017-12-12aRagexe_zero, 2017-12-13aRagexe_zero, 2017-12-13bRagexe_zero, 2017-12-13cRagexe_zero
+#if PACKETVER == 20171206 || \
+ PACKETVER == 20171208 || \
+ PACKETVER == 20171209 || \
+ PACKETVER == 20171210 || \
+ PACKETVER == 20171211 || \
+ PACKETVER == 20171212 || \
+ PACKETVER == 20171213
+ packetKeys(0x718D0388,0x56A11525,0x20042F67);
+#endif
+
+// 2017-12-14cRagexe_zero
+#if PACKETVER == 20171214
+ packetKeys(0x6CE1021D,0x77703B04,0x4E722232);
+#endif
+
+// 2017-12-20aRagexe_zero, 2017-12-21aRagexe_zero, 2017-12-21bRagexe_zero
+#if PACKETVER == 20171220 || \
+ PACKETVER == 20171221
+ packetKeys(0x1E2047D2,0x7EE31AC2,0x31434F61);
+#endif
+
+// 2017-12-27bRagexe_zero, 2017-12-29aRagexe_zero
+#if PACKETVER == 20171227 || \
+ PACKETVER == 20171229
+ packetKeys(0x7CBF0846,0x02F92654,0x22AA5E2D);
+#endif
+
+// 2018-01-03aRagexe_zero
+#if PACKETVER == 20180103
+ packetKeys(0x2A3D4E64,0x7008690C,0x69FF066F);
+#endif
+
+// 2018-01-17aRagexe_zero
+#if PACKETVER == 20180117
+ packetKeys(0x230959EB,0x1CCB0182,0x1FFA2B30);
+#endif
+
+// 2018-01-31dRagexe_zero
+#if PACKETVER == 20180131
+ packetKeys(0x1F422E02,0x12025202,0x52025202);
+#endif
+
+// 2018-02-07bRagexe_zero
+#if PACKETVER == 20180207
+ packetKeys(0x07CB29CB,0x69CB69CB,0x69CB69CB);
+#endif
+
+// 2018-02-13aRagexe_zero
+#if PACKETVER == 20180213
+ packetKeys(0x0513075E,0x347075AF,0x67C56C6F);
+#endif
+
+// 2018-02-21aRagexe_zero
+#if PACKETVER == 20180221
+ packetKeys(0x28ED7635,0x76591F21,0x59383498);
+#endif
+
+// 2018-02-28bRagexe_zero, 2018-03-07aRagexe_zero, 2018-03-09aRagexe_zero
+#if PACKETVER == 20180228 || \
+ PACKETVER == 20180307 || \
+ PACKETVER == 20180309
+ packetKeys(0x56C82ABE,0x61AE2B2E,0x472E272E);
+#endif
+
+
+#endif /* MAP_PACKETS_ZERO_KEYS_H */
diff --git a/src/map/packets_shuffle.h b/src/map/packets_shuffle_main.h
index 36745ffd6..aabf9c3f3 100644
--- a/src/map/packets_shuffle.h
+++ b/src/map/packets_shuffle_main.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,8 +20,8 @@
//Included directly by clif.c in packet_loaddb()
-#ifndef MAP_PACKETS_SHUFFLE_H
-#define MAP_PACKETS_SHUFFLE_H
+#ifndef MAP_PACKETS_SHUFFLE_MAIN_H
+#define MAP_PACKETS_SHUFFLE_MAIN_H
#ifndef packet
#define packet(a,b,...)
@@ -33,11 +33,2559 @@
* - Example: packet(0x0072,19,clif->pWantToConnection,2,6,10,14,18);
*/
-// 2014 Packet Data
+/* This file is autogenerated, please do not commit manual changes */
-// 2014-01-08cRagexe
+
+// 2012-07-10aRagexe, 2012-07-10aRagexeRE, 2012-07-12aRagexe, 2012-07-12aRagexeRE
+#if PACKETVER == 20120710 || \
+ PACKETVER == 20120712
+ packet(0x0202,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x02c4,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0362,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0365,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0367,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0436,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x07e4,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0811,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x085b,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0877,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0878,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x087f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x088d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0893,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0897,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0899,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08a3,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08a6,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08a8,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08aa,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x092d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0936,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0948,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x094b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x094e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0953,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0956,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0958,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0960,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+#endif
+
+// 2012-07-16aRagexe, 2012-07-16aRagexeRE
+#if PACKETVER == 20120716
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x089f,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-07-24aRagexe, 2012-07-24aRagexeRE
+#if PACKETVER == 20120724
+ packet(0x035f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0815,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0835,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0865,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0866,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0872,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0877,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x087c,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0887,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0888,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x088e,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x08a1,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x08a9,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08ab,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x091c,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x091f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0928,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0929,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x092b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0935,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0938,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x093c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0945,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0957,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0959,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0963,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0965,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0966,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+#endif
+
+// 2012-08-01aRagexe, 2012-08-01aRagexeRE, 2012-08-01bRagexe, 2012-08-01bRagexeRE
+#if PACKETVER == 20120801
+ packet(0x0360,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0438,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x085d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x086a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x086b,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x086f,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0873,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0875,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x087b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x088b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0890,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0895,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x089c,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x089d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x089f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x08a2,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08aa,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08ab,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0917,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x091d,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x092a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x092e,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0930,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0934,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x093c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0941,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0946,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x094e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0964,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+#endif
+
+// 2012-08-08aRagexe, 2012-08-08aRagexeRE, 2012-08-08bRagexe, 2012-08-08bRagexeRE, 2012-08-08cRagexe, 2012-08-08cRagexeRE, 2012-08-08dRagexeRE
+#if PACKETVER == 20120808
+ packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085f,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x088f,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x093d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0940,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-08-14aRagexe, 2012-08-14aRagexeRE, 2012-08-14bRagexe, 2012-08-14bRagexeRE
+#if PACKETVER == 20120814
+ packet(0x0281,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0361,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0365,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0366,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0438,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x07ec,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0815,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0838,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x085e,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0861,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0862,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0865,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0868,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x086f,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0875,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x087f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0882,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x088b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x088d,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0895,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08a8,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x091f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0920,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0929,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0932,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0934,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0941,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0967,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0969,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+#endif
+
+// 2012-08-22aRagexe, 2012-08-22aRagexeRE, 2012-08-22bRagexe, 2012-08-22bRagexeRE, 2012-08-22cRagexe, 2012-08-22cRagexeRE
+#if PACKETVER == 20120822
+ packet(0x0365,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0437,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x085a,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x085c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x085d,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x086b,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x086e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0872,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x087c,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x087d,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0885,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x088a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0899,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x089f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a5,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08ab,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0917,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0924,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0927,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0935,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0937,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0940,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0943,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x094d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x094e,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0953,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0955,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0958,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x095b,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+#endif
+
+// 2012-08-30aRagexe, 2012-08-30aRagexeRE, 2012-08-30bRagexeRE
+#if PACKETVER == 20120830
+ packet(0x022d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0364,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0802,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0838,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0861,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0872,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0887,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0888,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0890,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x091d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0926,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0934,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0945,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x094b,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0964,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-09-05aRagexe, 2012-09-05aRagexeRE
+#if PACKETVER == 20120905
+ packet(0x022d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0365,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0817,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x085a,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x085d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x086f,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0876,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0877,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0878,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x087a,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087b,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x087e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0887,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0895,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0897,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08a0,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x08a6,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0917,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0918,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x091a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0927,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x093c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0944,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0945,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0950,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0954,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0959,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0960,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0967,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+#endif
+
+// 2012-09-11aRagexe, 2012-09-11aRagexeRE
+#if PACKETVER == 20120911
+ packet(0x0438,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0819,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0868,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x086f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0876,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0877,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0879,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x087a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x088a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x088f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a4,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x08a5,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08a6,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a7,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08ad,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0930,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0935,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x093e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0948,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0949,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x094b,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0952,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0958,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0959,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0962,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0963,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0966,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0968,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x096a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+#endif
+
+// 2012-09-19aRagexe, 2012-09-19aRagexeRE
+#if PACKETVER == 20120919
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0956,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-09-25aRagexe, 2012-09-25aRagexeRE, 2012-09-26aRagexe, 2012-09-26aRagexeRE
+#if PACKETVER == 20120925 || \
+ PACKETVER == 20120926
+ packet(0x07e4,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0815,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0819,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0835,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0838,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x085d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0869,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0873,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x087a,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x087e,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0887,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x088a,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x088d,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x088f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x089d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08a4,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x091c,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x091e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0923,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0927,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0932,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0942,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0948,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0950,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0956,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0957,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0958,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x095e,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0963,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+#endif
+
+// 2012-10-10aRagexe, 2012-10-10aRagexeRE, 2012-10-10bRagexe, 2012-10-10bRagexeRE, 2012-10-11aRagexeRE
+#if PACKETVER == 20121010 || \
+ PACKETVER == 20121011
+ packet(0x0202,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0817,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x085a,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0869,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x086c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0874,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x087d,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0883,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0888,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x088f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0891,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0896,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0898,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08a1,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x08a6,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x08a9,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0925,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0934,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x093c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0942,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0946,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0947,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x094c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0957,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0958,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0959,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x095c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0964,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0969,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+#endif
+
+// 2012-10-17aRagexe, 2012-10-17aRagexeRE, 2012-10-17bRagexe, 2012-10-17bRagexeRE
+#if PACKETVER == 20121017
+ packet(0x023b,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0365,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0868,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x086b,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0887,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0888,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0897,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x089a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a6,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0918,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0920,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0960,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0962,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0965,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-10-24aRagexe, 2012-10-24aRagexeRE
+#if PACKETVER == 20121024
+ packet(0x0436,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0437,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0438,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0817,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0838,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x085a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0868,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0872,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0875,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x087a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x087b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x087e,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0882,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0888,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0889,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x088a,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x089c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x08a9,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08aa,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0931,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0938,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x093a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0942,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0947,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0954,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0955,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x095d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x095e,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0965,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+#endif
+
+// 2012-10-31aRagexe, 2012-10-31aRagexeRE
+#if PACKETVER == 20121031
+ packet(0x022d,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0871,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0877,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0898,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x092b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-11-07aRagexe, 2012-11-07aRagexeRE
+#if PACKETVER == 20121107
+ packet(0x0360,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0361,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0365,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x085c,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0861,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0865,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x086c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x086d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0871,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0873,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0878,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x087f,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x088f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0890,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0891,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0896,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x089a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x089b,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x08a2,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08ad,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0922,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0934,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x093b,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0945,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x094d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0960,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0963,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0966,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x096a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+#endif
+
+// 2012-11-14aRagexe, 2012-11-14aRagexeRE
+#if PACKETVER == 20121114
+ packet(0x0364,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0365,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0437,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0815,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0838,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0862,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0876,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0879,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0881,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0898,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0899,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x08a9,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x08aa,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08ab,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x091a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0930,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0935,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0938,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x093b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x093c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0941,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0944,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0949,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x094a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x094b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x094f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x095c,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0965,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x096a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+#endif
+
+// 2012-11-21aRagexe, 2012-11-21aRagexeRE
+#if PACKETVER == 20121121
+ packet(0x0202,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0362,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0437,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0863,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x086a,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x086c,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x086d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x086f,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0872,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0875,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x087e,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0880,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0892,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0899,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x089a,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x08a7,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x08aa,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x091a,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0921,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0927,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0929,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0938,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0946,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x094d,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0950,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0952,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0954,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0957,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0958,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+#endif
+
+// 2012-11-28aRagexe, 2012-11-28aRagexeRE
+#if PACKETVER == 20121128
+ packet(0x0362,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0363,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x07ec,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0802,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0861,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0867,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x086c,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x086e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0872,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0888,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x088b,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0894,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0895,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08a8,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08ad,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x091b,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x091c,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x091e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x091f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0921,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0922,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x092f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0931,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0945,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0947,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0950,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0953,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0954,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0960,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+#endif
+
+// 2012-12-05aRagexe, 2012-12-05aRagexeRE, 2012-12-05bRagexe, 2012-12-05bRagexeRE
+#if PACKETVER == 20121205
+ packet(0x035f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0360,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0815,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0863,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0864,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x086c,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0870,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0873,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0875,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0878,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0888,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0889,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x088b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x089a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x089d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x08ad,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x091a,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x091c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0921,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x093a,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x093e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x093f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0946,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x094b,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0954,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0959,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0966,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0968,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+#endif
+
+// 2012-12-12aRagexe, 2012-12-12aRagexeRE, 2012-12-12bRagexe, 2012-12-12bRagexeRE, 2012-12-12cRagexeRE
+#if PACKETVER == 20121212
+ packet(0x0362,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0368,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0369,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0436,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0438,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0817,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x085c,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0877,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x087d,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087f,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0893,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0895,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x08a3,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a7,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x08a9,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08aa,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x08ac,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0917,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091a,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0920,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0932,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0947,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0951,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0953,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0957,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x095b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0965,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0966,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-12-18aRagexe, 2012-12-18aRagexeRE, 2012-12-18bRagexe, 2012-12-18bRagexeRE
+#if PACKETVER == 20121218
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0363,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0867,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0872,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x087a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x087b,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0886,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0889,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0890,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x091a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0935,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0946,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0957,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2012-12-27aRagexe, 2012-12-27aRagexeRE
+#if PACKETVER == 20121227
+ packet(0x0202,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x02c4,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0361,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0368,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0437,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0860,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0870,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0872,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x087a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0886,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0888,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x088e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0890,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0894,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0896,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x08a6,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08aa,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0917,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x091f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0920,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0932,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0933,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0940,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0943,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0947,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0953,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0958,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x095d,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0962,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+#endif
+
+// 2013-01-03aRagexe, 2013-01-03aRagexeRE, 2013-01-07aRagexe
+#if PACKETVER == 20130103 || \
+ PACKETVER == 20130107
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0940,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-01-09aRagexe, 2013-01-09aRagexeRE
+#if PACKETVER == 20130109
+ packet(0x0281,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0365,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0368,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0437,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0838,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0866,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0886,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0888,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x088a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x088e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0891,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0892,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x08a2,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x08aa,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x08ac,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0918,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x091b,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0922,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0927,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0928,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0930,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0931,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0938,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x093e,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x094f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0950,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0951,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0955,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x095e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+#endif
+
+// 2013-01-15aRagexeRE, 2013-01-15bRagexe, 2013-01-16aRagexe, 2013-01-16aRagexeRE, 2013-01-16bRagexe
+#if PACKETVER == 20130115 || \
+ PACKETVER == 20130116
+ packet(0x0361,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x07ec,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0817,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x085e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0861,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0863,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x086b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0870,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0871,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0877,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0879,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x087c,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0888,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x088b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0894,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0895,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x08a0,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x08a4,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08ac,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0918,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0928,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x092d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x092e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0939,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0946,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x094b,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x094c,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x094e,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x095a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+#endif
+
+// 2013-01-21aRagexe, 2013-01-21aRagexeRE
+#if PACKETVER == 20130121
+ packet(0x023b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x035f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07ec,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0802,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0815,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0817,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x085d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x086c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0874,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0884,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0893,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x091f,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0940,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x094f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0956,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x095b,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0963,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0969,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-01-30aRagexe, 2013-01-30aRagexeRE
+#if PACKETVER == 20130130
+ packet(0x035f,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0362,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0367,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0368,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0437,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x085f,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0862,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x086b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x087d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x087f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0885,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0886,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0887,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0889,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x089a,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x089f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08a0,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08a4,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x08a9,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x091a,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0920,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0924,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x093a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x093d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0956,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0957,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x095b,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x095c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x095d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+#endif
+
+// 2013-02-06aRagexe, 2013-02-06aRagexeRE
+#if PACKETVER == 20130206
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0811,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0876,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0883,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0885,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0899,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08a0,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08ac,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0920,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0925,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x093a,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x093c,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0950,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-02-15aRagexe, 2013-02-15aRagexeRE, 2013-02-15bRagexe
+#if PACKETVER == 20130215
+ packet(0x023b,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0366,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0802,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0869,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x086f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0886,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x089e,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x089f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x08ad,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0923,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0941,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0956,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x095d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0962,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-02-20aRagexe, 2013-02-20bRagexeRE
+#if PACKETVER == 20130220
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x094b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-02-27aRagexe, 2013-02-27aRagexeRE
+#if PACKETVER == 20130227
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x035f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0360,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0811,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0815,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0817,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x085a,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0863,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0867,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0869,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x086e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x087b,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0893,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0898,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08a0,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08a1,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x091b,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x091f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0924,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x092b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x092f,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0936,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0946,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0951,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x095b,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x095e,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x095f,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0967,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+#endif
+
+// 2013-03-06aRagexe, 2013-03-06aRagexeRE, 2013-03-06bRagexeRE
+#if PACKETVER == 20130306
+ packet(0x022d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0367,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0368,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0802,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0817,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x085b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x085c,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0860,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x086d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0881,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0890,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0898,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x089f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x08a4,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08ac,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0917,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091e,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0926,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0934,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0936,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0943,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0944,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0945,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0946,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x094a,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x094e,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0951,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0960,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0962,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+#endif
+
+// 2013-03-13aRagexe, 2013-03-13aRagexeRE, 2013-03-13bRagexeRE, 2013-03-13cRagexeRE
+#if PACKETVER == 20130313
+ packet(0x0202,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0887,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0920,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x092d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0947,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-03-20bRagexeRE, 2013-03-20cRagexeRE, 2013-03-20dRagexe, 2013-03-20eRagexe
+#if PACKETVER == 20130320
+ packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0363,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0365,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0438,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x085a,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x085d,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0868,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x086d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x086f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0874,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0881,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0886,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0888,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x088e,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0890,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0897,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0898,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x089b,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x08ac,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0922,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x092e,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0933,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0938,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x093f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0947,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x094c,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x094e,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0959,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x095a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+#endif
+
+// 2013-03-27bRagexe, 2013-03-27bRagexeRE
+#if PACKETVER == 20130327
+ packet(0x02c4,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0835,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x086d,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0873,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0878,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x087a,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0885,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x088f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0891,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0893,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0899,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08a1,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x08a2,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x091f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x092b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x092d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x092e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x092f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0933,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0938,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0939,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x094a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x094b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x094f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0955,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0960,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0961,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0967,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+#endif
+
+// 2013-04-03aRagexe, 2013-04-03aRagexeRE
+#if PACKETVER == 20130403
+ packet(0x023b,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0884,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a5,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0926,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0942,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0950,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-04-10aRagexe, 2013-04-10aRagexeRE
+#if PACKETVER == 20130410
+ packet(0x0367,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0437,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0860,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0865,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x086c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0879,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x087c,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x087d,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0881,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x088c,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x088d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0890,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0891,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x089c,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x089e,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x08a0,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x08a4,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x08a7,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0917,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x091d,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0933,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0939,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x093d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0944,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0945,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0955,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0960,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0967,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x096a,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+#endif
+
+// 2013-04-17aRagexe, 2013-04-17aRagexeRE
+#if PACKETVER == 20130417
+ packet(0x0202,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x086b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0875,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0929,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0962,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0969,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x096a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+#endif
+
+// 2013-04-24aRagexe, 2013-04-24aRagexeRE
+#if PACKETVER == 20130424
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0969,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-05-02aRagexe, 2013-05-02aRagexeRE, 2013-05-02bRagexe
+#if PACKETVER == 20130502
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x07ec,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0867,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0870,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0874,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0875,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0877,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x087c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0888,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0889,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a1,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x08a3,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0961,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0967,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+#endif
+
+// 2013-05-08bRagexe, 2013-05-08bRagexeRE, 2013-05-08cRagexe, 2013-05-08dRagexe, 2013-05-08eRagexe, 2013-05-08fRagexe
+#if PACKETVER == 20130508
+ packet(0x022d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0868,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0878,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x088b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0893,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0895,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0897,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08ab,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x092d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0944,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x094d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0957,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x095c,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-05-15aRagexe, 2013-05-15aRagexeRE
+#if PACKETVER == 20130515
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0862,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0887,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a1,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08aa,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08ac,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x092d,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0931,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x093e,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0943,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0944,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0947,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0962,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0963,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-05-22aRagexe, 2013-05-22aRagexeRE
+#if PACKETVER == 20130522
+ packet(0x0360,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0362,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0368,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0369,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x07ec,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0811,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x086a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x086e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0874,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x087e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x088e,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x089b,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x089c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08a2,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x08a3,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a6,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x08a9,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08aa,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x08ac,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0925,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0926,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x093e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0950,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0952,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x095b,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x095c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x095e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0964,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0965,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+#endif
+
+// 2013-05-29aRagexe, 2013-05-29aRagexeRE
+#if PACKETVER == 20130529
+ packet(0x023b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0438,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085a,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x085e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0863,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0869,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0874,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0876,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0877,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0888,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x088e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0890,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0892,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0895,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0897,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x08a7,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08a8,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0917,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0918,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0919,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0936,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0937,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0938,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0941,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0951,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0956,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0957,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0958,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0964,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+#endif
+
+// 2013-06-05aRagexe, 2013-06-05bRagexe, 2013-06-05cRagexeRE
+#if PACKETVER == 20130605
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0883,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-06-12aRagexe, 2013-06-12bRagexe, 2013-06-12bRagexeRE, 2013-06-12cRagexe, 2013-06-12dRagexe, 2013-06-12eRagexe
+#if PACKETVER == 20130612
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0919,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x093a,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0940,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0964,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-06-18#1aRagexe, 2013-06-18#1aRagexeRE, 2013-06-18aRagexe, 2013-06-18aRagexeRE
+#if PACKETVER == 20130618
+ packet(0x0281,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x02c4,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0363,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x085a,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0862,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0864,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0878,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x087a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0885,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0887,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0889,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x088e,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0890,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0891,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x08a6,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08a7,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0917,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0930,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0932,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0936,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0942,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0944,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0945,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x094f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0951,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0953,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x095b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0962,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x096a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+#endif
+
+// 2013-06-26_3bRagexeRE, 2013-06-26_3cRagexe, 2013-06-26aRagexeRE, 2013-06-26bRagexe, 2013-06-26bRagexeRE, 2013-06-26cRagexe
+#if PACKETVER == 20130626
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0365,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0860,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x088b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x088c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x088f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0894,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0895,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x08a5,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08ab,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0921,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0930,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x094d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0952,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0960,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-07-03aRagexe, 2013-07-03bRagexeRE
+#if PACKETVER == 20130703
+ packet(0x0202,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0873,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0930,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x094a,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-07-10aRagexeRE, 2013-07-10bRagexe, 2013-07-10bRagexeRE, 2013-07-10cRagexeRE, 2013-07-10dRagexeRE, 2013-07-10eRagexeRE
+#if PACKETVER == 20130710
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0880,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-07-17cRagexe, 2013-07-17cRagexeRE, 2013-07-17dRagexeRE, 2013-07-17eRagexeRE
+#if PACKETVER == 20130717
+ packet(0x02c4,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0819,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x083c,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0862,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0863,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x086b,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x086c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0882,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x088a,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x088c,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0897,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0898,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x089b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a6,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a9,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08aa,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0917,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0918,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x091d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x091e,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x092f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x093b,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0952,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0956,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0958,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x095b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0960,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0967,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x096a,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+#endif
+
+// 2013-07-24eRagexe, 2013-07-24eRagexeRE, 2013-07-24fRagexeRE
+#if PACKETVER == 20130724
+ packet(0x023b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0437,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x085a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x085e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0860,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0867,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x086a,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0874,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0876,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0890,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0891,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0893,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x089c,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08ab,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0921,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0924,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0927,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x092b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x092e,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x094a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0953,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0954,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0956,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0958,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x095c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x095d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0965,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0966,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+#endif
+
+// 2013-07-31cRagexe, 2013-07-31cRagexeRE
+#if PACKETVER == 20130731
+ packet(0x022d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0366,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0819,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0863,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0865,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0878,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x087e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0884,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0889,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x088b,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0894,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0895,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0897,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0923,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0925,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x092b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x092d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0935,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0941,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x094c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0956,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0957,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0958,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x095b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x095d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x095f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0962,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+#endif
+
+// 2013-08-07aRagexe, 2013-08-07aRagexeRE
+#if PACKETVER == 20130807
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0887,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-08-14aRagexe, 2013-08-14aRagexeRE
+#if PACKETVER == 20130814
+ packet(0x0202,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0281,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0368,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0815,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0835,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0868,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0873,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0874,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0885,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0887,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0889,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x088a,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x088c,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0895,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0896,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a4,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0923,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0926,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0927,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0936,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0937,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x093a,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0941,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0947,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x094e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0958,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0959,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x095f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0962,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+#endif
+
+// 2013-08-21bRagexe, 2013-08-21dRagexeRE
+#if PACKETVER == 20130821
+ packet(0x0202,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0360,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0437,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0438,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x07ec,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0815,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0862,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0863,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x086e,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0879,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0881,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x088d,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x088f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0892,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x08a6,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08ad,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x091d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0923,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x092d,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x093e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0947,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0954,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x095e,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0962,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0964,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0967,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0969,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+#endif
+
+// 2013-08-28bRagexe, 2013-08-28bRagexeRE, 2013-08-28cRagexe, 2013-08-28cRagexeRE
+#if PACKETVER == 20130828
+ packet(0x023b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0361,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0364,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0817,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0873,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x087e,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0889,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0893,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x089e,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x089f,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08a3,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08ac,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0917,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0919,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x091e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0923,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0924,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0928,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0929,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0930,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0944,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0946,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x094a,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x094c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x094f,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x095d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0966,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x096a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+#endif
+
+// 2013-09-04aRagexe, 2013-09-04bRagexeRE
+#if PACKETVER == 20130904
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0838,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0937,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x093a,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0940,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0956,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-09-11aRagexe, 2013-09-11aRagexeRE, 2013-09-11bRagexe, 2013-09-11bRagexeRE
+#if PACKETVER == 20130911
+ packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0364,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0868,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x086b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x086d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x087b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0889,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0891,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x08a4,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x091e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x093a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0940,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0948,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0967,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x096a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+#endif
+
+// 2013-09-17aRagexe, 2013-09-17aRagexeRE
+#if PACKETVER == 20130917
+ packet(0x035f,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0811,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0838,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x083c,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0863,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0868,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x086e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x086f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x087a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x087e,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x088a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0895,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x089b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x089d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a0,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a2,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08a8,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0918,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x091c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x091e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0921,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0923,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0934,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x094c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x094e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0957,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0959,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x095b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x096a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+#endif
+
+// 2013-09-25aRagexe, 2013-09-25aRagexeRE, 2013-09-25bRagexe, 2013-09-25bRagexeRE, 2013-09-25cRagexe
+#if PACKETVER == 20130925
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x086d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x086e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0875,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0876,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x087d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0885,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0887,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x088f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0890,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0940,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0958,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x095a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x095b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x095c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0969,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-10-02aRagexe, 2013-10-02aRagexeRE
+#if PACKETVER == 20131002
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0940,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-10-08aRagexe, 2013-10-08bRagexeRE
+#if PACKETVER == 20131008
+ packet(0x0202,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0362,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x07e4,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x083c,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x085d,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x085e,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0863,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x086c,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x086d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0883,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0884,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0885,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0896,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x089c,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08a9,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0917,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091c,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0923,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0927,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0932,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0934,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0936,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x093c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0947,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0952,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0954,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0956,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x095d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0969,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+#endif
+
+// 2013-10-16aRagexe, 2013-10-16aRagexeRE, 2013-10-16bRagexe, 2013-10-16bRagexeRE
+#if PACKETVER == 20131016
+ packet(0x022d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0281,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0361,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0364,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0366,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x07ec,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0802,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x085a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x085d,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0863,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0864,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0867,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x086c,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0870,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0875,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0887,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0888,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x088b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0890,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0894,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x091a,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x091e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0927,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0946,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x094e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x095e,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0962,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0966,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+#endif
+
+// 2013-10-23aRagexe, 2013-10-23aRagexeRE
+#if PACKETVER == 20131023
+ packet(0x0366,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0438,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0819,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0835,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x085b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0862,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x086e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0872,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0876,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087f,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0885,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x088a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x088b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x088f,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a7,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x08ab,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08ac,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0919,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x091d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0923,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0924,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0935,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0937,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0944,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x094a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0951,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0954,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x095b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+#endif
+
+// 2013-10-30aRagexe, 2013-10-30aRagexeRE
+#if PACKETVER == 20131030
+ packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0887,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08a2,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0925,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-11-06aRagexe, 2013-11-06aRagexeRE, 2013-11-07aRagexe, 2013-11-07bRagexe, 2013-11-07cRagexe, 2013-11-08aRagexe
+#if PACKETVER == 20131106 || \
+ PACKETVER == 20131107 || \
+ PACKETVER == 20131108
+ packet(0x0281,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0363,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0369,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0436,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0802,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0817,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0866,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0867,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0870,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0875,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0887,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0891,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0893,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0894,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x08a2,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0919,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x091d,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0929,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0935,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x093b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0942,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0946,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0947,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0948,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0950,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0954,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x095d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0962,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0967,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+#endif
+
+// 2013-11-13aRagexeRE, 2013-11-13bRagexe
+#if PACKETVER == 20131113
+ packet(0x0364,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x086d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0879,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x088c,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x088f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x089a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a4,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08a8,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x091c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0920,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0926,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0927,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0928,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0929,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x092b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x092c,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x092d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x092e,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x092f,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0934,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0936,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x093c,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0949,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0950,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x095d,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x095f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0960,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0964,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0969,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+#endif
+
+// 2013-11-20dRagexe, 2013-11-20eRagexeRE
+#if PACKETVER == 20131120
+ packet(0x0361,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0368,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0802,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0811,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0817,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x085a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x085f,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0862,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0884,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x088c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x088d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x089e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08a1,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x08a4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08a8,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0917,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0926,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0927,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x092b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x092d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x093e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x093f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0940,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0950,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0953,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0955,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0956,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x095e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+#endif
+
+// 2013-11-27aRagexeRE, 2013-11-27bRagexe, 2013-11-27bRagexeRE
+#if PACKETVER == 20131127
+ packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0364,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0365,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0366,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0881,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0884,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x088d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0894,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x089e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0930,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x093a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0940,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x094c,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x094f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x095c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0967,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x096a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+#endif
+
+// 2013-12-04dRagexeRE, 2013-12-04eRagexe, 2013-12-04eRagexeRE
+#if PACKETVER == 20131204
+ packet(0x0365,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0366,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x085a,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0862,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0869,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x086c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0877,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0879,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x087f,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0882,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a0,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08a4,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08a7,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08ad,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x091f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0928,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x092d,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x092f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0932,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x093b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0941,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0951,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0958,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0959,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x095b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0961,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0967,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+#endif
+
+// 2013-12-11cRagexe, 2013-12-11cRagexeRE, 2013-12-11dRagexe, 2013-12-11eRagexeRE
+#if PACKETVER == 20131211
+ packet(0x0202,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0366,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0865,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x086e,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0873,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0881,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0886,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0892,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a3,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x08a4,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08ab,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x092b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0931,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x094c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-12-18aRagexeRE, 2013-12-18bRagexe
+#if PACKETVER == 20131218
+ packet(0x022d,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085c,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x087b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x08ab,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x092f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0947,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-12-23bRagexe, 2013-12-23bRagexeRE, 2013-12-23cRagexe, 2013-12-23xRagexeRE
+#if PACKETVER == 20131223
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x08a4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2013-12-30aRagexe, 2013-12-30aRagexeRE
+#if PACKETVER == 20131230
+ packet(0x022d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x02c4,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x035f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0365,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0369,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0438,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0860,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0871,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x087b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x087e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x087f,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0895,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0898,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x089c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a9,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x091d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x091e,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x091f,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0926,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x092a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x093d,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x093e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0943,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0949,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x094a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x094c,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0968,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0969,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x096a,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+#endif
+
+// 2014-01-08bRagexeRE, 2014-01-08cRagexe, 2014-01-08cRagexeRE, 2014-01-08dRagexe
#if PACKETVER == 20140108
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -69,43 +2617,41 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-01-15eRagexe
+// 2014-01-15aRagexe, 2014-01-15bRagexe, 2014-01-15cRagexe, 2014-01-15cRagexeRE, 2014-01-15dRagexeRE, 2014-01-15eRagexe, 2014-01-15eRagexeRE
#if PACKETVER == 20140115
-// shuffle packets
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_MOVE2
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQUEST_TIME2
- packet(0x0361,6,clif->pDropItem,2,4); // CZ_CHANGE_DIRECTION2
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND2
- packet(0x0367,8,clif->pMoveFromKafra,2,4); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME2
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQNAME_BYGID2
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_ACT2
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL2
- packet(0x0802,6,clif->pGetCharNameRequest,2); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_SSILIST_ITEM_CLICK
- packet(0x0865,36,clif->pStoragePassword,0); // ZC_REASSEMBLY_AUTH12
- packet(0x0887,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REASSEMBLY_AUTH04
- packet(0x088a,8,clif->pDull/*,XXX*/); // CZ_REASSEMBLY_AUTH07
- packet(0x088e,8,clif->pMoveToKafra,2,4); // CZ_REASSEMBLY_AUTH11
- packet(0x089b,26,clif->pFriendsListAdd,2); // CZ_REASSEMBLY_AUTH24
- packet(0x08a7,5,clif->pChangeDir,2,4); // CZ_REASSEMBLY_AUTH36
- packet(0x092d,5,clif->pHomMenu,2,4); // ZC_REASSEMBLY_AUTH65
- packet(0x0940,6,clif->pTakeItem,2); // ZC_REASSEMBLY_AUTH84
- packet(0x095b,4,clif->pDull/*,XXX*/); // CZ_REASSEMBLY_AUTH69
- packet(0x095d,26,clif->pPartyInvite2,2); // CZ_REASSEMBLY_AUTH71
- packet(0x0965,-1,clif->pItemListWindowSelected,2,4,8); // CZ_REASSEMBLY_AUTH79
- packet(0x0966,19,clif->pWantToConnection,2,6,10,14,18); // CZ_REASSEMBLY_AUTH80
- packet(0x096a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_REASSEMBLY_AUTH84
-#endif
-
-// 2014-01-22aRagexe
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0367,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0802,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0865,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0887,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x088a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x088e,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x089b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a7,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x092d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0940,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x095b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x095d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0965,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0966,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x096a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+#endif
+
+// 2014-01-22aRagexe, 2014-01-22aRagexeRE
#if PACKETVER == 20140122
-// shuffle packets
packet(0x0360,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0811,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
@@ -137,9 +2683,8 @@
packet(0x095f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
#endif
-// 2014-01-29aRagexe
+// 2014-01-29aRagexe, 2014-01-29bRagexeRE, 2014-01-29cRagexe
#if PACKETVER == 20140129
-// shuffle packets
packet(0x0281,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -171,9 +2716,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-02-05bRagexe
+// 2014-02-05bRagexe, 2014-02-05bRagexeRE
#if PACKETVER == 20140205
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -205,9 +2749,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-02-12aRagexe
+// 2014-02-12aRagexe, 2014-02-12aRagexeRE
#if PACKETVER == 20140212
-// shuffle packets
packet(0x02c4,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0369,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0438,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -239,9 +2782,8 @@
packet(0x0960,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
#endif
-// 2014-02-19aRagexe
+// 2014-02-19aRagexe, 2014-02-19aRagexeRE, 2014-02-19bRagexeRE
#if PACKETVER == 20140219
-// shuffle packets
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x0360,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0364,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
@@ -273,9 +2815,8 @@
packet(0x0961,6,clif->pTickSend,2); // CZ_REQUEST_TIME
#endif
-// 2014-02-26aRagexe
+// 2014-02-26aRagexe, 2014-02-26aRagexeRE, 2014-02-26bRagexeRE
#if PACKETVER == 20140226
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0361,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
@@ -307,9 +2848,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-03-05aRagexe
+// 2014-03-05aRagexe, 2014-03-05aRagexeRE, 2014-03-05bRagexe, 2014-03-05bRagexeRE
#if PACKETVER == 20140305
-// shuffle packets
packet(0x0202,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -341,9 +2881,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-03-12dRagexe
+// 2014-03-12bRagexeRE, 2014-03-12dRagexe
#if PACKETVER == 20140312
-// shuffle packets
packet(0x0202,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
packet(0x023b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x0366,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -375,9 +2914,41 @@
packet(0x0966,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
#endif
-// 2014-03-26aRagexe
+// 2014-03-19aRagexe, 2014-03-19aRagexeRE
+#if PACKETVER == 20140319
+ packet(0x02c4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07e4,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0802,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0811,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0815,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x085a,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0864,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0865,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0866,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x086e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0872,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0883,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x088e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0890,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0893,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x089f,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08a2,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x091f,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0923,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0933,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0942,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0944,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0947,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x094c,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0954,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0955,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0961,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0964,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x096a,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+#endif
+
+// 2014-03-26aRagexe, 2014-03-26cRagexeRE
#if PACKETVER == 20140326
-// shuffle packets
packet(0x0362,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x0365,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x07ec,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
@@ -409,9 +2980,8 @@
packet(0x0969,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
#endif
-// 2014-04-02fRagexe
+// 2014-04-02eRagexeRE, 2014-04-02fRagexe, 2014-04-02fRagexeRE, 2014-04-02gRagexe
#if PACKETVER == 20140402
-// shuffle packets
packet(0x023b,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0360,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0364,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
@@ -443,9 +3013,8 @@
packet(0x0965,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
#endif
-// 2014-04-09aRagexe
+// 2014-04-09aRagexe, 2014-04-09aRagexeRE, 2014-04-09bRagexe
#if PACKETVER == 20140409
-// shuffle packets
packet(0x0819,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x085b,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x0868,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
@@ -477,9 +3046,8 @@
packet(0x095e,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
#endif
-// 2014-04-16aRagexe
+// 2014-04-16aRagexe, 2014-04-16aRagexeRE, 2014-04-16bRagexe
#if PACKETVER == 20140416
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -511,9 +3079,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-04-23aRagexe
+// 2014-04-23aRagexe, 2014-04-23aRagexeRE
#if PACKETVER == 20140423
-// shuffle packets
packet(0x022d,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0360,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0436,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -545,9 +3112,76 @@
packet(0x095e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
#endif
-// 2014-05-08aRagexe
+// 2014-04-30aRagexe, 2014-04-30aRagexeRE
+#if PACKETVER == 20140430
+ packet(0x023b,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x035f,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0363,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0860,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0870,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0871,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0875,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x087f,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0884,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0899,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08a1,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x093b,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0940,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x094b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0953,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0956,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x096a,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+#endif
+
+// 2014-05-08bRagexe, 2014-05-08bRagexeRE
#if PACKETVER == 20140508
-// shuffle packets
+ packet(0x022d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x02c4,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0366,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0368,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0802,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0861,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0886,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x089b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08ab,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0927,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0930,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0932,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0934,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x094e,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x096a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+#endif
+
+// 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe
+#if PACKETVER == 20140508 || \
+ PACKETVER == 20140611 || \
+ PACKETVER == 20150225
packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -579,9 +3213,8 @@
packet(0x083c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
#endif
-// 2014-05-14bRagexe
+// 2014-05-14bRagexe, 2014-05-14bRagexeRE, 2014-05-14cRagexeRE
#if PACKETVER == 20140514
-// shuffle packets
packet(0x0437,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x0817,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0865,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
@@ -613,9 +3246,8 @@
packet(0x096a,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
#endif
-// 2014-05-21bRagexe
+// 2014-05-21aRagexeRE, 2014-05-21bRagexe
#if PACKETVER == 20140521
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -647,9 +3279,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-05-28aRagexe
+// 2014-05-28aRagexe, 2014-05-28aRagexeRE
#if PACKETVER == 20140528
-// shuffle packets
packet(0x0202,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0360,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x085f,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
@@ -681,9 +3312,8 @@
packet(0x0966,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
#endif
-// 2014-06-05aRagexe
+// 2014-06-05aRagexe, 2014-06-05aRagexeRE, 2014-06-05bRagexe
#if PACKETVER == 20140605
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -715,77 +3345,10 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-06-11cRagexe
-#if PACKETVER == 20140611
-// shuffle packets
- packet(0x0364,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0438,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x07e4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0838,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0864,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0867,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x086c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0874,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0878,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x088c,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0891,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0893,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0894,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x089b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x08a1,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x08a2,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0924,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0936,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x0941,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x094a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x094f,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0950,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0951,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0952,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0957,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0958,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0963,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0965,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0969,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
-#endif
-
-// 2014-06-12aRagexe
-#if PACKETVER == 20140612
-// shuffle packets
- packet(0x0364,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0438,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x07e4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0838,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0864,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0867,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x086c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0874,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0878,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x088c,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0891,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0893,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0894,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x089b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x08a1,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x08a2,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0924,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0936,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x0941,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x094a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x094f,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0950,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0951,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0952,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0957,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0958,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0963,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0965,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0969,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
-#endif
-
-// 2014-06-13aRagexe
-#if PACKETVER == 20140613
-// shuffle packets
+// 2014-06-11bRagexeRE, 2014-06-11cRagexe, 2014-06-11dRagexe, 2014-06-11hRagexe, 2014-06-12aRagexe, 2014-06-13aRagexe
+#if PACKETVER == 20140611 || \
+ PACKETVER == 20140612 || \
+ PACKETVER == 20140613
packet(0x0364,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0438,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x07e4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
@@ -817,9 +3380,8 @@
packet(0x0969,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2014-06-18aRagexe
+// 2014-06-18aRagexe, 2014-06-18cRagexeRE
#if PACKETVER == 20140618
-// shuffle packets
packet(0x085d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x085f,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0860,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -851,9 +3413,8 @@
packet(0x0967,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
#endif
-// 2014-06-25aRagexe
+// 2014-06-25aRagexe, 2014-06-25aRagexeRE, 2014-06-25bRagexe
#if PACKETVER == 20140625
-// shuffle packets
packet(0x0202,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x023b,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x0815,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -885,9 +3446,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-07-02aRagexe
+// 2014-07-02aRagexe, 2014-07-02aRagexeRE
#if PACKETVER == 20140702
-// shuffle packets
packet(0x022d,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x023b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -919,9 +3479,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-07-09aRagexe
+// 2014-07-09aRagexe, 2014-07-09aRagexeRE
#if PACKETVER == 20140709
-// shuffle packets
packet(0x0364,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x0437,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0860,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -953,9 +3512,8 @@
packet(0x0961,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
#endif
-// 2014-07-16aRagexe
+// 2014-07-16aRagexe, 2014-07-16aRagexeRE, 2014-07-16bRagexe, 2014-07-16cRagexe
#if PACKETVER == 20140716
-// shuffle packets
packet(0x0362,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0811,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
@@ -987,9 +3545,8 @@
packet(0x0969,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
#endif
-// 2014-07-23aRagexe
+// 2014-07-23aRagexe, 2014-07-23aRagexeRE, 2014-07-23bRagexe, 2014-07-23bRagexeRE
#if PACKETVER == 20140723
-// shuffle packets
packet(0x02c4,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0364,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0368,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
@@ -1021,9 +3578,8 @@
packet(0x0960,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2014-07-30aRagexe
+// 2014-07-30aRagexe, 2014-07-30bRagexeRE
#if PACKETVER == 20140730
-// shuffle packets
packet(0x022d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0364,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x0366,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
@@ -1055,9 +3611,8 @@
packet(0x0946,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
#endif
-// 2014-08-06aRagexe
+// 2014-08-06aRagexe, 2014-08-06aRagexeRE, 2014-08-06bRagexe
#if PACKETVER == 20140806
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -1089,9 +3644,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-08-13aRagexe
-#if PACKETVER == 20140813
-// shuffle packets
+// 2014-08-13aRagexe, 2014-08-13aRagexeRE, 2014-08-13bRagexe, 2014-08-14aRagexe
+#if PACKETVER == 20140813 || \
+ PACKETVER == 20140814
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0365,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -1123,43 +3678,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-08-14aRagexe
-#if PACKETVER == 20140814
-// shuffle packets
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0365,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x07e4,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0802,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0868,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0878,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x087c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0882,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0895,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0897,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0899,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x08a3,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x08a7,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x08ab,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0967,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
-#endif
-
-// 2014-08-20aRagexe
+// 2014-08-20aRagexe, 2014-08-20aRagexeRE
#if PACKETVER == 20140820
-// shuffle packets
packet(0x035f,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
packet(0x07ec,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
@@ -1191,9 +3711,8 @@
packet(0x0961,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2014-08-27aRagexe
+// 2014-08-27aRagexe, 2014-08-27aRagexeRE
#if PACKETVER == 20140827
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -1225,9 +3744,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-09-03aRagexe
+// 2014-09-03aRagexe, 2014-09-03aRagexeRE
#if PACKETVER == 20140903
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -1259,9 +3777,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-09-17aRagexe
+// 2014-09-17aRagexe, 2014-09-17cRagexeRE
#if PACKETVER == 20140917
-// shuffle packets
packet(0x022d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x0364,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0365,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
@@ -1293,9 +3810,8 @@
packet(0x0966,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
#endif
-// 2014-09-24cRagexe
+// 2014-09-24bRagexeRE, 2014-09-24cRagexe, 2014-09-24cRagexeRE
#if PACKETVER == 20140924
-// shuffle packets
packet(0x0366,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0367,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -1327,9 +3843,8 @@
packet(0x0952,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
#endif
-// 2014-10-01aRagexe
+// 2014-10-01aRagexe, 2014-10-01bRagexeRE, 2014-10-01cRagexeRE
#if PACKETVER == 20141001
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0361,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
@@ -1361,9 +3876,8 @@
packet(0x0952,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
#endif
-// 2014-10-08aRagexe
+// 2014-10-08aRagexe, 2014-10-08bRagexe, 2014-10-08bRagexeRE, 2014-10-08cRagexe, 2014-10-08cRagexeRE, 2014-10-08dRagexe
#if PACKETVER == 20141008
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -1395,9 +3909,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-10-15bRagexe
-#if PACKETVER == 20141015
-// shuffle packets
+// 2014-10-15bRagexe, 2014-10-15bRagexeRE, 2014-10-15cRagexe, 2014-10-15dRagexe, 2014-10-16aRagexe, 2014-10-16aRagexeRE
+#if PACKETVER == 20141015 || \
+ PACKETVER == 20141016
packet(0x022d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -1429,43 +3943,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-10-16aRagexe
-#if PACKETVER == 20141016
-// shuffle packets
- packet(0x022d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0364,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x086e,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0922,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0936,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x094b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0967,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
-#endif
-
-// 2014-10-22bRagexe
+// 2014-10-22aRagexeRE, 2014-10-22bRagexe
#if PACKETVER == 20141022
-// shuffle packets
packet(0x023b,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -1497,9 +3976,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-10-29aRagexe
+// 2014-10-29aRagexe, 2014-10-29aRagexeRE
#if PACKETVER == 20141029
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -1531,9 +4009,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-11-05aRagexe
+// 2014-11-05aRagexe, 2014-11-05aRagexeRE, 2014-11-05bRagexe, 2014-11-05bRagexeRE
#if PACKETVER == 20141105
-// shuffle packets
packet(0x022d,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x035f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
packet(0x0360,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
@@ -1565,9 +4042,8 @@
packet(0x0968,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2014-11-12cRagexe
+// 2014-11-12aRagexeRE, 2014-11-12cRagexe, 2014-11-12dRagexe
#if PACKETVER == 20141112
-// shuffle packets
packet(0x0362,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x0438,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x07e4,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
@@ -1599,9 +4075,8 @@
packet(0x0962,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
#endif
-// 2014-11-19dRagexe
+// 2014-11-19bRagexeRE, 2014-11-19dRagexe
#if PACKETVER == 20141119
-// shuffle packets
packet(0x0202,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x085a,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0861,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -1633,9 +4108,8 @@
packet(0x0963,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
#endif
-// 2014-11-26aRagexe
+// 2014-11-26aRagexe, 2014-11-26aRagexeRE, 2014-11-26bRagexe, 2014-11-26bRagexeRE, 2014-11-26cRagexe, 2014-11-26cRagexeRE, 2014-11-26dRagexe, 2014-11-26dRagexeRE, 2014-11-26eRagexeRE
#if PACKETVER == 20141126
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -1667,9 +4141,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-12-03aRagexe
+// 2014-12-03aRagexe, 2014-12-03aRagexeRE
#if PACKETVER == 20141203
-// shuffle packets
packet(0x0202,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x0281,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0362,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
@@ -1701,9 +4174,8 @@
packet(0x0962,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
#endif
-// 2014-12-10bRagexe
+// 2014-12-10bRagexe, 2014-12-10cRagexe, 2014-12-10cRagexeRE
#if PACKETVER == 20141210
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -1735,9 +4207,42 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2014-12-24aRagexe
-#if PACKETVER == 20141224
-// shuffle packets
+// 2014-12-17aRagexe, 2014-12-17aRagexeRE
+#if PACKETVER == 20141217
+ packet(0x0360,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x085b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0860,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x086c,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0875,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0878,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0879,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0883,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0889,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x088e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x089f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08a1,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08a2,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a8,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x08ab,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08ac,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0919,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x091f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0924,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0930,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0932,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0933,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0936,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0939,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0940,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0944,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0945,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0948,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0960,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+#endif
+
+// 2014-12-23cRagexeRE, 2014-12-24aRagexe
+#if PACKETVER == 20141223 || \
+ PACKETVER == 20141224
packet(0x0361,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x0438,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x0835,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -1769,9 +4274,8 @@
packet(0x095f,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
#endif
-// 2014-12-31aRagexe
+// 2014-12-31aRagexe, 2014-12-31aRagexeRE
#if PACKETVER == 20141231
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -1803,9 +4307,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-01-07aRagexeRE
+// 2015-01-07aRagexe, 2015-01-07aRagexeRE
#if PACKETVER == 20150107
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -1837,9 +4340,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-01-14aRagexe
+// 2015-01-14aRagexe, 2015-01-14aRagexeRE, 2015-01-14bRagexe, 2015-01-14cRagexe, 2015-01-14dRagexe
#if PACKETVER == 20150114
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -1871,9 +4373,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-01-21aRagexe
+// 2015-01-21aRagexe, 2015-01-21aRagexeRE, 2015-01-21bRagexeRE
#if PACKETVER == 20150121
-// shuffle packets
packet(0x0281,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -1905,77 +4406,10 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-01-28aRagexe
-#if PACKETVER == 20150128
-// shuffle packets
- packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x023b,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0365,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0368,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0838,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x085a,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0864,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x086d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0870,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0874,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0875,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0876,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x087d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0888,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x089a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x08ab,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x091f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0927,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0929,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x092d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0938,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x093a,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0944,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x094d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x094e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0952,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0963,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0968,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
-#endif
-
-// 2015-01-29aRagexe
-#if PACKETVER == 20150129
-// shuffle packets
- packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x023b,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0365,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0368,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0838,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x085a,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0864,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x086d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0870,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0874,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0875,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0876,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x087d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0888,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x089a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x08ab,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x091f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0927,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0929,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x092d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0938,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x093a,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0944,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x094d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x094e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0952,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0963,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0968,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
-#endif
-
-// 2015-01-30aRagexe
-#if PACKETVER == 20150130
-// shuffle packets
+// 2015-01-28aRagexe, 2015-01-28aRagexeRE, 2015-01-29aRagexe, 2015-01-30aRagexe
+#if PACKETVER == 20150128 || \
+ PACKETVER == 20150129 || \
+ PACKETVER == 20150130
packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x023b,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -2007,9 +4441,8 @@
packet(0x0968,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
#endif
-// 2015-02-04aRagexe
+// 2015-02-04aRagexe, 2015-02-04cRagexeRE
#if PACKETVER == 20150204
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -2041,9 +4474,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-02-11aRagexe
+// 2015-02-11aRagexe, 2015-02-11aRagexeRE
#if PACKETVER == 20150211
-// shuffle packets
packet(0x023b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0368,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x0369,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
@@ -2075,9 +4507,8 @@
packet(0x0958,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
#endif
-// 2015-02-17aRagexe
+// 2015-02-17aRagexe, 2015-02-17aRagexeRE
#if PACKETVER == 20150217
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -2109,9 +4540,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-02-25aRagexeRE
-#if PACKETVER == 20150225
-// shuffle packets
+// 2015-02-25aRagexeRE, 2015-02-25bRagexeRE, 2015-02-25cRagexeRE, 2015-02-25dRagexeRE, 2015-02-25eRagexe, 2015-02-25eRagexeRE, 2015-02-25fRagexe, 2015-02-25gRagexe, 2015-02-25iRagexe, 2015-02-25jRagexe, 2015-02-26aRagexe, 2015-02-26aRagexeRE
+#if PACKETVER == 20150225 || \
+ PACKETVER == 20150226
packet(0x02c4,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -2143,43 +4574,8 @@
packet(0x096a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
#endif
-// 2015-02-26aRagexeRE
-#if PACKETVER == 20150226
-// shuffle packets
- packet(0x02c4,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0362,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0436,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0819,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0867,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0885,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0896,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x089b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x089c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x08a4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0940,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0946,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0948,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x094f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0952,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0955,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x096a,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
-#endif
-
-// 2015-03-04aRagexe
+// 2015-03-04aRagexe, 2015-03-04aRagexeRE, 2015-03-04bRagexeRE
#if PACKETVER == 20150304
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
@@ -2211,9 +4607,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-03-11aRagexeRE
+// 2015-03-11aRagexe, 2015-03-11aRagexeRE, 2015-03-11bRagexe, 2015-03-11bRagexeRE
#if PACKETVER == 20150311
-// shuffle packets
packet(0x023b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x0360,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0436,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -2245,9 +4640,8 @@
packet(0x0964,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
#endif
-// 2015-03-18aRagexe
+// 2015-03-18aRagexe, 2015-03-18aRagexeRE, 2015-03-18bRagexe, 2015-03-18bRagexeRE, 2015-03-18cRagexeRE
#if PACKETVER == 20150318
-// shuffle packets
packet(0x0202,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x023b,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0281,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
@@ -2279,9 +4673,8 @@
packet(0x0960,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2015-03-25aRagexe
+// 2015-03-25aRagexe, 2015-03-25bRagexeRE, 2015-03-25cRagexeRE
#if PACKETVER == 20150325
-// shuffle packets
packet(0x0202,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x0363,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0365,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
@@ -2313,9 +4706,8 @@
packet(0x0969,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
#endif
-// 2015-04-01aRagexe
+// 2015-04-01aRagexe, 2015-04-01bRagexeRE
#if PACKETVER == 20150401
-// shuffle packets
packet(0x0362,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0367,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x0437,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -2347,9 +4739,8 @@
packet(0x0964,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2015-04-08aRagexe
+// 2015-04-08aRagexe, 2015-04-08aRagexeRE
#if PACKETVER == 20150408
-// shuffle packets
packet(0x0819,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x085a,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x085c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
@@ -2381,9 +4772,8 @@
packet(0x0963,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2015-04-15aRagexe
+// 2015-04-15aRagexe, 2015-04-15aRagexeRE
#if PACKETVER == 20150415
-// shuffle packets
packet(0x0361,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x0364,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0366,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
@@ -2415,9 +4805,8 @@
packet(0x0961,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2015-04-22aRagexeRE
+// 2015-04-22aRagexe, 2015-04-22aRagexeRE
#if PACKETVER == 20150422
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -2449,9 +4838,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-04-29aRagexe
+// 2015-04-29aRagexe, 2015-04-29aRagexeRE
#if PACKETVER == 20150429
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0363,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
@@ -2483,9 +4871,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-05-07bRagexe
+// 2015-05-07bRagexe, 2015-05-07bRagexeRE, 2015-05-07cRagexe
#if PACKETVER == 20150507
-// shuffle packets
packet(0x023b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -2517,9 +4904,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-05-13aRagexe
+// 2015-05-13aRagexe, 2015-05-13aRagexeRE
#if PACKETVER == 20150513
-// shuffle packets
packet(0x022d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x02c4,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -2551,9 +4937,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-05-20aRagexe
+// 2015-05-20aRagexe, 2015-05-20aRagexeRE
#if PACKETVER == 20150520
-// shuffle packets
packet(0x0202,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0361,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0835,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
@@ -2585,9 +4970,8 @@
packet(0x096a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2015-05-27aRagexe
+// 2015-05-27aRagexe, 2015-05-27aRagexeRE
#if PACKETVER == 20150527
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -2619,9 +5003,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-06-03aRagexe
+// 2015-06-03aRagexe, 2015-06-03bRagexeRE
#if PACKETVER == 20150603
-// shuffle packets
packet(0x0361,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x0437,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x0811,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
@@ -2653,9 +5036,8 @@
packet(0x096a,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
#endif
-// 2015-06-10aRagexe
+// 2015-06-10aRagexe, 2015-06-10aRagexeRE
#if PACKETVER == 20150610
-// shuffle packets
packet(0x022d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0438,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x07e4,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
@@ -2687,43 +5069,9 @@
packet(0x0964,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2015-06-17aRagexeRE
-#if PACKETVER == 20150617
-// shuffle packets
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0362,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0363,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0365,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0436,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x07ec,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0811,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0869,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x086a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x086b,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0870,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x087a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0886,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0894,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0940,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x094e,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
-#endif
-
-// 2015-06-18aRagexeRE
-#if PACKETVER == 20150618
-// shuffle packets
+// 2015-06-17aRagexe, 2015-06-17aRagexeRE, 2015-06-18aRagexe, 2015-06-18aRagexeRE
+#if PACKETVER == 20150617 || \
+ PACKETVER == 20150618
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
packet(0x0362,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -2755,9 +5103,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-06-24aRagexe
+// 2015-06-24aRagexe, 2015-06-24aRagexeRE
#if PACKETVER == 20150624
-// shuffle packets
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -2789,9 +5136,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-07-02aRagexe
-#if PACKETVER == 20150702
-// shuffle packets
+// 2015-07-01bRagexe, 2015-07-01bRagexeRE, 2015-07-02aRagexe
+#if PACKETVER == 20150701 || \
+ PACKETVER == 20150702
packet(0x023b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0281,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x07e4,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
@@ -2823,9 +5170,8 @@
packet(0x0968,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2015-07-08cRagexe
+// 2015-07-08bRagexeRE, 2015-07-08cRagexe, 2015-07-08cRagexeRE, 2015-07-08dRagexeRE
#if PACKETVER == 20150708
-// shuffle packets
packet(0x022d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x02c4,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -2857,9 +5203,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-07-15aRagexe
+// 2015-07-15aRagexe, 2015-07-15aRagexeRE
#if PACKETVER == 20150715
-// shuffle packets
packet(0x023b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0362,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0364,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -2891,9 +5236,41 @@
packet(0x0965,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2015-07-29aRagexe
+// 2015-07-22bRagexe, 2015-07-22bRagexeRE
+#if PACKETVER == 20150722
+ packet(0x023b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0281,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0360,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0361,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0368,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0436,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0811,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0815,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0817,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0869,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0878,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x087b,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x087d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x087e,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0880,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0884,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x088d,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0899,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x08a8,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0919,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0921,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0925,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x092e,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x093c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x093d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x094c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x094f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0951,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0958,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+#endif
+
+// 2015-07-29aRagexe, 2015-07-29aRagexeRE
#if PACKETVER == 20150729
-// shuffle packets
packet(0x0437,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x0438,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x085b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
@@ -2925,9 +5302,8 @@
packet(0x096a,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
#endif
-// 2015-08-05aRagexe
+// 2015-08-05aRagexe, 2015-08-05dRagexeRE
#if PACKETVER == 20150805
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -2959,9 +5335,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-08-12aRagexe
+// 2015-08-12aRagexe, 2015-08-12aRagexeRE
#if PACKETVER == 20150812
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -2993,9 +5368,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-08-19aRagexeRE
+// 2015-08-19aRagexe, 2015-08-19aRagexeRE, 2015-08-19bRagexeRE
#if PACKETVER == 20150819
-// shuffle packets
packet(0x0202,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x022d,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
packet(0x0281,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
@@ -3027,9 +5401,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-08-26aRagexeRE
+// 2015-08-26aRagexe, 2015-08-26aRagexeRE, 2015-08-26bRagexe, 2015-08-26bRagexeRE
#if PACKETVER == 20150826
-// shuffle packets
packet(0x0362,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0368,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x0436,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
@@ -3061,9 +5434,8 @@
packet(0x0969,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
#endif
-// 2015-09-02aRagexe
+// 2015-09-02aRagexe, 2015-09-02aRagexeRE
#if PACKETVER == 20150902
-// shuffle packets
packet(0x023b,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0360,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0367,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -3095,9 +5467,8 @@
packet(0x0960,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2015-09-09aRagexe
+// 2015-09-09aRagexe, 2015-09-09aRagexeRE
#if PACKETVER == 20150909
-// shuffle packets
packet(0x023b,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
@@ -3129,9 +5500,8 @@
packet(0x096a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2015-09-16aRagexe
+// 2015-09-16aRagexe, 2015-09-16cRagexe, 2015-09-16cRagexeRE
#if PACKETVER == 20150916
-// shuffle packets
packet(0x022d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0817,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0835,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -3163,9 +5533,8 @@
packet(0x0969,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
#endif
-// 2015-09-23bRagexe
+// 2015-09-23bRagexe, 2015-09-23bRagexeRE, 2015-09-23cRagexe, 2015-09-23dRagexe, 2015-09-23eRagexe, 2015-09-23eRagexeRE, 2015-09-23fRagexe, 2015-09-23fRagexeRE
#if PACKETVER == 20150923
-// shuffle packets
packet(0x0361,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0366,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -3197,9 +5566,8 @@
packet(0x0961,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
#endif
-// 2015-10-01aRagexe
+// 2015-10-01aRagexe, 2015-10-01bRagexeRE
#if PACKETVER == 20151001
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -3231,9 +5599,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-10-07aRagexeRE
+// 2015-10-07aRagexe, 2015-10-07aRagexeRE
#if PACKETVER == 20151007
-// shuffle packets
packet(0x0202,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -3265,9 +5632,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-10-14bRagexeRE
+// 2015-10-14bRagexe, 2015-10-14bRagexeRE
#if PACKETVER == 20151014
-// shuffle packets
packet(0x0202,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0817,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x0838,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -3299,9 +5665,9 @@
packet(0x0964,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
#endif
-// 2015-10-21aRagexe
-#if PACKETVER == 20151021
-// shuffle packets
+// 2015-10-21aRagexe, 2015-10-21aRagexeRE, 2015-10-22aRagexe, 2015-10-22aRagexeRE
+#if PACKETVER == 20151021 || \
+ PACKETVER == 20151022
packet(0x023b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x02c4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -3333,77 +5699,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-10-22aRagexe
-#if PACKETVER == 20151022
-// shuffle packets
- packet(0x023b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x02c4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0361,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x07ec,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x086a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x091d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0940,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
-#endif
-
-// 2015-10-28cRagexeRE
-#if PACKETVER == 20151028
-// shuffle packets
- packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0860,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
-#endif
-
-// 2015-10-29aRagexe
-#if PACKETVER == 20151029
-// shuffle packets
+// 2015-10-28bRagexeRE, 2015-10-28bRagexeRE_2, 2015-10-28cRagexe, 2015-10-28cRagexeRE, 2015-10-28dRagexe, 2015-10-28dRagexeRE, 2015-10-29aRagexe, 2015-10-29aRagexeRE
+#if PACKETVER == 20151028 || \
+ PACKETVER == 20151029
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -3435,9 +5733,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-11-04aRagexe
+// 2015-11-04aRagexe, 2015-11-04aRagexeRE
#if PACKETVER == 20151104
-// shuffle packets
packet(0x023b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0360,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0363,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
@@ -3469,9 +5766,8 @@
packet(0x0964,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
#endif
-// 2015-11-11aRagexe
+// 2015-11-11aRagexe, 2015-11-11aRagexeRE, 2015-11-11bRagexe
#if PACKETVER == 20151111
-// shuffle packets
packet(0x02c4,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -3503,9 +5799,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-11-18aRagexeRE
+// 2015-11-18aRagexe, 2015-11-18aRagexeRE
#if PACKETVER == 20151118
-// shuffle packets
packet(0x022d,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x035f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -3537,9 +5832,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-11-25bRagexe
+// 2015-11-25bRagexe, 2015-11-25bRagexeRE, 2015-11-25cRagexeRE, 2015-11-25dRagexe, 2015-11-25dRagexeRE
#if PACKETVER == 20151125
-// shuffle packets
packet(0x0361,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0365,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0366,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
@@ -3571,9 +5865,8 @@
packet(0x0959,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
#endif
-// 2015-12-02bRagexeRE
+// 2015-12-02aRagexe, 2015-12-02bRagexeRE
#if PACKETVER == 20151202
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -3605,9 +5898,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2015-12-09aRagexe
+// 2015-12-09aRagexe, 2015-12-09aRagexeRE
#if PACKETVER == 20151209
-// shuffle packets
packet(0x0365,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0369,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x07e4,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -3639,9 +5931,8 @@
packet(0x0964,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
#endif
-// 2015-12-16aRagexe
+// 2015-12-16aRagexe, 2015-12-16aRagexeRE
#if PACKETVER == 20151216
-// shuffle packets
packet(0x022d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0361,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0362,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
@@ -3673,9 +5964,8 @@
packet(0x0968,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
#endif
-// 2015-12-23bRagexeRE
+// 2015-12-23bRagexe, 2015-12-23bRagexeRE
#if PACKETVER == 20151223
-// shuffle packets
packet(0x02c4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x0362,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x0364,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
@@ -3707,9 +5997,8 @@
packet(0x0967,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
#endif
-// 2015-12-30aRagexe
+// 2015-12-30aRagexe, 2015-12-30aRagexeRE
#if PACKETVER == 20151230
-// shuffle packets
packet(0x02c4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -3741,9 +6030,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-01-06aRagexeRE
+// 2016-01-06aRagexe, 2016-01-06aRagexeRE
#if PACKETVER == 20160106
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -3775,9 +6063,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-01-13aRagexeRE
+// 2016-01-13aRagexe, 2016-01-13aRagexeRE, 2016-01-13bRagexe, 2016-01-13bRagexeRE, 2016-01-13bRagexeRE_2, 2016-01-13bRagexe_2, 2016-01-13cRagexeRE
#if PACKETVER == 20160113
-// shuffle packets
packet(0x022d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x023b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x035f,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
@@ -3809,9 +6096,8 @@
packet(0x0967,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
#endif
-// 2016-01-20aRagexeRE
+// 2016-01-20aRagexe, 2016-01-20aRagexeRE
#if PACKETVER == 20160120
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -3843,9 +6129,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-01-27aRagexeRE
+// 2016-01-27aRagexeRE, 2016-01-27aRagexeRE_2, 2016-01-27bRagexeRE, 2016-01-27cRagexe, 2016-01-27dRagexe
#if PACKETVER == 20160127
-// shuffle packets
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -3877,9 +6162,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-02-03aRagexeRE
+// 2016-02-03aRagexe, 2016-02-03aRagexeRE
#if PACKETVER == 20160203
-// shuffle packets
packet(0x0202,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0361,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -3911,9 +6195,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-02-11aRagexeRE
+// 2016-02-11aRagexe, 2016-02-11aRagexeRE
#if PACKETVER == 20160211
-// shuffle packets
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -3945,9 +6228,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-02-17cRagexeRE
+// 2016-02-17aRagexe, 2016-02-17aRagexeRE, 2016-02-17bRagexeRE, 2016-02-17bRagexeRE_2, 2016-02-17cRagexeRE
#if PACKETVER == 20160217
-// shuffle packets
packet(0x0202,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x023b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0362,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
@@ -3979,9 +6261,8 @@
packet(0x0969,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
#endif
-// 2016-02-24bRagexeRE
+// 2016-02-24aRagexe, 2016-02-24aRagexeRE, 2016-02-24bRagexeRE
#if PACKETVER == 20160224
-// shuffle packets
packet(0x022d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0364,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
@@ -4013,9 +6294,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-03-02bRagexeRE
+// 2016-03-02bRagexe, 2016-03-02bRagexeRE
#if PACKETVER == 20160302
-// shuffle packets
packet(0x022d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0367,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0802,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
@@ -4047,9 +6327,8 @@
packet(0x0968,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
#endif
-// 2016-03-09aRagexeRE
+// 2016-03-09aRagexeRE, 2016-03-09cRagexe
#if PACKETVER == 20160309
-// shuffle packets
packet(0x023b,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0281,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0361,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -4081,9 +6360,9 @@
packet(0x096a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
#endif
-// 2016-03-16aRagexeRE
-#if PACKETVER == 20160316
-// shuffle packets
+// 2016-03-16aRagexe, 2016-03-16aRagexeRE, 2016-03-18aRagexe
+#if PACKETVER == 20160316 || \
+ PACKETVER == 20160318
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -4115,9 +6394,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-03-23aRagexeRE
+// 2016-03-23aRagexe, 2016-03-23aRagexeRE, 2016-03-23bRagexe, 2016-03-23bRagexeRE
#if PACKETVER == 20160323
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0365,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -4149,9 +6427,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-03-30aRagexeRE
+// 2016-03-30aRagexe, 2016-03-30aRagexeRE, 2016-03-30bRagexe
#if PACKETVER == 20160330
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0365,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -4183,9 +6460,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-04-06aRagexeRE
+// 2016-04-06aRagexe, 2016-04-06aRagexeRE, 2016-04-06bRagexe
#if PACKETVER == 20160406
-// shuffle packets
packet(0x0364,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x07e4,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0819,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
@@ -4217,9 +6493,8 @@
packet(0x0962,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
#endif
-// 2016-04-14bRagexeRE
+// 2016-04-14aRagexe, 2016-04-14aRagexeRE, 2016-04-14bRagexe, 2016-04-14bRagexeRE, 2016-04-14bRagexe_2, 2016-04-14cRagexe
#if PACKETVER == 20160414
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0362,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -4251,9 +6526,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-04-20aRagexeRE
+// 2016-04-20aRagexeRE, 2016-04-20cRagexe
#if PACKETVER == 20160420
-// shuffle packets
packet(0x022d,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x02c4,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x035f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -4285,9 +6559,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-04-27aRagexeRE
+// 2016-04-27aRagexe, 2016-04-27aRagexeRE
#if PACKETVER == 20160427
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -4319,9 +6592,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-05-04aRagexeRE
+// 2016-05-04aRagexe, 2016-05-04aRagexeRE
#if PACKETVER == 20160504
-// shuffle packets
packet(0x0202,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x0363,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0365,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -4353,9 +6625,8 @@
packet(0x0969,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
#endif
-// 2016-05-11aRagexeRE
+// 2016-05-11aRagexe, 2016-05-11aRagexeRE, 2016-05-11bRagexeRE
#if PACKETVER == 20160511
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -4387,9 +6658,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-05-18aRagexeRE
+// 2016-05-18aRagexe, 2016-05-18aRagexeRE
#if PACKETVER == 20160518
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -4421,9 +6691,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-05-25aRagexeRE
-#if PACKETVER == 20160525
-// shuffle packets
+// 2016-05-25aRagexe, 2016-05-25aRagexeRE, 2016-05-26aRagexe
+#if PACKETVER == 20160525 || \
+ PACKETVER == 20160526
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -4455,9 +6725,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-06-01aRagexeRE
+// 2016-06-01aRagexe, 2016-06-01aRagexeRE
#if PACKETVER == 20160601
-// shuffle packets
packet(0x0202,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x02c4,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -4489,9 +6758,9 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-06-08aRagexeRE
-#if PACKETVER == 20160608
-// shuffle packets
+// 2016-06-08aRagexe, 2016-06-08aRagexeRE, 2016-06-08bRagexe, 2016-06-08bRagexeRE, 2016-06-09aRagexe
+#if PACKETVER == 20160608 || \
+ PACKETVER == 20160609
packet(0x022d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x02c4,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x035f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -4523,9 +6792,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-06-15aRagexeRE
+// 2016-06-15aRagexe, 2016-06-15aRagexeRE
#if PACKETVER == 20160615
-// shuffle packets
packet(0x0281,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x0363,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0364,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -4557,9 +6825,8 @@
packet(0x0961,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
#endif
-// 2016-06-22aRagexeRE
+// 2016-06-22aRagexe, 2016-06-22aRagexeRE
#if PACKETVER == 20160622
-// shuffle packets
packet(0x023b,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x035f,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x0361,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -4591,9 +6858,9 @@
packet(0x0969,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
#endif
-// 2016-06-29aRagexeRE
-#if PACKETVER == 20160629
-// shuffle packets
+// 2016-06-29aRagexe, 2016-06-29aRagexeRE, 2016-06-30aRagexe, 2016-06-30aRagexeRE
+#if PACKETVER == 20160629 || \
+ PACKETVER == 20160630
packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x022d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x035f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -4625,43 +6892,8 @@
packet(0x096a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
#endif
-// 2016-06-30aRagexeRE
-#if PACKETVER == 20160630
-// shuffle packets
- packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x022d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x035f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0363,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0368,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x085c,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x085e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0860,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0861,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0863,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0867,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x086b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0881,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0885,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x088e,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0893,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x091e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0922,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0925,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0926,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x093e,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0946,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0948,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x094a,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0957,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x095a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0968,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0969,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x096a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
-#endif
-
-// 2016-07-06cRagexeRE
+// 2016-07-06bRagexe, 2016-07-06cRagexeRE
#if PACKETVER == 20160706
-// shuffle packets
packet(0x0362,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x0436,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x085f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -4693,9 +6925,8 @@
packet(0x0958,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
#endif
-// 2016-07-13bRagexeRE
+// 2016-07-13aRagexe, 2016-07-13aRagexeRE, 2016-07-13bRagexe, 2016-07-13bRagexeRE, 2016-07-13cRagexe, 2016-07-13dRagexe
#if PACKETVER == 20160713
-// shuffle packets
packet(0x022d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0363,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0364,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -4727,9 +6958,8 @@
packet(0x095b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
#endif
-// 2016-07-20aRagexeRE
+// 2016-07-20aRagexe, 2016-07-20aRagexeRE, 2016-07-20bRagexe, 2016-07-20bRagexeRE
#if PACKETVER == 20160720
-// shuffle packets
packet(0x0362,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0363,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
packet(0x0365,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
@@ -4761,9 +6991,8 @@
packet(0x0969,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
#endif
-// 2016-07-27bRagexeRE
+// 2016-07-27aRagexe, 2016-07-27aRagexeRE, 2016-07-27bRagexe, 2016-07-27bRagexeRE
#if PACKETVER == 20160727
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x023b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x0362,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -4795,9 +7024,8 @@
packet(0x0969,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
#endif
-// 2016-08-03bRagexeRE
+// 2016-08-03bRagexe, 2016-08-03bRagexeRE
#if PACKETVER == 20160803
-// shuffle packets
packet(0x0364,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x085d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0878,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -4829,9 +7057,8 @@
packet(0x096a,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
#endif
-// 2016-08-10aRagexeRE
+// 2016-08-10aRagexe, 2016-08-10aRagexeRE
#if PACKETVER == 20160810
-// shuffle packets
packet(0x0361,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0819,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0838,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -4863,9 +7090,74 @@
packet(0x0967,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
#endif
-// 2016-08-31bRagexeRE
+// 2016-08-17aRagexe, 2016-08-17aRagexeRE
+#if PACKETVER == 20160817
+ packet(0x0364,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0437,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x07e4,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0811,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0819,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x083c,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x085c,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0867,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x086b,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0875,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x087f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0886,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0891,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x089c,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08a5,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08a6,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x08a9,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x08ab,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x08ac,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x08ad,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x091b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0929,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x092d,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0930,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0939,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x093c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0957,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0960,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0963,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+#endif
+
+// 2016-08-24aRagexe, 2016-08-24aRagexeRE
+#if PACKETVER == 20160824
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0934,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2016-08-31aRagexe, 2016-08-31aRagexeRE, 2016-08-31bRagexe, 2016-08-31bRagexeRE
#if PACKETVER == 20160831
-// shuffle packets
packet(0x022d,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0366,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -4897,9 +7189,8 @@
packet(0x0967,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
#endif
-// 2016-09-07aRagexeRE
+// 2016-09-07aRagexe, 2016-09-07aRagexeRE
#if PACKETVER == 20160907
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -4931,9 +7222,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-09-13aRagexeRE
+// 2016-09-13aRagexe, 2016-09-13aRagexeRE
#if PACKETVER == 20160913
-// shuffle packets
packet(0x0361,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0817,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x085b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
@@ -4965,9 +7255,8 @@
packet(0x0968,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
#endif
-// 2016-09-21bRagexeRE
+// 2016-09-21aRagexe, 2016-09-21bRagexeRE
#if PACKETVER == 20160921
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -4999,9 +7288,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-09-28dRagexeRE
+// 2016-09-28cRagexe, 2016-09-28cRagexeRE, 2016-09-28dRagexeRE
#if PACKETVER == 20160928
-// shuffle packets
packet(0x0202,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x0366,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
@@ -5033,9 +7321,8 @@
packet(0x095a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
#endif
-// 2016-10-05aRagexeRE
+// 2016-10-05aRagexe, 2016-10-05aRagexeRE
#if PACKETVER == 20161005
-// shuffle packets
packet(0x0202,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0368,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0838,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
@@ -5067,9 +7354,8 @@
packet(0x0967,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
#endif
-// 2016-10-12aRagexeRE
+// 2016-10-12aRagexe, 2016-10-12aRagexeRE
#if PACKETVER == 20161012
-// shuffle packets
packet(0x023b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0364,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -5101,9 +7387,8 @@
packet(0x0967,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
#endif
-// 2016-10-19aRagexeRE
+// 2016-10-19aRagexe, 2016-10-19aRagexeRE
#if PACKETVER == 20161019
-// shuffle packets
packet(0x022d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -5135,9 +7420,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-10-26bRagexeRE
+// 2016-10-26bRagexe, 2016-10-26bRagexeRE, 2016-10-26cRagexe, 2016-10-26cRagexeRE
#if PACKETVER == 20161026
-// shuffle packets
packet(0x0363,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0438,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0802,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
@@ -5169,9 +7453,9 @@
packet(0x0962,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2016-11-02aRagexeRE
-#if PACKETVER == 20161102
-// shuffle packets
+// 2016-11-02aRagexe, 2016-11-02aRagexeRE, 2016-11-03aRagexe, 2016-11-03aRagexeRE
+#if PACKETVER == 20161102 || \
+ PACKETVER == 20161103
packet(0x0361,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x0367,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0436,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
@@ -5203,43 +7487,8 @@
packet(0x0966,6,clif->pTickSend,2); // CZ_REQUEST_TIME
#endif
-// 2016-11-03aRagexeRE
-#if PACKETVER == 20161103
-// shuffle packets
- packet(0x0361,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0367,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0436,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0802,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0838,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x083c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x085f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0869,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x086c,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x086f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0874,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0886,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x088f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0890,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x089f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x08a2,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x08aa,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x091b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0922,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0925,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0928,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x092f,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0936,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0946,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0949,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x095e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x0964,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0965,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0966,6,clif->pTickSend,2); // CZ_REQUEST_TIME
-#endif
-
-// 2016-11-09bRagexeRE
+// 2016-11-09aRagexe, 2016-11-09aRagexeRE, 2016-11-09bRagexe, 2016-11-09bRagexeRE, 2016-11-09cRagexeRE, 2016-11-09dRagexeRE
#if PACKETVER == 20161109
-// shuffle packets
packet(0x02c4,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0361,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0362,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
@@ -5271,9 +7520,8 @@
packet(0x0956,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2016-11-16cRagexeRE
+// 2016-11-16aRagexe, 2016-11-16bRagexeRE, 2016-11-16cRagexeRE
#if PACKETVER == 20161116
-// shuffle packets
packet(0x0368,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0369,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x0835,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -5305,9 +7553,8 @@
packet(0x0967,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
#endif
-// 2016-11-23aRagexeRE
+// 2016-11-23aRagexe, 2016-11-23aRagexeRE
#if PACKETVER == 20161123
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0362,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -5339,9 +7586,8 @@
packet(0x096a,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
#endif
-// 2016-11-30bRagexeRE
+// 2016-11-30aRagexe, 2016-11-30aRagexeRE, 2016-11-30bRagexe, 2016-11-30bRagexeRE
#if PACKETVER == 20161130
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5373,9 +7619,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-12-07eRagexeRE
+// 2016-12-07cRagexe, 2016-12-07cRagexeRE, 2016-12-07dRagexeRE, 2016-12-07eRagexe, 2016-12-07eRagexeRE
#if PACKETVER == 20161207
-// shuffle packets
packet(0x023b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5407,9 +7652,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-12-14bRagexeRE
+// 2016-12-14bRagexe, 2016-12-14bRagexeRE, 2016-12-14cRagexe, 2016-12-14cRagexeRE
#if PACKETVER == 20161214
-// shuffle packets
packet(0x022d,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0281,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x02c4,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
@@ -5441,9 +7685,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2016-12-21aRagexeRE
+// 2016-12-21aRagexe, 2016-12-21aRagexeRE, 2016-12-21bRagexe, 2016-12-21bRagexeRE, 2016-12-21cRagexeRE, 2016-12-21dRagexeRE
#if PACKETVER == 20161221
-// shuffle packets
packet(0x035f,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0366,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
@@ -5475,9 +7718,8 @@
packet(0x0965,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
#endif
-// 2016-12-28aRagexeRE
+// 2016-12-28aRagexe, 2016-12-28aRagexeRE
#if PACKETVER == 20161228
-// shuffle packets
packet(0x0362,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x085a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x085e,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
@@ -5509,9 +7751,8 @@
packet(0x0944,6,clif->pTickSend,2); // CZ_REQUEST_TIME
#endif
-// 2017-01-04bRagexeRE
+// 2017-01-04aRagexe, 2017-01-04bRagexeRE
#if PACKETVER == 20170104
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5543,9 +7784,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-01-11aRagexeRE
+// 2017-01-11aRagexe, 2017-01-11aRagexeRE
#if PACKETVER == 20170111
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -5577,9 +7817,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-01-18aRagexeRE
+// 2017-01-18aRagexe, 2017-01-18aRagexeRE
#if PACKETVER == 20170118
-// shuffle packets
packet(0x022d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5611,9 +7850,8 @@
packet(0x096a,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
#endif
-// 2017-01-25aRagexeRE
+// 2017-01-25aRagexe, 2017-01-25aRagexeRE
#if PACKETVER == 20170125
-// shuffle packets
packet(0x0438,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0811,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x086e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
@@ -5645,9 +7883,8 @@
packet(0x0968,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2017-02-01aRagexeRE
+// 2017-02-01aRagexe, 2017-02-01aRagexeRE
#if PACKETVER == 20170201
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
@@ -5679,9 +7916,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-02-08aRagexeRE
+// 2017-02-08aRagexeRE, 2017-02-08bRagexe, 2017-02-08bRagexeRE
#if PACKETVER == 20170208
-// shuffle packets
packet(0x02c4,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5713,9 +7949,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-02-15aRagexeRE
+// 2017-02-15aRagexe, 2017-02-15aRagexeRE
#if PACKETVER == 20170215
-// shuffle packets
packet(0x02c4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x035f,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0360,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -5747,9 +7982,8 @@
packet(0x0969,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
#endif
-// 2017-02-22aRagexeRE
+// 2017-02-22aRagexe, 2017-02-22aRagexeRE
#if PACKETVER == 20170222
-// shuffle packets
packet(0x0202,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5781,9 +8015,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-02-28aRagexeRE
+// 2017-02-28aRagexe, 2017-02-28aRagexeRE, 2017-02-28bRagexe
#if PACKETVER == 20170228
-// shuffle packets
packet(0x022d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0360,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0362,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
@@ -5815,9 +8048,8 @@
packet(0x0955,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2017-03-08bRagexeRE
+// 2017-03-08aRagexe, 2017-03-08bRagexeRE
#if PACKETVER == 20170308
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -5849,9 +8081,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-03-15cRagexeRE
+// 2017-03-15cRagexe, 2017-03-15cRagexeRE
#if PACKETVER == 20170315
-// shuffle packets
packet(0x02c4,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x035f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x0360,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
@@ -5883,9 +8114,8 @@
packet(0x0952,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
#endif
-// 2017-03-22aRagexeRE
+// 2017-03-22aRagexe, 2017-03-22aRagexeRE, 2017-03-22bRagexe, 2017-03-22bRagexeRE
#if PACKETVER == 20170322
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -5917,9 +8147,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-03-29dRagexeRE
+// 2017-03-29bRagexe, 2017-03-29cRagexe, 2017-03-29cRagexeRE, 2017-03-29dRagexeRE
#if PACKETVER == 20170329
-// shuffle packets
packet(0x0281,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -5951,9 +8180,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-04-05bRagexeRE
+// 2017-04-05bRagexe, 2017-04-05bRagexeRE, 2017-04-05cRagexe, 2017-04-05cRagexeRE
#if PACKETVER == 20170405
-// shuffle packets
packet(0x022d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0281,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -5985,9 +8213,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-04-12aRagexeRE
+// 2017-04-12aRagexe, 2017-04-12aRagexeRE
#if PACKETVER == 20170412
-// shuffle packets
packet(0x023b,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x0365,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0863,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
@@ -6019,9 +8246,8 @@
packet(0x095d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
#endif
-// 2017-04-19bRagexeRE
+// 2017-04-19aRagexe, 2017-04-19bRagexeRE
#if PACKETVER == 20170419
-// shuffle packets
packet(0x0811,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0819,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x0838,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
@@ -6053,9 +8279,8 @@
packet(0x0965,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
#endif
-// 2017-04-26dRagexeRE
+// 2017-04-26bRagexe, 2017-04-26dRagexeRE
#if PACKETVER == 20170426
-// shuffle packets
packet(0x0281,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -6087,9 +8312,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-05-02dRagexeRE
+// 2017-05-02aRagexe, 2017-05-02bRagexe, 2017-05-02dRagexeRE
#if PACKETVER == 20170502
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -6121,9 +8345,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-05-17aRagexeRE
+// 2017-05-17aRagexe, 2017-05-17aRagexeRE, 2017-05-17bRagexeRE
#if PACKETVER == 20170517
-// shuffle packets
packet(0x0364,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x0367,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0437,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
@@ -6155,9 +8378,8 @@
packet(0x0964,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
#endif
-// 2017-05-24aRagexeRE
+// 2017-05-24aRagexe, 2017-05-24aRagexeRE, 2017-05-24bRagexe
#if PACKETVER == 20170524
-// shuffle packets
packet(0x0364,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x0368,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0802,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
@@ -6189,9 +8411,8 @@
packet(0x0968,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
#endif
-// 2017-05-31aRagexeRE
+// 2017-05-31aRagexe, 2017-05-31aRagexeRE
#if PACKETVER == 20170531
-// shuffle packets
packet(0x0361,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0369,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
packet(0x07e4,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
@@ -6223,9 +8444,8 @@
packet(0x0968,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
#endif
-// 2017-06-07bRagexeRE
+// 2017-06-07bRagexeRE, 2017-06-07cRagexe, 2017-06-07cRagexeRE
#if PACKETVER == 20170607
-// shuffle packets
packet(0x0361,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x0364,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x07e4,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -6257,9 +8477,8 @@
packet(0x0949,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
#endif
-// 2017-06-14bRagexeRE
+// 2017-06-14bRagexe, 2017-06-14bRagexeRE
#if PACKETVER == 20170614
-// shuffle packets
packet(0x023b,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
packet(0x0361,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0364,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
@@ -6291,9 +8510,8 @@
packet(0x0963,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
#endif
-// 2017-06-21aRagexeRE
+// 2017-06-21aRagexeRE, 2017-06-21bRagexe
#if PACKETVER == 20170621
-// shuffle packets
packet(0x0202,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -6325,9 +8543,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-06-28bRagexeRE
+// 2017-06-28bRagexe, 2017-06-28bRagexeRE
#if PACKETVER == 20170628
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -6359,9 +8576,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-07-05aRagexeRE
+// 2017-07-05aRagexe, 2017-07-05aRagexeRE
#if PACKETVER == 20170705
-// shuffle packets
packet(0x0202,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x02c4,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -6393,9 +8609,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-07-12bRagexeRE
+// 2017-07-12bRagexe, 2017-07-12bRagexeRE
#if PACKETVER == 20170712
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -6427,9 +8642,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-07-19aRagexeRE
+// 2017-07-19aRagexe, 2017-07-19aRagexeRE
#if PACKETVER == 20170719
-// shuffle packets
packet(0x022d,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0367,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0368,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -6461,9 +8675,8 @@
packet(0x0966,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
#endif
-// 2017-07-26cRagexeRE
+// 2017-07-26aRagexe, 2017-07-26cRagexeRE
#if PACKETVER == 20170726
-// shuffle packets
packet(0x0363,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0364,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x0366,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
@@ -6495,9 +8708,8 @@
packet(0x0963,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
#endif
-// 2017-08-01aRagexeRE
+// 2017-08-01aRagexe, 2017-08-01aRagexeRE, 2017-08-01bRagexe
#if PACKETVER == 20170801
-// shuffle packets
packet(0x022d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0281,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -6529,9 +8741,41 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-08-16cRagexeRE
+// 2017-08-09cRagexe, 2017-08-09cRagexeRE
+#if PACKETVER == 20170809
+ packet(0x022d,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0281,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0364,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0366,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0367,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x07e4,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0802,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0835,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0868,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x086e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x086f,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0876,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x087d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0880,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x088c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0890,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0892,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0895,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0899,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a3,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x08a6,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0918,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0921,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x092a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x092b,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0931,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0939,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x093b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0940,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+#endif
+
+// 2017-08-16cRagexe, 2017-08-16cRagexeRE, 2017-08-16dRagexe, 2017-08-16dRagexeRE
#if PACKETVER == 20170816
-// shuffle packets
packet(0x022d,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x035f,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0361,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
@@ -6563,9 +8807,8 @@
packet(0x0960,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
#endif
-// 2017-08-23aRagexeRE
+// 2017-08-23aRagexe, 2017-08-23aRagexeRE
#if PACKETVER == 20170823
-// shuffle packets
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -6597,9 +8840,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-08-30bRagexeRE
+// 2017-08-30aRagexe, 2017-08-30aRagexeRE, 2017-08-30bRagexe, 2017-08-30bRagexeRE
#if PACKETVER == 20170830
-// shuffle packets
packet(0x0281,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x02c4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
packet(0x0363,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
@@ -6631,9 +8873,8 @@
packet(0x0959,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
#endif
-// 2017-09-06cRagexeRE
+// 2017-09-06cRagexe, 2017-09-06cRagexeRE
#if PACKETVER == 20170906
-// shuffle packets
packet(0x0202,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0281,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x02c4,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
@@ -6665,9 +8906,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-09-13bRagexeRE
+// 2017-09-13bRagexeRE, 2017-09-13cRagexe
#if PACKETVER == 20170913
-// shuffle packets
packet(0x0281,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x035f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
packet(0x0437,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -6699,9 +8939,8 @@
packet(0x095c,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
#endif
-// 2017-09-20bRagexeRE
+// 2017-09-20aRagexe, 2017-09-20bRagexeRE
#if PACKETVER == 20170920
-// shuffle packets
packet(0x0369,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
packet(0x0436,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x07ec,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
@@ -6733,9 +8972,8 @@
packet(0x096a,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
#endif
-// 2017-09-27bRagexeRE
+// 2017-09-27bRagexe, 2017-09-27bRagexeRE, 2017-09-27cRagexe, 2017-09-27dRagexe, 2017-09-27dRagexeRE
#if PACKETVER == 20170927
-// shuffle packets
packet(0x02c4,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x035f,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x0361,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -6767,9 +9005,8 @@
packet(0x095a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
#endif
-// 2017-10-02cRagexeRE
+// 2017-10-02cRagexe, 2017-10-02cRagexeRE
#if PACKETVER == 20171002
-// shuffle packets
packet(0x022d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
@@ -6801,9 +9038,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-10-11bRagexeRE
+// 2017-10-11aRagexe, 2017-10-11aRagexeRE, 2017-10-11bRagexe, 2017-10-11bRagexeRE
#if PACKETVER == 20171011
-// shuffle packets
packet(0x023b,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -6835,9 +9071,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-10-18aRagexeRE
+// 2017-10-18aRagexe, 2017-10-18aRagexeRE
#if PACKETVER == 20171018
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0363,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
@@ -6869,9 +9104,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-10-25eRagexeRE
+// 2017-10-25bRagexe, 2017-10-25bRagexeRE, 2017-10-25cRagexe, 2017-10-25cRagexeRE, 2017-10-25dRagexe, 2017-10-25dRagexeRE, 2017-10-25eRagexe, 2017-10-25eRagexeRE
#if PACKETVER == 20171025
-// shuffle packets
packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
@@ -6903,9 +9137,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-11-01bRagexeRE
+// 2017-11-01aRagexe, 2017-11-01bRagexeRE
#if PACKETVER == 20171101
-// shuffle packets
packet(0x022d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x0368,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0369,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
@@ -6937,9 +9170,8 @@
packet(0x0966,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
#endif
-// 2017-11-08bRagexeRE
+// 2017-11-08aRagexe, 2017-11-08bRagexeRE
#if PACKETVER == 20171108
-// shuffle packets
packet(0x0202,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0361,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x07e4,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
@@ -6971,9 +9203,8 @@
packet(0x0967,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
#endif
-// 2017-11-15aRagexeRE
+// 2017-11-15aRagexe, 2017-11-15aRagexeRE
#if PACKETVER == 20171115
-// shuffle packets
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
packet(0x0365,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
@@ -7005,9 +9236,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-11-22bRagexeRE
+// 2017-11-22aRagexe, 2017-11-22bRagexeRE
#if PACKETVER == 20171122
-// shuffle packets
packet(0x0281,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x02c4,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x035f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
@@ -7039,9 +9269,8 @@
packet(0x0968,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
#endif
-// 2017-11-29aRagexeRE
+// 2017-11-29aRagexe, 2017-11-29aRagexeRE
#if PACKETVER == 20171129
-// shuffle packets
packet(0x02c4,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0361,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
@@ -7073,9 +9302,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-12-06aRagexeRE
+// 2017-12-06aRagexeRE, 2017-12-06bRagexe, 2017-12-06cRagexe
#if PACKETVER == 20171206
-// shuffle packets
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
@@ -7107,9 +9335,8 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-12-13bRagexeRE
+// 2017-12-13bRagexe, 2017-12-13bRagexeRE
#if PACKETVER == 20171213
-// shuffle packets
packet(0x0202,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
@@ -7141,72 +9368,50 @@
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-
-// kro zero clients
-#ifdef PACKETVER_ZERO
-
-// from 2017-10-19aRagexe_zero to 2017-11-13bRagexe_zero
-#if PACKETVER == 20171019 || \
- PACKETVER == 20171023 || \
- PACKETVER == 20171024 || \
- PACKETVER == 20171025 || \
- PACKETVER == 20171027 || \
- PACKETVER == 20171030 || \
- PACKETVER == 20171031 || \
- PACKETVER == 20171109 || \
- PACKETVER == 20171113
-// shuffle packets
- packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0281,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x02c4,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x035f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0360,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0361,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0362,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0363,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0364,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0365,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0366,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0367,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0368,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0369,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0436,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0437,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0438,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x07e4,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x07ec,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0802,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0811,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0815,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0817,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0819,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0835,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0838,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x083c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+// 2017-12-20aRagexe, 2017-12-20aRagexeRE
+#if PACKETVER == 20171220
+ packet(0x0281,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0366,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0369,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0436,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0437,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x085e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0861,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0872,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0873,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0880,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0882,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0885,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x088c,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0899,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x089e,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x08a7,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x091b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x091e,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0924,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0929,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0933,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x093e,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0941,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0946,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x094e,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0951,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0957,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0960,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0964,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
#endif
-// 2017-11-15bRagexe_zero to 2017-11-17aRagexe_zero
-#if PACKETVER == 20171115 || \
- PACKETVER == 20171116 || \
- PACKETVER == 20171117
-// shuffle packets
- packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+// 2017-12-27aRagexe, 2017-12-27aRagexeRE
+#if PACKETVER == 20171227
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0361,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0369,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0802,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
@@ -7214,95 +9419,126 @@
packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0860,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0881,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x091c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0922,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0959,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0966,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x087d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0888,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x088a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x088d,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x08a0,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a5,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x092c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x092e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0938,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0945,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0946,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0969,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x096a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
#endif
-// 2017-11-21aRagexe_zero
-#if PACKETVER == 20171121 || \
- PACKETVER == 20171122
-// shuffle packets
- packet(0x0202,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x022d,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+// 2018-01-03aRagexe, 2018-01-03aRagexeRE, 2018-01-03bRagexe, 2018-01-03bRagexeRE
+#if PACKETVER == 20180103
+ packet(0x02c4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0363,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0865,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x086b,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x086d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0872,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0876,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0879,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x088e,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0899,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x089f,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x08a9,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08ab,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x08ac,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x091d,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0922,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0926,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0927,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x092c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0935,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0938,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0941,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0946,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0948,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x094e,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x095d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x095f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0960,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+#endif
+
+// 2018-01-17aRagexe, 2018-01-17aRagexeRE
+#if PACKETVER == 20180117
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0363,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0811,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0866,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0889,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0892,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x089e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x08ad,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0918,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x091f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0928,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0943,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0950,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0875,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-11-23dRagexe_zero
-#if PACKETVER == 20171123
-// shuffle packets
+// 2018-01-24bRagexe, 2018-01-24bRagexeRE, 2018-01-31Ragexe
+#if PACKETVER == 20180124 || \
+ PACKETVER == 20180131
packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0367,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0802,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0819,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x085f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0860,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0876,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0882,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x088c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0896,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x089e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x08a8,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x092b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0930,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0935,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x0947,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x0960,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x085f,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0868,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x086a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x086f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x087a,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0888,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0890,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0919,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0940,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0946,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x094d,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0958,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0961,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-11-27cRagexe_zero to 2017-11-28aRagexe_zero
-#if PACKETVER == 20171127 || \
- PACKETVER == 20171128
-// shuffle packets
- packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+// 2018-02-07bRagexe, 2018-02-07bRagexeRE, 2018-02-07cRagexe
+#if PACKETVER == 20180207
packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x035f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0360,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
@@ -7310,7 +9546,6 @@
packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
@@ -7323,152 +9558,114 @@
packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0893,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0870,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0881,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x092c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x092e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0940,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0950,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
#endif
-// 2017-11-30bRagexe_zero
-#if PACKETVER == 20171130
-// shuffle packets
- packet(0x0361,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0864,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x086f,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x0871,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0872,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0875,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0878,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0881,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0884,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0886,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0887,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x088b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0894,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0899,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x08a0,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x08a7,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0925,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0928,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0930,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0931,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0935,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x093a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0947,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x094c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x094f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x095b,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x095f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0960,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0965,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+// 2018-02-13aRagexe, 2018-02-13aRagexeRE, 2018-02-13bRagexe
+#if PACKETVER == 20180213
+ packet(0x0369,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0802,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0817,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x085a,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x086f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0874,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0875,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0878,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x087b,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0882,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x088c,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0892,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0898,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x089c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x08a3,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x08a5,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08a9,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08ad,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0917,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0922,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0924,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0926,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0933,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0936,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x093c,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0943,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0955,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x095a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0962,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
#endif
-// 2017-12-04bRagexe_zero
-#if PACKETVER == 20171204
-// shuffle packets
- packet(0x0281,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x085b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x086f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x087d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0885,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x0887,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0892,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0896,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x08aa,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0917,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x091b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0921,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0924,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x0937,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0960,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+// 2018-02-21aRagexeRE, 2018-02-21bRagexe, 2018-02-21bRagexeRE
+#if PACKETVER == 20180221
+ packet(0x0202,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0366,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0436,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0838,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0867,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x086c,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x086f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0871,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0876,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0879,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x087d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0880,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0881,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0883,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x088f,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0891,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0897,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0899,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x089d,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0917,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x091e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0929,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x093d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x094b,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x094d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x094e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0957,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0964,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x096a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
#endif
-// 2017-12-06dRagexe_zero, 2017-12-08dRagexe_zero, 2017-12-08cRagexe_zero, 2017-12-09bRagexe_zero
-#if PACKETVER == 20171206 || \
- PACKETVER == 20171208 || \
- PACKETVER == 20171209 || \
- PACKETVER == 20171210 || \
- PACKETVER == 20171211 || \
- PACKETVER == 20171212 || \
- PACKETVER == 20171213
-// shuffle packets
- packet(0x0281,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0366,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0436,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x0835,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x083c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x0860,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x0862,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x0864,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0870,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0878,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
- packet(0x087a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x087b,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x0885,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x088d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x0893,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x0897,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x089e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x08a4,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x08ac,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x0920,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0934,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0936,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x093a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0940,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+// 2018-03-07bRagexe, 2018-03-07bRagexeRE, 2018-03-09aRagexe
+#if PACKETVER == 20180307 || \
+ PACKETVER == 20180309
+ packet(0x0281,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x035f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0437,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x07e4,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0861,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0862,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0864,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x086c,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0870,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0872,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0877,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x088d,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0893,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x089b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x08a6,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x08aa,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08ab,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0917,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0920,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0937,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0939,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x093d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
packet(0x0941,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x0959,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x095b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x095c,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x095f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
-#endif
-
-// 2017-12-14cRagexe_zero
-#if PACKETVER == 20171214
-// shuffle packets
- packet(0x023b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
- packet(0x02c4,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
- packet(0x0438,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
- packet(0x085b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
- packet(0x085e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
- packet(0x0862,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
- packet(0x0864,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
- packet(0x086a,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
- packet(0x0871,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
- packet(0x0873,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
- packet(0x0886,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
- packet(0x088b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
- packet(0x088c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
- packet(0x0892,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
- packet(0x0894,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
- packet(0x0897,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
- packet(0x08a3,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
- packet(0x08a5,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
- packet(0x08ac,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
- packet(0x0933,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
- packet(0x094a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
- packet(0x094d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
- packet(0x094f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
- packet(0x0951,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
- packet(0x095a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
- packet(0x095b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
- packet(0x0960,6,clif->pTickSend,2); // CZ_REQUEST_TIME
- packet(0x0969,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
- packet(0x096a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0944,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0948,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0951,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0954,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0957,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0969,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
#endif
-#endif // PACKETVER_ZERO
-#endif /* MAP_PACKETS_SHUFFLE_H */
+#endif /* MAP_PACKETS_SHUFFLE_MAIN_H */
diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h
new file mode 100644
index 000000000..463ab1679
--- /dev/null
+++ b/src/map/packets_shuffle_zero.h
@@ -0,0 +1,656 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2013-2018 Hercules Dev Team
+ *
+ * Hercules is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+//Included directly by clif.c in packet_loaddb()
+
+#ifndef MAP_PACKETS_SHUFFLE_ZERO_H
+#define MAP_PACKETS_SHUFFLE_ZERO_H
+
+#ifndef packet
+ #define packet(a,b,...)
+#endif
+
+/*
+ * packet syntax
+ * - packet(packet_id,length,function,offset ( specifies the offset of a packet field in bytes from the begin of the packet ),...)
+ * - Example: packet(0x0072,19,clif->pWantToConnection,2,6,10,14,18);
+ */
+
+/* This file is autogenerated, please do not commit manual changes */
+
+
+// 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero
+#if PACKETVER == 20171019 || \
+ PACKETVER == 20171023 || \
+ PACKETVER == 20171024 || \
+ PACKETVER == 20171025 || \
+ PACKETVER == 20171027 || \
+ PACKETVER == 20171030 || \
+ PACKETVER == 20171031 || \
+ PACKETVER == 20171109 || \
+ PACKETVER == 20171113
+ packet(0x0202,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x022d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x023b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0281,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x02c4,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x035f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0360,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0361,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0362,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0363,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0364,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0365,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0366,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0367,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0369,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0436,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0437,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0438,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x07e4,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x07ec,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0802,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0811,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0815,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0817,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0819,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0835,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0838,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x083c,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+#endif
+
+// 2017-11-15aRagexe_zero, 2017-11-15bRagexe_zero, 2017-11-16aRagexe_zero, 2017-11-17aRagexe_zero
+#if PACKETVER == 20171115 || \
+ PACKETVER == 20171116 || \
+ PACKETVER == 20171117
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0860,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0881,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x091c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0922,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0959,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0966,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-11-21aRagexe_zero, 2017-11-22aRagexe_zero
+#if PACKETVER == 20171121 || \
+ PACKETVER == 20171122
+ packet(0x0202,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x022d,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0866,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0889,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0892,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x089e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08ad,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0918,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x091f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0928,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0943,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0950,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-11-23dRagexe_zero
+#if PACKETVER == 20171123
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0367,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0860,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0876,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0882,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x088c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0896,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x089e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x08a8,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x092b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0930,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0935,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0947,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0960,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-11-27aRagexe_zero, 2017-11-27cRagexe_zero, 2017-11-28aRagexe_zero
+#if PACKETVER == 20171127 || \
+ PACKETVER == 20171128
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0893,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-11-30bRagexe_zero
+#if PACKETVER == 20171130
+ packet(0x0361,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0864,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x086f,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0871,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0872,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0875,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0878,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0881,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0884,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0886,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0887,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x088b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0894,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0899,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a0,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x08a7,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0925,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0928,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0930,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0931,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0935,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x093a,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0947,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x094c,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x094f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x095b,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x095f,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0960,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0965,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+#endif
+
+// 2017-12-04bRagexe_zero
+#if PACKETVER == 20171204
+ packet(0x0281,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x086f,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x087d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0885,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0887,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0892,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0896,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08aa,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0917,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0921,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0924,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0937,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0960,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-12-06aRagexe_zero, 2017-12-06bRagexe_zero, 2017-12-06cRagexe_zero, 2017-12-06dRagexe_zero, 2017-12-08aRagexe_zero, 2017-12-08cRagexe_zero, 2017-12-08dRagexe_zero, 2017-12-09bRagexe_zero, 2017-12-09cRagexe_zero, 2017-12-10aRagexe_zero, 2017-12-11bRagexe_zero, 2017-12-12aRagexe_zero, 2017-12-13aRagexe_zero, 2017-12-13bRagexe_zero, 2017-12-13cRagexe_zero
+#if PACKETVER == 20171206 || \
+ PACKETVER == 20171208 || \
+ PACKETVER == 20171209 || \
+ PACKETVER == 20171210 || \
+ PACKETVER == 20171211 || \
+ PACKETVER == 20171212 || \
+ PACKETVER == 20171213
+ packet(0x0281,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0366,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0436,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0835,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x083c,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0860,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0862,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0864,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0870,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0878,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x087a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x087b,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0885,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x088d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0893,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0897,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x089e,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x08a4,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x08ac,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0920,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0934,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0936,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x093a,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0940,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0941,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0959,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x095b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x095c,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x095f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+#endif
+
+// 2017-12-14cRagexe_zero
+#if PACKETVER == 20171214
+ packet(0x023b,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x02c4,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0438,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x085b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x085e,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0862,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0864,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x086a,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0871,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0873,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0886,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x088b,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x088c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0892,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0894,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0897,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x08a3,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a5,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x08ac,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0933,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x094a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x094d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x094f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0951,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x095a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x095b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0960,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0969,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x096a,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+#endif
+
+// 2017-12-20aRagexe_zero, 2017-12-21aRagexe_zero, 2017-12-21bRagexe_zero
+#if PACKETVER == 20171220 || \
+ PACKETVER == 20171221
+ packet(0x022d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0281,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0438,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x07ec,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0819,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0835,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0838,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x085f,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0867,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x086c,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0872,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x087a,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x087e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0899,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x089b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x089c,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08a3,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x08a5,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x08ad,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x091f,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0921,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x092d,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x092e,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0932,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0934,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0937,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x094d,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x095b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+#endif
+
+// 2017-12-27bRagexe_zero, 2017-12-29aRagexe_zero
+#if PACKETVER == 20171227 || \
+ PACKETVER == 20171229
+ packet(0x02c4,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0860,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x086c,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0871,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0872,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0874,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0876,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0877,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0878,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x087b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0885,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0889,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x088b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0894,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x089f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x091c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0920,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0925,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x092d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0930,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0939,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x093e,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0941,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0945,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0946,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x094b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x095e,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0967,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0968,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+#endif
+
+// 2018-01-03aRagexe_zero
+#if PACKETVER == 20180103
+ packet(0x035f,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0360,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x07e4,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x083c,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0860,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0866,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x086d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0871,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0872,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0874,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x087b,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0885,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0888,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0890,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0896,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x089d,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a6,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x091e,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0924,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0938,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x093b,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0956,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0958,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x095b,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x095d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0964,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0966,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x096a,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+#endif
+
+// 2018-01-17aRagexe_zero
+#if PACKETVER == 20180117
+ packet(0x0361,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0364,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0438,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x07e4,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x083c,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0866,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x086e,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x086f,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x087d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0881,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0884,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0886,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0890,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0891,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0893,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0899,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x089d,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x089e,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0919,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x091c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x091f,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0921,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0928,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0929,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x092d,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0933,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0946,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x095e,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0963,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+#endif
+
+// 2018-01-31dRagexe_zero
+#if PACKETVER == 20180131
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0367,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0940,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2018-02-07bRagexe_zero
+#if PACKETVER == 20180207
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0967,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2018-02-13aRagexe_zero
+#if PACKETVER == 20180213
+ packet(0x022d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x02c4,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x035f,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0361,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0802,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0815,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0838,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x085a,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x085d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0868,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x087b,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0882,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0887,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0888,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x088a,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x088e,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0899,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0917,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x091d,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0922,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0930,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0941,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0942,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0947,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x094d,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0958,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x095b,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x095c,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0967,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+#endif
+
+// 2018-02-21aRagexe_zero
+#if PACKETVER == 20180221
+ packet(0x02c4,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0362,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0364,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0438,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0817,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x085b,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x086a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0878,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0880,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0884,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x088d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0892,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0895,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x08a1,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x08a3,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x091b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0921,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0923,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x092d,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0932,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x093b,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x093d,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x093e,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0942,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0951,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0952,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0958,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0959,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x095d,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+#endif
+
+// 2018-02-28bRagexe_zero, 2018-03-07aRagexe_zero, 2018-03-09aRagexe_zero
+#if PACKETVER == 20180228 || \
+ PACKETVER == 20180307 || \
+ PACKETVER == 20180309
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0930,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+
+#endif /* MAP_PACKETS_SHUFFLE_ZERO_H */
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index e1395e949..2a65eb6cf 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -191,7 +191,9 @@ enum packet_headers {
skill_entryType = 0x9ca,
#endif
graffiti_entryType = 0x1c9,
-#if PACKETVER > 20130000 /* not sure date */
+#ifdef PACKETVER_ZERO
+ dropflooritemType = 0xadd,
+#elif PACKETVER > 20130000 /* not sure date */
dropflooritemType = 0x84b,
#else
dropflooritemType = 0x9e,
@@ -333,6 +335,28 @@ enum packet_headers {
#if PACKETVER >= 20151223
skillscale = 0xA41,
#endif
+#if PACKETVER >= 20130821
+ progressbarunit = 0x09D1,
+#endif
+#if PACKETVER >= 20171207
+ partymemberinfo = 0x0ae4,
+ partyinfo = 0x0ae5,
+#elif PACKETVER >= 20170502
+// [4144] probably 0xa43 packet can works on older clients because in client was added in 2015-10-07
+ partymemberinfo = 0x0a43,
+ partyinfo = 0x0a44,
+#else
+ partymemberinfo = 0x01e9,
+ partyinfo = 0x00fb,
+#endif
+#if PACKETVER >= 20120702
+ clanBasicInfo = 0x098A, ///< ZC_CLANINFO
+#endif
+#if PACKETVER >= 20120716
+ clanOnlineCount = 0x0988, ///< ZC_NOTIFY_CLAN_CONNECTINFO
+ clanLeave = 0x0989, ///< ZC_ACK_CLAN_LEAVE
+ clanMessage = 0x098E, ///< ZC_NOTIFY_CLAN_CHAT
+#endif
};
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
@@ -495,6 +519,10 @@ struct packet_dropflooritem {
uint8 subX;
uint8 subY;
int16 count;
+#ifdef PACKETVER_ZERO
+ int8 showdropeffect;
+ int16 dropeffectmode;
+#endif
} __attribute__((packed));
struct packet_idle_unit2 {
#if PACKETVER < 20091103
@@ -1491,6 +1519,85 @@ struct PACKET_ZC_SKILL_SCALE {
uint32 casttime;
} __attribute__((packed));
+struct ZC_PROGRESS_ACTOR {
+ int16 PacketType;
+ int32 GID;
+ int32 color;
+ uint32 time;
+} __attribute__((packed));
+
+struct PACKET_ZC_ADD_MEMBER_TO_GROUP {
+ int16 packetType;
+ uint32 AID;
+#if PACKETVER >= 20171207
+ uint32 GID;
+#endif
+ uint32 leader;
+// [4144] probably 0xa43 packet can works on older clients because in client was added in 2015-10-07
+#if PACKETVER >= 20170502
+ int16 class;
+ int16 baseLevel;
+#endif
+ int16 x;
+ int16 y;
+ uint8 offline;
+ char partyName[NAME_LENGTH];
+ char playerName[NAME_LENGTH];
+ char mapName[MAP_NAME_LENGTH_EXT];
+ int8 sharePickup;
+ int8 shareLoot;
+} __attribute__((packed));
+
+struct PACKET_ZC_GROUP_LIST_SUB {
+ uint32 AID;
+#if PACKETVER >= 20171207
+ uint32 GID;
+#endif
+ char playerName[NAME_LENGTH];
+ char mapName[MAP_NAME_LENGTH_EXT];
+ uint8 leader;
+ uint8 offline;
+#if PACKETVER >= 20170502
+ int16 class;
+ int16 baseLevel;
+#endif
+} __attribute__((packed));
+
+struct PACKET_ZC_GROUP_LIST {
+ int16 packetType;
+ int16 packetLen;
+ char partyName[NAME_LENGTH];
+ struct PACKET_ZC_GROUP_LIST_SUB members[];
+} __attribute__((packed));
+
+struct PACKET_ZC_CLANINFO {
+ int16 PacketType;
+ int16 PacketLength;
+ uint32 ClanID;
+ char ClanName[NAME_LENGTH];
+ char MasterName[NAME_LENGTH];
+ char Map[MAP_NAME_LENGTH_EXT];
+ uint8 AllyCount;
+ uint8 AntagonistCount;
+} __attribute__((packed));
+
+struct PACKET_ZC_NOTIFY_CLAN_CONNECTINFO {
+ int16 PacketType;
+ int16 NumConnect;
+ int16 NumTotal;
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_CLAN_LEAVE {
+ int16 PacketType;
+} __attribute__((packed));
+
+struct PACKET_ZC_NOTIFY_CLAN_CHAT {
+ int16 PacketType;
+ int16 PacketLength;
+ char MemberName[NAME_LENGTH];
+ char Message[];
+} __attribute__((packed));
+
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#pragma pack(pop)
#endif // not NetBSD < 6 / Solaris
diff --git a/src/map/pc.c b/src/map/pc.c
index d5d359557..0b30b1221 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -29,6 +29,7 @@
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/date.h" // is_day_of_*()
#include "map/duel.h"
@@ -1524,6 +1525,12 @@ int pc_reg_received(struct map_session_data *sd)
status_calc_pc(sd,SCO_FIRST|SCO_FORCE);
chrif->scdata_request(sd->status.account_id, sd->status.char_id);
+ if (sd->status.clan_id)
+ clan->member_online(sd, true);
+
+ //Auth is fully okay, update last_login
+ sd->status.last_login = time(NULL);
+
// Storage Request
intif->request_account_storage(sd);
@@ -4781,7 +4788,7 @@ int pc_dropitem(struct map_session_data *sd,int n,int amount)
return 0;
}
- if (!map->addflooritem(&sd->bl, &sd->status.inventory[n], amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 2))
+ if (!map->addflooritem(&sd->bl, &sd->status.inventory[n], amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 2, false))
return 0;
pc->delitem(sd, n, amount, 1, DELITEM_NORMAL, LOG_TYPE_PICKDROP_PLAYER);
@@ -7962,7 +7969,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
item_tmp.card[1]=0;
item_tmp.card[2]=GetWord(sd->status.char_id,0); // CharId
item_tmp.card[3]=GetWord(sd->status.char_id,1);
- map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
// activate Steel body if a super novice dies at 99+% exp [celest]
diff --git a/src/map/pc.h b/src/map/pc.h
index df0df979d..a01152df5 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -443,6 +443,7 @@ END_ZEROED_BLOCK;
int party_invite, party_invite_account; // for handling party invitation (holds party id and account id)
int adopt_invite; // Adoption
struct guild *guild;/* [Ind/Hercules] speed everything up */
+ struct clan *clan;
int guild_invite,guild_invite_account;
int guild_emblem_id,guild_alliance,guild_alliance_account;
short guild_x,guild_y; // For guildmate position display. [Skotlex] should be short [zzo]
diff --git a/src/map/pet.c b/src/map/pet.c
index 9ac496659..2997a4b5a 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -325,7 +325,7 @@ int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
tmp_item.card[3] = pd->pet.rename_flag;
if((flag = pc->additem(sd,&tmp_item,1,LOG_TYPE_EGG))) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
pd->pet.incubate = 1;
unit->free(&pd->bl,CLR_OUTSIGHT);
@@ -610,7 +610,7 @@ bool pet_get_egg(int account_id, short pet_class, int pet_id ) {
tmp_item.card[3] = 0; //New pets are not named.
if((ret = pc->additem(sd,&tmp_item,1,LOG_TYPE_PICKDROP_PLAYER))) {
clif->additem(sd,0,0,ret);
- map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
return true;
@@ -751,7 +751,7 @@ int pet_unequipitem(struct map_session_data *sd, struct pet_data *pd) {
tmp_item.identify = 1;
if((flag = pc->additem(sd,&tmp_item,1,LOG_TYPE_CONSUME))) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
if( battle_config.pet_equip_required )
{ // Skotlex: halt support timers if needed
@@ -1026,7 +1026,7 @@ int pet_delay_item_drop(int tid, int64 tick, int id, intptr_t data) {
struct item_drop *ditem_prev;
map->addflooritem(NULL, &ditem->item_data, ditem->item_data.amount,
list->m, list->x, list->y,
- list->first_charid, list->second_charid, list->third_charid, 0);
+ list->first_charid, list->second_charid, list->third_charid, 0, false);
ditem_prev = ditem;
ditem = ditem->next;
ers_free(pet->item_drop_ers, ditem_prev);
diff --git a/src/map/rodex.c b/src/map/rodex.c
index 02e757a10..0e9e4ee2a 100644
--- a/src/map/rodex.c
+++ b/src/map/rodex.c
@@ -216,11 +216,11 @@ void rodex_check_player(struct map_session_data *sd, const char *name, int *base
/// @param title : Mail Title
/// @param zeny : Amount of zeny attached
/// Returns result code:
-/// RODEX_SEND_MAIL_SUCCESS = 0,
-/// RODEX_SEND_MAIL_FATAL_ERROR = 1,
-/// RODEX_SEND_MAIL_COUNT_ERROR = 2,
-/// RODEX_SEND_MAIL_ITEM_ERROR = 3,
-/// RODEX_SEND_MAIL_RECEIVER_ERROR = 4
+/// RODEX_SEND_MAIL_SUCCESS = 0,
+/// RODEX_SEND_MAIL_FATAL_ERROR = 1,
+/// RODEX_SEND_MAIL_COUNT_ERROR = 2,
+/// RODEX_SEND_MAIL_ITEM_ERROR = 3,
+/// RODEX_SEND_MAIL_RECEIVER_ERROR = 4
int rodex_send_mail(struct map_session_data *sd, const char *receiver_name, const char *body, const char *title, int64 zeny)
{
int i;
@@ -369,15 +369,24 @@ struct rodex_message *rodex_get_mail(struct map_session_data *sd, int64 mail_id)
{
int i;
struct rodex_message *msg;
+ int char_id;
nullpo_retr(NULL, sd);
- ARR_FIND(0, VECTOR_LENGTH(sd->rodex.messages), i, VECTOR_INDEX(sd->rodex.messages, i).id == mail_id && VECTOR_INDEX(sd->rodex.messages, i).is_deleted != true);
+ ARR_FIND(0, VECTOR_LENGTH(sd->rodex.messages), i, VECTOR_INDEX(sd->rodex.messages, i).id == mail_id);
if (i == VECTOR_LENGTH(sd->rodex.messages))
return NULL;
msg = &VECTOR_INDEX(sd->rodex.messages, i);
+ char_id = sd->status.char_id;
+
+ if ((msg->is_deleted == true)
+ || (msg->expire_date < time(NULL) && ((msg->receiver_accountid > 0) || (msg->receiver_id == char_id && msg->sender_id != char_id)))
+ || ((msg->send_date + 2 * RODEX_EXPIRE) < time(NULL))
+ )
+ return NULL;
+
return msg;
}
@@ -393,9 +402,16 @@ void rodex_read_mail(struct map_session_data *sd, int64 mail_id)
msg = rodex->get_mail(sd, mail_id);
nullpo_retv(msg);
- if (msg->is_read == false) {
- intif->rodex_updatemail(msg->id, 0);
- msg->is_read = true;
+ if (msg->opentype == RODEX_OPENTYPE_RETURN) {
+ if (msg->sender_read == false) {
+ intif->rodex_updatemail(msg->id, 4);
+ msg->sender_read = true;
+ }
+ } else {
+ if (msg->is_read == false) {
+ intif->rodex_updatemail(msg->id, 0);
+ msg->is_read = true;
+ }
}
clif->rodex_read_mail(sd, msg->opentype, msg);
@@ -445,6 +461,7 @@ void rodex_get_zeny(struct map_session_data *sd, int8 opentype, int64 mail_id)
return;
}
+ msg->type &= ~MAIL_TYPE_ZENY;
msg->zeny = 0;
intif->rodex_updatemail(mail_id, 1);
@@ -528,6 +545,8 @@ void rodex_get_items(struct map_session_data *sd, int8 opentype, int64 mail_id)
}
}
+ msg->type &= ~MAIL_TYPE_ITEM;
+ msg->items_count = 0;
intif->rodex_updatemail(mail_id, 2);
clif->rodex_request_items(sd, opentype, mail_id, RODEX_GET_ITEMS_SUCCESS);
@@ -537,8 +556,8 @@ void rodex_get_items(struct map_session_data *sd, int8 opentype, int64 mail_id)
/// - should be called everytime we're going to stop using rodex in this character
/// @param sd : Target to clean
/// @param flag :
-/// 0 - clear everything
-/// 1 - clear tmp only
+/// 0 - clear everything
+/// 1 - clear tmp only
void rodex_clean(struct map_session_data *sd, int8 flag)
{
nullpo_retv(sd);
diff --git a/src/map/script.c b/src/map/script.c
index 7f7aba183..d653800cc 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -29,6 +29,7 @@
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/date.h"
#include "map/elemental.h"
@@ -5593,6 +5594,8 @@ int script_reload(void)
itemdb->name_constants();
+ clan->set_constants();
+
sysinfo->vcsrevision_reload();
return 0;
@@ -7923,7 +7926,7 @@ BUILDIN(getitem) {
if ((flag = pc->additem(sd, &it, get_count, LOG_TYPE_SCRIPT))) {
clif->additem(sd, 0, 0, flag);
if( pc->candrop(sd,&it) )
- map->addflooritem(&sd->bl, &it, get_count, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &it, get_count, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -8031,7 +8034,7 @@ BUILDIN(getitem2)
if ((flag = pc->additem(sd, &item_tmp, get_count, LOG_TYPE_SCRIPT))) {
clif->additem(sd, 0, 0, flag);
if( pc->candrop(sd,&item_tmp) )
- map->addflooritem(&sd->bl, &item_tmp, get_count, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, get_count, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -8224,7 +8227,7 @@ BUILDIN(makeitem)
item_tmp.nameid = nameid;
item_tmp.identify=1;
- map->addflooritem(NULL, &item_tmp, amount, m, x, y, 0, 0, 0, 0);
+ map->addflooritem(NULL, &item_tmp, amount, m, x, y, 0, 0, 0, 0, false);
return true;
}
@@ -8281,7 +8284,7 @@ BUILDIN(makeitem2)
map->search_freecell(NULL, m, &x, &y, -1, -1, 1);
} else {
range = (script_hasdata(st, 14) ? cap_value(script_getnum(st, 14), 1, battle_config.area_size) : 3);
- map->search_freecell(&sd->bl, sd->bl.m, &x, &y, range, range, 0); // Locate spot next to player.
+ map->search_freecell(&sd->bl, sd->bl.m, &x, &y, range, range, 0); // Locate spot next to player.
}
}
@@ -8308,7 +8311,7 @@ BUILDIN(makeitem2)
item_tmp.card[2] = (short)script_getnum(st, 9);
item_tmp.card[3] = (short)script_getnum(st, 10);
- map->addflooritem(NULL, &item_tmp, amount, m, x, y, 0, 0, 0, 0);
+ map->addflooritem(NULL, &item_tmp, amount, m, x, y, 0, 0, 0, 0, false);
return true;
}
@@ -8627,32 +8630,45 @@ BUILDIN(readparam) {
* 2 : guild_id
* 3 : account_id
* 4 : bg_id
+ * 5 : clan_id
*------------------------------------------*/
BUILDIN(getcharid) {
- int num;
+ int num = script_getnum(st, 2);
struct map_session_data *sd;
- num = script_getnum(st,2);
- if( script_hasdata(st,3) )
- sd=map->nick2sd(script_getstr(st,3));
+ if (script_hasdata(st, 3))
+ sd = map->nick2sd(script_getstr(st, 3));
else
- sd=script->rid2sd(st);
+ sd = script->rid2sd(st);
- if(sd==NULL) {
- script_pushint(st,0); //return 0, according docs
+ if (sd == NULL) {
+ script_pushint(st, 0); //return 0, according docs
return true;
}
- switch( num ) {
- case 0: script_pushint(st,sd->status.char_id); break;
- case 1: script_pushint(st,sd->status.party_id); break;
- case 2: script_pushint(st,sd->status.guild_id); break;
- case 3: script_pushint(st,sd->status.account_id); break;
- case 4: script_pushint(st,sd->bg_id); break;
- default:
- ShowError("buildin_getcharid: invalid parameter (%d).\n", num);
- script_pushint(st,0);
- break;
+ switch (num) {
+ case 0:
+ script_pushint(st, sd->status.char_id);
+ break;
+ case 1:
+ script_pushint(st, sd->status.party_id);
+ break;
+ case 2:
+ script_pushint(st, sd->status.guild_id);
+ break;
+ case 3:
+ script_pushint(st, sd->status.account_id);
+ break;
+ case 4:
+ script_pushint(st, sd->bg_id);
+ break;
+ case 5:
+ script_pushint(st, sd->status.clan_id);
+ break;
+ default:
+ ShowError("buildin_getcharid: invalid parameter (%d).\n", num);
+ script_pushint(st, 0);
+ break;
}
return true;
@@ -8900,10 +8916,12 @@ BUILDIN(getguildmember)
* 1 : party_name or ""
* 2 : guild_name or ""
* 3 : map_name
+ * 4 : clan_name or ""
* - : ""
*------------------------------------------*/
BUILDIN(strcharinfo)
{
+ struct clan *c;
struct guild* g;
struct party_data* p;
struct map_session_data *sd;
@@ -8943,6 +8961,13 @@ BUILDIN(strcharinfo)
case 3:
script_pushconststr(st, map->list[sd->bl.m].name);
break;
+ case 4:
+ if ((c = sd->clan) != NULL) {
+ script_pushstrcopy(st, c->name);
+ } else {
+ script_pushconststr(st, "");
+ }
+ break;
default:
ShowWarning("script:strcharinfo: unknown parameter.\n");
script_pushconststr(st, "");
@@ -13576,7 +13601,7 @@ BUILDIN(successremovecards)
if ((flag = pc->additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT))) {
clif->additem(sd, 0, 0, flag);
- map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -13634,7 +13659,7 @@ BUILDIN(failedremovecards)
if ((flag = pc->additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT))) {
clif->additem(sd, 0, 0, flag);
- map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -21570,7 +21595,29 @@ BUILDIN(progressbar)
clif->progressbar(sd, (unsigned int)strtoul(color, (char **)NULL, 0), second);
return true;
}
+BUILDIN(progressbar_unit)
+{
+ const char *color = script_getstr(st, 2);
+ uint32 second = script_getnum(st, 3);
+ if (script_hasdata(st, 4)) {
+ struct block_list *bl = map->id2bl(script_getnum(st, 4));
+
+ if (bl == NULL) {
+ ShowWarning("buildin_progressbar_unit: Error in finding object with given GID %d!\n", script_getnum(st, 4));
+ return true;
+ }
+ clif->progressbar_unit(bl, (unsigned int)strtoul(color, (char **)NULL, 0), second);
+ } else {
+ struct map_session_data *sd = script->rid2sd(st);
+
+ if (sd == NULL)
+ return false;
+
+ clif->progressbar_unit(&sd->bl, (unsigned int)strtoul(color, (char **)NULL, 0), second);
+ }
+ return true;
+}
BUILDIN(pushpc)
{
uint8 dir;
@@ -22171,7 +22218,7 @@ BUILDIN(getrandgroupitem)
if ((flag = pc->additem(sd, &it, get_count, LOG_TYPE_SCRIPT))) {
clif->additem(sd, 0, 0, flag);
if( pc->candrop(sd,&it) )
- map->addflooritem(&sd->bl, &it, get_count, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &it, get_count, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -23839,6 +23886,85 @@ BUILDIN(rodex_sendmail2)
}
/**
+ * Clan System: Add a player to a clan
+ */
+BUILDIN(clan_join)
+{
+ struct map_session_data *sd = NULL;
+ int clan_id = script_getnum(st, 2);
+
+ if (script_hasdata(st, 3))
+ sd = map->id2sd(script_getnum(st, 3));
+ else
+ sd = map->id2sd(st->rid);
+
+ if (sd == NULL) {
+ script_pushint(st, false);
+ return false;
+ }
+
+ if (clan->join(sd, clan_id))
+ script_pushint(st, true);
+ else
+ script_pushint(st, false);
+
+ return true;
+}
+
+/**
+ * Clan System: Remove a player from clan
+ */
+BUILDIN(clan_leave)
+{
+ struct map_session_data *sd = NULL;
+
+ if (script_hasdata(st, 2))
+ sd = map->id2sd(script_getnum(st, 2));
+ else
+ sd = map->id2sd(st->rid);
+
+ if (sd == NULL) {
+ script_pushint(st, false);
+ return false;
+ }
+
+ if (clan->leave(sd, false))
+ script_pushint(st, true);
+ else
+ script_pushint(st, false);
+
+ return true;
+}
+
+/**
+ * Clan System: Show clan emblem next to npc name
+ */
+BUILDIN(clan_master)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
+ int clan_id = script_getnum(st, 2);
+
+ if (nd == NULL) {
+ script_pushint(st, false);
+ return false;
+ } else if (clan_id <= 0) {
+ script_pushint(st, false);
+ ShowError("buildin_clan_master: Received Invalid Clan ID %d\n", clan_id);
+ return false;
+ } else if (clan->search(clan_id) == NULL) {
+ script_pushint(st, false);
+ ShowError("buildin_clan_master: Received Id of a nonexistent Clan. Id: %d\n", clan_id);
+ return false;
+ }
+
+ nd->clan_id = clan_id;
+ clif->sc_load(&nd->bl, nd->bl.id, AREA, status->dbs->IconChangeTable[SC_CLAN_INFO], 0, clan_id, 0);
+
+ script_pushint(st, true);
+ return true;
+}
+
+/**
* Adds a built-in script function.
*
* @param buildin Script function data
@@ -24405,6 +24531,7 @@ void script_parse_builtin(void) {
BUILDIN_DEF(setfont,"i"),
BUILDIN_DEF(areamobuseskill,"siiiiviiiii"),
BUILDIN_DEF(progressbar,"si"),
+ BUILDIN_DEF(progressbar_unit,"si?"),
BUILDIN_DEF(pushpc,"ii"),
BUILDIN_DEF(buyingstore,"i"),
BUILDIN_DEF(searchstores,"ii"),
@@ -24533,6 +24660,11 @@ void script_parse_builtin(void) {
/* Navigation */
BUILDIN_DEF(navigateto, "s??????"),
+ /* Clan System */
+ BUILDIN_DEF(clan_join,"i?"),
+ BUILDIN_DEF(clan_leave,"?"),
+ BUILDIN_DEF(clan_master,"i"),
+
BUILDIN_DEF(channelmes, "ss"),
BUILDIN_DEF(addchannelhandler, "ss"),
BUILDIN_DEF(removechannelhandler, "ss"),
@@ -24900,6 +25032,7 @@ void script_hardcoded_constants(void)
script->set_constant("RENEWAL_ASPD", 0, false, false);
#endif
script->constdb_comment(NULL);
+#include "constants.inc"
}
/**
@@ -25047,6 +25180,7 @@ void script_defaults(void)
script->search_str = script_search_str;
script->setd_sub = setd_sub;
script->attach_state = script_attach_state;
+ script->sprintf = script_sprintf;
script->queue = script_hqueue_get;
script->queue_add = script_hqueue_add;
diff --git a/src/map/script.h b/src/map/script.h
index 14d20838d..2dc3b2327 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -909,6 +909,7 @@ struct script_interface {
int (*buildin_mobuseskill_sub) (struct block_list *bl, va_list ap);
int (*cleanfloor_sub) (struct block_list *bl, va_list ap);
int (*run_func) (struct script_state *st);
+ bool (*sprintf) (struct script_state *st, int start, struct StringBuf *out);
const char *(*getfuncname) (struct script_state *st);
// for ENABLE_CASE_CHECK
unsigned int (*calc_hash_ci) (const char *p);
diff --git a/src/map/skill.c b/src/map/skill.c
index 88a29b9a8..3d541bf76 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -26,6 +26,7 @@
#include "map/battle.h"
#include "map/battleground.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/date.h"
#include "map/elemental.h"
@@ -987,7 +988,7 @@ int can_copy (struct map_session_data *sd, uint16 skill_id, struct block_list* b
(skill_id >= GC_DARKCROW && skill_id <= SU_FRESHSHRIMP)))
return 0;
// Reproduce will only copy skills according on the list. [Jobbie]
- else if( sd->sc.data[SC__REPRODUCE] && !skill->dbs->reproduce_db[skill->get_index(skill_id)] )
+ else if (sd->sc.data[SC__REPRODUCE] && (skill->get_inf2(skill_id) & INF2_ALLOW_REPRODUCE) == 0)
return 0;
return 1;
@@ -5207,7 +5208,7 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1
item_tmp.nameid = sg->item_id ? sg->item_id : ITEMID_BOOBY_TRAP;
item_tmp.identify = 1;
if( item_tmp.nameid )
- map->addflooritem(bl, &item_tmp, 1, bl->m, bl->x, bl->y, 0, 0, 0, 0);
+ map->addflooritem(bl, &item_tmp, 1, bl->m, bl->x, bl->y, 0, 0, 0, 0, false);
}
skill->delunit(su);
}
@@ -7452,7 +7453,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
eflag = pc->additem(sd,&item_tmp,1,LOG_TYPE_PRODUCE);
if(eflag) {
clif->additem(sd,0,0,eflag);
- map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
break;
@@ -8176,7 +8177,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
item_tmp.identify = 1;
if ((success = pc->additem(sd, &item_tmp, amount, LOG_TYPE_SKILL)) != 0) {
clif->additem(sd,0,0,success);
- map->addflooritem(&sd->bl, &item_tmp, amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -8188,7 +8189,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
item_tmp.identify = 1;
if (item_tmp.nameid && (flag=pc->additem(sd,&item_tmp,1,LOG_TYPE_SKILL)) != 0) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
}
@@ -17180,6 +17181,7 @@ struct skill_unit_group* skill_initunitgroup (struct block_list* src, int count,
group->party_id = status->get_party_id(src);
group->guild_id = status->get_guild_id(src);
group->bg_id = bg->team_get_id(src);
+ group->clan_id = clan->get_id(src);
group->group_id = skill->get_new_group_id();
CREATE(group->unit.data, struct skill_unit, count);
group->unit.count = count;
@@ -17502,7 +17504,7 @@ int skill_unit_timer_sub(union DBKey key, struct DBData *data, va_list ap)
memset(&item_tmp,0,sizeof(item_tmp));
item_tmp.nameid = group->item_id ? group->item_id : ITEMID_BOOBY_TRAP;
item_tmp.identify = 1;
- map->addflooritem(bl, &item_tmp, 1, bl->m, bl->x, bl->y, 0, 0, 0, 0);
+ map->addflooritem(bl, &item_tmp, 1, bl->m, bl->x, bl->y, 0, 0, 0, 0, false);
}
skill->delunit(su);
}
@@ -18457,7 +18459,7 @@ int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int nameid,
tmp_item.amount = qty * skill->dbs->changematerial_db[i].qty[j];
if((flag = pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
k++;
}
@@ -18471,7 +18473,7 @@ int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int nameid,
} else if (tmp_item.amount) { //Success
if((flag = pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
if( skill_id == GN_MIX_COOKING || skill_id == GN_MAKEBOMB || skill_id == GN_S_PHARMACY )
clif->msgtable_skill(sd, skill_id, MSG_SKILL_SUCCESS);
@@ -18531,7 +18533,7 @@ int skill_produce_mix(struct map_session_data *sd, uint16 skill_id, int nameid,
tmp_item.identify = 1;
if( pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE) ) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
clif->msgtable_skill(sd, skill_id, MSG_SKILL_FAILURE);
}
@@ -18588,7 +18590,7 @@ int skill_arrow_create (struct map_session_data *sd, int nameid)
continue;
if((flag = pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
@@ -18843,7 +18845,7 @@ int skill_elementalanalysis(struct map_session_data *sd, uint16 skill_lv, const
int flag = pc->additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_CONSUME);
if (flag) {
clif->additem(sd,0,0,flag);
- map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0);
+ map->addflooritem(&sd->bl, &tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
@@ -19849,21 +19851,6 @@ bool skill_parse_row_magicmushroomdb(char* split[], int column, int current)
return true;
}
-bool skill_parse_row_reproducedb(char* split[], int column, int current)
-{
- uint16 skill_id;
- uint16 idx;
- nullpo_retr(false, split);
- skill_id = atoi(split[0]);
- idx = skill->get_index(skill_id);
- if( !idx )
- return false;
-
- skill->dbs->reproduce_db[idx] = true;
-
- return true;
-}
-
bool skill_parse_row_abradb(char* split[], int columns, int current)
{
// skill_id,DummyName,RequiredHocusPocusLevel,Rate
@@ -20168,6 +20155,12 @@ void skill_validate_skillinfo(struct config_setting_t *conf, struct s_skill_db *
} else {
sk->inf2 &= ~INF2_SHOW_SKILL_SCALE;
}
+ } else if (strcmpi(type, "AllowReproduce") == 0) {
+ if (on) {
+ sk->inf2 |= INF2_ALLOW_REPRODUCE;
+ } else {
+ sk->inf2 &= ~INF2_ALLOW_REPRODUCE;
+ }
} else if (strcmpi(type, "None") != 0) {
skilldb_invalid_error(type, config_setting_name(t), sk->nameid);
}
@@ -21280,7 +21273,6 @@ void skill_readdb(bool minimal)
sv->readdb(map->db_path, "spellbook_db.txt", ',', 3, 3, MAX_SKILL_SPELLBOOK_DB, skill->parse_row_spellbookdb);
//Guillotine Cross
sv->readdb(map->db_path, "magicmushroom_db.txt", ',', 1, 1, MAX_SKILL_MAGICMUSHROOM_DB, skill->parse_row_magicmushroomdb);
- sv->readdb(map->db_path, "skill_reproduce_db.txt", ',', 1, 1, MAX_SKILL_DB, skill->parse_row_reproducedb);
sv->readdb(map->db_path, "skill_improvise_db.txt", ',', 2, 2, MAX_SKILL_IMPROVISE_DB, skill->parse_row_improvisedb);
sv->readdb(map->db_path, "skill_changematerial_db.txt", ',', 4, 4+2*5, MAX_SKILL_PRODUCE_DB, skill->parse_row_changematerialdb);
}
@@ -21594,7 +21586,6 @@ void skill_defaults(void)
skill->parse_row_abradb = skill_parse_row_abradb;
skill->parse_row_spellbookdb = skill_parse_row_spellbookdb;
skill->parse_row_magicmushroomdb = skill_parse_row_magicmushroomdb;
- skill->parse_row_reproducedb = skill_parse_row_reproducedb;
skill->parse_row_improvisedb = skill_parse_row_improvisedb;
skill->parse_row_changematerialdb = skill_parse_row_changematerialdb;
skill->usave_add = skill_usave_add;
diff --git a/src/map/skill.h b/src/map/skill.h
index 1e00e488f..d7590921a 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -123,6 +123,7 @@ enum e_skill_inf2 {
INF2_FREE_CAST_NORMAL = 0x08000,
INF2_FREE_CAST_REDUCED = 0x10000,
INF2_SHOW_SKILL_SCALE = 0x20000,
+ INF2_ALLOW_REPRODUCE = 0x40000,
};
@@ -1370,7 +1371,7 @@ enum e_skill {
GM_FORCE_TRANSFER,
GM_WIDE_RESURRECTION,
ALL_NIFLHEIM_RECALL,
- ALL_PRONTERA_RECALL,
+ ALL_PRONTERA_RECALL,
ALL_GLASTHEIM_RECALL,
ALL_THANATOS_RECALL,
@@ -1773,6 +1774,7 @@ struct skill_unit_group {
int party_id;
int guild_id;
int bg_id;
+ int clan_id;
int map;
int target_flag; //Holds BCT_* flag for battle_check_target
int bl_flag; //Holds BL_* flag for map_foreachin* functions
@@ -1897,7 +1899,6 @@ BEGIN_ZEROED_BLOCK; // This block will be zeroed in skill_defaults() as well as
struct s_skill_improvise_db improvise_db[MAX_SKILL_IMPROVISE_DB];
struct s_skill_changematerial_db changematerial_db[MAX_SKILL_PRODUCE_DB];
struct s_skill_spellbook_db spellbook_db[MAX_SKILL_SPELLBOOK_DB];
- bool reproduce_db[MAX_SKILL_DB];
END_ZEROED_BLOCK;
struct s_skill_unit_layout unit_layout[MAX_SKILL_UNIT_LAYOUT];
};
@@ -2121,7 +2122,6 @@ struct skill_interface {
bool (*parse_row_abradb) (char* split[], int columns, int current);
bool (*parse_row_spellbookdb) (char* split[], int columns, int current);
bool (*parse_row_magicmushroomdb) (char* split[], int column, int current);
- bool (*parse_row_reproducedb) (char* split[], int column, int current);
bool (*parse_row_improvisedb) (char* split[], int columns, int current);
bool (*parse_row_changematerialdb) (char* split[], int columns, int current);
/* save new unit skill */
diff --git a/src/map/status.c b/src/map/status.c
index 9e578bc12..3e4b4a45c 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -25,6 +25,7 @@
#include "map/battle.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/elemental.h"
#include "map/guild.h"
@@ -1019,6 +1020,9 @@ void initChangeTables(void)
// Summoner
status->dbs->IconChangeTable[SC_SPRITEMABLE] = SI_SPRITEMABLE;
+ // Clan System
+ status->dbs->IconChangeTable[SC_CLAN_INFO] = SI_CLAN_INFO;
+
// RoDEX
status->dbs->IconChangeTable[SC_DAILYSENDMAILCNT] = SI_DAILYSENDMAILCNT;
@@ -1181,6 +1185,9 @@ void initChangeTables(void)
status->dbs->ChangeFlagTable[SC_MVPCARD_ORCHERO] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_MVPCARD_ORCLORD] |= SCB_ALL;
+ // Clan System
+ status->dbs->ChangeFlagTable[SC_CLAN_INFO] |= SCB_NONE;
+
// Costumes
status->dbs->ChangeFlagTable[SC_DRESS_UP] |= SCB_NONE;
status->dbs->ChangeFlagTable[SC_MOONSTAR] |= SCB_NONE;
@@ -2685,6 +2692,12 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
status->current_equip_option_index = -1;
status->current_equip_item_index = -1;
+ // Clan Buffs
+ if (sd->status.clan_id > 0) {
+ struct clan *c = clan->search(sd->status.clan_id);
+ clan->buff_start(sd, c);
+ }
+
status->calc_pc_additional(sd, opt);
if( sd->pd ) { // Pet Bonus
@@ -9726,6 +9739,11 @@ void status_change_start_display(struct map_session_data *sd, enum sc_type type,
case SC_ALL_RIDING:
dval1 = 1;
break;
+ case SC_CLAN_INFO:
+ dval1 = val1;
+ dval2 = val2;
+ dval3 = val3;
+ break;
default: /* all others: just copy val1 */
dval1 = val1;
break;
@@ -9745,6 +9763,9 @@ int status_get_val_flag(enum sc_type type)
{
int val_flag = 0;
switch (type) {
+ case SC_CLAN_INFO:
+ val_flag |= 1 | 2;
+ break;
case SC_FIGHTINGSPIRIT:
val_flag |= 1 | 2;
break;
diff --git a/src/map/status.h b/src/map/status.h
index e9c2218e8..5a031fa48 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -838,13 +838,16 @@ typedef enum sc_type {
SC_BITESCAR,
SC_ARCLOUSEDASH,
SC_TUNAPARTY,
- SC_SHRIMP, // 650
+ SC_SHRIMP, // 650
SC_FRESHSHRIMP,
-
+
SC_DRESS_UP,
// Rodex
SC_DAILYSENDMAILCNT,
+
+ // Clan System
+ SC_CLAN_INFO,
#ifndef SC_MAX
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
#endif
diff --git a/src/map/unit.c b/src/map/unit.c
index 0b5b21caf..c40aa7000 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -27,6 +27,7 @@
#include "map/battleground.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/duel.h"
#include "map/elemental.h"
@@ -2057,7 +2058,7 @@ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range,
#ifdef OFFICIAL_WALKPATH
if( !path->search_long(NULL, bl, bl->m, bl->x, bl->y, tbl->x-dx, tbl->y-dy, CELL_CHKNOPASS) // Check if there is an obstacle between
- && wpd.path_len > 14 // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett]
+ && wpd.path_len > 14 // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett]
&& (bl->type != BL_NPC) ) // If type is a NPC, please disregard.
return false;
#endif
@@ -2209,6 +2210,7 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick)
//Non-players use the sync packet on the walk timer. [Skotlex]
if (tid == INVALID_TIMER && sd) clif->fixpos(src);
+ map->freeblock_lock();
if( DIFF_TICK(ud->attackabletime,tick) <= 0 ) {
if (battle_config.attack_direction_change && (src->type&battle_config.attack_direction_change)) {
ud->dir = map->calc_dir(src, target->x,target->y );
@@ -2218,8 +2220,10 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick)
if(md) {
//First attack is always a normal attack
if(md->state.skillstate == MSS_ANGRY || md->state.skillstate == MSS_BERSERK) {
- if (mob->skill_use(md,tick,-1))
+ if (mob->skill_use(md,tick,-1)) {
+ map->freeblock_unlock();
return 1;
+ }
} else {
// Set mob's ANGRY/BERSERK states.
md->state.skillstate = md->state.aggressive?MSS_ANGRY:MSS_BERSERK;
@@ -2231,21 +2235,23 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick)
map->foreachinrange(mob->linksearch, src, md->db->range2, BL_MOB, md->class_, target, tick);
}
}
- if (src->type == BL_PET && pet->attackskill(BL_UCAST(BL_PET, src), target->id))
+ if (src->type == BL_PET && pet->attackskill(BL_UCAST(BL_PET, src), target->id)) {
+ map->freeblock_unlock();
return 1;
+ }
- map->freeblock_lock();
ud->attacktarget_lv = battle->weapon_attack(src,target,tick,0);
if(sd && sd->status.pet_id > 0 && sd->pd && battle_config.pet_attack_support)
pet->target_check(sd,target,0);
- map->freeblock_unlock();
/**
* Applied when you're unable to attack (e.g. out of ammo)
* We should stop here otherwise timer keeps on and this happens endlessly
**/
- if( ud->attacktarget_lv == ATK_NONE )
+ if (ud->attacktarget_lv == ATK_NONE) {
+ map->freeblock_unlock();
return 1;
+ }
ud->attackabletime = tick + sstatus->adelay;
// You can't move if you can't attack neither.
@@ -2259,6 +2265,7 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick)
pc->update_idle_time(sd, BCIDLE_ATTACK);
ud->attacktimer = timer->add(ud->attackabletime,unit->attack_timer,src->id,0);
}
+ map->freeblock_unlock();
if (sd != NULL && battle_config.prevent_logout_trigger & PLT_ATTACK)
sd->canlog_tick = timer->gettick();
@@ -2725,6 +2732,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
map->foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 0);
party->send_logout(sd);
guild->send_memberinfoshort(sd,0);
+ clan->member_offline(sd);
pc->cleareventtimer(sd);
pc->inventory_rental_clear(sd);
pc->delspiritball(sd,sd->spiritball,1);
diff --git a/src/plugins/HPMHooking.c b/src/plugins/HPMHooking.c
index 6d6184402..8686a07be 100644
--- a/src/plugins/HPMHooking.c
+++ b/src/plugins/HPMHooking.c
@@ -34,9 +34,12 @@ PRAGMA_GCC5(GCC diagnostic ignored "-Wdiscarded-qualifiers")
#define HPM_HOOKS_INCLUDE "HPMHooking/HPMHooking_login.Hooks.inc"
#define HPM_POINTS_INCLUDE "HPMHooking/HPMHooking_login.HookingPoints.inc"
#define HPM_SOURCES_INCLUDE "HPMHooking/HPMHooking_login.sources.inc"
+#include "login/account.h"
+#include "login/ipban.h"
#include "login/lclif.h"
#include "login/lclif.p.h"
#include "login/login.h"
+#include "login/loginlog.h"
#elif defined (HPMHOOKING_CHAR)
#define HPM_SERVER_TYPE SERVER_TYPE_CHAR
#define HPM_CORE_INCLUDE "HPMHooking/HPMHooking_char.HPMHooksCore.inc"
@@ -46,6 +49,7 @@ PRAGMA_GCC5(GCC diagnostic ignored "-Wdiscarded-qualifiers")
#include "char/char.h"
#include "char/geoip.h"
#include "char/int_auction.h"
+#include "char/int_clan.h"
#include "char/int_elemental.h"
#include "char/int_guild.h"
#include "char/int_homun.h"
@@ -73,6 +77,7 @@ PRAGMA_GCC5(GCC diagnostic ignored "-Wdiscarded-qualifiers")
#include "map/channel.h"
#include "map/chat.h"
#include "map/chrif.h"
+#include "map/clan.h"
#include "map/clif.h"
#include "map/duel.h"
#include "map/elemental.h"
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index b0c2d5fbc..bd17dc7fe 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,6 +33,46 @@ typedef bool (*HPMHOOK_post_HCache_check) (bool retVal___, const char *file);
typedef FILE* (*HPMHOOK_pre_HCache_open) (const char **file, const char **opt);
typedef FILE* (*HPMHOOK_post_HCache_open) (FILE* retVal___, const char *file, const char *opt);
#endif // COMMON_UTILS_H
+#ifdef LOGIN_ACCOUNT_H /* account */
+typedef struct Sql* (*HPMHOOK_pre_account_db_sql_up) (AccountDB **self);
+typedef struct Sql* (*HPMHOOK_post_account_db_sql_up) (struct Sql* retVal___, AccountDB *self);
+typedef void (*HPMHOOK_pre_account_mmo_send_accreg2) (AccountDB **self, int *fd, int *account_id, int *char_id);
+typedef void (*HPMHOOK_post_account_mmo_send_accreg2) (AccountDB *self, int fd, int account_id, int char_id);
+typedef void (*HPMHOOK_pre_account_mmo_save_accreg2) (AccountDB **self, int *fd, int *account_id, int *char_id);
+typedef void (*HPMHOOK_post_account_mmo_save_accreg2) (AccountDB *self, int fd, int account_id, int char_id);
+typedef bool (*HPMHOOK_pre_account_mmo_auth_fromsql) (AccountDB_SQL **db, struct mmo_account **acc, int *account_id);
+typedef bool (*HPMHOOK_post_account_mmo_auth_fromsql) (bool retVal___, AccountDB_SQL *db, struct mmo_account *acc, int account_id);
+typedef bool (*HPMHOOK_pre_account_mmo_auth_tosql) (AccountDB_SQL **db, const struct mmo_account **acc, bool *is_new);
+typedef bool (*HPMHOOK_post_account_mmo_auth_tosql) (bool retVal___, AccountDB_SQL *db, const struct mmo_account *acc, bool is_new);
+typedef AccountDB* (*HPMHOOK_pre_account_db_sql) (void);
+typedef AccountDB* (*HPMHOOK_post_account_db_sql) (AccountDB* retVal___);
+typedef bool (*HPMHOOK_pre_account_db_sql_init) (AccountDB **self);
+typedef bool (*HPMHOOK_post_account_db_sql_init) (bool retVal___, AccountDB *self);
+typedef void (*HPMHOOK_pre_account_db_sql_destroy) (AccountDB **self);
+typedef void (*HPMHOOK_post_account_db_sql_destroy) (AccountDB *self);
+typedef bool (*HPMHOOK_pre_account_db_sql_get_property) (AccountDB **self, const char **key, char **buf, size_t *buflen);
+typedef bool (*HPMHOOK_post_account_db_sql_get_property) (bool retVal___, AccountDB *self, const char *key, char *buf, size_t buflen);
+typedef bool (*HPMHOOK_pre_account_db_sql_set_property) (AccountDB **self, struct config_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_account_db_sql_set_property) (bool retVal___, AccountDB *self, struct config_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_account_db_sql_create) (AccountDB **self, struct mmo_account **acc);
+typedef bool (*HPMHOOK_post_account_db_sql_create) (bool retVal___, AccountDB *self, struct mmo_account *acc);
+typedef bool (*HPMHOOK_pre_account_db_sql_remove) (AccountDB **self, const int *account_id);
+typedef bool (*HPMHOOK_post_account_db_sql_remove) (bool retVal___, AccountDB *self, const int account_id);
+typedef bool (*HPMHOOK_pre_account_db_sql_save) (AccountDB **self, const struct mmo_account **acc);
+typedef bool (*HPMHOOK_post_account_db_sql_save) (bool retVal___, AccountDB *self, const struct mmo_account *acc);
+typedef bool (*HPMHOOK_pre_account_db_sql_load_num) (AccountDB **self, struct mmo_account **acc, const int *account_id);
+typedef bool (*HPMHOOK_post_account_db_sql_load_num) (bool retVal___, AccountDB *self, struct mmo_account *acc, const int account_id);
+typedef bool (*HPMHOOK_pre_account_db_sql_load_str) (AccountDB **self, struct mmo_account **acc, const char **userid);
+typedef bool (*HPMHOOK_post_account_db_sql_load_str) (bool retVal___, AccountDB *self, struct mmo_account *acc, const char *userid);
+typedef AccountDBIterator* (*HPMHOOK_pre_account_db_sql_iterator) (AccountDB **self);
+typedef AccountDBIterator* (*HPMHOOK_post_account_db_sql_iterator) (AccountDBIterator* retVal___, AccountDB *self);
+typedef void (*HPMHOOK_pre_account_db_sql_iter_destroy) (AccountDBIterator **self);
+typedef void (*HPMHOOK_post_account_db_sql_iter_destroy) (AccountDBIterator *self);
+typedef bool (*HPMHOOK_pre_account_db_sql_iter_next) (AccountDBIterator **self, struct mmo_account **acc);
+typedef bool (*HPMHOOK_post_account_db_sql_iter_next) (bool retVal___, AccountDBIterator *self, struct mmo_account *acc);
+typedef bool (*HPMHOOK_pre_account_db_read_inter) (AccountDB_SQL **db, const char **filename, bool *imported);
+typedef bool (*HPMHOOK_post_account_db_read_inter) (bool retVal___, AccountDB_SQL *db, const char *filename, bool imported);
+#endif // LOGIN_ACCOUNT_H
#ifdef MAP_ATCOMMAND_H /* atcommand */
typedef void (*HPMHOOK_pre_atcommand_init) (bool *minimal);
typedef void (*HPMHOOK_post_atcommand_init) (bool minimal);
@@ -867,6 +907,62 @@ typedef void (*HPMHOOK_post_chrif_save_scdata_single) (int account_id, int char_
typedef void (*HPMHOOK_pre_chrif_del_scdata_single) (int *account_id, int *char_id, short *type);
typedef void (*HPMHOOK_post_chrif_del_scdata_single) (int account_id, int char_id, short type);
#endif // MAP_CHRIF_H
+#ifdef MAP_CLAN_H /* clan */
+typedef void (*HPMHOOK_pre_clan_init) (bool *minimal);
+typedef void (*HPMHOOK_post_clan_init) (bool minimal);
+typedef void (*HPMHOOK_pre_clan_final) (void);
+typedef void (*HPMHOOK_post_clan_final) (void);
+typedef bool (*HPMHOOK_pre_clan_config_read) (bool *reload);
+typedef bool (*HPMHOOK_post_clan_config_read) (bool retVal___, bool reload);
+typedef void (*HPMHOOK_pre_clan_config_read_additional_settings) (struct config_setting_t **settings, const char **source);
+typedef void (*HPMHOOK_post_clan_config_read_additional_settings) (struct config_setting_t *settings, const char *source);
+typedef void (*HPMHOOK_pre_clan_read_db) (struct config_setting_t **settings, const char **source, bool *reload);
+typedef void (*HPMHOOK_post_clan_read_db) (struct config_setting_t *settings, const char *source, bool reload);
+typedef int (*HPMHOOK_pre_clan_read_db_sub) (struct config_setting_t **settings, const char **source, bool *reload);
+typedef int (*HPMHOOK_post_clan_read_db_sub) (int retVal___, struct config_setting_t *settings, const char *source, bool reload);
+typedef void (*HPMHOOK_pre_clan_read_db_additional_fields) (struct clan **entry, struct config_setting_t **t, int *n, const char **source);
+typedef void (*HPMHOOK_post_clan_read_db_additional_fields) (struct clan *entry, struct config_setting_t *t, int n, const char *source);
+typedef void (*HPMHOOK_pre_clan_read_buffs) (struct clan **c, struct config_setting_t **buff, const char **source);
+typedef void (*HPMHOOK_post_clan_read_buffs) (struct clan *c, struct config_setting_t *buff, const char *source);
+typedef struct clan* (*HPMHOOK_pre_clan_search) (int *clan_id);
+typedef struct clan* (*HPMHOOK_post_clan_search) (struct clan* retVal___, int clan_id);
+typedef struct clan* (*HPMHOOK_pre_clan_searchname) (const char **name);
+typedef struct clan* (*HPMHOOK_post_clan_searchname) (struct clan* retVal___, const char *name);
+typedef struct map_session_data* (*HPMHOOK_pre_clan_getonlinesd) (struct clan **c);
+typedef struct map_session_data* (*HPMHOOK_post_clan_getonlinesd) (struct map_session_data* retVal___, struct clan *c);
+typedef int (*HPMHOOK_pre_clan_getindex) (const struct clan **c, int *char_id);
+typedef int (*HPMHOOK_post_clan_getindex) (int retVal___, const struct clan *c, int char_id);
+typedef bool (*HPMHOOK_pre_clan_join) (struct map_session_data **sd, int *clan_id);
+typedef bool (*HPMHOOK_post_clan_join) (bool retVal___, struct map_session_data *sd, int clan_id);
+typedef void (*HPMHOOK_pre_clan_member_online) (struct map_session_data **sd, bool *first);
+typedef void (*HPMHOOK_post_clan_member_online) (struct map_session_data *sd, bool first);
+typedef bool (*HPMHOOK_pre_clan_leave) (struct map_session_data **sd, bool *first);
+typedef bool (*HPMHOOK_post_clan_leave) (bool retVal___, struct map_session_data *sd, bool first);
+typedef bool (*HPMHOOK_pre_clan_send_message) (struct map_session_data **sd, const char **mes);
+typedef bool (*HPMHOOK_post_clan_send_message) (bool retVal___, struct map_session_data *sd, const char *mes);
+typedef void (*HPMHOOK_pre_clan_recv_message) (struct clan **c, const char **mes, int *len);
+typedef void (*HPMHOOK_post_clan_recv_message) (struct clan *c, const char *mes, int len);
+typedef void (*HPMHOOK_pre_clan_member_offline) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clan_member_offline) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clan_set_constants) (void);
+typedef void (*HPMHOOK_post_clan_set_constants) (void);
+typedef int (*HPMHOOK_pre_clan_get_id) (const struct block_list **bl);
+typedef int (*HPMHOOK_post_clan_get_id) (int retVal___, const struct block_list *bl);
+typedef void (*HPMHOOK_pre_clan_buff_start) (struct map_session_data **sd, struct clan **c);
+typedef void (*HPMHOOK_post_clan_buff_start) (struct map_session_data *sd, struct clan *c);
+typedef void (*HPMHOOK_pre_clan_buff_end) (struct map_session_data **sd, struct clan **c);
+typedef void (*HPMHOOK_post_clan_buff_end) (struct map_session_data *sd, struct clan *c);
+typedef void (*HPMHOOK_pre_clan_reload) (void);
+typedef void (*HPMHOOK_post_clan_reload) (void);
+typedef int (*HPMHOOK_pre_clan_rejoin) (struct map_session_data **sd, va_list ap);
+typedef int (*HPMHOOK_post_clan_rejoin) (int retVal___, struct map_session_data *sd, va_list ap);
+typedef int (*HPMHOOK_pre_clan_inactivity_kick) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_clan_inactivity_kick) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef int (*HPMHOOK_pre_clan_request_kickoffline) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_clan_request_kickoffline) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef int (*HPMHOOK_pre_clan_request_membercount) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_clan_request_membercount) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+#endif // MAP_CLAN_H
#ifdef MAP_CLIF_H /* clif */
typedef int (*HPMHOOK_pre_clif_init) (bool *minimal);
typedef int (*HPMHOOK_post_clif_init) (int retVal___, bool minimal);
@@ -1188,6 +1284,8 @@ typedef void (*HPMHOOK_pre_clif_progressbar) (struct map_session_data **sd, unsi
typedef void (*HPMHOOK_post_clif_progressbar) (struct map_session_data *sd, unsigned int color, unsigned int second);
typedef void (*HPMHOOK_pre_clif_progressbar_abort) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_progressbar_abort) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_progressbar_unit) (struct block_list **bl, uint32 *color, uint32 *time);
+typedef void (*HPMHOOK_post_clif_progressbar_unit) (struct block_list *bl, uint32 color, uint32 time);
typedef void (*HPMHOOK_pre_clif_showdigit) (struct map_session_data **sd, unsigned char *type, int *value);
typedef void (*HPMHOOK_post_clif_showdigit) (struct map_session_data *sd, unsigned char type, int value);
typedef int (*HPMHOOK_pre_clif_elementalconverter_list) (struct map_session_data **sd);
@@ -2260,8 +2358,8 @@ typedef void (*HPMHOOK_pre_clif_rodex_send_maillist) (int *fd, struct map_sessio
typedef void (*HPMHOOK_post_clif_rodex_send_maillist) (int fd, struct map_session_data *sd, int8 open_type, int64 page_start);
typedef void (*HPMHOOK_pre_clif_rodex_send_refresh) (int *fd, struct map_session_data **sd, int8 *open_type, int *count);
typedef void (*HPMHOOK_post_clif_rodex_send_refresh) (int fd, struct map_session_data *sd, int8 open_type, int count);
-typedef void (*HPMHOOK_pre_clif_rodex_send_mails_all) (int *fd, struct map_session_data **sd);
-typedef void (*HPMHOOK_post_clif_rodex_send_mails_all) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_rodex_send_mails_all) (int *fd, struct map_session_data **sd, int64 *mail_id);
+typedef void (*HPMHOOK_post_clif_rodex_send_mails_all) (int fd, struct map_session_data *sd, int64 mail_id);
typedef void (*HPMHOOK_pre_clif_pRodexReadMail) (int *fd, struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_pRodexReadMail) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_rodex_read_mail) (struct map_session_data **sd, int8 *opentype, struct rodex_message **msg);
@@ -2296,6 +2394,16 @@ typedef void (*HPMHOOK_pre_clif_rodex_icon) (int *fd, bool *show);
typedef void (*HPMHOOK_post_clif_rodex_icon) (int fd, bool show);
typedef void (*HPMHOOK_pre_clif_skill_scale) (struct block_list **bl, int *src_id, int *x, int *y, uint16 *skill_id, uint16 *skill_lv, int *casttime);
typedef void (*HPMHOOK_post_clif_skill_scale) (struct block_list *bl, int src_id, int x, int y, uint16 skill_id, uint16 skill_lv, int casttime);
+typedef void (*HPMHOOK_pre_clif_clan_basicinfo) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_clan_basicinfo) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_clan_onlinecount) (struct clan **c);
+typedef void (*HPMHOOK_post_clif_clan_onlinecount) (struct clan *c);
+typedef void (*HPMHOOK_pre_clif_clan_leave) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_clan_leave) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_clan_message) (struct clan **c, const char **mes, int *len);
+typedef void (*HPMHOOK_post_clif_clan_message) (struct clan *c, const char *mes, int len);
+typedef void (*HPMHOOK_pre_clif_pClanMessage) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pClanMessage) (int fd, struct map_session_data *sd);
#endif // MAP_CLIF_H
#ifdef COMMON_CORE_H /* cmdline */
typedef void (*HPMHOOK_pre_cmdline_init) (void);
@@ -2843,6 +2951,14 @@ typedef int (*HPMHOOK_post_inter_auction_sql_init) (int retVal___);
typedef void (*HPMHOOK_pre_inter_auction_sql_final) (void);
typedef void (*HPMHOOK_post_inter_auction_sql_final) (void);
#endif // CHAR_INT_AUCTION_H
+#ifdef CHAR_INT_CLAN_H /* inter_clan */
+typedef int (*HPMHOOK_pre_inter_clan_kick_inactive_members) (int *clan_id, int *kick_interval);
+typedef int (*HPMHOOK_post_inter_clan_kick_inactive_members) (int retVal___, int clan_id, int kick_interval);
+typedef int (*HPMHOOK_pre_inter_clan_count_members) (int *clan_id, int *kick_interval);
+typedef int (*HPMHOOK_post_inter_clan_count_members) (int retVal___, int clan_id, int kick_interval);
+typedef int (*HPMHOOK_pre_inter_clan_parse_frommap) (int *fd);
+typedef int (*HPMHOOK_post_inter_clan_parse_frommap) (int retVal___, int fd);
+#endif // CHAR_INT_CLAN_H
#ifdef CHAR_INT_ELEMENTAL_H /* inter_elemental */
typedef void (*HPMHOOK_pre_inter_elemental_sql_init) (void);
typedef void (*HPMHOOK_post_inter_elemental_sql_init) (void);
@@ -3206,6 +3322,10 @@ typedef int (*HPMHOOK_pre_intif_rodex_sendmail) (struct rodex_message **msg);
typedef int (*HPMHOOK_post_intif_rodex_sendmail) (int retVal___, struct rodex_message *msg);
typedef int (*HPMHOOK_pre_intif_rodex_checkname) (struct map_session_data **sd, const char **name);
typedef int (*HPMHOOK_post_intif_rodex_checkname) (int retVal___, struct map_session_data *sd, const char *name);
+typedef int (*HPMHOOK_pre_intif_clan_kickoffline) (int *clan_id, int *kick_interval);
+typedef int (*HPMHOOK_post_intif_clan_kickoffline) (int retVal___, int clan_id, int kick_interval);
+typedef int (*HPMHOOK_pre_intif_clan_membercount) (int *clan_id, int *kick_interval);
+typedef int (*HPMHOOK_post_intif_clan_membercount) (int retVal___, int clan_id, int kick_interval);
typedef void (*HPMHOOK_pre_intif_request_accinfo) (int *u_fd, int *aid, int *group_lv, char **query);
typedef void (*HPMHOOK_post_intif_request_accinfo) (int u_fd, int aid, int group_lv, char *query);
typedef int (*HPMHOOK_pre_intif_CheckForCharServer) (void);
@@ -3346,7 +3466,29 @@ typedef void (*HPMHOOK_pre_intif_pRodexSendMail) (int *fd);
typedef void (*HPMHOOK_post_intif_pRodexSendMail) (int fd);
typedef void (*HPMHOOK_pre_intif_pRodexCheckName) (int *fd);
typedef void (*HPMHOOK_post_intif_pRodexCheckName) (int fd);
+typedef void (*HPMHOOK_pre_intif_pRecvClanMemberAction) (int *fd);
+typedef void (*HPMHOOK_post_intif_pRecvClanMemberAction) (int fd);
#endif // MAP_INTIF_H
+#ifdef LOGIN_IPBAN_H /* ipban */
+typedef void (*HPMHOOK_pre_ipban_init) (void);
+typedef void (*HPMHOOK_post_ipban_init) (void);
+typedef void (*HPMHOOK_pre_ipban_final) (void);
+typedef void (*HPMHOOK_post_ipban_final) (void);
+typedef int (*HPMHOOK_pre_ipban_cleanup) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_ipban_cleanup) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef bool (*HPMHOOK_pre_ipban_config_read_inter) (const char **filename, bool *imported);
+typedef bool (*HPMHOOK_post_ipban_config_read_inter) (bool retVal___, const char *filename, bool imported);
+typedef bool (*HPMHOOK_pre_ipban_config_read_connection) (const char **filename, struct config_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_ipban_config_read_connection) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_ipban_config_read_dynamic) (const char **filename, struct config_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_ipban_config_read_dynamic) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_ipban_config_read) (const char **filename, struct config_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_ipban_config_read) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_ipban_check) (uint32 *ip);
+typedef bool (*HPMHOOK_post_ipban_check) (bool retVal___, uint32 ip);
+typedef void (*HPMHOOK_pre_ipban_log) (uint32 *ip);
+typedef void (*HPMHOOK_post_ipban_log) (uint32 ip);
+#endif // LOGIN_IPBAN_H
#ifdef MAP_IRC_BOT_H /* ircbot */
typedef void (*HPMHOOK_pre_ircbot_init) (bool *minimal);
typedef void (*HPMHOOK_post_ircbot_init) (bool minimal);
@@ -3517,6 +3659,16 @@ typedef bool (*HPMHOOK_post_itemdb_lookup_const) (bool retVal___, const struct c
typedef bool (*HPMHOOK_pre_itemdb_lookup_const_mask) (const struct config_setting_t **it, const char **name, int **value);
typedef bool (*HPMHOOK_post_itemdb_lookup_const_mask) (bool retVal___, const struct config_setting_t *it, const char *name, int *value);
#endif // MAP_ITEMDB_H
+#ifdef LOGIN_LOGIN_H /* lchrif */
+typedef void (*HPMHOOK_pre_lchrif_server_init) (int *id);
+typedef void (*HPMHOOK_post_lchrif_server_init) (int id);
+typedef void (*HPMHOOK_pre_lchrif_server_destroy) (int *id);
+typedef void (*HPMHOOK_post_lchrif_server_destroy) (int id);
+typedef void (*HPMHOOK_pre_lchrif_server_reset) (int *id);
+typedef void (*HPMHOOK_post_lchrif_server_reset) (int id);
+typedef void (*HPMHOOK_pre_lchrif_on_disconnect) (int *id);
+typedef void (*HPMHOOK_post_lchrif_on_disconnect) (int id);
+#endif // LOGIN_LOGIN_H
#ifdef LOGIN_LCLIF_H /* lclif */
typedef void (*HPMHOOK_pre_lclif_init) (void);
typedef void (*HPMHOOK_post_lclif_init) (void);
@@ -3909,6 +4061,22 @@ typedef void (*HPMHOOK_post_loginif_send_users_count) (int users);
typedef void (*HPMHOOK_pre_loginif_connect_to_server) (void);
typedef void (*HPMHOOK_post_loginif_connect_to_server) (void);
#endif // CHAR_LOGINIF_H
+#ifdef LOGIN_LOGINLOG_H /* loginlog */
+typedef unsigned long (*HPMHOOK_pre_loginlog_failedattempts) (uint32 *ip, unsigned int *minutes);
+typedef unsigned long (*HPMHOOK_post_loginlog_failedattempts) (unsigned long retVal___, uint32 ip, unsigned int minutes);
+typedef void (*HPMHOOK_pre_loginlog_log) (uint32 *ip, const char **username, int *rcode, const char **message);
+typedef void (*HPMHOOK_post_loginlog_log) (uint32 ip, const char *username, int rcode, const char *message);
+typedef bool (*HPMHOOK_pre_loginlog_init) (void);
+typedef bool (*HPMHOOK_post_loginlog_init) (bool retVal___);
+typedef bool (*HPMHOOK_pre_loginlog_final) (void);
+typedef bool (*HPMHOOK_post_loginlog_final) (bool retVal___);
+typedef bool (*HPMHOOK_pre_loginlog_config_read_names) (const char **filename, struct config_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_loginlog_config_read_names) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_loginlog_config_read_log) (const char **filename, struct config_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_loginlog_config_read_log) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_loginlog_config_read) (const char **filename, bool *imported);
+typedef bool (*HPMHOOK_post_loginlog_config_read) (bool retVal___, const char *filename, bool imported);
+#endif // LOGIN_LOGINLOG_H
#ifdef MAP_MAIL_H /* mail */
typedef void (*HPMHOOK_pre_mail_clear) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_mail_clear) (struct map_session_data *sd);
@@ -3984,8 +4152,8 @@ typedef int (*HPMHOOK_pre_map_removemobs_timer) (int *tid, int64 *tick, int *id,
typedef int (*HPMHOOK_post_map_removemobs_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
typedef void (*HPMHOOK_pre_map_clearflooritem) (struct block_list **bl);
typedef void (*HPMHOOK_post_map_clearflooritem) (struct block_list *bl);
-typedef int (*HPMHOOK_pre_map_addflooritem) (const struct block_list **bl, struct item **item_data, int *amount, int16 *m, int16 *x, int16 *y, int *first_charid, int *second_charid, int *third_charid, int *flags);
-typedef int (*HPMHOOK_post_map_addflooritem) (int retVal___, const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags);
+typedef int (*HPMHOOK_pre_map_addflooritem) (const struct block_list **bl, struct item **item_data, int *amount, int16 *m, int16 *x, int16 *y, int *first_charid, int *second_charid, int *third_charid, int *flags, bool *showdropeffect);
+typedef int (*HPMHOOK_post_map_addflooritem) (int retVal___, const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags, bool showdropeffect);
typedef void (*HPMHOOK_pre_map_addnickdb) (int *charid, const char **nick);
typedef void (*HPMHOOK_post_map_addnickdb) (int charid, const char *nick);
typedef void (*HPMHOOK_pre_map_delnickdb) (int *charid, const char **nick);
@@ -4136,10 +4304,10 @@ typedef struct DBData (*HPMHOOK_pre_map_create_map_data_other_server) (union DBK
typedef struct DBData (*HPMHOOK_post_map_create_map_data_other_server) (struct DBData retVal___, union DBKey key, va_list args);
typedef int (*HPMHOOK_pre_map_eraseallipport_sub) (union DBKey *key, struct DBData **data, va_list va);
typedef int (*HPMHOOK_post_map_eraseallipport_sub) (int retVal___, union DBKey key, struct DBData *data, va_list va);
-typedef char* (*HPMHOOK_pre_map_init_mapcache) (FILE **fp);
-typedef char* (*HPMHOOK_post_map_init_mapcache) (char* retVal___, FILE *fp);
-typedef int (*HPMHOOK_pre_map_readfromcache) (struct map_data **m, char **buffer);
-typedef int (*HPMHOOK_post_map_readfromcache) (int retVal___, struct map_data *m, char *buffer);
+typedef bool (*HPMHOOK_pre_map_readfromcache) (struct map_data **m);
+typedef bool (*HPMHOOK_post_map_readfromcache) (bool retVal___, struct map_data *m);
+typedef bool (*HPMHOOK_pre_map_readfromcache_v1) (FILE **fp, struct map_data **m, unsigned int *file_size);
+typedef bool (*HPMHOOK_post_map_readfromcache_v1) (bool retVal___, FILE *fp, struct map_data *m, unsigned int file_size);
typedef int (*HPMHOOK_pre_map_addmap) (const char **mapname);
typedef int (*HPMHOOK_post_map_addmap) (int retVal___, const char *mapname);
typedef void (*HPMHOOK_pre_map_delmapid) (int *id);
@@ -4494,8 +4662,8 @@ typedef int (*HPMHOOK_pre_mapif_parse_quest_load) (int *fd);
typedef int (*HPMHOOK_post_mapif_parse_quest_load) (int retVal___, int fd);
typedef int (*HPMHOOK_pre_mapif_parse_rodex_requestinbox) (int *fd);
typedef int (*HPMHOOK_post_mapif_parse_rodex_requestinbox) (int retVal___, int fd);
-typedef void (*HPMHOOK_pre_mapif_rodex_sendinbox) (int *fd, int *char_id, int8 *opentype, int8 *flag, int *count, struct rodex_maillist **mails);
-typedef void (*HPMHOOK_post_mapif_rodex_sendinbox) (int fd, int char_id, int8 opentype, int8 flag, int count, struct rodex_maillist *mails);
+typedef void (*HPMHOOK_pre_mapif_rodex_sendinbox) (int *fd, int *char_id, int8 *opentype, int8 *flag, int *count, int64 *mail_id, struct rodex_maillist **mails);
+typedef void (*HPMHOOK_post_mapif_rodex_sendinbox) (int fd, int char_id, int8 opentype, int8 flag, int count, int64 mail_id, struct rodex_maillist *mails);
typedef int (*HPMHOOK_pre_mapif_parse_rodex_checkhasnew) (int *fd);
typedef int (*HPMHOOK_post_mapif_parse_rodex_checkhasnew) (int retVal___, int fd);
typedef void (*HPMHOOK_pre_mapif_rodex_sendhasnew) (int *fd, int *char_id, bool *has_new);
@@ -4564,6 +4732,10 @@ typedef void (*HPMHOOK_pre_mapif_namechange_ack) (int *fd, int *account_id, int
typedef void (*HPMHOOK_post_mapif_namechange_ack) (int fd, int account_id, int char_id, int type, int flag, const char *name);
typedef int (*HPMHOOK_pre_mapif_parse_NameChangeRequest) (int *fd);
typedef int (*HPMHOOK_post_mapif_parse_NameChangeRequest) (int retVal___, int fd);
+typedef int (*HPMHOOK_pre_mapif_parse_ClanMemberKick) (int *fd, int *clan_id, int *kick_interval);
+typedef int (*HPMHOOK_post_mapif_parse_ClanMemberKick) (int retVal___, int fd, int clan_id, int kick_interval);
+typedef int (*HPMHOOK_pre_mapif_parse_ClanMemberCount) (int *fd, int *clan_id, int *kick_interval);
+typedef int (*HPMHOOK_post_mapif_parse_ClanMemberCount) (int retVal___, int fd, int clan_id, int kick_interval);
#endif // CHAR_MAPIF_H
#ifdef COMMON_MAPINDEX_H /* mapindex */
typedef int (*HPMHOOK_pre_mapindex_init) (void);
@@ -6262,6 +6434,8 @@ typedef int (*HPMHOOK_pre_script_cleanfloor_sub) (struct block_list **bl, va_lis
typedef int (*HPMHOOK_post_script_cleanfloor_sub) (int retVal___, struct block_list *bl, va_list ap);
typedef int (*HPMHOOK_pre_script_run_func) (struct script_state **st);
typedef int (*HPMHOOK_post_script_run_func) (int retVal___, struct script_state *st);
+typedef bool (*HPMHOOK_pre_script_sprintf) (struct script_state **st, int *start, struct StringBuf **out);
+typedef bool (*HPMHOOK_post_script_sprintf) (bool retVal___, struct script_state *st, int start, struct StringBuf *out);
typedef const char* (*HPMHOOK_pre_script_getfuncname) (struct script_state **st);
typedef const char* (*HPMHOOK_post_script_getfuncname) (const char* retVal___, struct script_state *st);
typedef unsigned int (*HPMHOOK_pre_script_calc_hash_ci) (const char **p);
@@ -6736,8 +6910,6 @@ typedef bool (*HPMHOOK_pre_skill_parse_row_spellbookdb) (char **split[], int *co
typedef bool (*HPMHOOK_post_skill_parse_row_spellbookdb) (bool retVal___, char *split[], int columns, int current);
typedef bool (*HPMHOOK_pre_skill_parse_row_magicmushroomdb) (char **split[], int *column, int *current);
typedef bool (*HPMHOOK_post_skill_parse_row_magicmushroomdb) (bool retVal___, char *split[], int column, int current);
-typedef bool (*HPMHOOK_pre_skill_parse_row_reproducedb) (char **split[], int *column, int *current);
-typedef bool (*HPMHOOK_post_skill_parse_row_reproducedb) (bool retVal___, char *split[], int column, int current);
typedef bool (*HPMHOOK_pre_skill_parse_row_improvisedb) (char **split[], int *columns, int *current);
typedef bool (*HPMHOOK_post_skill_parse_row_improvisedb) (bool retVal___, char *split[], int columns, int current);
typedef bool (*HPMHOOK_pre_skill_parse_row_changematerialdb) (char **split[], int *columns, int *current);
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
index 3eeb7fd91..d0b4ac5ce 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -466,6 +466,12 @@ struct {
struct HPMHookPoint *HP_inter_auction_sql_init_post;
struct HPMHookPoint *HP_inter_auction_sql_final_pre;
struct HPMHookPoint *HP_inter_auction_sql_final_post;
+ struct HPMHookPoint *HP_inter_clan_kick_inactive_members_pre;
+ struct HPMHookPoint *HP_inter_clan_kick_inactive_members_post;
+ struct HPMHookPoint *HP_inter_clan_count_members_pre;
+ struct HPMHookPoint *HP_inter_clan_count_members_post;
+ struct HPMHookPoint *HP_inter_clan_parse_frommap_pre;
+ struct HPMHookPoint *HP_inter_clan_parse_frommap_post;
struct HPMHookPoint *HP_inter_elemental_sql_init_pre;
struct HPMHookPoint *HP_inter_elemental_sql_init_post;
struct HPMHookPoint *HP_inter_elemental_sql_final_pre;
@@ -1184,6 +1190,10 @@ struct {
struct HPMHookPoint *HP_mapif_namechange_ack_post;
struct HPMHookPoint *HP_mapif_parse_NameChangeRequest_pre;
struct HPMHookPoint *HP_mapif_parse_NameChangeRequest_post;
+ struct HPMHookPoint *HP_mapif_parse_ClanMemberKick_pre;
+ struct HPMHookPoint *HP_mapif_parse_ClanMemberKick_post;
+ struct HPMHookPoint *HP_mapif_parse_ClanMemberCount_pre;
+ struct HPMHookPoint *HP_mapif_parse_ClanMemberCount_post;
struct HPMHookPoint *HP_mapindex_init_pre;
struct HPMHookPoint *HP_mapindex_init_post;
struct HPMHookPoint *HP_mapindex_final_pre;
@@ -1985,6 +1995,12 @@ struct {
int HP_inter_auction_sql_init_post;
int HP_inter_auction_sql_final_pre;
int HP_inter_auction_sql_final_post;
+ int HP_inter_clan_kick_inactive_members_pre;
+ int HP_inter_clan_kick_inactive_members_post;
+ int HP_inter_clan_count_members_pre;
+ int HP_inter_clan_count_members_post;
+ int HP_inter_clan_parse_frommap_pre;
+ int HP_inter_clan_parse_frommap_post;
int HP_inter_elemental_sql_init_pre;
int HP_inter_elemental_sql_init_post;
int HP_inter_elemental_sql_final_pre;
@@ -2703,6 +2719,10 @@ struct {
int HP_mapif_namechange_ack_post;
int HP_mapif_parse_NameChangeRequest_pre;
int HP_mapif_parse_NameChangeRequest_post;
+ int HP_mapif_parse_ClanMemberKick_pre;
+ int HP_mapif_parse_ClanMemberKick_post;
+ int HP_mapif_parse_ClanMemberCount_pre;
+ int HP_mapif_parse_ClanMemberCount_post;
int HP_mapindex_init_pre;
int HP_mapindex_init_post;
int HP_mapindex_final_pre;
@@ -3073,6 +3093,7 @@ struct {
struct des_interface des;
struct geoip_interface geoip;
struct inter_auction_interface inter_auction;
+ struct inter_clan_interface inter_clan;
struct inter_elemental_interface inter_elemental;
struct inter_guild_interface inter_guild;
struct inter_homunculus_interface inter_homunculus;
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
index bbd484fe1..36a115e1b 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -255,6 +255,10 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(inter_auction->parse_frommap, HP_inter_auction_parse_frommap) },
{ HP_POP(inter_auction->sql_init, HP_inter_auction_sql_init) },
{ HP_POP(inter_auction->sql_final, HP_inter_auction_sql_final) },
+/* inter_clan_interface */
+ { HP_POP(inter_clan->kick_inactive_members, HP_inter_clan_kick_inactive_members) },
+ { HP_POP(inter_clan->count_members, HP_inter_clan_count_members) },
+ { HP_POP(inter_clan->parse_frommap, HP_inter_clan_parse_frommap) },
/* inter_elemental_interface */
{ HP_POP(inter_elemental->sql_init, HP_inter_elemental_sql_init) },
{ HP_POP(inter_elemental->sql_final, HP_inter_elemental_sql_final) },
@@ -628,6 +632,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapif->parse_RegistryRequest, HP_mapif_parse_RegistryRequest) },
{ HP_POP(mapif->namechange_ack, HP_mapif_namechange_ack) },
{ HP_POP(mapif->parse_NameChangeRequest, HP_mapif_parse_NameChangeRequest) },
+ { HP_POP(mapif->parse_ClanMemberKick, HP_mapif_parse_ClanMemberKick) },
+ { HP_POP(mapif->parse_ClanMemberCount, HP_mapif_parse_ClanMemberCount) },
/* mapindex_interface */
{ HP_POP(mapindex->init, HP_mapindex_init) },
{ HP_POP(mapindex->final, HP_mapindex_final) },
diff --git a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
index a372f83b3..6ea10f78f 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -5879,6 +5879,88 @@ void HP_inter_auction_sql_final(void) {
}
return;
}
+/* inter_clan_interface */
+int HP_inter_clan_kick_inactive_members(int clan_id, int kick_interval) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_inter_clan_kick_inactive_members_pre > 0) {
+ int (*preHookFunc) (int *clan_id, int *kick_interval);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_clan_kick_inactive_members_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_inter_clan_kick_inactive_members_pre[hIndex].func;
+ retVal___ = preHookFunc(&clan_id, &kick_interval);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.inter_clan.kick_inactive_members(clan_id, kick_interval);
+ }
+ if (HPMHooks.count.HP_inter_clan_kick_inactive_members_post > 0) {
+ int (*postHookFunc) (int retVal___, int clan_id, int kick_interval);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_clan_kick_inactive_members_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_inter_clan_kick_inactive_members_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, clan_id, kick_interval);
+ }
+ }
+ return retVal___;
+}
+int HP_inter_clan_count_members(int clan_id, int kick_interval) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_inter_clan_count_members_pre > 0) {
+ int (*preHookFunc) (int *clan_id, int *kick_interval);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_clan_count_members_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_inter_clan_count_members_pre[hIndex].func;
+ retVal___ = preHookFunc(&clan_id, &kick_interval);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.inter_clan.count_members(clan_id, kick_interval);
+ }
+ if (HPMHooks.count.HP_inter_clan_count_members_post > 0) {
+ int (*postHookFunc) (int retVal___, int clan_id, int kick_interval);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_clan_count_members_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_inter_clan_count_members_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, clan_id, kick_interval);
+ }
+ }
+ return retVal___;
+}
+int HP_inter_clan_parse_frommap(int fd) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_inter_clan_parse_frommap_pre > 0) {
+ int (*preHookFunc) (int *fd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_clan_parse_frommap_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_inter_clan_parse_frommap_pre[hIndex].func;
+ retVal___ = preHookFunc(&fd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.inter_clan.parse_frommap(fd);
+ }
+ if (HPMHooks.count.HP_inter_clan_parse_frommap_post > 0) {
+ int (*postHookFunc) (int retVal___, int fd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_clan_parse_frommap_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_inter_clan_parse_frommap_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, fd);
+ }
+ }
+ return retVal___;
+}
/* inter_elemental_interface */
void HP_inter_elemental_sql_init(void) {
int hIndex = 0;
@@ -14565,14 +14647,14 @@ int HP_mapif_parse_rodex_requestinbox(int fd) {
}
return retVal___;
}
-void HP_mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int count, struct rodex_maillist *mails) {
+void HP_mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int count, int64 mail_id, struct rodex_maillist *mails) {
int hIndex = 0;
if (HPMHooks.count.HP_mapif_rodex_sendinbox_pre > 0) {
- void (*preHookFunc) (int *fd, int *char_id, int8 *opentype, int8 *flag, int *count, struct rodex_maillist **mails);
+ void (*preHookFunc) (int *fd, int *char_id, int8 *opentype, int8 *flag, int *count, int64 *mail_id, struct rodex_maillist **mails);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_rodex_sendinbox_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_mapif_rodex_sendinbox_pre[hIndex].func;
- preHookFunc(&fd, &char_id, &opentype, &flag, &count, &mails);
+ preHookFunc(&fd, &char_id, &opentype, &flag, &count, &mail_id, &mails);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -14580,13 +14662,13 @@ void HP_mapif_rodex_sendinbox(int fd, int char_id, int8 opentype, int8 flag, int
}
}
{
- HPMHooks.source.mapif.rodex_sendinbox(fd, char_id, opentype, flag, count, mails);
+ HPMHooks.source.mapif.rodex_sendinbox(fd, char_id, opentype, flag, count, mail_id, mails);
}
if (HPMHooks.count.HP_mapif_rodex_sendinbox_post > 0) {
- void (*postHookFunc) (int fd, int char_id, int8 opentype, int8 flag, int count, struct rodex_maillist *mails);
+ void (*postHookFunc) (int fd, int char_id, int8 opentype, int8 flag, int count, int64 mail_id, struct rodex_maillist *mails);
for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_rodex_sendinbox_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_mapif_rodex_sendinbox_post[hIndex].func;
- postHookFunc(fd, char_id, opentype, flag, count, mails);
+ postHookFunc(fd, char_id, opentype, flag, count, mail_id, mails);
}
}
return;
@@ -15500,6 +15582,60 @@ int HP_mapif_parse_NameChangeRequest(int fd) {
}
return retVal___;
}
+int HP_mapif_parse_ClanMemberKick(int fd, int clan_id, int kick_interval) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_mapif_parse_ClanMemberKick_pre > 0) {
+ int (*preHookFunc) (int *fd, int *clan_id, int *kick_interval);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_ClanMemberKick_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapif_parse_ClanMemberKick_pre[hIndex].func;
+ retVal___ = preHookFunc(&fd, &clan_id, &kick_interval);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.mapif.parse_ClanMemberKick(fd, clan_id, kick_interval);
+ }
+ if (HPMHooks.count.HP_mapif_parse_ClanMemberKick_post > 0) {
+ int (*postHookFunc) (int retVal___, int fd, int clan_id, int kick_interval);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_ClanMemberKick_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapif_parse_ClanMemberKick_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, fd, clan_id, kick_interval);
+ }
+ }
+ return retVal___;
+}
+int HP_mapif_parse_ClanMemberCount(int fd, int clan_id, int kick_interval) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_mapif_parse_ClanMemberCount_pre > 0) {
+ int (*preHookFunc) (int *fd, int *clan_id, int *kick_interval);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_ClanMemberCount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapif_parse_ClanMemberCount_pre[hIndex].func;
+ retVal___ = preHookFunc(&fd, &clan_id, &kick_interval);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.mapif.parse_ClanMemberCount(fd, clan_id, kick_interval);
+ }
+ if (HPMHooks.count.HP_mapif_parse_ClanMemberCount_post > 0) {
+ int (*postHookFunc) (int retVal___, int fd, int clan_id, int kick_interval);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_ClanMemberCount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapif_parse_ClanMemberCount_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, fd, clan_id, kick_interval);
+ }
+ }
+ return retVal___;
+}
/* mapindex_interface */
int HP_mapindex_init(void) {
int hIndex = 0;
diff --git a/src/plugins/HPMHooking/HPMHooking_char.sources.inc b/src/plugins/HPMHooking/HPMHooking_char.sources.inc
index b5e9afc08..9ba9e129e 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.sources.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.sources.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -34,6 +34,7 @@ HPMHooks.source.DB = *DB;
HPMHooks.source.des = *des;
HPMHooks.source.geoip = *geoip;
HPMHooks.source.inter_auction = *inter_auction;
+HPMHooks.source.inter_clan = *inter_clan;
HPMHooks.source.inter_elemental = *inter_elemental;
HPMHooks.source.inter_guild = *inter_guild;
HPMHooks.source.inter_homunculus = *inter_homunculus;
diff --git a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
index 0cbce8b7d..5300ca3a6 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -32,6 +32,44 @@ struct {
struct HPMHookPoint *HP_HCache_check_post;
struct HPMHookPoint *HP_HCache_open_pre;
struct HPMHookPoint *HP_HCache_open_post;
+ struct HPMHookPoint *HP_account_db_sql_up_pre;
+ struct HPMHookPoint *HP_account_db_sql_up_post;
+ struct HPMHookPoint *HP_account_mmo_send_accreg2_pre;
+ struct HPMHookPoint *HP_account_mmo_send_accreg2_post;
+ struct HPMHookPoint *HP_account_mmo_save_accreg2_pre;
+ struct HPMHookPoint *HP_account_mmo_save_accreg2_post;
+ struct HPMHookPoint *HP_account_mmo_auth_fromsql_pre;
+ struct HPMHookPoint *HP_account_mmo_auth_fromsql_post;
+ struct HPMHookPoint *HP_account_mmo_auth_tosql_pre;
+ struct HPMHookPoint *HP_account_mmo_auth_tosql_post;
+ struct HPMHookPoint *HP_account_db_sql_pre;
+ struct HPMHookPoint *HP_account_db_sql_post;
+ struct HPMHookPoint *HP_account_db_sql_init_pre;
+ struct HPMHookPoint *HP_account_db_sql_init_post;
+ struct HPMHookPoint *HP_account_db_sql_destroy_pre;
+ struct HPMHookPoint *HP_account_db_sql_destroy_post;
+ struct HPMHookPoint *HP_account_db_sql_get_property_pre;
+ struct HPMHookPoint *HP_account_db_sql_get_property_post;
+ struct HPMHookPoint *HP_account_db_sql_set_property_pre;
+ struct HPMHookPoint *HP_account_db_sql_set_property_post;
+ struct HPMHookPoint *HP_account_db_sql_create_pre;
+ struct HPMHookPoint *HP_account_db_sql_create_post;
+ struct HPMHookPoint *HP_account_db_sql_remove_pre;
+ struct HPMHookPoint *HP_account_db_sql_remove_post;
+ struct HPMHookPoint *HP_account_db_sql_save_pre;
+ struct HPMHookPoint *HP_account_db_sql_save_post;
+ struct HPMHookPoint *HP_account_db_sql_load_num_pre;
+ struct HPMHookPoint *HP_account_db_sql_load_num_post;
+ struct HPMHookPoint *HP_account_db_sql_load_str_pre;
+ struct HPMHookPoint *HP_account_db_sql_load_str_post;
+ struct HPMHookPoint *HP_account_db_sql_iterator_pre;
+ struct HPMHookPoint *HP_account_db_sql_iterator_post;
+ struct HPMHookPoint *HP_account_db_sql_iter_destroy_pre;
+ struct HPMHookPoint *HP_account_db_sql_iter_destroy_post;
+ struct HPMHookPoint *HP_account_db_sql_iter_next_pre;
+ struct HPMHookPoint *HP_account_db_sql_iter_next_post;
+ struct HPMHookPoint *HP_account_db_read_inter_pre;
+ struct HPMHookPoint *HP_account_db_read_inter_post;
struct HPMHookPoint *HP_cmdline_init_pre;
struct HPMHookPoint *HP_cmdline_init_post;
struct HPMHookPoint *HP_cmdline_final_pre;
@@ -96,6 +134,32 @@ struct {
struct HPMHookPoint *HP_des_decrypt_block_post;
struct HPMHookPoint *HP_des_decrypt_pre;
struct HPMHookPoint *HP_des_decrypt_post;
+ struct HPMHookPoint *HP_ipban_init_pre;
+ struct HPMHookPoint *HP_ipban_init_post;
+ struct HPMHookPoint *HP_ipban_final_pre;
+ struct HPMHookPoint *HP_ipban_final_post;
+ struct HPMHookPoint *HP_ipban_cleanup_pre;
+ struct HPMHookPoint *HP_ipban_cleanup_post;
+ struct HPMHookPoint *HP_ipban_config_read_inter_pre;
+ struct HPMHookPoint *HP_ipban_config_read_inter_post;
+ struct HPMHookPoint *HP_ipban_config_read_connection_pre;
+ struct HPMHookPoint *HP_ipban_config_read_connection_post;
+ struct HPMHookPoint *HP_ipban_config_read_dynamic_pre;
+ struct HPMHookPoint *HP_ipban_config_read_dynamic_post;
+ struct HPMHookPoint *HP_ipban_config_read_pre;
+ struct HPMHookPoint *HP_ipban_config_read_post;
+ struct HPMHookPoint *HP_ipban_check_pre;
+ struct HPMHookPoint *HP_ipban_check_post;
+ struct HPMHookPoint *HP_ipban_log_pre;
+ struct HPMHookPoint *HP_ipban_log_post;
+ struct HPMHookPoint *HP_lchrif_server_init_pre;
+ struct HPMHookPoint *HP_lchrif_server_init_post;
+ struct HPMHookPoint *HP_lchrif_server_destroy_pre;
+ struct HPMHookPoint *HP_lchrif_server_destroy_post;
+ struct HPMHookPoint *HP_lchrif_server_reset_pre;
+ struct HPMHookPoint *HP_lchrif_server_reset_post;
+ struct HPMHookPoint *HP_lchrif_on_disconnect_pre;
+ struct HPMHookPoint *HP_lchrif_on_disconnect_post;
struct HPMHookPoint *HP_lclif_init_pre;
struct HPMHookPoint *HP_lclif_init_post;
struct HPMHookPoint *HP_lclif_final_pre;
@@ -406,6 +470,20 @@ struct {
struct HPMHookPoint *HP_login_config_set_md5hash_post;
struct HPMHookPoint *HP_login_convert_users_to_colors_pre;
struct HPMHookPoint *HP_login_convert_users_to_colors_post;
+ struct HPMHookPoint *HP_loginlog_failedattempts_pre;
+ struct HPMHookPoint *HP_loginlog_failedattempts_post;
+ struct HPMHookPoint *HP_loginlog_log_pre;
+ struct HPMHookPoint *HP_loginlog_log_post;
+ struct HPMHookPoint *HP_loginlog_init_pre;
+ struct HPMHookPoint *HP_loginlog_init_post;
+ struct HPMHookPoint *HP_loginlog_final_pre;
+ struct HPMHookPoint *HP_loginlog_final_post;
+ struct HPMHookPoint *HP_loginlog_config_read_names_pre;
+ struct HPMHookPoint *HP_loginlog_config_read_names_post;
+ struct HPMHookPoint *HP_loginlog_config_read_log_pre;
+ struct HPMHookPoint *HP_loginlog_config_read_log_post;
+ struct HPMHookPoint *HP_loginlog_config_read_pre;
+ struct HPMHookPoint *HP_loginlog_config_read_post;
struct HPMHookPoint *HP_md5_string_pre;
struct HPMHookPoint *HP_md5_string_post;
struct HPMHookPoint *HP_md5_binary_pre;
@@ -735,6 +813,44 @@ struct {
int HP_HCache_check_post;
int HP_HCache_open_pre;
int HP_HCache_open_post;
+ int HP_account_db_sql_up_pre;
+ int HP_account_db_sql_up_post;
+ int HP_account_mmo_send_accreg2_pre;
+ int HP_account_mmo_send_accreg2_post;
+ int HP_account_mmo_save_accreg2_pre;
+ int HP_account_mmo_save_accreg2_post;
+ int HP_account_mmo_auth_fromsql_pre;
+ int HP_account_mmo_auth_fromsql_post;
+ int HP_account_mmo_auth_tosql_pre;
+ int HP_account_mmo_auth_tosql_post;
+ int HP_account_db_sql_pre;
+ int HP_account_db_sql_post;
+ int HP_account_db_sql_init_pre;
+ int HP_account_db_sql_init_post;
+ int HP_account_db_sql_destroy_pre;
+ int HP_account_db_sql_destroy_post;
+ int HP_account_db_sql_get_property_pre;
+ int HP_account_db_sql_get_property_post;
+ int HP_account_db_sql_set_property_pre;
+ int HP_account_db_sql_set_property_post;
+ int HP_account_db_sql_create_pre;
+ int HP_account_db_sql_create_post;
+ int HP_account_db_sql_remove_pre;
+ int HP_account_db_sql_remove_post;
+ int HP_account_db_sql_save_pre;
+ int HP_account_db_sql_save_post;
+ int HP_account_db_sql_load_num_pre;
+ int HP_account_db_sql_load_num_post;
+ int HP_account_db_sql_load_str_pre;
+ int HP_account_db_sql_load_str_post;
+ int HP_account_db_sql_iterator_pre;
+ int HP_account_db_sql_iterator_post;
+ int HP_account_db_sql_iter_destroy_pre;
+ int HP_account_db_sql_iter_destroy_post;
+ int HP_account_db_sql_iter_next_pre;
+ int HP_account_db_sql_iter_next_post;
+ int HP_account_db_read_inter_pre;
+ int HP_account_db_read_inter_post;
int HP_cmdline_init_pre;
int HP_cmdline_init_post;
int HP_cmdline_final_pre;
@@ -799,6 +915,32 @@ struct {
int HP_des_decrypt_block_post;
int HP_des_decrypt_pre;
int HP_des_decrypt_post;
+ int HP_ipban_init_pre;
+ int HP_ipban_init_post;
+ int HP_ipban_final_pre;
+ int HP_ipban_final_post;
+ int HP_ipban_cleanup_pre;
+ int HP_ipban_cleanup_post;
+ int HP_ipban_config_read_inter_pre;
+ int HP_ipban_config_read_inter_post;
+ int HP_ipban_config_read_connection_pre;
+ int HP_ipban_config_read_connection_post;
+ int HP_ipban_config_read_dynamic_pre;
+ int HP_ipban_config_read_dynamic_post;
+ int HP_ipban_config_read_pre;
+ int HP_ipban_config_read_post;
+ int HP_ipban_check_pre;
+ int HP_ipban_check_post;
+ int HP_ipban_log_pre;
+ int HP_ipban_log_post;
+ int HP_lchrif_server_init_pre;
+ int HP_lchrif_server_init_post;
+ int HP_lchrif_server_destroy_pre;
+ int HP_lchrif_server_destroy_post;
+ int HP_lchrif_server_reset_pre;
+ int HP_lchrif_server_reset_post;
+ int HP_lchrif_on_disconnect_pre;
+ int HP_lchrif_on_disconnect_post;
int HP_lclif_init_pre;
int HP_lclif_init_post;
int HP_lclif_final_pre;
@@ -1109,6 +1251,20 @@ struct {
int HP_login_config_set_md5hash_post;
int HP_login_convert_users_to_colors_pre;
int HP_login_convert_users_to_colors_post;
+ int HP_loginlog_failedattempts_pre;
+ int HP_loginlog_failedattempts_post;
+ int HP_loginlog_log_pre;
+ int HP_loginlog_log_post;
+ int HP_loginlog_init_pre;
+ int HP_loginlog_init_post;
+ int HP_loginlog_final_pre;
+ int HP_loginlog_final_post;
+ int HP_loginlog_config_read_names_pre;
+ int HP_loginlog_config_read_names_post;
+ int HP_loginlog_config_read_log_pre;
+ int HP_loginlog_config_read_log_post;
+ int HP_loginlog_config_read_pre;
+ int HP_loginlog_config_read_post;
int HP_md5_string_pre;
int HP_md5_string_post;
int HP_md5_binary_pre;
@@ -1433,15 +1589,19 @@ struct {
struct {
struct HCache_interface HCache;
+ struct account_interface account;
struct cmdline_interface cmdline;
struct console_interface console;
struct core_interface core;
struct db_interface DB;
struct des_interface des;
+ struct ipban_interface ipban;
+ struct lchrif_interface lchrif;
struct lclif_interface lclif;
struct lclif_interface_private PRIV__lclif;
struct libconfig_interface libconfig;
struct login_interface login;
+ struct loginlog_interface loginlog;
struct md5_interface md5;
struct mutex_interface mutex;
struct nullpo_interface nullpo;
diff --git a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
index a6a907806..6eb2e8121 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,6 +30,26 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(HCache->init, HP_HCache_init) },
{ HP_POP(HCache->check, HP_HCache_check) },
{ HP_POP(HCache->open, HP_HCache_open) },
+/* account_interface */
+ { HP_POP(account->db_sql_up, HP_account_db_sql_up) },
+ { HP_POP(account->mmo_send_accreg2, HP_account_mmo_send_accreg2) },
+ { HP_POP(account->mmo_save_accreg2, HP_account_mmo_save_accreg2) },
+ { HP_POP(account->mmo_auth_fromsql, HP_account_mmo_auth_fromsql) },
+ { HP_POP(account->mmo_auth_tosql, HP_account_mmo_auth_tosql) },
+ { HP_POP(account->db_sql, HP_account_db_sql) },
+ { HP_POP(account->db_sql_init, HP_account_db_sql_init) },
+ { HP_POP(account->db_sql_destroy, HP_account_db_sql_destroy) },
+ { HP_POP(account->db_sql_get_property, HP_account_db_sql_get_property) },
+ { HP_POP(account->db_sql_set_property, HP_account_db_sql_set_property) },
+ { HP_POP(account->db_sql_create, HP_account_db_sql_create) },
+ { HP_POP(account->db_sql_remove, HP_account_db_sql_remove) },
+ { HP_POP(account->db_sql_save, HP_account_db_sql_save) },
+ { HP_POP(account->db_sql_load_num, HP_account_db_sql_load_num) },
+ { HP_POP(account->db_sql_load_str, HP_account_db_sql_load_str) },
+ { HP_POP(account->db_sql_iterator, HP_account_db_sql_iterator) },
+ { HP_POP(account->db_sql_iter_destroy, HP_account_db_sql_iter_destroy) },
+ { HP_POP(account->db_sql_iter_next, HP_account_db_sql_iter_next) },
+ { HP_POP(account->db_read_inter, HP_account_db_read_inter) },
/* cmdline_interface */
{ HP_POP(cmdline->init, HP_cmdline_init) },
{ HP_POP(cmdline->final, HP_cmdline_final) },
@@ -67,6 +87,21 @@ struct HookingPointData HookingPoints[] = {
/* des_interface */
{ HP_POP(des->decrypt_block, HP_des_decrypt_block) },
{ HP_POP(des->decrypt, HP_des_decrypt) },
+/* ipban_interface */
+ { HP_POP(ipban->init, HP_ipban_init) },
+ { HP_POP(ipban->final, HP_ipban_final) },
+ { HP_POP(ipban->cleanup, HP_ipban_cleanup) },
+ { HP_POP(ipban->config_read_inter, HP_ipban_config_read_inter) },
+ { HP_POP(ipban->config_read_connection, HP_ipban_config_read_connection) },
+ { HP_POP(ipban->config_read_dynamic, HP_ipban_config_read_dynamic) },
+ { HP_POP(ipban->config_read, HP_ipban_config_read) },
+ { HP_POP(ipban->check, HP_ipban_check) },
+ { HP_POP(ipban->log, HP_ipban_log) },
+/* lchrif_interface */
+ { HP_POP(lchrif->server_init, HP_lchrif_server_init) },
+ { HP_POP(lchrif->server_destroy, HP_lchrif_server_destroy) },
+ { HP_POP(lchrif->server_reset, HP_lchrif_server_reset) },
+ { HP_POP(lchrif->on_disconnect, HP_lchrif_on_disconnect) },
/* lclif_interface */
{ HP_POP(lclif->init, HP_lclif_init) },
{ HP_POP(lclif->final, HP_lclif_final) },
@@ -226,6 +261,14 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(login->clear_client_hash_nodes, HP_login_clear_client_hash_nodes) },
{ HP_POP(login->config_set_md5hash, HP_login_config_set_md5hash) },
{ HP_POP(login->convert_users_to_colors, HP_login_convert_users_to_colors) },
+/* loginlog_interface */
+ { HP_POP(loginlog->failedattempts, HP_loginlog_failedattempts) },
+ { HP_POP(loginlog->log, HP_loginlog_log) },
+ { HP_POP(loginlog->init, HP_loginlog_init) },
+ { HP_POP(loginlog->final, HP_loginlog_final) },
+ { HP_POP(loginlog->config_read_names, HP_loginlog_config_read_names) },
+ { HP_POP(loginlog->config_read_log, HP_loginlog_config_read_log) },
+ { HP_POP(loginlog->config_read, HP_loginlog_config_read) },
/* md5_interface */
{ HP_POP(md5->string, HP_md5_string) },
{ HP_POP(md5->binary, HP_md5_binary) },
diff --git a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
index 6071c472b..e432da70d 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -106,6 +106,516 @@ FILE* HP_HCache_open(const char *file, const char *opt) {
}
return retVal___;
}
+/* account_interface */
+struct Sql* HP_account_db_sql_up(AccountDB *self) {
+ int hIndex = 0;
+ struct Sql* retVal___ = NULL;
+ if (HPMHooks.count.HP_account_db_sql_up_pre > 0) {
+ struct Sql* (*preHookFunc) (AccountDB **self);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_up_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_up_pre[hIndex].func;
+ retVal___ = preHookFunc(&self);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_up(self);
+ }
+ if (HPMHooks.count.HP_account_db_sql_up_post > 0) {
+ struct Sql* (*postHookFunc) (struct Sql* retVal___, AccountDB *self);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_up_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_up_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self);
+ }
+ }
+ return retVal___;
+}
+void HP_account_mmo_send_accreg2(AccountDB *self, int fd, int account_id, int char_id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_account_mmo_send_accreg2_pre > 0) {
+ void (*preHookFunc) (AccountDB **self, int *fd, int *account_id, int *char_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_send_accreg2_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_mmo_send_accreg2_pre[hIndex].func;
+ preHookFunc(&self, &fd, &account_id, &char_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.account.mmo_send_accreg2(self, fd, account_id, char_id);
+ }
+ if (HPMHooks.count.HP_account_mmo_send_accreg2_post > 0) {
+ void (*postHookFunc) (AccountDB *self, int fd, int account_id, int char_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_send_accreg2_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_mmo_send_accreg2_post[hIndex].func;
+ postHookFunc(self, fd, account_id, char_id);
+ }
+ }
+ return;
+}
+void HP_account_mmo_save_accreg2(AccountDB *self, int fd, int account_id, int char_id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_account_mmo_save_accreg2_pre > 0) {
+ void (*preHookFunc) (AccountDB **self, int *fd, int *account_id, int *char_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_save_accreg2_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_mmo_save_accreg2_pre[hIndex].func;
+ preHookFunc(&self, &fd, &account_id, &char_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.account.mmo_save_accreg2(self, fd, account_id, char_id);
+ }
+ if (HPMHooks.count.HP_account_mmo_save_accreg2_post > 0) {
+ void (*postHookFunc) (AccountDB *self, int fd, int account_id, int char_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_save_accreg2_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_mmo_save_accreg2_post[hIndex].func;
+ postHookFunc(self, fd, account_id, char_id);
+ }
+ }
+ return;
+}
+bool HP_account_mmo_auth_fromsql(AccountDB_SQL *db, struct mmo_account *acc, int account_id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_mmo_auth_fromsql_pre > 0) {
+ bool (*preHookFunc) (AccountDB_SQL **db, struct mmo_account **acc, int *account_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_auth_fromsql_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_mmo_auth_fromsql_pre[hIndex].func;
+ retVal___ = preHookFunc(&db, &acc, &account_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.mmo_auth_fromsql(db, acc, account_id);
+ }
+ if (HPMHooks.count.HP_account_mmo_auth_fromsql_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB_SQL *db, struct mmo_account *acc, int account_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_auth_fromsql_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_mmo_auth_fromsql_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, db, acc, account_id);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_mmo_auth_tosql(AccountDB_SQL *db, const struct mmo_account *acc, bool is_new) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_mmo_auth_tosql_pre > 0) {
+ bool (*preHookFunc) (AccountDB_SQL **db, const struct mmo_account **acc, bool *is_new);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_auth_tosql_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_mmo_auth_tosql_pre[hIndex].func;
+ retVal___ = preHookFunc(&db, &acc, &is_new);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.mmo_auth_tosql(db, acc, is_new);
+ }
+ if (HPMHooks.count.HP_account_mmo_auth_tosql_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB_SQL *db, const struct mmo_account *acc, bool is_new);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_mmo_auth_tosql_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_mmo_auth_tosql_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, db, acc, is_new);
+ }
+ }
+ return retVal___;
+}
+AccountDB* HP_account_db_sql(void) {
+ int hIndex = 0;
+ AccountDB* retVal___ = NULL;
+ if (HPMHooks.count.HP_account_db_sql_pre > 0) {
+ AccountDB* (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_pre[hIndex].func;
+ retVal___ = preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql();
+ }
+ if (HPMHooks.count.HP_account_db_sql_post > 0) {
+ AccountDB* (*postHookFunc) (AccountDB* retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_init(AccountDB *self) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_init_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_init_pre[hIndex].func;
+ retVal___ = preHookFunc(&self);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_init(self);
+ }
+ if (HPMHooks.count.HP_account_db_sql_init_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_init_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self);
+ }
+ }
+ return retVal___;
+}
+void HP_account_db_sql_destroy(AccountDB *self) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_account_db_sql_destroy_pre > 0) {
+ void (*preHookFunc) (AccountDB **self);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_destroy_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_destroy_pre[hIndex].func;
+ preHookFunc(&self);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.account.db_sql_destroy(self);
+ }
+ if (HPMHooks.count.HP_account_db_sql_destroy_post > 0) {
+ void (*postHookFunc) (AccountDB *self);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_destroy_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_destroy_post[hIndex].func;
+ postHookFunc(self);
+ }
+ }
+ return;
+}
+bool HP_account_db_sql_get_property(AccountDB *self, const char *key, char *buf, size_t buflen) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_get_property_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, const char **key, char **buf, size_t *buflen);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_get_property_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_get_property_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &key, &buf, &buflen);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_get_property(self, key, buf, buflen);
+ }
+ if (HPMHooks.count.HP_account_db_sql_get_property_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, const char *key, char *buf, size_t buflen);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_get_property_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_get_property_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, key, buf, buflen);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_set_property(AccountDB *self, struct config_t *config, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_set_property_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, struct config_t **config, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_set_property_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_set_property_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &config, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_set_property(self, config, imported);
+ }
+ if (HPMHooks.count.HP_account_db_sql_set_property_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, struct config_t *config, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_set_property_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_set_property_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, config, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_create(AccountDB *self, struct mmo_account *acc) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_create_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, struct mmo_account **acc);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_create_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_create_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &acc);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_create(self, acc);
+ }
+ if (HPMHooks.count.HP_account_db_sql_create_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, struct mmo_account *acc);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_create_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_create_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, acc);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_remove(AccountDB *self, const int account_id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_remove_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, const int *account_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_remove_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_remove_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &account_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_remove(self, account_id);
+ }
+ if (HPMHooks.count.HP_account_db_sql_remove_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, const int account_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_remove_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_remove_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, account_id);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_save(AccountDB *self, const struct mmo_account *acc) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_save_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, const struct mmo_account **acc);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_save_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_save_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &acc);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_save(self, acc);
+ }
+ if (HPMHooks.count.HP_account_db_sql_save_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, const struct mmo_account *acc);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_save_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_save_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, acc);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_load_num(AccountDB *self, struct mmo_account *acc, const int account_id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_load_num_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, struct mmo_account **acc, const int *account_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_load_num_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_load_num_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &acc, &account_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_load_num(self, acc, account_id);
+ }
+ if (HPMHooks.count.HP_account_db_sql_load_num_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, struct mmo_account *acc, const int account_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_load_num_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_load_num_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, acc, account_id);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_sql_load_str(AccountDB *self, struct mmo_account *acc, const char *userid) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_load_str_pre > 0) {
+ bool (*preHookFunc) (AccountDB **self, struct mmo_account **acc, const char **userid);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_load_str_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_load_str_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &acc, &userid);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_load_str(self, acc, userid);
+ }
+ if (HPMHooks.count.HP_account_db_sql_load_str_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB *self, struct mmo_account *acc, const char *userid);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_load_str_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_load_str_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, acc, userid);
+ }
+ }
+ return retVal___;
+}
+AccountDBIterator* HP_account_db_sql_iterator(AccountDB *self) {
+ int hIndex = 0;
+ AccountDBIterator* retVal___ = NULL;
+ if (HPMHooks.count.HP_account_db_sql_iterator_pre > 0) {
+ AccountDBIterator* (*preHookFunc) (AccountDB **self);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_iterator_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_iterator_pre[hIndex].func;
+ retVal___ = preHookFunc(&self);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_iterator(self);
+ }
+ if (HPMHooks.count.HP_account_db_sql_iterator_post > 0) {
+ AccountDBIterator* (*postHookFunc) (AccountDBIterator* retVal___, AccountDB *self);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_iterator_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_iterator_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self);
+ }
+ }
+ return retVal___;
+}
+void HP_account_db_sql_iter_destroy(AccountDBIterator *self) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_account_db_sql_iter_destroy_pre > 0) {
+ void (*preHookFunc) (AccountDBIterator **self);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_iter_destroy_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_iter_destroy_pre[hIndex].func;
+ preHookFunc(&self);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.account.db_sql_iter_destroy(self);
+ }
+ if (HPMHooks.count.HP_account_db_sql_iter_destroy_post > 0) {
+ void (*postHookFunc) (AccountDBIterator *self);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_iter_destroy_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_iter_destroy_post[hIndex].func;
+ postHookFunc(self);
+ }
+ }
+ return;
+}
+bool HP_account_db_sql_iter_next(AccountDBIterator *self, struct mmo_account *acc) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_sql_iter_next_pre > 0) {
+ bool (*preHookFunc) (AccountDBIterator **self, struct mmo_account **acc);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_iter_next_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_sql_iter_next_pre[hIndex].func;
+ retVal___ = preHookFunc(&self, &acc);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_sql_iter_next(self, acc);
+ }
+ if (HPMHooks.count.HP_account_db_sql_iter_next_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDBIterator *self, struct mmo_account *acc);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_sql_iter_next_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_sql_iter_next_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, self, acc);
+ }
+ }
+ return retVal___;
+}
+bool HP_account_db_read_inter(AccountDB_SQL *db, const char *filename, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_account_db_read_inter_pre > 0) {
+ bool (*preHookFunc) (AccountDB_SQL **db, const char **filename, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_read_inter_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_account_db_read_inter_pre[hIndex].func;
+ retVal___ = preHookFunc(&db, &filename, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.account.db_read_inter(db, filename, imported);
+ }
+ if (HPMHooks.count.HP_account_db_read_inter_post > 0) {
+ bool (*postHookFunc) (bool retVal___, AccountDB_SQL *db, const char *filename, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_account_db_read_inter_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_account_db_read_inter_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, db, filename, imported);
+ }
+ }
+ return retVal___;
+}
/* cmdline_interface */
void HP_cmdline_init(void) {
int hIndex = 0;
@@ -964,6 +1474,352 @@ void HP_des_decrypt(unsigned char *data, size_t size) {
}
return;
}
+/* ipban_interface */
+void HP_ipban_init(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_ipban_init_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_init_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.ipban.init();
+ }
+ if (HPMHooks.count.HP_ipban_init_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_init_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+void HP_ipban_final(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_ipban_final_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_final_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.ipban.final();
+ }
+ if (HPMHooks.count.HP_ipban_final_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_final_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+int HP_ipban_cleanup(int tid, int64 tick, int id, intptr_t data) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_ipban_cleanup_pre > 0) {
+ int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_cleanup_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_cleanup_pre[hIndex].func;
+ retVal___ = preHookFunc(&tid, &tick, &id, &data);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.ipban.cleanup(tid, tick, id, data);
+ }
+ if (HPMHooks.count.HP_ipban_cleanup_post > 0) {
+ int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_cleanup_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_cleanup_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, tid, tick, id, data);
+ }
+ }
+ return retVal___;
+}
+bool HP_ipban_config_read_inter(const char *filename, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_ipban_config_read_inter_pre > 0) {
+ bool (*preHookFunc) (const char **filename, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_inter_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_config_read_inter_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.ipban.config_read_inter(filename, imported);
+ }
+ if (HPMHooks.count.HP_ipban_config_read_inter_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_inter_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_config_read_inter_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_ipban_config_read_connection(const char *filename, struct config_t *config, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_ipban_config_read_connection_pre > 0) {
+ bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_connection_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_config_read_connection_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &config, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.ipban.config_read_connection(filename, config, imported);
+ }
+ if (HPMHooks.count.HP_ipban_config_read_connection_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_connection_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_config_read_connection_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, config, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_ipban_config_read_dynamic(const char *filename, struct config_t *config, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_ipban_config_read_dynamic_pre > 0) {
+ bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_dynamic_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_config_read_dynamic_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &config, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.ipban.config_read_dynamic(filename, config, imported);
+ }
+ if (HPMHooks.count.HP_ipban_config_read_dynamic_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_dynamic_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_config_read_dynamic_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, config, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_ipban_config_read(const char *filename, struct config_t *config, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_ipban_config_read_pre > 0) {
+ bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_config_read_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &config, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.ipban.config_read(filename, config, imported);
+ }
+ if (HPMHooks.count.HP_ipban_config_read_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_config_read_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_config_read_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, config, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_ipban_check(uint32 ip) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_ipban_check_pre > 0) {
+ bool (*preHookFunc) (uint32 *ip);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_check_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_check_pre[hIndex].func;
+ retVal___ = preHookFunc(&ip);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.ipban.check(ip);
+ }
+ if (HPMHooks.count.HP_ipban_check_post > 0) {
+ bool (*postHookFunc) (bool retVal___, uint32 ip);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_check_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_check_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, ip);
+ }
+ }
+ return retVal___;
+}
+void HP_ipban_log(uint32 ip) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_ipban_log_pre > 0) {
+ void (*preHookFunc) (uint32 *ip);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_log_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_ipban_log_pre[hIndex].func;
+ preHookFunc(&ip);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.ipban.log(ip);
+ }
+ if (HPMHooks.count.HP_ipban_log_post > 0) {
+ void (*postHookFunc) (uint32 ip);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_ipban_log_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_ipban_log_post[hIndex].func;
+ postHookFunc(ip);
+ }
+ }
+ return;
+}
+/* lchrif_interface */
+void HP_lchrif_server_init(int id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_lchrif_server_init_pre > 0) {
+ void (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_server_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_lchrif_server_init_pre[hIndex].func;
+ preHookFunc(&id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.lchrif.server_init(id);
+ }
+ if (HPMHooks.count.HP_lchrif_server_init_post > 0) {
+ void (*postHookFunc) (int id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_server_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_lchrif_server_init_post[hIndex].func;
+ postHookFunc(id);
+ }
+ }
+ return;
+}
+void HP_lchrif_server_destroy(int id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_lchrif_server_destroy_pre > 0) {
+ void (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_server_destroy_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_lchrif_server_destroy_pre[hIndex].func;
+ preHookFunc(&id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.lchrif.server_destroy(id);
+ }
+ if (HPMHooks.count.HP_lchrif_server_destroy_post > 0) {
+ void (*postHookFunc) (int id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_server_destroy_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_lchrif_server_destroy_post[hIndex].func;
+ postHookFunc(id);
+ }
+ }
+ return;
+}
+void HP_lchrif_server_reset(int id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_lchrif_server_reset_pre > 0) {
+ void (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_server_reset_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_lchrif_server_reset_pre[hIndex].func;
+ preHookFunc(&id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.lchrif.server_reset(id);
+ }
+ if (HPMHooks.count.HP_lchrif_server_reset_post > 0) {
+ void (*postHookFunc) (int id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_server_reset_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_lchrif_server_reset_post[hIndex].func;
+ postHookFunc(id);
+ }
+ }
+ return;
+}
+void HP_lchrif_on_disconnect(int id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_lchrif_on_disconnect_pre > 0) {
+ void (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_on_disconnect_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_lchrif_on_disconnect_pre[hIndex].func;
+ preHookFunc(&id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.lchrif.on_disconnect(id);
+ }
+ if (HPMHooks.count.HP_lchrif_on_disconnect_post > 0) {
+ void (*postHookFunc) (int id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_lchrif_on_disconnect_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_lchrif_on_disconnect_post[hIndex].func;
+ postHookFunc(id);
+ }
+ }
+ return;
+}
/* lclif_interface */
void HP_lclif_init(void) {
int hIndex = 0;
@@ -5117,6 +5973,195 @@ uint16 HP_login_convert_users_to_colors(uint16 users) {
}
return retVal___;
}
+/* loginlog_interface */
+unsigned long HP_loginlog_failedattempts(uint32 ip, unsigned int minutes) {
+ int hIndex = 0;
+ unsigned long retVal___ = 0;
+ if (HPMHooks.count.HP_loginlog_failedattempts_pre > 0) {
+ unsigned long (*preHookFunc) (uint32 *ip, unsigned int *minutes);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_failedattempts_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_failedattempts_pre[hIndex].func;
+ retVal___ = preHookFunc(&ip, &minutes);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.loginlog.failedattempts(ip, minutes);
+ }
+ if (HPMHooks.count.HP_loginlog_failedattempts_post > 0) {
+ unsigned long (*postHookFunc) (unsigned long retVal___, uint32 ip, unsigned int minutes);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_failedattempts_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_failedattempts_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, ip, minutes);
+ }
+ }
+ return retVal___;
+}
+void HP_loginlog_log(uint32 ip, const char *username, int rcode, const char *message) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_loginlog_log_pre > 0) {
+ void (*preHookFunc) (uint32 *ip, const char **username, int *rcode, const char **message);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_log_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_log_pre[hIndex].func;
+ preHookFunc(&ip, &username, &rcode, &message);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.loginlog.log(ip, username, rcode, message);
+ }
+ if (HPMHooks.count.HP_loginlog_log_post > 0) {
+ void (*postHookFunc) (uint32 ip, const char *username, int rcode, const char *message);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_log_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_log_post[hIndex].func;
+ postHookFunc(ip, username, rcode, message);
+ }
+ }
+ return;
+}
+bool HP_loginlog_init(void) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_loginlog_init_pre > 0) {
+ bool (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_init_pre[hIndex].func;
+ retVal___ = preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.loginlog.init();
+ }
+ if (HPMHooks.count.HP_loginlog_init_post > 0) {
+ bool (*postHookFunc) (bool retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_init_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
+ }
+ }
+ return retVal___;
+}
+bool HP_loginlog_final(void) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_loginlog_final_pre > 0) {
+ bool (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_final_pre[hIndex].func;
+ retVal___ = preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.loginlog.final();
+ }
+ if (HPMHooks.count.HP_loginlog_final_post > 0) {
+ bool (*postHookFunc) (bool retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_final_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
+ }
+ }
+ return retVal___;
+}
+bool HP_loginlog_config_read_names(const char *filename, struct config_t *config, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_loginlog_config_read_names_pre > 0) {
+ bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_config_read_names_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_config_read_names_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &config, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.loginlog.config_read_names(filename, config, imported);
+ }
+ if (HPMHooks.count.HP_loginlog_config_read_names_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_config_read_names_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_config_read_names_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, config, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_loginlog_config_read_log(const char *filename, struct config_t *config, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_loginlog_config_read_log_pre > 0) {
+ bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_config_read_log_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_config_read_log_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &config, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.loginlog.config_read_log(filename, config, imported);
+ }
+ if (HPMHooks.count.HP_loginlog_config_read_log_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_config_read_log_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_config_read_log_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, config, imported);
+ }
+ }
+ return retVal___;
+}
+bool HP_loginlog_config_read(const char *filename, bool imported) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_loginlog_config_read_pre > 0) {
+ bool (*preHookFunc) (const char **filename, bool *imported);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_config_read_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_loginlog_config_read_pre[hIndex].func;
+ retVal___ = preHookFunc(&filename, &imported);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.loginlog.config_read(filename, imported);
+ }
+ if (HPMHooks.count.HP_loginlog_config_read_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *filename, bool imported);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_loginlog_config_read_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_loginlog_config_read_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, filename, imported);
+ }
+ }
+ return retVal___;
+}
/* md5_interface */
void HP_md5_string(const char *string, char *output) {
int hIndex = 0;
diff --git a/src/plugins/HPMHooking/HPMHooking_login.sources.inc b/src/plugins/HPMHooking/HPMHooking_login.sources.inc
index 8c3b935ac..78c506043 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.sources.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.sources.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,15 +26,19 @@
/* GENERATED FILE DO NOT EDIT */
HPMHooks.source.HCache = *HCache;
+HPMHooks.source.account = *account;
HPMHooks.source.cmdline = *cmdline;
HPMHooks.source.console = *console;
HPMHooks.source.core = *core;
HPMHooks.source.DB = *DB;
HPMHooks.source.des = *des;
+HPMHooks.source.ipban = *ipban;
+HPMHooks.source.lchrif = *lchrif;
HPMHooks.source.lclif = *lclif;
HPMHooks.source.PRIV__lclif = *lclif->p;
HPMHooks.source.libconfig = *libconfig;
HPMHooks.source.login = *login;
+HPMHooks.source.loginlog = *loginlog;
HPMHooks.source.md5 = *md5;
HPMHooks.source.mutex = *mutex;
HPMHooks.source.nullpo = *nullpo;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index cc097aeae..9d531e370 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -504,6 +504,60 @@ struct {
struct HPMHookPoint *HP_chrif_save_scdata_single_post;
struct HPMHookPoint *HP_chrif_del_scdata_single_pre;
struct HPMHookPoint *HP_chrif_del_scdata_single_post;
+ struct HPMHookPoint *HP_clan_init_pre;
+ struct HPMHookPoint *HP_clan_init_post;
+ struct HPMHookPoint *HP_clan_final_pre;
+ struct HPMHookPoint *HP_clan_final_post;
+ struct HPMHookPoint *HP_clan_config_read_pre;
+ struct HPMHookPoint *HP_clan_config_read_post;
+ struct HPMHookPoint *HP_clan_config_read_additional_settings_pre;
+ struct HPMHookPoint *HP_clan_config_read_additional_settings_post;
+ struct HPMHookPoint *HP_clan_read_db_pre;
+ struct HPMHookPoint *HP_clan_read_db_post;
+ struct HPMHookPoint *HP_clan_read_db_sub_pre;
+ struct HPMHookPoint *HP_clan_read_db_sub_post;
+ struct HPMHookPoint *HP_clan_read_db_additional_fields_pre;
+ struct HPMHookPoint *HP_clan_read_db_additional_fields_post;
+ struct HPMHookPoint *HP_clan_read_buffs_pre;
+ struct HPMHookPoint *HP_clan_read_buffs_post;
+ struct HPMHookPoint *HP_clan_search_pre;
+ struct HPMHookPoint *HP_clan_search_post;
+ struct HPMHookPoint *HP_clan_searchname_pre;
+ struct HPMHookPoint *HP_clan_searchname_post;
+ struct HPMHookPoint *HP_clan_getonlinesd_pre;
+ struct HPMHookPoint *HP_clan_getonlinesd_post;
+ struct HPMHookPoint *HP_clan_getindex_pre;
+ struct HPMHookPoint *HP_clan_getindex_post;
+ struct HPMHookPoint *HP_clan_join_pre;
+ struct HPMHookPoint *HP_clan_join_post;
+ struct HPMHookPoint *HP_clan_member_online_pre;
+ struct HPMHookPoint *HP_clan_member_online_post;
+ struct HPMHookPoint *HP_clan_leave_pre;
+ struct HPMHookPoint *HP_clan_leave_post;
+ struct HPMHookPoint *HP_clan_send_message_pre;
+ struct HPMHookPoint *HP_clan_send_message_post;
+ struct HPMHookPoint *HP_clan_recv_message_pre;
+ struct HPMHookPoint *HP_clan_recv_message_post;
+ struct HPMHookPoint *HP_clan_member_offline_pre;
+ struct HPMHookPoint *HP_clan_member_offline_post;
+ struct HPMHookPoint *HP_clan_set_constants_pre;
+ struct HPMHookPoint *HP_clan_set_constants_post;
+ struct HPMHookPoint *HP_clan_get_id_pre;
+ struct HPMHookPoint *HP_clan_get_id_post;
+ struct HPMHookPoint *HP_clan_buff_start_pre;
+ struct HPMHookPoint *HP_clan_buff_start_post;
+ struct HPMHookPoint *HP_clan_buff_end_pre;
+ struct HPMHookPoint *HP_clan_buff_end_post;
+ struct HPMHookPoint *HP_clan_reload_pre;
+ struct HPMHookPoint *HP_clan_reload_post;
+ struct HPMHookPoint *HP_clan_rejoin_pre;
+ struct HPMHookPoint *HP_clan_rejoin_post;
+ struct HPMHookPoint *HP_clan_inactivity_kick_pre;
+ struct HPMHookPoint *HP_clan_inactivity_kick_post;
+ struct HPMHookPoint *HP_clan_request_kickoffline_pre;
+ struct HPMHookPoint *HP_clan_request_kickoffline_post;
+ struct HPMHookPoint *HP_clan_request_membercount_pre;
+ struct HPMHookPoint *HP_clan_request_membercount_post;
struct HPMHookPoint *HP_clif_init_pre;
struct HPMHookPoint *HP_clif_init_post;
struct HPMHookPoint *HP_clif_final_pre;
@@ -824,6 +878,8 @@ struct {
struct HPMHookPoint *HP_clif_progressbar_post;
struct HPMHookPoint *HP_clif_progressbar_abort_pre;
struct HPMHookPoint *HP_clif_progressbar_abort_post;
+ struct HPMHookPoint *HP_clif_progressbar_unit_pre;
+ struct HPMHookPoint *HP_clif_progressbar_unit_post;
struct HPMHookPoint *HP_clif_showdigit_pre;
struct HPMHookPoint *HP_clif_showdigit_post;
struct HPMHookPoint *HP_clif_elementalconverter_list_pre;
@@ -1932,6 +1988,16 @@ struct {
struct HPMHookPoint *HP_clif_rodex_icon_post;
struct HPMHookPoint *HP_clif_skill_scale_pre;
struct HPMHookPoint *HP_clif_skill_scale_post;
+ struct HPMHookPoint *HP_clif_clan_basicinfo_pre;
+ struct HPMHookPoint *HP_clif_clan_basicinfo_post;
+ struct HPMHookPoint *HP_clif_clan_onlinecount_pre;
+ struct HPMHookPoint *HP_clif_clan_onlinecount_post;
+ struct HPMHookPoint *HP_clif_clan_leave_pre;
+ struct HPMHookPoint *HP_clif_clan_leave_post;
+ struct HPMHookPoint *HP_clif_clan_message_pre;
+ struct HPMHookPoint *HP_clif_clan_message_post;
+ struct HPMHookPoint *HP_clif_pClanMessage_pre;
+ struct HPMHookPoint *HP_clif_pClanMessage_post;
struct HPMHookPoint *HP_cmdline_init_pre;
struct HPMHookPoint *HP_cmdline_init_post;
struct HPMHookPoint *HP_cmdline_final_pre;
@@ -2574,6 +2640,10 @@ struct {
struct HPMHookPoint *HP_intif_rodex_sendmail_post;
struct HPMHookPoint *HP_intif_rodex_checkname_pre;
struct HPMHookPoint *HP_intif_rodex_checkname_post;
+ struct HPMHookPoint *HP_intif_clan_kickoffline_pre;
+ struct HPMHookPoint *HP_intif_clan_kickoffline_post;
+ struct HPMHookPoint *HP_intif_clan_membercount_pre;
+ struct HPMHookPoint *HP_intif_clan_membercount_post;
struct HPMHookPoint *HP_intif_request_accinfo_pre;
struct HPMHookPoint *HP_intif_request_accinfo_post;
struct HPMHookPoint *HP_intif_CheckForCharServer_pre;
@@ -2714,6 +2784,8 @@ struct {
struct HPMHookPoint *HP_intif_pRodexSendMail_post;
struct HPMHookPoint *HP_intif_pRodexCheckName_pre;
struct HPMHookPoint *HP_intif_pRodexCheckName_post;
+ struct HPMHookPoint *HP_intif_pRecvClanMemberAction_pre;
+ struct HPMHookPoint *HP_intif_pRecvClanMemberAction_post;
struct HPMHookPoint *HP_ircbot_init_pre;
struct HPMHookPoint *HP_ircbot_init_post;
struct HPMHookPoint *HP_ircbot_final_pre;
@@ -3284,10 +3356,10 @@ struct {
struct HPMHookPoint *HP_map_create_map_data_other_server_post;
struct HPMHookPoint *HP_map_eraseallipport_sub_pre;
struct HPMHookPoint *HP_map_eraseallipport_sub_post;
- struct HPMHookPoint *HP_map_init_mapcache_pre;
- struct HPMHookPoint *HP_map_init_mapcache_post;
struct HPMHookPoint *HP_map_readfromcache_pre;
struct HPMHookPoint *HP_map_readfromcache_post;
+ struct HPMHookPoint *HP_map_readfromcache_v1_pre;
+ struct HPMHookPoint *HP_map_readfromcache_v1_post;
struct HPMHookPoint *HP_map_addmap_pre;
struct HPMHookPoint *HP_map_addmap_post;
struct HPMHookPoint *HP_map_delmapid_pre;
@@ -4982,6 +5054,8 @@ struct {
struct HPMHookPoint *HP_script_cleanfloor_sub_post;
struct HPMHookPoint *HP_script_run_func_pre;
struct HPMHookPoint *HP_script_run_func_post;
+ struct HPMHookPoint *HP_script_sprintf_pre;
+ struct HPMHookPoint *HP_script_sprintf_post;
struct HPMHookPoint *HP_script_getfuncname_pre;
struct HPMHookPoint *HP_script_getfuncname_post;
struct HPMHookPoint *HP_script_calc_hash_ci_pre;
@@ -5450,8 +5524,6 @@ struct {
struct HPMHookPoint *HP_skill_parse_row_spellbookdb_post;
struct HPMHookPoint *HP_skill_parse_row_magicmushroomdb_pre;
struct HPMHookPoint *HP_skill_parse_row_magicmushroomdb_post;
- struct HPMHookPoint *HP_skill_parse_row_reproducedb_pre;
- struct HPMHookPoint *HP_skill_parse_row_reproducedb_post;
struct HPMHookPoint *HP_skill_parse_row_improvisedb_pre;
struct HPMHookPoint *HP_skill_parse_row_improvisedb_post;
struct HPMHookPoint *HP_skill_parse_row_changematerialdb_pre;
@@ -6713,6 +6785,60 @@ struct {
int HP_chrif_save_scdata_single_post;
int HP_chrif_del_scdata_single_pre;
int HP_chrif_del_scdata_single_post;
+ int HP_clan_init_pre;
+ int HP_clan_init_post;
+ int HP_clan_final_pre;
+ int HP_clan_final_post;
+ int HP_clan_config_read_pre;
+ int HP_clan_config_read_post;
+ int HP_clan_config_read_additional_settings_pre;
+ int HP_clan_config_read_additional_settings_post;
+ int HP_clan_read_db_pre;
+ int HP_clan_read_db_post;
+ int HP_clan_read_db_sub_pre;
+ int HP_clan_read_db_sub_post;
+ int HP_clan_read_db_additional_fields_pre;
+ int HP_clan_read_db_additional_fields_post;
+ int HP_clan_read_buffs_pre;
+ int HP_clan_read_buffs_post;
+ int HP_clan_search_pre;
+ int HP_clan_search_post;
+ int HP_clan_searchname_pre;
+ int HP_clan_searchname_post;
+ int HP_clan_getonlinesd_pre;
+ int HP_clan_getonlinesd_post;
+ int HP_clan_getindex_pre;
+ int HP_clan_getindex_post;
+ int HP_clan_join_pre;
+ int HP_clan_join_post;
+ int HP_clan_member_online_pre;
+ int HP_clan_member_online_post;
+ int HP_clan_leave_pre;
+ int HP_clan_leave_post;
+ int HP_clan_send_message_pre;
+ int HP_clan_send_message_post;
+ int HP_clan_recv_message_pre;
+ int HP_clan_recv_message_post;
+ int HP_clan_member_offline_pre;
+ int HP_clan_member_offline_post;
+ int HP_clan_set_constants_pre;
+ int HP_clan_set_constants_post;
+ int HP_clan_get_id_pre;
+ int HP_clan_get_id_post;
+ int HP_clan_buff_start_pre;
+ int HP_clan_buff_start_post;
+ int HP_clan_buff_end_pre;
+ int HP_clan_buff_end_post;
+ int HP_clan_reload_pre;
+ int HP_clan_reload_post;
+ int HP_clan_rejoin_pre;
+ int HP_clan_rejoin_post;
+ int HP_clan_inactivity_kick_pre;
+ int HP_clan_inactivity_kick_post;
+ int HP_clan_request_kickoffline_pre;
+ int HP_clan_request_kickoffline_post;
+ int HP_clan_request_membercount_pre;
+ int HP_clan_request_membercount_post;
int HP_clif_init_pre;
int HP_clif_init_post;
int HP_clif_final_pre;
@@ -7033,6 +7159,8 @@ struct {
int HP_clif_progressbar_post;
int HP_clif_progressbar_abort_pre;
int HP_clif_progressbar_abort_post;
+ int HP_clif_progressbar_unit_pre;
+ int HP_clif_progressbar_unit_post;
int HP_clif_showdigit_pre;
int HP_clif_showdigit_post;
int HP_clif_elementalconverter_list_pre;
@@ -8141,6 +8269,16 @@ struct {
int HP_clif_rodex_icon_post;
int HP_clif_skill_scale_pre;
int HP_clif_skill_scale_post;
+ int HP_clif_clan_basicinfo_pre;
+ int HP_clif_clan_basicinfo_post;
+ int HP_clif_clan_onlinecount_pre;
+ int HP_clif_clan_onlinecount_post;
+ int HP_clif_clan_leave_pre;
+ int HP_clif_clan_leave_post;
+ int HP_clif_clan_message_pre;
+ int HP_clif_clan_message_post;
+ int HP_clif_pClanMessage_pre;
+ int HP_clif_pClanMessage_post;
int HP_cmdline_init_pre;
int HP_cmdline_init_post;
int HP_cmdline_final_pre;
@@ -8783,6 +8921,10 @@ struct {
int HP_intif_rodex_sendmail_post;
int HP_intif_rodex_checkname_pre;
int HP_intif_rodex_checkname_post;
+ int HP_intif_clan_kickoffline_pre;
+ int HP_intif_clan_kickoffline_post;
+ int HP_intif_clan_membercount_pre;
+ int HP_intif_clan_membercount_post;
int HP_intif_request_accinfo_pre;
int HP_intif_request_accinfo_post;
int HP_intif_CheckForCharServer_pre;
@@ -8923,6 +9065,8 @@ struct {
int HP_intif_pRodexSendMail_post;
int HP_intif_pRodexCheckName_pre;
int HP_intif_pRodexCheckName_post;
+ int HP_intif_pRecvClanMemberAction_pre;
+ int HP_intif_pRecvClanMemberAction_post;
int HP_ircbot_init_pre;
int HP_ircbot_init_post;
int HP_ircbot_final_pre;
@@ -9493,10 +9637,10 @@ struct {
int HP_map_create_map_data_other_server_post;
int HP_map_eraseallipport_sub_pre;
int HP_map_eraseallipport_sub_post;
- int HP_map_init_mapcache_pre;
- int HP_map_init_mapcache_post;
int HP_map_readfromcache_pre;
int HP_map_readfromcache_post;
+ int HP_map_readfromcache_v1_pre;
+ int HP_map_readfromcache_v1_post;
int HP_map_addmap_pre;
int HP_map_addmap_post;
int HP_map_delmapid_pre;
@@ -11191,6 +11335,8 @@ struct {
int HP_script_cleanfloor_sub_post;
int HP_script_run_func_pre;
int HP_script_run_func_post;
+ int HP_script_sprintf_pre;
+ int HP_script_sprintf_post;
int HP_script_getfuncname_pre;
int HP_script_getfuncname_post;
int HP_script_calc_hash_ci_pre;
@@ -11659,8 +11805,6 @@ struct {
int HP_skill_parse_row_spellbookdb_post;
int HP_skill_parse_row_magicmushroomdb_pre;
int HP_skill_parse_row_magicmushroomdb_post;
- int HP_skill_parse_row_reproducedb_pre;
- int HP_skill_parse_row_reproducedb_post;
int HP_skill_parse_row_improvisedb_pre;
int HP_skill_parse_row_improvisedb_post;
int HP_skill_parse_row_changematerialdb_pre;
@@ -12452,6 +12596,7 @@ struct {
struct channel_interface channel;
struct chat_interface chat;
struct chrif_interface chrif;
+ struct clan_interface clan;
struct clif_interface clif;
struct cmdline_interface cmdline;
struct console_interface console;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index 7caf25de6..5551668d2 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -273,6 +273,34 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(chrif->parse, HP_chrif_parse) },
{ HP_POP(chrif->save_scdata_single, HP_chrif_save_scdata_single) },
{ HP_POP(chrif->del_scdata_single, HP_chrif_del_scdata_single) },
+/* clan_interface */
+ { HP_POP(clan->init, HP_clan_init) },
+ { HP_POP(clan->final, HP_clan_final) },
+ { HP_POP(clan->config_read, HP_clan_config_read) },
+ { HP_POP(clan->config_read_additional_settings, HP_clan_config_read_additional_settings) },
+ { HP_POP(clan->read_db, HP_clan_read_db) },
+ { HP_POP(clan->read_db_sub, HP_clan_read_db_sub) },
+ { HP_POP(clan->read_db_additional_fields, HP_clan_read_db_additional_fields) },
+ { HP_POP(clan->read_buffs, HP_clan_read_buffs) },
+ { HP_POP(clan->search, HP_clan_search) },
+ { HP_POP(clan->searchname, HP_clan_searchname) },
+ { HP_POP(clan->getonlinesd, HP_clan_getonlinesd) },
+ { HP_POP(clan->getindex, HP_clan_getindex) },
+ { HP_POP(clan->join, HP_clan_join) },
+ { HP_POP(clan->member_online, HP_clan_member_online) },
+ { HP_POP(clan->leave, HP_clan_leave) },
+ { HP_POP(clan->send_message, HP_clan_send_message) },
+ { HP_POP(clan->recv_message, HP_clan_recv_message) },
+ { HP_POP(clan->member_offline, HP_clan_member_offline) },
+ { HP_POP(clan->set_constants, HP_clan_set_constants) },
+ { HP_POP(clan->get_id, HP_clan_get_id) },
+ { HP_POP(clan->buff_start, HP_clan_buff_start) },
+ { HP_POP(clan->buff_end, HP_clan_buff_end) },
+ { HP_POP(clan->reload, HP_clan_reload) },
+ { HP_POP(clan->rejoin, HP_clan_rejoin) },
+ { HP_POP(clan->inactivity_kick, HP_clan_inactivity_kick) },
+ { HP_POP(clan->request_kickoffline, HP_clan_request_kickoffline) },
+ { HP_POP(clan->request_membercount, HP_clan_request_membercount) },
/* clif_interface */
{ HP_POP(clif->init, HP_clif_init) },
{ HP_POP(clif->final, HP_clif_final) },
@@ -434,6 +462,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->font, HP_clif_font) },
{ HP_POP(clif->progressbar, HP_clif_progressbar) },
{ HP_POP(clif->progressbar_abort, HP_clif_progressbar_abort) },
+ { HP_POP(clif->progressbar_unit, HP_clif_progressbar_unit) },
{ HP_POP(clif->showdigit, HP_clif_showdigit) },
{ HP_POP(clif->elementalconverter_list, HP_clif_elementalconverter_list) },
{ HP_POP(clif->spellbook_list, HP_clif_spellbook_list) },
@@ -988,6 +1017,11 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->rodex_request_items, HP_clif_rodex_request_items) },
{ HP_POP(clif->rodex_icon, HP_clif_rodex_icon) },
{ HP_POP(clif->skill_scale, HP_clif_skill_scale) },
+ { HP_POP(clif->clan_basicinfo, HP_clif_clan_basicinfo) },
+ { HP_POP(clif->clan_onlinecount, HP_clif_clan_onlinecount) },
+ { HP_POP(clif->clan_leave, HP_clif_clan_leave) },
+ { HP_POP(clif->clan_message, HP_clif_clan_message) },
+ { HP_POP(clif->pClanMessage, HP_clif_pClanMessage) },
/* cmdline_interface */
{ HP_POP(cmdline->init, HP_cmdline_init) },
{ HP_POP(cmdline->final, HP_cmdline_final) },
@@ -1322,6 +1356,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(intif->rodex_updatemail, HP_intif_rodex_updatemail) },
{ HP_POP(intif->rodex_sendmail, HP_intif_rodex_sendmail) },
{ HP_POP(intif->rodex_checkname, HP_intif_rodex_checkname) },
+ { HP_POP(intif->clan_kickoffline, HP_intif_clan_kickoffline) },
+ { HP_POP(intif->clan_membercount, HP_intif_clan_membercount) },
{ HP_POP(intif->request_accinfo, HP_intif_request_accinfo) },
{ HP_POP(intif->CheckForCharServer, HP_intif_CheckForCharServer) },
{ HP_POP(intif->pWisMessage, HP_intif_pWisMessage) },
@@ -1392,6 +1428,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(intif->pRodexHasNew, HP_intif_pRodexHasNew) },
{ HP_POP(intif->pRodexSendMail, HP_intif_pRodexSendMail) },
{ HP_POP(intif->pRodexCheckName, HP_intif_pRodexCheckName) },
+ { HP_POP(intif->pRecvClanMemberAction, HP_intif_pRecvClanMemberAction) },
/* irc_bot_interface */
{ HP_POP(ircbot->init, HP_ircbot_init) },
{ HP_POP(ircbot->final, HP_ircbot_final) },
@@ -1683,8 +1720,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(map->iwall_nextxy, HP_map_iwall_nextxy) },
{ HP_POP(map->create_map_data_other_server, HP_map_create_map_data_other_server) },
{ HP_POP(map->eraseallipport_sub, HP_map_eraseallipport_sub) },
- { HP_POP(map->init_mapcache, HP_map_init_mapcache) },
{ HP_POP(map->readfromcache, HP_map_readfromcache) },
+ { HP_POP(map->readfromcache_v1, HP_map_readfromcache_v1) },
{ HP_POP(map->addmap, HP_map_addmap) },
{ HP_POP(map->delmapid, HP_map_delmapid) },
{ HP_POP(map->zone_db_clear, HP_map_zone_db_clear) },
@@ -2552,6 +2589,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(script->buildin_mobuseskill_sub, HP_script_buildin_mobuseskill_sub) },
{ HP_POP(script->cleanfloor_sub, HP_script_cleanfloor_sub) },
{ HP_POP(script->run_func, HP_script_run_func) },
+ { HP_POP(script->sprintf, HP_script_sprintf) },
{ HP_POP(script->getfuncname, HP_script_getfuncname) },
{ HP_POP(script->calc_hash_ci, HP_script_calc_hash_ci) },
{ HP_POP(script->array_src, HP_script_array_src) },
@@ -2789,7 +2827,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->parse_row_abradb, HP_skill_parse_row_abradb) },
{ HP_POP(skill->parse_row_spellbookdb, HP_skill_parse_row_spellbookdb) },
{ HP_POP(skill->parse_row_magicmushroomdb, HP_skill_parse_row_magicmushroomdb) },
- { HP_POP(skill->parse_row_reproducedb, HP_skill_parse_row_reproducedb) },
{ HP_POP(skill->parse_row_improvisedb, HP_skill_parse_row_improvisedb) },
{ HP_POP(skill->parse_row_changematerialdb, HP_skill_parse_row_changematerialdb) },
{ HP_POP(skill->usave_add, HP_skill_usave_add) },
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index 4340f8dbd..2e20ab157 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -6495,6 +6495,729 @@ void HP_chrif_del_scdata_single(int account_id, int char_id, short type) {
}
return;
}
+/* clan_interface */
+void HP_clan_init(bool minimal) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_init_pre > 0) {
+ void (*preHookFunc) (bool *minimal);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_init_pre[hIndex].func;
+ preHookFunc(&minimal);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.init(minimal);
+ }
+ if (HPMHooks.count.HP_clan_init_post > 0) {
+ void (*postHookFunc) (bool minimal);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_init_post[hIndex].func;
+ postHookFunc(minimal);
+ }
+ }
+ return;
+}
+void HP_clan_final(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_final_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_final_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.final();
+ }
+ if (HPMHooks.count.HP_clan_final_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_final_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+bool HP_clan_config_read(bool reload) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clan_config_read_pre > 0) {
+ bool (*preHookFunc) (bool *reload);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_config_read_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_config_read_pre[hIndex].func;
+ retVal___ = preHookFunc(&reload);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.config_read(reload);
+ }
+ if (HPMHooks.count.HP_clan_config_read_post > 0) {
+ bool (*postHookFunc) (bool retVal___, bool reload);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_config_read_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_config_read_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, reload);
+ }
+ }
+ return retVal___;
+}
+void HP_clan_config_read_additional_settings(struct config_setting_t *settings, const char *source) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_config_read_additional_settings_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **settings, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_config_read_additional_settings_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_config_read_additional_settings_pre[hIndex].func;
+ preHookFunc(&settings, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.config_read_additional_settings(settings, source);
+ }
+ if (HPMHooks.count.HP_clan_config_read_additional_settings_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *settings, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_config_read_additional_settings_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_config_read_additional_settings_post[hIndex].func;
+ postHookFunc(settings, source);
+ }
+ }
+ return;
+}
+void HP_clan_read_db(struct config_setting_t *settings, const char *source, bool reload) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_read_db_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **settings, const char **source, bool *reload);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_read_db_pre[hIndex].func;
+ preHookFunc(&settings, &source, &reload);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.read_db(settings, source, reload);
+ }
+ if (HPMHooks.count.HP_clan_read_db_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *settings, const char *source, bool reload);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_read_db_post[hIndex].func;
+ postHookFunc(settings, source, reload);
+ }
+ }
+ return;
+}
+int HP_clan_read_db_sub(struct config_setting_t *settings, const char *source, bool reload) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_read_db_sub_pre > 0) {
+ int (*preHookFunc) (struct config_setting_t **settings, const char **source, bool *reload);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_db_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_read_db_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&settings, &source, &reload);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.read_db_sub(settings, source, reload);
+ }
+ if (HPMHooks.count.HP_clan_read_db_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, struct config_setting_t *settings, const char *source, bool reload);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_db_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_read_db_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, settings, source, reload);
+ }
+ }
+ return retVal___;
+}
+void HP_clan_read_db_additional_fields(struct clan *entry, struct config_setting_t *t, int n, const char *source) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_read_db_additional_fields_pre > 0) {
+ void (*preHookFunc) (struct clan **entry, struct config_setting_t **t, int *n, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_db_additional_fields_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_read_db_additional_fields_pre[hIndex].func;
+ preHookFunc(&entry, &t, &n, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.read_db_additional_fields(entry, t, n, source);
+ }
+ if (HPMHooks.count.HP_clan_read_db_additional_fields_post > 0) {
+ void (*postHookFunc) (struct clan *entry, struct config_setting_t *t, int n, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_db_additional_fields_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_read_db_additional_fields_post[hIndex].func;
+ postHookFunc(entry, t, n, source);
+ }
+ }
+ return;
+}
+void HP_clan_read_buffs(struct clan *c, struct config_setting_t *buff, const char *source) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_read_buffs_pre > 0) {
+ void (*preHookFunc) (struct clan **c, struct config_setting_t **buff, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_buffs_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_read_buffs_pre[hIndex].func;
+ preHookFunc(&c, &buff, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.read_buffs(c, buff, source);
+ }
+ if (HPMHooks.count.HP_clan_read_buffs_post > 0) {
+ void (*postHookFunc) (struct clan *c, struct config_setting_t *buff, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_read_buffs_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_read_buffs_post[hIndex].func;
+ postHookFunc(c, buff, source);
+ }
+ }
+ return;
+}
+struct clan* HP_clan_search(int clan_id) {
+ int hIndex = 0;
+ struct clan* retVal___ = NULL;
+ if (HPMHooks.count.HP_clan_search_pre > 0) {
+ struct clan* (*preHookFunc) (int *clan_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_search_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_search_pre[hIndex].func;
+ retVal___ = preHookFunc(&clan_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.search(clan_id);
+ }
+ if (HPMHooks.count.HP_clan_search_post > 0) {
+ struct clan* (*postHookFunc) (struct clan* retVal___, int clan_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_search_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_search_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, clan_id);
+ }
+ }
+ return retVal___;
+}
+struct clan* HP_clan_searchname(const char *name) {
+ int hIndex = 0;
+ struct clan* retVal___ = NULL;
+ if (HPMHooks.count.HP_clan_searchname_pre > 0) {
+ struct clan* (*preHookFunc) (const char **name);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_searchname_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_searchname_pre[hIndex].func;
+ retVal___ = preHookFunc(&name);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.searchname(name);
+ }
+ if (HPMHooks.count.HP_clan_searchname_post > 0) {
+ struct clan* (*postHookFunc) (struct clan* retVal___, const char *name);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_searchname_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_searchname_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, name);
+ }
+ }
+ return retVal___;
+}
+struct map_session_data* HP_clan_getonlinesd(struct clan *c) {
+ int hIndex = 0;
+ struct map_session_data* retVal___ = NULL;
+ if (HPMHooks.count.HP_clan_getonlinesd_pre > 0) {
+ struct map_session_data* (*preHookFunc) (struct clan **c);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_getonlinesd_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_getonlinesd_pre[hIndex].func;
+ retVal___ = preHookFunc(&c);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.getonlinesd(c);
+ }
+ if (HPMHooks.count.HP_clan_getonlinesd_post > 0) {
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, struct clan *c);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_getonlinesd_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_getonlinesd_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, c);
+ }
+ }
+ return retVal___;
+}
+int HP_clan_getindex(const struct clan *c, int char_id) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_getindex_pre > 0) {
+ int (*preHookFunc) (const struct clan **c, int *char_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_getindex_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_getindex_pre[hIndex].func;
+ retVal___ = preHookFunc(&c, &char_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.getindex(c, char_id);
+ }
+ if (HPMHooks.count.HP_clan_getindex_post > 0) {
+ int (*postHookFunc) (int retVal___, const struct clan *c, int char_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_getindex_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_getindex_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, c, char_id);
+ }
+ }
+ return retVal___;
+}
+bool HP_clan_join(struct map_session_data *sd, int clan_id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clan_join_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, int *clan_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_join_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_join_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &clan_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.join(sd, clan_id);
+ }
+ if (HPMHooks.count.HP_clan_join_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, int clan_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_join_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_join_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, clan_id);
+ }
+ }
+ return retVal___;
+}
+void HP_clan_member_online(struct map_session_data *sd, bool first) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_member_online_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, bool *first);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_member_online_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_member_online_pre[hIndex].func;
+ preHookFunc(&sd, &first);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.member_online(sd, first);
+ }
+ if (HPMHooks.count.HP_clan_member_online_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, bool first);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_member_online_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_member_online_post[hIndex].func;
+ postHookFunc(sd, first);
+ }
+ }
+ return;
+}
+bool HP_clan_leave(struct map_session_data *sd, bool first) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clan_leave_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, bool *first);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_leave_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_leave_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &first);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.leave(sd, first);
+ }
+ if (HPMHooks.count.HP_clan_leave_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, bool first);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_leave_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_leave_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, first);
+ }
+ }
+ return retVal___;
+}
+bool HP_clan_send_message(struct map_session_data *sd, const char *mes) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clan_send_message_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, const char **mes);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_send_message_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_send_message_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &mes);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.send_message(sd, mes);
+ }
+ if (HPMHooks.count.HP_clan_send_message_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const char *mes);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_send_message_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_send_message_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, mes);
+ }
+ }
+ return retVal___;
+}
+void HP_clan_recv_message(struct clan *c, const char *mes, int len) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_recv_message_pre > 0) {
+ void (*preHookFunc) (struct clan **c, const char **mes, int *len);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_recv_message_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_recv_message_pre[hIndex].func;
+ preHookFunc(&c, &mes, &len);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.recv_message(c, mes, len);
+ }
+ if (HPMHooks.count.HP_clan_recv_message_post > 0) {
+ void (*postHookFunc) (struct clan *c, const char *mes, int len);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_recv_message_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_recv_message_post[hIndex].func;
+ postHookFunc(c, mes, len);
+ }
+ }
+ return;
+}
+void HP_clan_member_offline(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_member_offline_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_member_offline_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_member_offline_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.member_offline(sd);
+ }
+ if (HPMHooks.count.HP_clan_member_offline_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_member_offline_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_member_offline_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_clan_set_constants(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_set_constants_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_set_constants_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_set_constants_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.set_constants();
+ }
+ if (HPMHooks.count.HP_clan_set_constants_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_set_constants_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_set_constants_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+int HP_clan_get_id(const struct block_list *bl) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_get_id_pre > 0) {
+ int (*preHookFunc) (const struct block_list **bl);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_get_id_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_get_id_pre[hIndex].func;
+ retVal___ = preHookFunc(&bl);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.get_id(bl);
+ }
+ if (HPMHooks.count.HP_clan_get_id_post > 0) {
+ int (*postHookFunc) (int retVal___, const struct block_list *bl);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_get_id_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_get_id_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, bl);
+ }
+ }
+ return retVal___;
+}
+void HP_clan_buff_start(struct map_session_data *sd, struct clan *c) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_buff_start_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct clan **c);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_buff_start_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_buff_start_pre[hIndex].func;
+ preHookFunc(&sd, &c);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.buff_start(sd, c);
+ }
+ if (HPMHooks.count.HP_clan_buff_start_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct clan *c);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_buff_start_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_buff_start_post[hIndex].func;
+ postHookFunc(sd, c);
+ }
+ }
+ return;
+}
+void HP_clan_buff_end(struct map_session_data *sd, struct clan *c) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_buff_end_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct clan **c);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_buff_end_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_buff_end_pre[hIndex].func;
+ preHookFunc(&sd, &c);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.buff_end(sd, c);
+ }
+ if (HPMHooks.count.HP_clan_buff_end_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct clan *c);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_buff_end_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_buff_end_post[hIndex].func;
+ postHookFunc(sd, c);
+ }
+ }
+ return;
+}
+void HP_clan_reload(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clan_reload_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_reload_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_reload_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clan.reload();
+ }
+ if (HPMHooks.count.HP_clan_reload_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_reload_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_reload_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+int HP_clan_rejoin(struct map_session_data *sd, va_list ap) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_rejoin_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, va_list ap);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_rejoin_pre; hIndex++) {
+ va_list ap___copy; va_copy(ap___copy, ap);
+ preHookFunc = HPMHooks.list.HP_clan_rejoin_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, ap___copy);
+ va_end(ap___copy);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ va_list ap___copy; va_copy(ap___copy, ap);
+ retVal___ = HPMHooks.source.clan.rejoin(sd, ap___copy);
+ va_end(ap___copy);
+ }
+ if (HPMHooks.count.HP_clan_rejoin_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, va_list ap);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_rejoin_post; hIndex++) {
+ va_list ap___copy; va_copy(ap___copy, ap);
+ postHookFunc = HPMHooks.list.HP_clan_rejoin_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, ap___copy);
+ va_end(ap___copy);
+ }
+ }
+ return retVal___;
+}
+int HP_clan_inactivity_kick(int tid, int64 tick, int id, intptr_t data) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_inactivity_kick_pre > 0) {
+ int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_inactivity_kick_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_inactivity_kick_pre[hIndex].func;
+ retVal___ = preHookFunc(&tid, &tick, &id, &data);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.inactivity_kick(tid, tick, id, data);
+ }
+ if (HPMHooks.count.HP_clan_inactivity_kick_post > 0) {
+ int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_inactivity_kick_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_inactivity_kick_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, tid, tick, id, data);
+ }
+ }
+ return retVal___;
+}
+int HP_clan_request_kickoffline(int tid, int64 tick, int id, intptr_t data) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_request_kickoffline_pre > 0) {
+ int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_request_kickoffline_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_request_kickoffline_pre[hIndex].func;
+ retVal___ = preHookFunc(&tid, &tick, &id, &data);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.request_kickoffline(tid, tick, id, data);
+ }
+ if (HPMHooks.count.HP_clan_request_kickoffline_post > 0) {
+ int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_request_kickoffline_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_request_kickoffline_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, tid, tick, id, data);
+ }
+ }
+ return retVal___;
+}
+int HP_clan_request_membercount(int tid, int64 tick, int id, intptr_t data) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_clan_request_membercount_pre > 0) {
+ int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_request_membercount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clan_request_membercount_pre[hIndex].func;
+ retVal___ = preHookFunc(&tid, &tick, &id, &data);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clan.request_membercount(tid, tick, id, data);
+ }
+ if (HPMHooks.count.HP_clan_request_membercount_post > 0) {
+ int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clan_request_membercount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clan_request_membercount_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, tid, tick, id, data);
+ }
+ }
+ return retVal___;
+}
/* clif_interface */
int HP_clif_init(bool minimal) {
int hIndex = 0;
@@ -10706,6 +11429,32 @@ void HP_clif_progressbar_abort(struct map_session_data *sd) {
}
return;
}
+void HP_clif_progressbar_unit(struct block_list *bl, uint32 color, uint32 time) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_progressbar_unit_pre > 0) {
+ void (*preHookFunc) (struct block_list **bl, uint32 *color, uint32 *time);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_progressbar_unit_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_progressbar_unit_pre[hIndex].func;
+ preHookFunc(&bl, &color, &time);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.progressbar_unit(bl, color, time);
+ }
+ if (HPMHooks.count.HP_clif_progressbar_unit_post > 0) {
+ void (*postHookFunc) (struct block_list *bl, uint32 color, uint32 time);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_progressbar_unit_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_progressbar_unit_post[hIndex].func;
+ postHookFunc(bl, color, time);
+ }
+ }
+ return;
+}
void HP_clif_showdigit(struct map_session_data *sd, unsigned char type, int value) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_showdigit_pre > 0) {
@@ -24671,14 +25420,14 @@ void HP_clif_rodex_send_refresh(int fd, struct map_session_data *sd, int8 open_t
}
return;
}
-void HP_clif_rodex_send_mails_all(int fd, struct map_session_data *sd) {
+void HP_clif_rodex_send_mails_all(int fd, struct map_session_data *sd, int64 mail_id) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_rodex_send_mails_all_pre > 0) {
- void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ void (*preHookFunc) (int *fd, struct map_session_data **sd, int64 *mail_id);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_rodex_send_mails_all_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_rodex_send_mails_all_pre[hIndex].func;
- preHookFunc(&fd, &sd);
+ preHookFunc(&fd, &sd, &mail_id);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -24686,13 +25435,13 @@ void HP_clif_rodex_send_mails_all(int fd, struct map_session_data *sd) {
}
}
{
- HPMHooks.source.clif.rodex_send_mails_all(fd, sd);
+ HPMHooks.source.clif.rodex_send_mails_all(fd, sd, mail_id);
}
if (HPMHooks.count.HP_clif_rodex_send_mails_all_post > 0) {
- void (*postHookFunc) (int fd, struct map_session_data *sd);
+ void (*postHookFunc) (int fd, struct map_session_data *sd, int64 mail_id);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_rodex_send_mails_all_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_rodex_send_mails_all_post[hIndex].func;
- postHookFunc(fd, sd);
+ postHookFunc(fd, sd, mail_id);
}
}
return;
@@ -25139,6 +25888,136 @@ void HP_clif_skill_scale(struct block_list *bl, int src_id, int x, int y, uint16
}
return;
}
+void HP_clif_clan_basicinfo(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_clan_basicinfo_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_basicinfo_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_clan_basicinfo_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.clan_basicinfo(sd);
+ }
+ if (HPMHooks.count.HP_clif_clan_basicinfo_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_basicinfo_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_clan_basicinfo_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_clif_clan_onlinecount(struct clan *c) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_clan_onlinecount_pre > 0) {
+ void (*preHookFunc) (struct clan **c);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_onlinecount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_clan_onlinecount_pre[hIndex].func;
+ preHookFunc(&c);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.clan_onlinecount(c);
+ }
+ if (HPMHooks.count.HP_clif_clan_onlinecount_post > 0) {
+ void (*postHookFunc) (struct clan *c);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_onlinecount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_clan_onlinecount_post[hIndex].func;
+ postHookFunc(c);
+ }
+ }
+ return;
+}
+void HP_clif_clan_leave(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_clan_leave_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_leave_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_clan_leave_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.clan_leave(sd);
+ }
+ if (HPMHooks.count.HP_clif_clan_leave_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_leave_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_clan_leave_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_clif_clan_message(struct clan *c, const char *mes, int len) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_clan_message_pre > 0) {
+ void (*preHookFunc) (struct clan **c, const char **mes, int *len);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_message_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_clan_message_pre[hIndex].func;
+ preHookFunc(&c, &mes, &len);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.clan_message(c, mes, len);
+ }
+ if (HPMHooks.count.HP_clif_clan_message_post > 0) {
+ void (*postHookFunc) (struct clan *c, const char *mes, int len);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_clan_message_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_clan_message_post[hIndex].func;
+ postHookFunc(c, mes, len);
+ }
+ }
+ return;
+}
+void HP_clif_pClanMessage(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pClanMessage_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pClanMessage_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pClanMessage_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pClanMessage(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pClanMessage_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pClanMessage_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pClanMessage_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
/* cmdline_interface */
void HP_cmdline_init(void) {
int hIndex = 0;
@@ -33828,6 +34707,60 @@ int HP_intif_rodex_checkname(struct map_session_data *sd, const char *name) {
}
return retVal___;
}
+int HP_intif_clan_kickoffline(int clan_id, int kick_interval) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_intif_clan_kickoffline_pre > 0) {
+ int (*preHookFunc) (int *clan_id, int *kick_interval);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_clan_kickoffline_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_intif_clan_kickoffline_pre[hIndex].func;
+ retVal___ = preHookFunc(&clan_id, &kick_interval);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.intif.clan_kickoffline(clan_id, kick_interval);
+ }
+ if (HPMHooks.count.HP_intif_clan_kickoffline_post > 0) {
+ int (*postHookFunc) (int retVal___, int clan_id, int kick_interval);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_clan_kickoffline_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_intif_clan_kickoffline_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, clan_id, kick_interval);
+ }
+ }
+ return retVal___;
+}
+int HP_intif_clan_membercount(int clan_id, int kick_interval) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_intif_clan_membercount_pre > 0) {
+ int (*preHookFunc) (int *clan_id, int *kick_interval);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_clan_membercount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_intif_clan_membercount_pre[hIndex].func;
+ retVal___ = preHookFunc(&clan_id, &kick_interval);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.intif.clan_membercount(clan_id, kick_interval);
+ }
+ if (HPMHooks.count.HP_intif_clan_membercount_post > 0) {
+ int (*postHookFunc) (int retVal___, int clan_id, int kick_interval);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_clan_membercount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_intif_clan_membercount_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, clan_id, kick_interval);
+ }
+ }
+ return retVal___;
+}
void HP_intif_request_accinfo(int u_fd, int aid, int group_lv, char *query) {
int hIndex = 0;
if (HPMHooks.count.HP_intif_request_accinfo_pre > 0) {
@@ -35656,6 +36589,32 @@ void HP_intif_pRodexCheckName(int fd) {
}
return;
}
+void HP_intif_pRecvClanMemberAction(int fd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_intif_pRecvClanMemberAction_pre > 0) {
+ void (*preHookFunc) (int *fd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pRecvClanMemberAction_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_intif_pRecvClanMemberAction_pre[hIndex].func;
+ preHookFunc(&fd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.intif.pRecvClanMemberAction(fd);
+ }
+ if (HPMHooks.count.HP_intif_pRecvClanMemberAction_post > 0) {
+ void (*postHookFunc) (int fd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pRecvClanMemberAction_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_intif_pRecvClanMemberAction_post[hIndex].func;
+ postHookFunc(fd);
+ }
+ }
+ return;
+}
/* irc_bot_interface */
void HP_ircbot_init(bool minimal) {
int hIndex = 0;
@@ -41256,15 +42215,15 @@ void HP_map_clearflooritem(struct block_list *bl) {
}
return;
}
-int HP_map_addflooritem(const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags) {
+int HP_map_addflooritem(const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags, bool showdropeffect) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_map_addflooritem_pre > 0) {
- int (*preHookFunc) (const struct block_list **bl, struct item **item_data, int *amount, int16 *m, int16 *x, int16 *y, int *first_charid, int *second_charid, int *third_charid, int *flags);
+ int (*preHookFunc) (const struct block_list **bl, struct item **item_data, int *amount, int16 *m, int16 *x, int16 *y, int *first_charid, int *second_charid, int *third_charid, int *flags, bool *showdropeffect);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_addflooritem_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_map_addflooritem_pre[hIndex].func;
- retVal___ = preHookFunc(&bl, &item_data, &amount, &m, &x, &y, &first_charid, &second_charid, &third_charid, &flags);
+ retVal___ = preHookFunc(&bl, &item_data, &amount, &m, &x, &y, &first_charid, &second_charid, &third_charid, &flags, &showdropeffect);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -41272,13 +42231,13 @@ int HP_map_addflooritem(const struct block_list *bl, struct item *item_data, int
}
}
{
- retVal___ = HPMHooks.source.map.addflooritem(bl, item_data, amount, m, x, y, first_charid, second_charid, third_charid, flags);
+ retVal___ = HPMHooks.source.map.addflooritem(bl, item_data, amount, m, x, y, first_charid, second_charid, third_charid, flags, showdropeffect);
}
if (HPMHooks.count.HP_map_addflooritem_post > 0) {
- int (*postHookFunc) (int retVal___, const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags);
+ int (*postHookFunc) (int retVal___, const struct block_list *bl, struct item *item_data, int amount, int16 m, int16 x, int16 y, int first_charid, int second_charid, int third_charid, int flags, bool showdropeffect);
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_addflooritem_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_map_addflooritem_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, bl, item_data, amount, m, x, y, first_charid, second_charid, third_charid, flags);
+ retVal___ = postHookFunc(retVal___, bl, item_data, amount, m, x, y, first_charid, second_charid, third_charid, flags, showdropeffect);
}
}
return retVal___;
@@ -43411,15 +44370,15 @@ int HP_map_eraseallipport_sub(union DBKey key, struct DBData *data, va_list va)
}
return retVal___;
}
-char* HP_map_init_mapcache(FILE *fp) {
+bool HP_map_readfromcache(struct map_data *m) {
int hIndex = 0;
- char* retVal___ = NULL;
- if (HPMHooks.count.HP_map_init_mapcache_pre > 0) {
- char* (*preHookFunc) (FILE **fp);
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_map_readfromcache_pre > 0) {
+ bool (*preHookFunc) (struct map_data **m);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_map_init_mapcache_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_map_init_mapcache_pre[hIndex].func;
- retVal___ = preHookFunc(&fp);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_readfromcache_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_map_readfromcache_pre[hIndex].func;
+ retVal___ = preHookFunc(&m);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -43427,26 +44386,26 @@ char* HP_map_init_mapcache(FILE *fp) {
}
}
{
- retVal___ = HPMHooks.source.map.init_mapcache(fp);
+ retVal___ = HPMHooks.source.map.readfromcache(m);
}
- if (HPMHooks.count.HP_map_init_mapcache_post > 0) {
- char* (*postHookFunc) (char* retVal___, FILE *fp);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_map_init_mapcache_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_map_init_mapcache_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fp);
+ if (HPMHooks.count.HP_map_readfromcache_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_data *m);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_readfromcache_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_map_readfromcache_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, m);
}
}
return retVal___;
}
-int HP_map_readfromcache(struct map_data *m, char *buffer) {
+bool HP_map_readfromcache_v1(FILE *fp, struct map_data *m, unsigned int file_size) {
int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_map_readfromcache_pre > 0) {
- int (*preHookFunc) (struct map_data **m, char **buffer);
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_map_readfromcache_v1_pre > 0) {
+ bool (*preHookFunc) (FILE **fp, struct map_data **m, unsigned int *file_size);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_map_readfromcache_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_map_readfromcache_pre[hIndex].func;
- retVal___ = preHookFunc(&m, &buffer);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_readfromcache_v1_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_map_readfromcache_v1_pre[hIndex].func;
+ retVal___ = preHookFunc(&fp, &m, &file_size);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -43454,13 +44413,13 @@ int HP_map_readfromcache(struct map_data *m, char *buffer) {
}
}
{
- retVal___ = HPMHooks.source.map.readfromcache(m, buffer);
+ retVal___ = HPMHooks.source.map.readfromcache_v1(fp, m, file_size);
}
- if (HPMHooks.count.HP_map_readfromcache_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_data *m, char *buffer);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_map_readfromcache_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_map_readfromcache_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, m, buffer);
+ if (HPMHooks.count.HP_map_readfromcache_v1_post > 0) {
+ bool (*postHookFunc) (bool retVal___, FILE *fp, struct map_data *m, unsigned int file_size);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_map_readfromcache_v1_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_map_readfromcache_v1_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, fp, m, file_size);
}
}
return retVal___;
@@ -66521,6 +67480,33 @@ int HP_script_run_func(struct script_state *st) {
}
return retVal___;
}
+bool HP_script_sprintf(struct script_state *st, int start, struct StringBuf *out) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_script_sprintf_pre > 0) {
+ bool (*preHookFunc) (struct script_state **st, int *start, struct StringBuf **out);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_sprintf_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_sprintf_pre[hIndex].func;
+ retVal___ = preHookFunc(&st, &start, &out);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.script.sprintf(st, start, out);
+ }
+ if (HPMHooks.count.HP_script_sprintf_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct script_state *st, int start, struct StringBuf *out);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_sprintf_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_sprintf_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, st, start, out);
+ }
+ }
+ return retVal___;
+}
const char* HP_script_getfuncname(struct script_state *st) {
int hIndex = 0;
const char* retVal___ = NULL;
@@ -72951,33 +73937,6 @@ bool HP_skill_parse_row_magicmushroomdb(char *split[], int column, int current)
}
return retVal___;
}
-bool HP_skill_parse_row_reproducedb(char *split[], int column, int current) {
- int hIndex = 0;
- bool retVal___ = false;
- if (HPMHooks.count.HP_skill_parse_row_reproducedb_pre > 0) {
- bool (*preHookFunc) (char **split[], int *column, int *current);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_parse_row_reproducedb_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_parse_row_reproducedb_pre[hIndex].func;
- retVal___ = preHookFunc(&split, &column, &current);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.skill.parse_row_reproducedb(split, column, current);
- }
- if (HPMHooks.count.HP_skill_parse_row_reproducedb_post > 0) {
- bool (*postHookFunc) (bool retVal___, char *split[], int column, int current);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_parse_row_reproducedb_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_parse_row_reproducedb_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, split, column, current);
- }
- }
- return retVal___;
-}
bool HP_skill_parse_row_improvisedb(char *split[], int columns, int current) {
int hIndex = 0;
bool retVal___ = false;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.sources.inc b/src/plugins/HPMHooking/HPMHooking_map.sources.inc
index ada63e53d..e6f305726 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.sources.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.sources.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2017 Hercules Dev Team
+ * Copyright (C) 2013-2018 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -33,6 +33,7 @@ HPMHooks.source.buyingstore = *buyingstore;
HPMHooks.source.channel = *channel;
HPMHooks.source.chat = *chat;
HPMHooks.source.chrif = *chrif;
+HPMHooks.source.clan = *clan;
HPMHooks.source.clif = *clif;
HPMHooks.source.cmdline = *cmdline;
HPMHooks.source.console = *console;
diff --git a/src/plugins/mapcache.c b/src/plugins/mapcache.c
new file mode 100644
index 000000000..5e44492f6
--- /dev/null
+++ b/src/plugins/mapcache.c
@@ -0,0 +1,490 @@
+/**
+* This file is part of Hercules.
+* http://herc.ws - http://github.com/HerculesWS/Hercules
+*
+* Copyright (C) 2013-2015 Hercules Dev Team
+*
+* Hercules is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * Mapcache Plugin
+ * This Plugin is made to handle the creation and update the new format of mapcache
+ * it also handles the convertion from the old to the new mapcache format
+ **/
+
+#include "common/hercules.h" /* Should always be the first Hercules file included! (if you don't make it first, you won't be able to use interfaces) */
+
+#include "common/memmgr.h"
+#include "common/md5calc.h"
+#include "common/nullpo.h"
+#include "common/grfio.h"
+#include "common/utils.h"
+#include "map/map.h"
+
+#include "common/HPMDataCheck.h" /* should always be the last Hercules file included! (if you don't make it last, it'll intentionally break compile time) */
+
+#include <stdio.h>
+#include <string.h>
+
+HPExport struct hplugin_info pinfo = {
+ "Mapcache", ///< Plugin name
+ SERVER_TYPE_MAP, ///< Which server types this plugin works with?
+ "1.0.0", ///< Plugin version
+ HPM_VERSION, ///< HPM Version (don't change, macro is automatically updated)
+};
+
+/**
+ * Yes.. old mapcache was never packed, and we loaded and wrote a compiler paded structs
+ * DON'T BLAME IF SOMETHING EXPLODED [hemagx]
+ **/
+// This is the main header found at the very beginning of the map cache
+struct old_mapcache_main_header {
+ uint32 file_size;
+ uint16 map_count;
+};
+
+// This is the header appended before every compressed map cells info in the map cache
+struct old_mapcache_map_info {
+ char name[MAP_NAME_LENGTH];
+ int16 xs;
+ int16 ys;
+ int32 len;
+};
+
+/**
+ *
+ */
+
+#define NO_WATER 1000000
+
+VECTOR_DECL(char *) maplist;
+bool needs_grfio;
+
+
+/**
+ * code from utlis.c until it's interfaced
+ **/
+
+#ifdef WIN32
+# ifndef F_OK
+# define F_OK 0x0
+# endif /* F_OK */
+#else
+# include <unistd.h>
+#endif
+
+
+// Reads an uint32 in little-endian from the buffer
+uint32 GetULong(const unsigned char* buf)
+{
+ return (((uint32)(buf[0])))
+ | (((uint32)(buf[1])) << 0x08)
+ | (((uint32)(buf[2])) << 0x10)
+ | (((uint32)(buf[3])) << 0x18);
+}
+
+// Reads a float (32 bits) from the buffer
+float GetFloat(const unsigned char* buf)
+{
+ uint32 val = GetULong(buf);
+ return *((float*)(void*)&val);
+}
+
+bool write_mapcache(const uint8 *buf, int32 buf_len, bool is_compressed, const char *mapname, int16 xs, int16 ys)
+{
+ struct map_cache_header header = { 0 };
+ char file_path[255];
+ int mapname_len;
+ unsigned long compressed_buf_len;
+ uint8 *compressed_buf = NULL;
+ FILE *new_mapcache_fp;
+
+ nullpo_retr(false, buf);
+ nullpo_retr(false, mapname);
+
+ mapname_len = (int)strlen(mapname);
+
+ if (mapname_len > MAP_NAME_LENGTH || mapname_len < 1) {
+ ShowError("write_mapcache: A map with invalid name length has beed passed '%s' size (%d)\n", mapname, mapname_len);
+ return false;
+ }
+
+ if ((xs < 0 || ys < 0)) {
+ ShowError("write_mapcache: '%s' given with invalid coords xs = %d, ys = %d\n", mapname, xs, ys);
+ return false;
+ }
+
+ if (((int)xs * ys) > MAX_MAP_SIZE) {
+ ShowError("write_mapcache: map '%s' exceeded MAX_MAP_SIZE of %d\n", mapname, MAX_MAP_SIZE);
+ return false;
+ }
+
+
+
+ snprintf(file_path, sizeof(file_path), "%s%s%s.%s", "maps/", DBPATH, mapname, "mcache");
+ new_mapcache_fp = fopen(file_path, "wb");
+
+ if (new_mapcache_fp == NULL) {
+ ShowWarning("Could not open file '%s', map cache creating failed.\n", file_path);
+ return false;
+ }
+
+ header.version = 0x1;
+ header.xs = xs;
+ header.ys = ys;
+
+ if (is_compressed == false) {
+ compressed_buf_len = buf_len * 2; //Creating big enough buffer to ensure ability to hold compressed data
+ CREATE(compressed_buf, uint8, compressed_buf_len);
+ grfio->encode_zip(compressed_buf, &compressed_buf_len, buf, buf_len);
+
+ header.len = (int)compressed_buf_len;
+ md5->binary(compressed_buf, (int)compressed_buf_len, header.md5_checksum);
+ } else {
+ header.len = buf_len;
+ md5->binary(buf, buf_len, header.md5_checksum);
+ }
+
+
+ fwrite(&header, sizeof(header), 1, new_mapcache_fp);
+ if (is_compressed == false)
+ fwrite(compressed_buf, compressed_buf_len, 1, new_mapcache_fp);
+ else
+ fwrite(buf, buf_len, 1, new_mapcache_fp);
+
+ fclose(new_mapcache_fp);
+ if (compressed_buf != NULL)
+ aFree(compressed_buf);
+
+ return true;
+}
+
+bool convert_old_mapcache(void)
+{
+ const char *path = "db/"DBPATH"map_cache.dat";
+ FILE *mapcache_fp = fopen(path, "rb");
+ struct old_mapcache_main_header header = { 0 };
+ uint8 *p, *cursor;
+ uint32 file_size;
+ int i;
+
+ if (mapcache_fp == NULL) {
+ ShowError("Could not open mapcache file in the following path '%s' \n", path);
+ return false;
+ }
+
+ if (fread(&header, sizeof(header), 1, mapcache_fp) != 1) {
+ ShowError("Failed to read mapcache header \n");
+ fclose(mapcache_fp);
+ return false;
+ }
+
+ fseek(mapcache_fp, 0, SEEK_END);
+ file_size = (int)ftell(mapcache_fp);
+ fseek(mapcache_fp, 0, SEEK_SET);
+
+ if (file_size != header.file_size) {
+ ShowError("File size in mapcache header doesn't match actual mapcache file size \n");
+ fclose(mapcache_fp);
+ return false;
+ }
+
+ CREATE(p, uint8, header.file_size);
+ cursor = p + sizeof(header);
+
+ if (fread(p, header.file_size, 1, mapcache_fp) != 1) {
+ ShowError("Could not load mapcache file into memory, fread failed.\n");
+ aFree(p);
+ fclose(mapcache_fp);
+ return false;
+ }
+
+ for (i = 0; i < header.map_count; ++i) {
+ struct old_mapcache_map_info *info = (struct old_mapcache_map_info *)cursor;
+
+ ShowStatus("Creating mapcache: %s"CL_CLL"\n", info->name);
+
+ if (write_mapcache((uint8 *)info + sizeof(*info), info->len, true, info->name, info->xs, info->ys) == false) {
+ ShowError("failed To convert map '%s'\n", info->name);
+ }
+
+ cursor += sizeof(*info) + info->len;
+ }
+
+ aFree(p);
+ fclose(mapcache_fp);
+ return true;
+}
+
+bool mapcache_read_maplist(const char *filepath)
+{
+ char line[4096] = { 0 };
+ FILE *fp;
+
+ nullpo_retr(false, filepath);
+
+ fp = fopen(filepath, "r");
+
+ if (fp == NULL)
+ return false;
+
+ while (fgets(line, sizeof(line), fp)) {
+ char map_name[MAP_NAME_LENGTH];
+ if (line[0] == '/' && line[1] == '/')
+ continue;
+
+ if (sscanf(line, "%11s", map_name) == 1) {
+ VECTOR_ENSURE(maplist, 1, 1);
+ VECTOR_PUSH(maplist, aStrdup(map_name));
+ }
+ }
+
+ ShowStatus("%d map loaded from map_index.txt\n", VECTOR_LENGTH(maplist));
+ fclose(fp);
+ return true;
+}
+
+bool mapcache_cache_map(const char *mapname)
+{
+ char filepath[255] = { 0 };
+ uint8 *gat, *rsw, *gat_cursor;
+ uint8 *cells;
+ int water_height, map_size, xy;
+ int16 xs, ys;
+
+ nullpo_retr(false, mapname);
+
+ snprintf(filepath, sizeof(filepath), "data\\%s.gat", mapname);
+ gat = grfio_read(filepath);
+
+ if (gat == NULL) {
+ ShowError("mapcache_cache_map: Could not read %s, aborting caching map %s\n", filepath, mapname);
+ return false;
+ }
+
+ snprintf(filepath, sizeof(filepath), "data\\%s.rsw", mapname);
+
+ rsw = grfio_read(filepath);
+
+ if (rsw == NULL) {
+ water_height = NO_WATER;
+ } else {
+ water_height = (int)GetFloat(rsw + 166);
+ aFree(rsw);
+ }
+
+ xs = (int16)GetULong(gat + 6);
+ ys = (int16)GetULong(gat + 10);
+
+ if (xs <= 0 || ys <= 0) {
+ ShowError("mapcache_cache_map: map '%s' doesn't have valid size xs = %d, ys = %d\n", mapname, xs, ys);
+ aFree(gat);
+ return false;
+ }
+
+ map_size = xs * ys;
+ CREATE(cells, uint8, map_size);
+
+ gat_cursor = gat;
+ for (xy = 0; xy < map_size; ++xy) {
+ float height = GetFloat(gat_cursor + 14);
+ uint32 type = GetULong(gat_cursor + 30);
+ gat_cursor += 20;
+
+ if (type == 0 && water_height != NO_WATER && height > water_height)
+ type = 3;
+
+ cells[xy] = (uint8)type;
+ }
+
+ write_mapcache(cells, map_size, false, mapname, xs, ys);
+
+ aFree(gat);
+ aFree(cells);
+ return true;
+}
+
+bool mapcache_rebuild(void)
+{
+ int i;
+ char file_path[255];
+
+ if (mapcache_read_maplist("db/map_index.txt") == false) {
+ ShowError("mapcache_rebuild: Could not read maplist, aborting\n");
+ return false;
+ }
+
+ for (i = 0; i < VECTOR_LENGTH(maplist); ++i) {
+ snprintf(file_path, sizeof(file_path), "%s%s%s.%s", "maps/", DBPATH, VECTOR_INDEX(maplist, i), "mcache");
+ if (access(file_path, F_OK) == 0 && remove(file_path) != 0) {
+ ShowWarning("mapcache_rebuild: Could not remove file '%s' \n", file_path);
+ }
+ }
+
+ for (i = 0; i < VECTOR_LENGTH(maplist); ++i) {
+ ShowStatus("Creating mapcache: %s"CL_CLL"\r", VECTOR_INDEX(maplist, i));
+ mapcache_cache_map(VECTOR_INDEX(maplist, i));
+ }
+
+ return true;
+}
+
+bool fix_md5_truncation_sub(FILE *fp, const char *map_name)
+{
+ unsigned int file_size;
+ struct map_cache_header mheader = { 0 };
+ uint8 *buf = NULL;
+
+ nullpo_retr(false, fp);
+ nullpo_retr(false, map_name);
+
+ fseek(fp, 0, SEEK_END);
+ file_size = (unsigned int)ftell(fp);
+ fseek(fp, 0, SEEK_SET); // Rewind file pointer before passing it to the read function.
+
+ if (file_size <= sizeof(mheader) || fread(&mheader, sizeof(mheader), 1, fp) < 1) {
+ ShowError("fix_md5_truncation: Failed to read cache header for map '%s'.\n", map_name);
+ return false;
+ }
+
+ if (mheader.len <= 0) {
+ ShowError("fix_md5_truncation: A file with negative or zero compressed length passed '%d'.\n", mheader.len);
+ return false;
+ }
+
+ if (file_size < sizeof(mheader) + mheader.len) {
+ ShowError("fix_md5_truncation: An incomplete file passed for map '%s'.\n", map_name);
+ return false;
+ }
+
+ CREATE(buf, uint8, mheader.len);
+ if (fread(buf, mheader.len, 1, fp) < 1) {
+ ShowError("fix_md5_truncation: Could not load the compressed cell data for map '%s'.\n", map_name);
+ aFree(buf);
+ return false;
+ }
+
+ md5->binary(buf, mheader.len, mheader.md5_checksum);
+ aFree(buf);
+
+ fseek(fp, 0, SEEK_SET);
+ fwrite(&mheader, sizeof(mheader), 1, fp);
+ fclose(fp);
+
+ return true;
+}
+
+bool fix_md5_truncation(void)
+{
+ int i;
+ bool retval = true;
+
+ if (mapcache_read_maplist("db/map_index.txt") == false) {
+ ShowError("mapcache_rebuild: Could not read maplist, aborting\n");
+ return false;
+ }
+
+ for (i = 0; i < VECTOR_LENGTH(maplist); ++i) {
+ const char *map_name = VECTOR_INDEX(maplist, i);
+ char file_path[255];
+ FILE *fp = NULL;
+ int16 version;
+
+ snprintf(file_path, sizeof(file_path), "%s%s%s.%s", "maps/", DBPATH, map_name, "mcache");
+
+ fp = fopen(file_path, "r+b");
+
+ if (fp == NULL) {
+ ShowWarning("fix_md5_truncation: Could not open the mapcache file for map '%s' at path '%s'.\n", map_name, file_path);
+ retval = false;
+ continue;
+ }
+
+ if (fread(&version, sizeof(version), 1, fp) < 1) {
+ ShowError("fix_md5_truncation: Could not read file version for map '%s'.\n", map_name);
+ fclose(fp);
+ retval = false;
+ continue;
+ }
+
+ if (version != 1) {
+ ShowError("fix_md5_truncation: Mapcache for map '%s' has version %d. The update is only applied to version 1.\n", map_name, version);
+ fclose(fp);
+ continue;
+ }
+
+ ShowStatus("Updating mapcache: %s'\n", map_name);
+ if (!fix_md5_truncation_sub(fp, map_name))
+ retval = false;
+
+ fclose(fp);
+ }
+
+ return retval;
+}
+
+CMDLINEARG(convertmapcache)
+{
+ map->minimal = true;
+ return convert_old_mapcache();
+}
+
+CMDLINEARG(rebuild)
+{
+ needs_grfio = true;
+ grfio->init("conf/grf-files.txt");
+ map->minimal = true;
+ return mapcache_rebuild();
+}
+
+CMDLINEARG(cachemap)
+{
+ needs_grfio = true;
+ grfio->init("conf/grf-files.txt");
+ map->minimal = true;
+ return mapcache_cache_map(params);
+}
+
+CMDLINEARG(fixmd5)
+{
+ map->minimal = true;
+ return fix_md5_truncation();
+}
+
+HPExport void server_preinit(void)
+{
+ addArg("--convert-old-mapcache", false, convertmapcache,
+ "Converts an old db/"DBPATH"map_cache.dat file to the new format.");
+ addArg("--rebuild-mapcache", false, rebuild,
+ "Rebuilds the entire mapcache folder (maps/"DBPATH"), using db/map_index.txt as index.");
+ addArg("--map", true, cachemap,
+ "Rebuilds an individual map's cache into maps/"DBPATH" (usage: --map <map_name_without_extension>).");
+ addArg("--fix-md5", false, fixmd5,
+ "Updates the checksum for the files in maps/"DBPATH", using db/map_index.txt as index (see PR #1981).");
+
+ needs_grfio = false;
+ VECTOR_INIT(maplist);
+}
+
+HPExport void plugin_final(void)
+{
+ while (VECTOR_LENGTH(maplist) > 0) {
+ char *name = VECTOR_POP(maplist);
+ aFree(name);
+ }
+ VECTOR_CLEAR(maplist);
+ if (needs_grfio)
+ grfio->final();
+}
diff --git a/src/tool/Makefile.in b/src/tool/Makefile.in
index 6e8643c56..fff29145e 100644
--- a/src/tool/Makefile.in
+++ b/src/tool/Makefile.in
@@ -36,26 +36,15 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
scanctx.h scanner.h strbuf.h wincompat.h)
-MAPCACHE_OBJ = obj_all/mapcache.o
-MAPCACHE_C = mapcache.c
-MAPCACHE_H =
-MAPCACHE_DEPENDS = $(MAPCACHE_OBJ) $(COMMON_D)/obj_all/common_mini.a $(LIBCONFIG_OBJ) $(SYSINFO_INC)
-
@SET_MAKE@
CC = @CC@
export CC
#####################################################################
-.PHONY: all mapcache clean buildclean help
-
-all: mapcache Makefile
-
-mapcache: ../../mapcache@EXEEXT@
+.PHONY: all clean buildclean help
-../../mapcache@EXEEXT@: $(MAPCACHE_DEPENDS) Makefile
- @echo " LD $(notdir $@)"
- @$(CC) @STATIC@ @LDFLAGS@ -o ../../mapcache@EXEEXT@ $(MAPCACHE_OBJ) $(COMMON_D)/obj_all/common_mini.a $(LIBCONFIG_OBJ) @LIBS@
+all: Makefile
buildclean:
@echo " CLEAN tool (build temp files)"
@@ -63,11 +52,9 @@ buildclean:
clean: buildclean
@echo " CLEAN tool"
- @rm -rf ../../mapcache@EXEEXT@
help:
- @echo "possible targets are 'mapcache' 'all' 'clean' 'help'"
- @echo "'mapcache' - mapcache generator"
+ @echo "possible targets are 'all' 'clean' 'help'"
@echo "'all' - builds all above targets"
@echo "'clean' - cleans builds and objects"
@echo "'buildclean' - cleans build temporary (object) files, without deleting the"
@@ -79,7 +66,7 @@ help:
Makefile: Makefile.in
@$(MAKE) -C ../.. src/tool/Makefile
-$(SYSINFO_INC): $(MAPCACHE_C) $(MAPCACHE_H) $(COMMON_H) $(CONFIG_H) $(LIBCONFIG_H)
+$(SYSINFO_INC): $(COMMON_H) $(CONFIG_H) $(LIBCONFIG_H)
@echo " MAKE $@"
@$(MAKE) -C ../.. sysinfo
@@ -87,7 +74,7 @@ obj_all:
@echo " MKDIR obj_all"
@-mkdir obj_all
-obj_all/%.o: %.c $(MAPCACHE_H) $(COMMON_H) $(CONFIG_H) $(LIBCONFIG_H) | obj_all
+obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(LIBCONFIG_H) | obj_all
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
diff --git a/src/tool/mapcache.c b/src/tool/mapcache.c
deleted file mode 100644
index 5eb0843aa..000000000
--- a/src/tool/mapcache.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/**
- * This file is part of Hercules.
- * http://herc.ws - http://github.com/HerculesWS/Hercules
- *
- * Copyright (C) 2012-2016 Hercules Dev Team
- * Copyright (C) Athena Dev Teams
- *
- * Hercules is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#define HERCULES_CORE
-
-#include "common/cbasetypes.h"
-#include "common/core.h"
-#include "common/grfio.h"
-#include "common/memmgr.h"
-#include "common/mmo.h"
-#include "common/showmsg.h"
-#include "common/strlib.h"
-#include "common/utils.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef _WIN32
-#include <unistd.h>
-#endif
-
-#define NO_WATER 1000000
-
-char *grf_list_file;
-char *map_list_file;
-char *map_cache_file;
-int rebuild = 0;
-
-FILE *map_cache_fp;
-
-unsigned long file_size;
-
-// Used internally, this structure contains the physical map cells
-struct map_data {
- int16 xs;
- int16 ys;
- unsigned char *cells;
-};
-
-// This is the main header found at the very beginning of the file
-struct main_header {
- uint32 file_size;
- uint16 map_count;
-} header;
-
-// This is the header appended before every compressed map cells info
-struct map_info {
- char name[MAP_NAME_LENGTH];
- int16 xs;
- int16 ys;
- int32 len;
-};
-
-// Reads a map from GRF's GAT and RSW files
-int read_map(char *name, struct map_data *m)
-{
- char filename[256];
- unsigned char *gat, *rsw;
- int water_height;
- size_t xy, off, num_cells;
-
- // Open map GAT
- sprintf(filename,"data\\%s.gat", name);
- gat = grfio_read(filename);
- if (gat == NULL)
- return 0;
-
- // Open map RSW
- sprintf(filename,"data\\%s.rsw", name);
- rsw = grfio_read(filename);
-
- // Read water height
- if (rsw) {
- water_height = (int)GetFloat(rsw+166);
- aFree(rsw);
- } else
- water_height = NO_WATER;
-
- // Read map size and allocate needed memory
- m->xs = (int16)GetULong(gat+6);
- m->ys = (int16)GetULong(gat+10);
- if (m->xs <= 0 || m->ys <= 0) {
- aFree(gat);
- return 0;
- }
- num_cells = (size_t)m->xs*(size_t)m->ys;
- m->cells = (unsigned char *)aMalloc(num_cells);
-
- // Set cell properties
- off = 14;
- for (xy = 0; xy < num_cells; xy++) {
- // Height of the bottom-left corner
- float height = GetFloat(gat + off);
- // Type of cell
- uint32 type = GetULong(gat + off + 16);
- off += 20;
-
- if (type == 0 && water_height != NO_WATER && height > water_height)
- type = 3; // Cell is 0 (walkable) but under water level, set to 3 (walkable water)
-
- m->cells[xy] = (unsigned char)type;
- }
-
- aFree(gat);
-
- return 1;
-}
-
-/**
- * Adds a map to the cache.
- *
- * @param name The map name.
- * @param m Map data to cache.
- * @retval true if the map was successfully added to the cache.
- */
-bool cache_map(char *name, struct map_data *m)
-{
- struct map_info info;
- unsigned long len;
- unsigned char *write_buf;
-
- // Create an output buffer twice as big as the uncompressed map... this way we're sure it fits
- len = (unsigned long)m->xs*(unsigned long)m->ys*2;
- write_buf = (unsigned char *)aMalloc(len);
- // Compress the cells and get the compressed length
- grfio->encode_zip(write_buf, &len, m->cells, m->xs*m->ys);
-
- // Fill the map header
- safestrncpy(info.name, name, MAP_NAME_LENGTH);
- if (strlen(name) > MAP_NAME_LENGTH) // It does not hurt to warn that there are maps with name longer than allowed.
- ShowWarning("Map name '%s' (length %"PRIuS") is too long. Truncating to '%s' (length %d).\n",
- name, strlen(name), info.name, MAP_NAME_LENGTH);
- info.xs = MakeShortLE(m->xs);
- info.ys = MakeShortLE(m->ys);
- info.len = MakeLongLE((uint32)len);
-
- // Append map header then compressed cells at the end of the file
- if (fseek(map_cache_fp, header.file_size, SEEK_SET) != 0) {
- aFree(write_buf);
- aFree(m->cells);
- return false;
- }
- fwrite(&info, sizeof(struct map_info), 1, map_cache_fp);
- fwrite(write_buf, 1, len, map_cache_fp);
- header.file_size += sizeof(struct map_info) + len;
- header.map_count++;
-
- aFree(write_buf);
- aFree(m->cells);
-
- return true;
-}
-
-/**
- * Checks whether a map is already is the cache.
- *
- * @param name The map name.
- * @retval true if the map is already cached.
- */
-bool find_map(char *name)
-{
- int i;
- struct map_info info;
-
- if (fseek(map_cache_fp, sizeof(struct main_header), SEEK_SET) != 0)
- return false;
-
- for (i = 0; i < header.map_count; i++) {
- if (fread(&info, sizeof(info), 1, map_cache_fp) != 1)
- printf("An error as occured in fread while reading map_cache\n");
- if (strcmp(name, info.name) == 0) // Map found
- return true;
- // Map not found, jump to the beginning of the next map info header
- if (fseek(map_cache_fp, GetLong((unsigned char *)&(info.len)), SEEK_CUR) != 0)
- return false;
- }
-
- return false;
-}
-
-// Cuts the extension from a map name
-char *remove_extension(char *mapname)
-{
- char *ptr, *ptr2;
- ptr = strchr(mapname, '.');
- if (ptr) { //Check and remove extension.
- while (ptr[1] && (ptr2 = strchr(ptr+1, '.')) != NULL)
- ptr = ptr2; //Skip to the last dot.
- if (strcmp(ptr,".gat") == 0)
- *ptr = '\0'; //Remove extension.
- }
- return mapname;
-}
-
-/**
- * --grf-list handler
- *
- * Overrides the default grf list filename.
- * @see cmdline->exec
- */
-static CMDLINEARG(grflist)
-{
- aFree(grf_list_file);
- grf_list_file = aStrdup(params);
- return true;
-}
-
-/**
- * --map-list handler
- *
- * Overrides the default map list filename.
- * @see cmdline->exec
- */
-static CMDLINEARG(maplist)
-{
- aFree(map_list_file);
- map_list_file = aStrdup(params);
- return true;
-}
-
-/**
- * --map-cache handler
- *
- * Overrides the default map cache filename.
- * @see cmdline->exec
- */
-static CMDLINEARG(mapcache)
-{
- aFree(map_cache_file);
- map_cache_file = aStrdup(params);
- return true;
-}
-
-/**
- * --rebuild handler
- *
- * Forces a rebuild of the mapcache, rather than only adding missing maps.
- * @see cmdline->exec
- */
-static CMDLINEARG(rebuild)
-{
- rebuild = 1;
- return true;
-}
-
-/**
- * Defines the local command line arguments
- */
-void cmdline_args_init_local(void)
-{
- CMDLINEARG_DEF2(grf-list, grflist, "Alternative grf list file", CMDLINE_OPT_NORMAL|CMDLINE_OPT_PARAM);
- CMDLINEARG_DEF2(map-list, maplist, "Alternative map list file", CMDLINE_OPT_NORMAL|CMDLINE_OPT_PARAM);
- CMDLINEARG_DEF2(map-cache, mapcache, "Alternative map cache file", CMDLINE_OPT_NORMAL|CMDLINE_OPT_PARAM);
- CMDLINEARG_DEF2(rebuild, rebuild, "Forces a rebuild of the map cache, rather than only adding missing maps", CMDLINE_OPT_NORMAL);
-}
-
-int do_init(int argc, char** argv)
-{
- FILE *list;
- char line[1024];
- struct map_data map;
- char name[MAP_NAME_LENGTH_EXT];
-
- grf_list_file = aStrdup("conf/grf-files.txt");
- map_list_file = aStrdup("db/map_index.txt");
- /* setup pre-defined, #define-dependant */
- map_cache_file = aStrdup("db/"DBPATH"map_cache.dat");
-
- cmdline->exec(argc, argv, CMDLINE_OPT_PREINIT);
- cmdline->exec(argc, argv, CMDLINE_OPT_NORMAL);
-
- ShowStatus("Initializing grfio with %s\n", grf_list_file);
- grfio->init(grf_list_file);
-
- // Attempt to open the map cache file and force rebuild if not found
- ShowStatus("Opening map cache: %s\n", map_cache_file);
- if(!rebuild) {
- map_cache_fp = fopen(map_cache_file, "rb");
- if(map_cache_fp == NULL) {
- ShowNotice("Existing map cache not found, forcing rebuild mode\n");
- rebuild = 1;
- } else
- fclose(map_cache_fp);
- }
- if(rebuild)
- map_cache_fp = fopen(map_cache_file, "w+b");
- else
- map_cache_fp = fopen(map_cache_file, "r+b");
- if(map_cache_fp == NULL) {
- ShowError("Failure when opening map cache file %s\n", map_cache_file);
- exit(EXIT_FAILURE);
- }
-
- // Open the map list
- ShowStatus("Opening map list: %s\n", map_list_file);
- list = fopen(map_list_file, "r");
- if(list == NULL) {
- ShowError("Failure when opening maps list file %s\n", map_list_file);
- exit(EXIT_FAILURE);
- }
-
- // Initialize the main header
- if(rebuild) {
- header.file_size = sizeof(struct main_header);
- header.map_count = 0;
- } else {
- if(fread(&header, sizeof(struct main_header), 1, map_cache_fp) != 1){ printf("An error as occured while reading map_cache_fp \n"); }
- header.file_size = GetULong((unsigned char *)&(header.file_size));
- header.map_count = GetUShort((unsigned char *)&(header.map_count));
- }
-
- // Read and process the map list
- while(fgets(line, sizeof(line), list))
- {
- if(line[0] == '/' && line[1] == '/')
- continue;
-
- if(sscanf(line, "%15s", name) < 1)
- continue;
-
- if(strcmp("map:", name) == 0 && sscanf(line, "%*s %15s", name) < 1)
- continue;
-
- name[MAP_NAME_LENGTH_EXT-1] = '\0';
- remove_extension(name);
- if (find_map(name)) {
- ShowInfo("Map '"CL_WHITE"%s"CL_RESET"' already in cache.\n", name);
- } else if(!read_map(name, &map)) {
- ShowError("Map '"CL_WHITE"%s"CL_RESET"' not found!\n", name);
- } else if (!cache_map(name, &map)) {
- ShowError("Map '"CL_WHITE"%s"CL_RESET"' failed to cache (write error).\n", name);
- } else {
- ShowInfo("Map '"CL_WHITE"%s"CL_RESET"' successfully cached.\n", name);
- }
- }
-
- ShowStatus("Closing map list: %s\n", map_list_file);
- fclose(list);
-
- // Write the main header and close the map cache
- ShowStatus("Closing map cache: %s\n", map_cache_file);
- fseek(map_cache_fp, 0, SEEK_SET);
- fwrite(&header, sizeof(struct main_header), 1, map_cache_fp);
- fclose(map_cache_fp);
-
- ShowStatus("Finalizing grfio\n");
- grfio->final();
-
- ShowInfo("%d maps now in cache\n", header.map_count);
-
- aFree(grf_list_file);
- aFree(map_list_file);
- aFree(map_cache_file);
-
- return 0;
-}
-
-int do_final(void)
-{
- return EXIT_SUCCESS;
-}
diff --git a/tools/ci/travis.sh b/tools/ci/travis.sh
index cc1f15ee8..f6c799934 100755
--- a/tools/ci/travis.sh
+++ b/tools/ci/travis.sh
@@ -203,6 +203,12 @@ EOF
ARGS="--load-plugin script_mapquit $ARGS --load-script npc/dev/ci_test.txt"
PLUGINS="--load-plugin HPMHooking --load-plugin sample"
echo "run tests"
+ if [[ $DBUSER == "travis" ]]; then
+ echo "Disable leak dection on travis"
+ export ASAN_OPTIONS=detect_leaks=0:detect_stack_use_after_return=true:strict_init_order=true
+ else
+ export ASAN_OPTIONS=detect_stack_use_after_return=true:strict_init_order=true
+ fi
# run_test spinlock # Not running the spinlock test for the time being (too time consuming)
run_test libconfig
echo "run all servers without HPM"
diff --git a/vcproj-11/char-server.vcxproj b/vcproj-11/char-server.vcxproj
index 17c1ab847..593862d8a 100644
--- a/vcproj-11/char-server.vcxproj
+++ b/vcproj-11/char-server.vcxproj
@@ -176,6 +176,7 @@
<ClInclude Include="..\src\char\char.h" />
<ClInclude Include="..\src\char\geoip.h" />
<ClInclude Include="..\src\char\int_auction.h" />
+ <ClInclude Include="..\src\char\int_clan.h" />
<ClInclude Include="..\src\char\int_elemental.h" />
<ClInclude Include="..\src\char\int_guild.h" />
<ClInclude Include="..\src\char\int_homun.h" />
@@ -229,6 +230,7 @@
<ClCompile Include="..\src\char\char.c" />
<ClCompile Include="..\src\char\geoip.c" />
<ClCompile Include="..\src\char\int_auction.c" />
+ <ClCompile Include="..\src\char\int_clan.c" />
<ClCompile Include="..\src\char\int_elemental.c" />
<ClCompile Include="..\src\char\int_guild.c" />
<ClCompile Include="..\src\char\int_homun.c" />
diff --git a/vcproj-11/char-server.vcxproj.filters b/vcproj-11/char-server.vcxproj.filters
index ba5914a89..af34d2efd 100644
--- a/vcproj-11/char-server.vcxproj.filters
+++ b/vcproj-11/char-server.vcxproj.filters
@@ -70,6 +70,9 @@
<ClCompile Include="..\src\char\int_auction.c">
<Filter>char</Filter>
</ClCompile>
+ <ClCompile Include="..\src\char\int_clan.c">
+ <Filter>char</Filter>
+ </ClCompile>
<ClCompile Include="..\src\char\int_elemental.c">
<Filter>char</Filter>
</ClCompile>
@@ -219,6 +222,9 @@
<ClInclude Include="..\src\char\int_auction.h">
<Filter>char</Filter>
</ClInclude>
+ <ClInclude Include="..\src\char\int_clan.h">
+ <Filter>char</Filter>
+ </ClInclude>
<ClInclude Include="..\src\char\int_elemental.h">
<Filter>char</Filter>
</ClInclude>
diff --git a/vcproj-11/login-server.vcxproj b/vcproj-11/login-server.vcxproj
index 6e9088f10..9abd5dc90 100644
--- a/vcproj-11/login-server.vcxproj
+++ b/vcproj-11/login-server.vcxproj
@@ -196,12 +196,12 @@
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\mutex.c" />
<ClCompile Include="..\src\common\thread.c" />
- <ClCompile Include="..\src\login\account_sql.c" />
+ <ClCompile Include="..\src\login\account.c" />
<ClCompile Include="..\src\login\HPMlogin.c" />
- <ClCompile Include="..\src\login\ipban_sql.c" />
+ <ClCompile Include="..\src\login\ipban.c" />
<ClCompile Include="..\src\login\lclif.c" />
<ClCompile Include="..\src\login\login.c" />
- <ClCompile Include="..\src\login\loginlog_sql.c" />
+ <ClCompile Include="..\src\login\loginlog.c" />
<ClCompile Include="..\src\common\conf.c" />
<ClCompile Include="..\src\common\core.c" />
<ClCompile Include="..\src\common\console.c" />
diff --git a/vcproj-11/login-server.vcxproj.filters b/vcproj-11/login-server.vcxproj.filters
index f41fcdfac..1f3b6ba0f 100644
--- a/vcproj-11/login-server.vcxproj.filters
+++ b/vcproj-11/login-server.vcxproj.filters
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
- <ClCompile Include="..\src\login\account_sql.c">
+ <ClCompile Include="..\src\login\account.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\login\HPMlogin.c">
<Filter>login</Filter>
</ClCompile>
- <ClCompile Include="..\src\login\ipban_sql.c">
+ <ClCompile Include="..\src\login\ipban.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\login\login.c">
<Filter>login</Filter>
</ClCompile>
- <ClCompile Include="..\src\login\loginlog_sql.c">
+ <ClCompile Include="..\src\login\loginlog.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\common\conf.c">
diff --git a/vcproj-11/map-server.vcxproj b/vcproj-11/map-server.vcxproj
index c09d5293a..9909b31d8 100644
--- a/vcproj-11/map-server.vcxproj
+++ b/vcproj-11/map-server.vcxproj
@@ -176,6 +176,7 @@
<ClInclude Include="..\src\map\channel.h" />
<ClInclude Include="..\src\map\chat.h" />
<ClInclude Include="..\src\map\chrif.h" />
+ <ClInclude Include="..\src\map\clan.h" />
<ClInclude Include="..\src\map\clif.h" />
<ClInclude Include="..\src\map\date.h" />
<ClInclude Include="..\src\map\duel.h" />
@@ -195,6 +196,10 @@
<ClInclude Include="..\src\map\mob.h" />
<ClInclude Include="..\src\map\npc.h" />
<ClInclude Include="..\src\map\packets.h" />
+ <ClInclude Include="..\src\map\packets_keys_main.h" />
+ <ClInclude Include="..\src\map\packets_keys_zero.h" />
+ <ClInclude Include="..\src\map\packets_shuffle_main.h" />
+ <ClInclude Include="..\src\map\packets_shuffle_zero.h" />
<ClInclude Include="..\src\map\packets_struct.h" />
<ClInclude Include="..\src\map\party.h" />
<ClInclude Include="..\src\map\path.h" />
@@ -253,6 +258,7 @@
<ClCompile Include="..\src\map\channel.c" />
<ClCompile Include="..\src\map\chat.c" />
<ClCompile Include="..\src\map\chrif.c" />
+ <ClCompile Include="..\src\map\clan.c" />
<ClCompile Include="..\src\map\clif.c" />
<ClCompile Include="..\src\map\date.c" />
<ClCompile Include="..\src\map\duel.c" />
diff --git a/vcproj-11/map-server.vcxproj.filters b/vcproj-11/map-server.vcxproj.filters
index e6b89b3e6..c8aaffc5d 100644
--- a/vcproj-11/map-server.vcxproj.filters
+++ b/vcproj-11/map-server.vcxproj.filters
@@ -19,6 +19,9 @@
<ClCompile Include="..\src\map\chrif.c">
<Filter>map</Filter>
</ClCompile>
+ <ClCompile Include="..\src\map\clan.c">
+ <Filter>map</Filter>
+ </ClCompile>
<ClCompile Include="..\src\map\clif.c">
<Filter>map</Filter>
</ClCompile>
@@ -228,6 +231,9 @@
<ClInclude Include="..\src\map\chrif.h">
<Filter>map</Filter>
</ClInclude>
+ <ClInclude Include="..\src\map\clan.h">
+ <Filter>map</Filter>
+ </ClInclude>
<ClInclude Include="..\src\map\clif.h">
<Filter>map</Filter>
</ClInclude>
@@ -285,6 +291,18 @@
<ClInclude Include="..\src\map\packets.h">
<Filter>map</Filter>
</ClInclude>
+ <ClInclude Include="..\src\map\packets_keys_main.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_keys_zero.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_shuffle_main.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_shuffle_zero.h">
+ <Filter>map</Filter>
+ </ClInclude>
<ClInclude Include="..\src\map\packets_struct.h">
<Filter>map</Filter>
</ClInclude>
diff --git a/vcproj-11/mapcache.vcxproj b/vcproj-11/mapcache.vcxproj
deleted file mode 100644
index ffee7701d..000000000
--- a/vcproj-11/mapcache.vcxproj
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{D356871D-58E1-450B-967A-E7E9646175AF}</ProjectGuid>
- <RootNamespace>mapcache</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mapcache</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mapcache</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\src;..\3rdparty;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <ExceptionHandling>
- </ExceptionHandling>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <AdditionalOptions>
- </AdditionalOptions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <CompileAs>CompileAsC</CompileAs>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- </ClCompile>
- <Link>
- <AdditionalOptions>/FIXED:NO %(AdditionalOptions)</AdditionalOptions>
- <AdditionalDependencies>libcmtd.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)mapcache.exe</OutputFile>
- <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <RandomizedBaseAddress>false</RandomizedBaseAddress>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
- <TargetMachine>MachineX86</TargetMachine>
- <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <AdditionalIncludeDirectories>..\src;..\3rdparty;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>false</FunctionLevelLinking>
- <AdditionalOptions>
- </AdditionalOptions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>CompileAsC</CompileAs>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- </ClCompile>
- <Link>
- <AdditionalDependencies>libcmt.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)mapcache.exe</OutputFile>
- <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
- <RandomizedBaseAddress>false</RandomizedBaseAddress>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
- <TargetMachine>MachineX86</TargetMachine>
- <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\src\common\core.c" />
- <ClCompile Include="..\src\common\console.c" />
- <ClCompile Include="..\src\common\des.c" />
- <ClCompile Include="..\src\common\grfio.c" />
- <ClCompile Include="..\src\common\memmgr.c" />
- <ClCompile Include="..\src\common\showmsg.c" />
- <ClCompile Include="..\src\common\strlib.c" />
- <ClCompile Include="..\src\common\sysinfo.c" />
- <ClCompile Include="..\src\common\utils.c" />
- <ClCompile Include="..\src\common\nullpo.c" />
- <ClCompile Include="..\src\tool\mapcache.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\src\common\cbasetypes.h" />
- <ClInclude Include="..\src\common\core.h" />
- <ClInclude Include="..\src\common\console.h" />
- <ClInclude Include="..\src\common\des.h" />
- <ClInclude Include="..\src\common\grfio.h" />
- <ClInclude Include="..\src\common\memmgr.h" />
- <ClInclude Include="..\src\common\mmo.h" />
- <ClInclude Include="..\src\common\showmsg.h" />
- <ClInclude Include="..\src\common\strlib.h" />
- <ClInclude Include="..\src\common\sysinfo.h" />
- <ClInclude Include="..\src\common\utils.h" />
- <ClInclude Include="..\src\common\winapi.h" />
- <ClInclude Include="..\src\common\nullpo.h" />
- <ClInclude Include="..\src\config\classes\general.h" />
- <ClInclude Include="..\src\config\const.h" />
- <ClInclude Include="..\src\config\core.h" />
- <ClInclude Include="..\src\config\renewal.h" />
- <ClInclude Include="..\src\config\secure.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/vcproj-11/mapcache.vcxproj.filters b/vcproj-11/mapcache.vcxproj.filters
deleted file mode 100644
index 0e8702591..000000000
--- a/vcproj-11/mapcache.vcxproj.filters
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <ClCompile Include="..\src\common\core.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\console.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\des.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\grfio.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\memmgr.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\showmsg.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\strlib.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\sysinfo.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\utils.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\nullpo.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\tool\mapcache.c">
- <Filter>mapcache</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\src\common\cbasetypes.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\core.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\console.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\des.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\grfio.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\memmgr.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\mmo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\showmsg.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\strlib.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\sysinfo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\utils.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\winapi.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\nullpo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\renewal.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\const.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\core.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\secure.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\classes\general.h">
- <Filter>config</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <Filter Include="common">
- <UniqueIdentifier>{a9c2444c-ffec-4e89-8412-e530231d79dc}</UniqueIdentifier>
- </Filter>
- <Filter Include="mapcache">
- <UniqueIdentifier>{5ea9d6f7-0a10-4bfb-ad39-478e4b1d8a0d}</UniqueIdentifier>
- </Filter>
- <Filter Include="config">
- <UniqueIdentifier>{4d14995f-43fd-4eb0-abcb-78d1d05a8606}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/vcproj-12/char-server.vcxproj b/vcproj-12/char-server.vcxproj
index 02457b05f..3baf26e37 100644
--- a/vcproj-12/char-server.vcxproj
+++ b/vcproj-12/char-server.vcxproj
@@ -175,6 +175,7 @@
<ClInclude Include="..\src\char\char.h" />
<ClInclude Include="..\src\char\geoip.h" />
<ClInclude Include="..\src\char\int_auction.h" />
+ <ClInclude Include="..\src\char\int_clan.h" />
<ClInclude Include="..\src\char\int_elemental.h" />
<ClInclude Include="..\src\char\int_guild.h" />
<ClInclude Include="..\src\char\int_homun.h" />
@@ -228,6 +229,7 @@
<ClCompile Include="..\src\char\char.c" />
<ClCompile Include="..\src\char\geoip.c" />
<ClCompile Include="..\src\char\int_auction.c" />
+ <ClCompile Include="..\src\char\int_clan.c" />
<ClCompile Include="..\src\char\int_elemental.c" />
<ClCompile Include="..\src\char\int_guild.c" />
<ClCompile Include="..\src\char\int_homun.c" />
diff --git a/vcproj-12/char-server.vcxproj.filters b/vcproj-12/char-server.vcxproj.filters
index ba5914a89..af34d2efd 100644
--- a/vcproj-12/char-server.vcxproj.filters
+++ b/vcproj-12/char-server.vcxproj.filters
@@ -70,6 +70,9 @@
<ClCompile Include="..\src\char\int_auction.c">
<Filter>char</Filter>
</ClCompile>
+ <ClCompile Include="..\src\char\int_clan.c">
+ <Filter>char</Filter>
+ </ClCompile>
<ClCompile Include="..\src\char\int_elemental.c">
<Filter>char</Filter>
</ClCompile>
@@ -219,6 +222,9 @@
<ClInclude Include="..\src\char\int_auction.h">
<Filter>char</Filter>
</ClInclude>
+ <ClInclude Include="..\src\char\int_clan.h">
+ <Filter>char</Filter>
+ </ClInclude>
<ClInclude Include="..\src\char\int_elemental.h">
<Filter>char</Filter>
</ClInclude>
diff --git a/vcproj-12/login-server.vcxproj b/vcproj-12/login-server.vcxproj
index 91fa58082..a1cd6fc0e 100644
--- a/vcproj-12/login-server.vcxproj
+++ b/vcproj-12/login-server.vcxproj
@@ -196,12 +196,12 @@
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\mutex.c" />
<ClCompile Include="..\src\common\thread.c" />
- <ClCompile Include="..\src\login\account_sql.c" />
+ <ClCompile Include="..\src\login\account.c" />
<ClCompile Include="..\src\login\HPMlogin.c" />
- <ClCompile Include="..\src\login\ipban_sql.c" />
+ <ClCompile Include="..\src\login\ipban.c" />
<ClCompile Include="..\src\login\lclif.c" />
<ClCompile Include="..\src\login\login.c" />
- <ClCompile Include="..\src\login\loginlog_sql.c" />
+ <ClCompile Include="..\src\login\loginlog.c" />
<ClCompile Include="..\src\common\conf.c" />
<ClCompile Include="..\src\common\core.c" />
<ClCompile Include="..\src\common\console.c" />
diff --git a/vcproj-12/login-server.vcxproj.filters b/vcproj-12/login-server.vcxproj.filters
index f41fcdfac..1f3b6ba0f 100644
--- a/vcproj-12/login-server.vcxproj.filters
+++ b/vcproj-12/login-server.vcxproj.filters
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
- <ClCompile Include="..\src\login\account_sql.c">
+ <ClCompile Include="..\src\login\account.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\login\HPMlogin.c">
<Filter>login</Filter>
</ClCompile>
- <ClCompile Include="..\src\login\ipban_sql.c">
+ <ClCompile Include="..\src\login\ipban.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\login\login.c">
<Filter>login</Filter>
</ClCompile>
- <ClCompile Include="..\src\login\loginlog_sql.c">
+ <ClCompile Include="..\src\login\loginlog.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\common\conf.c">
diff --git a/vcproj-12/map-server.vcxproj b/vcproj-12/map-server.vcxproj
index 49822db0d..e9196c5df 100644
--- a/vcproj-12/map-server.vcxproj
+++ b/vcproj-12/map-server.vcxproj
@@ -176,6 +176,7 @@
<ClInclude Include="..\src\map\channel.h" />
<ClInclude Include="..\src\map\chat.h" />
<ClInclude Include="..\src\map\chrif.h" />
+ <ClInclude Include="..\src\map\clan.h" />
<ClInclude Include="..\src\map\clif.h" />
<ClInclude Include="..\src\map\date.h" />
<ClInclude Include="..\src\map\duel.h" />
@@ -195,6 +196,10 @@
<ClInclude Include="..\src\map\mob.h" />
<ClInclude Include="..\src\map\npc.h" />
<ClInclude Include="..\src\map\packets.h" />
+ <ClInclude Include="..\src\map\packets_keys_main.h" />
+ <ClInclude Include="..\src\map\packets_keys_zero.h" />
+ <ClInclude Include="..\src\map\packets_shuffle_main.h" />
+ <ClInclude Include="..\src\map\packets_shuffle_zero.h" />
<ClInclude Include="..\src\map\packets_struct.h" />
<ClInclude Include="..\src\map\party.h" />
<ClInclude Include="..\src\map\path.h" />
@@ -253,6 +258,7 @@
<ClCompile Include="..\src\map\channel.c" />
<ClCompile Include="..\src\map\chat.c" />
<ClCompile Include="..\src\map\chrif.c" />
+ <ClCompile Include="..\src\map\clan.c" />
<ClCompile Include="..\src\map\clif.c" />
<ClCompile Include="..\src\map\date.c" />
<ClCompile Include="..\src\map\duel.c" />
diff --git a/vcproj-12/map-server.vcxproj.filters b/vcproj-12/map-server.vcxproj.filters
index e6b89b3e6..c8aaffc5d 100644
--- a/vcproj-12/map-server.vcxproj.filters
+++ b/vcproj-12/map-server.vcxproj.filters
@@ -19,6 +19,9 @@
<ClCompile Include="..\src\map\chrif.c">
<Filter>map</Filter>
</ClCompile>
+ <ClCompile Include="..\src\map\clan.c">
+ <Filter>map</Filter>
+ </ClCompile>
<ClCompile Include="..\src\map\clif.c">
<Filter>map</Filter>
</ClCompile>
@@ -228,6 +231,9 @@
<ClInclude Include="..\src\map\chrif.h">
<Filter>map</Filter>
</ClInclude>
+ <ClInclude Include="..\src\map\clan.h">
+ <Filter>map</Filter>
+ </ClInclude>
<ClInclude Include="..\src\map\clif.h">
<Filter>map</Filter>
</ClInclude>
@@ -285,6 +291,18 @@
<ClInclude Include="..\src\map\packets.h">
<Filter>map</Filter>
</ClInclude>
+ <ClInclude Include="..\src\map\packets_keys_main.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_keys_zero.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_shuffle_main.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_shuffle_zero.h">
+ <Filter>map</Filter>
+ </ClInclude>
<ClInclude Include="..\src\map\packets_struct.h">
<Filter>map</Filter>
</ClInclude>
diff --git a/vcproj-12/mapcache.vcxproj b/vcproj-12/mapcache.vcxproj
deleted file mode 100644
index 5f40917fb..000000000
--- a/vcproj-12/mapcache.vcxproj
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{D356871D-58E1-450B-967A-E7E9646175AF}</ProjectGuid>
- <RootNamespace>mapcache</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mapcache</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mapcache</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\src;..\3rdparty;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <ExceptionHandling>
- </ExceptionHandling>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <AdditionalOptions>
- </AdditionalOptions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <CompileAs>CompileAsC</CompileAs>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- </ClCompile>
- <Link>
- <AdditionalOptions>/FIXED:NO %(AdditionalOptions)</AdditionalOptions>
- <AdditionalDependencies>libcmtd.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)mapcache.exe</OutputFile>
- <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <RandomizedBaseAddress>false</RandomizedBaseAddress>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
- <TargetMachine>MachineX86</TargetMachine>
- <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <AdditionalIncludeDirectories>..\src;..\3rdparty;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>false</FunctionLevelLinking>
- <AdditionalOptions>
- </AdditionalOptions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>CompileAsC</CompileAs>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- </ClCompile>
- <Link>
- <AdditionalDependencies>libcmt.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)mapcache.exe</OutputFile>
- <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
- <RandomizedBaseAddress>false</RandomizedBaseAddress>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
- <TargetMachine>MachineX86</TargetMachine>
- <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\src\common\core.c" />
- <ClCompile Include="..\src\common\console.c" />
- <ClCompile Include="..\src\common\des.c" />
- <ClCompile Include="..\src\common\grfio.c" />
- <ClCompile Include="..\src\common\memmgr.c" />
- <ClCompile Include="..\src\common\showmsg.c" />
- <ClCompile Include="..\src\common\strlib.c" />
- <ClCompile Include="..\src\common\sysinfo.c" />
- <ClCompile Include="..\src\common\utils.c" />
- <ClCompile Include="..\src\common\nullpo.c" />
- <ClCompile Include="..\src\tool\mapcache.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\src\common\cbasetypes.h" />
- <ClInclude Include="..\src\common\core.h" />
- <ClInclude Include="..\src\common\console.h" />
- <ClInclude Include="..\src\common\des.h" />
- <ClInclude Include="..\src\common\grfio.h" />
- <ClInclude Include="..\src\common\memmgr.h" />
- <ClInclude Include="..\src\common\mmo.h" />
- <ClInclude Include="..\src\common\showmsg.h" />
- <ClInclude Include="..\src\common\strlib.h" />
- <ClInclude Include="..\src\common\sysinfo.h" />
- <ClInclude Include="..\src\common\utils.h" />
- <ClInclude Include="..\src\common\winapi.h" />
- <ClInclude Include="..\src\common\nullpo.h" />
- <ClInclude Include="..\src\config\classes\general.h" />
- <ClInclude Include="..\src\config\const.h" />
- <ClInclude Include="..\src\config\core.h" />
- <ClInclude Include="..\src\config\renewal.h" />
- <ClInclude Include="..\src\config\secure.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/vcproj-12/mapcache.vcxproj.filters b/vcproj-12/mapcache.vcxproj.filters
deleted file mode 100644
index 0e8702591..000000000
--- a/vcproj-12/mapcache.vcxproj.filters
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <ClCompile Include="..\src\common\core.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\console.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\des.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\grfio.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\memmgr.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\showmsg.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\strlib.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\sysinfo.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\utils.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\nullpo.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\tool\mapcache.c">
- <Filter>mapcache</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\src\common\cbasetypes.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\core.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\console.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\des.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\grfio.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\memmgr.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\mmo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\showmsg.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\strlib.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\sysinfo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\utils.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\winapi.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\nullpo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\renewal.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\const.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\core.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\secure.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\classes\general.h">
- <Filter>config</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <Filter Include="common">
- <UniqueIdentifier>{a9c2444c-ffec-4e89-8412-e530231d79dc}</UniqueIdentifier>
- </Filter>
- <Filter Include="mapcache">
- <UniqueIdentifier>{5ea9d6f7-0a10-4bfb-ad39-478e4b1d8a0d}</UniqueIdentifier>
- </Filter>
- <Filter Include="config">
- <UniqueIdentifier>{4d14995f-43fd-4eb0-abcb-78d1d05a8606}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/vcproj-14/char-server.vcxproj b/vcproj-14/char-server.vcxproj
index f2fc4682c..a766d504d 100644
--- a/vcproj-14/char-server.vcxproj
+++ b/vcproj-14/char-server.vcxproj
@@ -174,6 +174,7 @@
<ClInclude Include="..\src\char\char.h" />
<ClInclude Include="..\src\char\geoip.h" />
<ClInclude Include="..\src\char\int_auction.h" />
+ <ClInclude Include="..\src\char\int_clan.h" />
<ClInclude Include="..\src\char\int_elemental.h" />
<ClInclude Include="..\src\char\int_guild.h" />
<ClInclude Include="..\src\char\int_homun.h" />
@@ -227,6 +228,7 @@
<ClCompile Include="..\src\char\char.c" />
<ClCompile Include="..\src\char\geoip.c" />
<ClCompile Include="..\src\char\int_auction.c" />
+ <ClCompile Include="..\src\char\int_clan.c" />
<ClCompile Include="..\src\char\int_elemental.c" />
<ClCompile Include="..\src\char\int_guild.c" />
<ClCompile Include="..\src\char\int_homun.c" />
diff --git a/vcproj-14/char-server.vcxproj.filters b/vcproj-14/char-server.vcxproj.filters
index ba5914a89..af34d2efd 100644
--- a/vcproj-14/char-server.vcxproj.filters
+++ b/vcproj-14/char-server.vcxproj.filters
@@ -70,6 +70,9 @@
<ClCompile Include="..\src\char\int_auction.c">
<Filter>char</Filter>
</ClCompile>
+ <ClCompile Include="..\src\char\int_clan.c">
+ <Filter>char</Filter>
+ </ClCompile>
<ClCompile Include="..\src\char\int_elemental.c">
<Filter>char</Filter>
</ClCompile>
@@ -219,6 +222,9 @@
<ClInclude Include="..\src\char\int_auction.h">
<Filter>char</Filter>
</ClInclude>
+ <ClInclude Include="..\src\char\int_clan.h">
+ <Filter>char</Filter>
+ </ClInclude>
<ClInclude Include="..\src\char\int_elemental.h">
<Filter>char</Filter>
</ClInclude>
diff --git a/vcproj-14/login-server.vcxproj b/vcproj-14/login-server.vcxproj
index 445d21ee4..44dee52be 100644
--- a/vcproj-14/login-server.vcxproj
+++ b/vcproj-14/login-server.vcxproj
@@ -194,12 +194,12 @@
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\mutex.c" />
<ClCompile Include="..\src\common\thread.c" />
- <ClCompile Include="..\src\login\account_sql.c" />
+ <ClCompile Include="..\src\login\account.c" />
<ClCompile Include="..\src\login\HPMlogin.c" />
- <ClCompile Include="..\src\login\ipban_sql.c" />
+ <ClCompile Include="..\src\login\ipban.c" />
<ClCompile Include="..\src\login\lclif.c" />
<ClCompile Include="..\src\login\login.c" />
- <ClCompile Include="..\src\login\loginlog_sql.c" />
+ <ClCompile Include="..\src\login\loginlog.c" />
<ClCompile Include="..\src\common\conf.c" />
<ClCompile Include="..\src\common\core.c" />
<ClCompile Include="..\src\common\console.c" />
diff --git a/vcproj-14/login-server.vcxproj.filters b/vcproj-14/login-server.vcxproj.filters
index f41fcdfac..1f3b6ba0f 100644
--- a/vcproj-14/login-server.vcxproj.filters
+++ b/vcproj-14/login-server.vcxproj.filters
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
- <ClCompile Include="..\src\login\account_sql.c">
+ <ClCompile Include="..\src\login\account.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\login\HPMlogin.c">
<Filter>login</Filter>
</ClCompile>
- <ClCompile Include="..\src\login\ipban_sql.c">
+ <ClCompile Include="..\src\login\ipban.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\login\login.c">
<Filter>login</Filter>
</ClCompile>
- <ClCompile Include="..\src\login\loginlog_sql.c">
+ <ClCompile Include="..\src\login\loginlog.c">
<Filter>login</Filter>
</ClCompile>
<ClCompile Include="..\src\common\conf.c">
diff --git a/vcproj-14/map-server.vcxproj b/vcproj-14/map-server.vcxproj
index e20d13462..ccc80d15d 100644
--- a/vcproj-14/map-server.vcxproj
+++ b/vcproj-14/map-server.vcxproj
@@ -174,6 +174,7 @@
<ClInclude Include="..\src\map\channel.h" />
<ClInclude Include="..\src\map\chat.h" />
<ClInclude Include="..\src\map\chrif.h" />
+ <ClInclude Include="..\src\map\clan.h" />
<ClInclude Include="..\src\map\clif.h" />
<ClInclude Include="..\src\map\date.h" />
<ClInclude Include="..\src\map\duel.h" />
@@ -193,6 +194,10 @@
<ClInclude Include="..\src\map\mob.h" />
<ClInclude Include="..\src\map\npc.h" />
<ClInclude Include="..\src\map\packets.h" />
+ <ClInclude Include="..\src\map\packets_keys_main.h" />
+ <ClInclude Include="..\src\map\packets_keys_zero.h" />
+ <ClInclude Include="..\src\map\packets_shuffle_main.h" />
+ <ClInclude Include="..\src\map\packets_shuffle_zero.h" />
<ClInclude Include="..\src\map\packets_struct.h" />
<ClInclude Include="..\src\map\party.h" />
<ClInclude Include="..\src\map\path.h" />
@@ -251,6 +256,7 @@
<ClCompile Include="..\src\map\channel.c" />
<ClCompile Include="..\src\map\chat.c" />
<ClCompile Include="..\src\map\chrif.c" />
+ <ClCompile Include="..\src\map\clan.c" />
<ClCompile Include="..\src\map\clif.c" />
<ClCompile Include="..\src\map\date.c" />
<ClCompile Include="..\src\map\duel.c" />
diff --git a/vcproj-14/map-server.vcxproj.filters b/vcproj-14/map-server.vcxproj.filters
index e6b89b3e6..bf3004a77 100644
--- a/vcproj-14/map-server.vcxproj.filters
+++ b/vcproj-14/map-server.vcxproj.filters
@@ -208,6 +208,9 @@
<ClCompile Include="..\src\map\rodex.c">
<Filter>map</Filter>
</ClCompile>
+ <ClCompile Include="..\src\map\clan.c">
+ <Filter>map</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\map\atcommand.h">
@@ -285,6 +288,18 @@
<ClInclude Include="..\src\map\packets.h">
<Filter>map</Filter>
</ClInclude>
+ <ClInclude Include="..\src\map\packets_keys_main.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_keys_zero.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_shuffle_main.h">
+ <Filter>map</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\packets_shuffle_zero.h">
+ <Filter>map</Filter>
+ </ClInclude>
<ClInclude Include="..\src\map\packets_struct.h">
<Filter>map</Filter>
</ClInclude>
@@ -468,6 +483,9 @@
<ClInclude Include="..\src\map\rodex.h">
<Filter>map</Filter>
</ClInclude>
+ <ClInclude Include="..\src\map\clan.h">
+ <Filter>map</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="common">
diff --git a/vcproj-14/mapcache.vcxproj b/vcproj-14/mapcache.vcxproj
deleted file mode 100644
index 6b4ea92df..000000000
--- a/vcproj-14/mapcache.vcxproj
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{D356871D-58E1-450B-967A-E7E9646175AF}</ProjectGuid>
- <RootNamespace>mapcache</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)\$(Configuration)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mapcache</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">mapcache</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\src;..\3rdparty;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <ExceptionHandling>
- </ExceptionHandling>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <AdditionalOptions>
- </AdditionalOptions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <CompileAs>CompileAsC</CompileAs>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- </ClCompile>
- <Link>
- <AdditionalOptions>/FIXED:NO %(AdditionalOptions)</AdditionalOptions>
- <AdditionalDependencies>libcmtd.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)mapcache.exe</OutputFile>
- <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <RandomizedBaseAddress>false</RandomizedBaseAddress>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
- <TargetMachine>MachineX86</TargetMachine>
- <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- <AdditionalIncludeDirectories>..\src;..\3rdparty;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>false</FunctionLevelLinking>
- <AdditionalOptions>
- </AdditionalOptions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>CompileAsC</CompileAs>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- </ClCompile>
- <Link>
- <AdditionalDependencies>libcmt.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)mapcache.exe</OutputFile>
- <AdditionalLibraryDirectories>..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
- <RandomizedBaseAddress>false</RandomizedBaseAddress>
- <DataExecutionPrevention>
- </DataExecutionPrevention>
- <TargetMachine>MachineX86</TargetMachine>
- <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\src\common\core.c" />
- <ClCompile Include="..\src\common\console.c" />
- <ClCompile Include="..\src\common\des.c" />
- <ClCompile Include="..\src\common\grfio.c" />
- <ClCompile Include="..\src\common\memmgr.c" />
- <ClCompile Include="..\src\common\showmsg.c" />
- <ClCompile Include="..\src\common\strlib.c" />
- <ClCompile Include="..\src\common\sysinfo.c" />
- <ClCompile Include="..\src\common\utils.c" />
- <ClCompile Include="..\src\common\nullpo.c" />
- <ClCompile Include="..\src\tool\mapcache.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\src\common\cbasetypes.h" />
- <ClInclude Include="..\src\common\core.h" />
- <ClInclude Include="..\src\common\console.h" />
- <ClInclude Include="..\src\common\des.h" />
- <ClInclude Include="..\src\common\grfio.h" />
- <ClInclude Include="..\src\common\memmgr.h" />
- <ClInclude Include="..\src\common\mmo.h" />
- <ClInclude Include="..\src\common\showmsg.h" />
- <ClInclude Include="..\src\common\strlib.h" />
- <ClInclude Include="..\src\common\sysinfo.h" />
- <ClInclude Include="..\src\common\utils.h" />
- <ClInclude Include="..\src\common\winapi.h" />
- <ClInclude Include="..\src\common\nullpo.h" />
- <ClInclude Include="..\src\config\classes\general.h" />
- <ClInclude Include="..\src\config\const.h" />
- <ClInclude Include="..\src\config\core.h" />
- <ClInclude Include="..\src\config\renewal.h" />
- <ClInclude Include="..\src\config\secure.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project> \ No newline at end of file
diff --git a/vcproj-14/mapcache.vcxproj.filters b/vcproj-14/mapcache.vcxproj.filters
deleted file mode 100644
index 0e8702591..000000000
--- a/vcproj-14/mapcache.vcxproj.filters
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <ClCompile Include="..\src\common\core.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\console.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\des.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\grfio.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\memmgr.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\showmsg.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\strlib.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\sysinfo.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\utils.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\common\nullpo.c">
- <Filter>common</Filter>
- </ClCompile>
- <ClCompile Include="..\src\tool\mapcache.c">
- <Filter>mapcache</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\src\common\cbasetypes.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\core.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\console.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\des.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\grfio.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\memmgr.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\mmo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\showmsg.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\strlib.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\sysinfo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\utils.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\winapi.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\common\nullpo.h">
- <Filter>common</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\renewal.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\const.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\core.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\secure.h">
- <Filter>config</Filter>
- </ClInclude>
- <ClInclude Include="..\src\config\classes\general.h">
- <Filter>config</Filter>
- </ClInclude>
- </ItemGroup>
- <ItemGroup>
- <Filter Include="common">
- <UniqueIdentifier>{a9c2444c-ffec-4e89-8412-e530231d79dc}</UniqueIdentifier>
- </Filter>
- <Filter Include="mapcache">
- <UniqueIdentifier>{5ea9d6f7-0a10-4bfb-ad39-478e4b1d8a0d}</UniqueIdentifier>
- </Filter>
- <Filter Include="config">
- <UniqueIdentifier>{4d14995f-43fd-4eb0-abcb-78d1d05a8606}</UniqueIdentifier>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file