Quote:
The decompiling is easy, just the magic was changed in the SG files.
You have to replace to the original Python2.2 magic.(The first four characters is the magic!)
>>> import imp
>>> print(str(len(imp.get_magic())))
4
Ehm, this tool able to decompile the npclist.pyc? Because the decompile-lib is not can decompile it.
# Source Generated by .MaisKolben™-Decompyler
# File: npclist.pyc
import chrmgr
chrmgr.RegisterRaceSrcName('amber', 'mineral')
chrmgr.RegisterRaceSrcName('amethyst', 'mineral')
chrmgr.RegisterRaceSrcName('bank_02', 'bank')
chrmgr.RegisterRaceSrcName('bear_black', 'bear')
chrmgr.RegisterRaceSrcName('bear_brown', 'bear')
chrmgr.RegisterRaceSrcName('bear_gray', 'bear')
chrmgr.RegisterRaceSrcName('boar', 'boar')
chrmgr.RegisterRaceSrcName('boar_0', 'boar')
chrmgr.RegisterRaceSrcName('boar_3', 'boar')
chrmgr.RegisterRaceSrcName('christmas_tree_01', 'christmas_tree')
chrmgr.RegisterRaceSrcName('christmas_tree_01', 'christmas_tree')
chrmgr.RegisterRaceSrcName('christmas_tree_02', 'christmas_tree')
chrmgr.RegisterRaceSrcName('christmas_tree_02', 'christmas_tree')
chrmgr.RegisterRaceSrcName('christmas_tree_03', 'christmas_tree')
chrmgr.RegisterRaceSrcName('christmas_tree_03', 'christmas_tree')
chrmgr.RegisterRaceSrcName('chunru', 'mineral')
chrmgr.RegisterRaceSrcName('copper', 'mineral')
chrmgr.RegisterRaceSrcName('diamond', 'mineral')
chrmgr.RegisterRaceSrcName('dog_god', 'dog_god')
chrmgr.RegisterRaceSrcName('dog_god_0', 'dog_god')
chrmgr.RegisterRaceSrcName('dog_god_3', 'dog_god')
chrmgr.RegisterRaceSrcName('ebony', 'mineral')
chrmgr.RegisterRaceSrcName('fire_tiger', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_0', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_3', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_blue', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_darkred', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_gold', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_green', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_pied', 'fire_tiger')
chrmgr.RegisterRaceSrcName('fire_tiger_white', 'fire_tiger')
chrmgr.RegisterRaceSrcName('flag_blue', 'guild_war_flag')
chrmgr.RegisterRaceSrcName('flag_blue', 'guild_war_flag')
chrmgr.RegisterRaceSrcName('flag_red', 'guild_war_flag')
chrmgr.RegisterRaceSrcName('flag_red', 'guild_war_flag')
chrmgr.RegisterRaceSrcName('flag_yellow', 'guild_war_flag')
chrmgr.RegisterRaceSrcName('flag_yellow', 'guild_war_flag')
chrmgr.RegisterRaceSrcName('fossil_tree', 'mineral')
chrmgr.RegisterRaceSrcName('gangyo_patrol_spear_01', 'gangyo_patrol_spear')
chrmgr.RegisterRaceSrcName('gold', 'mineral')
chrmgr.RegisterRaceSrcName('goods_02', 'goods')
chrmgr.RegisterRaceSrcName('haitai', 'fire_tiger_boss')
chrmgr.RegisterRaceSrcName('haitai', 'fire_tiger_boss')
chrmgr.RegisterRaceSrcName('horse2_master', 'horse2')
chrmgr.RegisterRaceSrcName('horse2_member', 'horse2')
chrmgr.RegisterRaceSrcName('horse2_normal', 'horse2')
chrmgr.RegisterRaceSrcName('horse_master', 'horse')
chrmgr.RegisterRaceSrcName('horse_member', 'horse')
chrmgr.RegisterRaceSrcName('horse_normal', 'horse')
chrmgr.RegisterRaceSrcName('jade', 'mineral')
chrmgr.RegisterRaceSrcName('jinno_patrol_spear_01', 'jinno_patrol_spear')
chrmgr.RegisterRaceSrcName('lion', 'lion')
chrmgr.RegisterRaceSrcName('lion_0', 'lion')
chrmgr.RegisterRaceSrcName('lion_3', 'lion')
chrmgr.RegisterRaceSrcName('metinstone_01', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_02', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_03', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_04', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_05', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_06', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_07', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_08', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_09', 'metinstone')
chrmgr.RegisterRaceSrcName('metinstone_10', 'metinstone_02')
chrmgr.RegisterRaceSrcName('metinstone_11', 'metinstone_02')
chrmgr.RegisterRaceSrcName('metinstone_12', 'metinstone_02')
chrmgr.RegisterRaceSrcName('metinstone_13', 'metinstone_02')
chrmgr.RegisterRaceSrcName('metinstone_14', 'metinstone_02')
chrmgr.RegisterRaceSrcName('metinstone_15', 'metinstone_02')
chrmgr.RegisterRaceSrcName('metinstone_egg01', 'metinstone_egg')
chrmgr.RegisterRaceSrcName('monkey_range', 'monkey')
chrmgr.RegisterRaceSrcName('monkey_range', 'monkey')
chrmgr.RegisterRaceSrcName('pearl', 'mineral')
chrmgr.RegisterRaceSrcName('pony_master', 'pony')
chrmgr.RegisterRaceSrcName('pony_member', 'pony')
chrmgr.RegisterRaceSrcName('pony_normal', 'pony')
chrmgr.RegisterRaceSrcName('pwahuang1_2', 'pwahuang1')
chrmgr.RegisterRaceSrcName('quartz', 'mineral')
chrmgr.RegisterRaceSrcName('red_wild_boar', 'wild_boar')
chrmgr.RegisterRaceSrcName('reindeer_female1', 'reindeer_female')
chrmgr.RegisterRaceSrcName('reindeer_female2', 'reindeer_female')
chrmgr.RegisterRaceSrcName('reindeer_female3', 'reindeer_female')
chrmgr.RegisterRaceSrcName('reindeer_male1', 'reindeer_male')
chrmgr.RegisterRaceSrcName('reindeer_male1_christmas1', 'reindeer_male')
chrmgr.RegisterRaceSrcName('reindeer_male2', 'reindeer_male')
chrmgr.RegisterRaceSrcName('reindeer_male3', 'reindeer_male')
chrmgr.RegisterRaceSrcName('reindeer_young1', 'reindeer_young')
chrmgr.RegisterRaceSrcName('reindeer_young1_christmas1', 'reindeer_young')
chrmgr.RegisterRaceSrcName('silver', 'mineral')
chrmgr.RegisterRaceSrcName('sinsu_patrol_spear_01', 'sinsu_patrol_spear')
chrmgr.RegisterRaceSrcName('spy1_01', 'spy1')
chrmgr.RegisterRaceSrcName('starveling', 'starveling')
chrmgr.RegisterRaceSrcName('starveling2', 'starveling')
chrmgr.RegisterRaceSrcName('starveling3', 'starveling')
chrmgr.RegisterRaceSrcName('starveling4', 'starveling')
chrmgr.RegisterRaceSrcName('starveling5', 'starveling')
chrmgr.RegisterRaceSrcName('sura_skeleton1', 'sura_skeleton')
chrmgr.RegisterRaceSrcName('sura_skeleton2', 'sura_skeleton')
chrmgr.RegisterRaceSrcName('sura_skeleton3', 'sura_skeleton')
chrmgr.RegisterRaceSrcName('sura_skeleton4', 'sura_skeleton')
chrmgr.RegisterRaceSrcName('sura_skeleton5', 'sura_skeleton')
chrmgr.RegisterRaceSrcName('tiger_big', 'tiger')
chrmgr.RegisterRaceSrcName('tiger_god', 'tiger')
chrmgr.RegisterRaceSrcName('white_gold', 'mineral')
chrmgr.RegisterRaceSrcName('wolf_blue', 'wolf')
chrmgr.RegisterRaceSrcName('wolf_gray', 'wolf')
chrmgr.RegisterRaceName(101, 'stray_dog')
chrmgr.RegisterRaceName(102, 'wolf')
chrmgr.RegisterRaceName(103, 'wolf')
chrmgr.RegisterRaceName(104, 'wolf_blue')
chrmgr.RegisterRaceName(105, 'wolf_blue')
chrmgr.RegisterRaceName(106, 'wolf_gray')
chrmgr.RegisterRaceName(107, 'wolf_gray')
chrmgr.RegisterRaceName(108, 'wild_boar')
chrmgr.RegisterRaceName(109, 'red_wild_boar')
chrmgr.RegisterRaceName(110, 'bear')
chrmgr.RegisterRaceName(111, 'bear_gray')
chrmgr.RegisterRaceName(112, 'bear_black')
chrmgr.RegisterRaceName(113, 'bear_brown')
chrmgr.RegisterRaceName(114, 'tiger')
chrmgr.RegisterRaceName(115, 'tiger_big')
chrmgr.RegisterRaceName(131, 'wolf')
chrmgr.RegisterRaceName(132, 'wolf')
chrmgr.RegisterRaceName(133, 'wolf_blue')
chrmgr.RegisterRaceName(134, 'wolf_blue')
chrmgr.RegisterRaceName(135, 'wolf_gray')
chrmgr.RegisterRaceName(136, 'wolf_gray')
chrmgr.RegisterRaceName(137, 'wild_boar')
chrmgr.RegisterRaceName(138, 'red_wild_boar')
chrmgr.RegisterRaceName(139, 'bear')
chrmgr.RegisterRaceName(140, 'bear_gray')
chrmgr.RegisterRaceName(141, 'bear_black')
chrmgr.RegisterRaceName(142, 'bear_brown')
chrmgr.RegisterRaceName(143, 'tiger')
chrmgr.RegisterRaceName(144, 'tiger_big')
chrmgr.RegisterRaceName(151, 'wolf_blue')
chrmgr.RegisterRaceName(152, 'wolf_gray')
chrmgr.RegisterRaceName(153, 'red_wild_boar')
chrmgr.RegisterRaceName(154, 'bear_brown')
chrmgr.RegisterRaceName(155, 'tiger_big')
chrmgr.RegisterRaceName(171, 'stray_dog')
chrmgr.RegisterRaceName(172, 'wolf')
chrmgr.RegisterRaceName(173, 'wolf')
chrmgr.RegisterRaceName(174, 'wolf_blue')
chrmgr.RegisterRaceName(175, 'wolf_blue')
chrmgr.RegisterRaceName(176, 'wolf_gray')
chrmgr.RegisterRaceName(177, 'wolf_gray')
chrmgr.RegisterRaceName(178, 'wild_boar')
chrmgr.RegisterRaceName(179, 'red_wild_boar')
chrmgr.RegisterRaceName(180, 'bear')
chrmgr.RegisterRaceName(181, 'bear_gray')
chrmgr.RegisterRaceName(182, 'bear_black')
chrmgr.RegisterRaceName(183, 'bear_brown')
chrmgr.RegisterRaceName(184, 'tiger')
chrmgr.RegisterRaceName(185, 'tiger_big')
chrmgr.RegisterRaceName(191, 'mountain_dog_god')
chrmgr.RegisterRaceName(192, 'wild_boar_god')
chrmgr.RegisterRaceName(193, 'bear')
chrmgr.RegisterRaceName(194, 'tiger_god')
chrmgr.RegisterRaceName(301, 'bksoldier')
chrmgr.RegisterRaceName(302, 'bkarcher')
chrmgr.RegisterRaceName(303, 'bkknight')
chrmgr.RegisterRaceName(304, 'bkknight')
chrmgr.RegisterRaceName(331, 'bksoldier')
chrmgr.RegisterRaceName(332, 'bkarcher')
chrmgr.RegisterRaceName(333, 'bkknight')
chrmgr.RegisterRaceName(334, 'bkknight')
chrmgr.RegisterRaceName(351, 'bksoldier')
chrmgr.RegisterRaceName(352, 'bkarcher')
chrmgr.RegisterRaceName(353, 'bkknight')
chrmgr.RegisterRaceName(354, 'bkknight')
chrmgr.RegisterRaceName(391, 'bksecond')
chrmgr.RegisterRaceName(392, 'bkthird')
chrmgr.RegisterRaceName(393, 'bkfourth')
chrmgr.RegisterRaceName(394, 'bkboss')
chrmgr.RegisterRaceName(395, 'bksecond')
chrmgr.RegisterRaceName(396, 'bkthird')
chrmgr.RegisterRaceName(397, 'bkfourth')
chrmgr.RegisterRaceName(398, 'bkboss')
chrmgr.RegisterRaceName(401, 'thief1')
chrmgr.RegisterRaceName(402, 'thief2')
chrmgr.RegisterRaceName(403, 'thief3')
chrmgr.RegisterRaceName(404, 'thiefboss1')
chrmgr.RegisterRaceName(405, 'thiefboss2')
chrmgr.RegisterRaceName(406, 'thiefboss3')
chrmgr.RegisterRaceName(431, 'thief1')
chrmgr.RegisterRaceName(432, 'thief2')
chrmgr.RegisterRaceName(433, 'thief3')
chrmgr.RegisterRaceName(434, 'thiefboss1')
chrmgr.RegisterRaceName(435, 'thiefboss2')
chrmgr.RegisterRaceName(436, 'thiefboss3')
chrmgr.RegisterRaceName(451, 'thief1')
chrmgr.RegisterRaceName(452, 'thief2')
chrmgr.RegisterRaceName(453, 'thief3')
chrmgr.RegisterRaceName(454, 'thiefboss1')
chrmgr.RegisterRaceName(455, 'thiefboss2')
chrmgr.RegisterRaceName(456, 'thiefboss3')
chrmgr.RegisterRaceName(491, 'maenghwan')
chrmgr.RegisterRaceName(492, 'bou')
chrmgr.RegisterRaceName(493, 'gupae')
chrmgr.RegisterRaceName(494, 'chuhen')
chrmgr.RegisterRaceName(501, 'barbarian_infantry')
chrmgr.RegisterRaceName(502, 'barbarian_soldier')
chrmgr.RegisterRaceName(503, 'barbarian_bow')
chrmgr.RegisterRaceName(504, 'barbarian_knight')
chrmgr.RegisterRaceName(531, 'barbarian_infantry')
chrmgr.RegisterRaceName(532, 'barbarian_soldier')
chrmgr.RegisterRaceName(533, 'barbarian_bow')
chrmgr.RegisterRaceName(534, 'barbarian_knight')
chrmgr.RegisterRaceName(551, 'barbarian_infantry')
chrmgr.RegisterRaceName(552, 'barbarian_soldier')
chrmgr.RegisterRaceName(553, 'barbarian_bow')
chrmgr.RegisterRaceName(554, 'barbarian_knight')
chrmgr.RegisterRaceName(591, 'barbarian_boss')
chrmgr.RegisterRaceName(595, 'barbarian_bow')
chrmgr.RegisterRaceName(601, 'orc_soldier')
chrmgr.RegisterRaceName(602, 'orc_scouter')
chrmgr.RegisterRaceName(603, 'orc_knight')
chrmgr.RegisterRaceName(604, 'orc_magician')
chrmgr.RegisterRaceName(631, 'orc_soldier')
chrmgr.RegisterRaceName(632, 'orc_scouter')
chrmgr.RegisterRaceName(633, 'orc_knight')
chrmgr.RegisterRaceName(634, 'orc_magician')
chrmgr.RegisterRaceName(635, 'orc_general')
chrmgr.RegisterRaceName(636, 'orc_black')
chrmgr.RegisterRaceName(637, 'orc_bigblack')
chrmgr.RegisterRaceName(651, 'orc_soldier')
chrmgr.RegisterRaceName(652, 'orc_scouter')
chrmgr.RegisterRaceName(653, 'orc_knight')
chrmgr.RegisterRaceName(654, 'orc_magician')
chrmgr.RegisterRaceName(655, 'orc_general')
chrmgr.RegisterRaceName(656, 'orc_black')
chrmgr.RegisterRaceName(657, 'orc_bigblack')
chrmgr.RegisterRaceName(691, 'orc_lord')
chrmgr.RegisterRaceName(692, 'orc_lord')
chrmgr.RegisterRaceName(693, '#season1/monster/orc_lord_e/')
chrmgr.RegisterRaceName(701, 'milgyo_religionist')
chrmgr.RegisterRaceName(702, 'milgyo_nahan1')
chrmgr.RegisterRaceName(703, 'milgyo_nahan2')
chrmgr.RegisterRaceName(704, 'milgyo_nahan_general')
chrmgr.RegisterRaceName(705, 'milgyo_executor')
chrmgr.RegisterRaceName(706, 'milgyo_monster1')
chrmgr.RegisterRaceName(707, 'milgyo_monster2')
chrmgr.RegisterRaceName(731, 'milgyo_religionist')
chrmgr.RegisterRaceName(732, 'milgyo_nahan1')
chrmgr.RegisterRaceName(733, 'milgyo_nahan2')
chrmgr.RegisterRaceName(734, 'milgyo_nahan_general')
chrmgr.RegisterRaceName(735, 'milgyo_executor')
chrmgr.RegisterRaceName(736, 'milgyo_monster1')
chrmgr.RegisterRaceName(737, 'milgyo_monster2')
chrmgr.RegisterRaceName(751, 'milgyo_religionist')
chrmgr.RegisterRaceName(752, 'milgyo_nahan1')
chrmgr.RegisterRaceName(753, 'milgyo_nahan2')
chrmgr.RegisterRaceName(754, 'milgyo_nahan_general')
chrmgr.RegisterRaceName(755, 'milgyo_executor')
chrmgr.RegisterRaceName(756, 'milgyo_monster1')
chrmgr.RegisterRaceName(757, 'milgyo_monster2')
chrmgr.RegisterRaceName(771, 'milgyo_religionist')
chrmgr.RegisterRaceName(772, 'milgyo_nahan1')
chrmgr.RegisterRaceName(773, 'milgyo_nahan2')
chrmgr.RegisterRaceName(774, 'milgyo_nahan_general')
chrmgr.RegisterRaceName(775, 'milgyo_executor')
chrmgr.RegisterRaceName(776, 'milgyo_monster1')
chrmgr.RegisterRaceName(777, 'milgyo_monster2')
chrmgr.RegisterRaceName(791, 'milgyo_founder')
chrmgr.RegisterRaceName(792, 'milgyo_founder')
chrmgr.RegisterRaceName(793, 'milgyo_founder')
chrmgr.RegisterRaceName(794, 'milgyo_founder')
chrmgr.RegisterRaceName(795, '#season1/monster/milgyo_founder_e/')
chrmgr.RegisterRaceName(901, 'misterious_diseased_kid')
chrmgr.RegisterRaceName(902, 'misterious_diseased_dog')
chrmgr.RegisterRaceName(903, 'misterious_diseased_infector')
chrmgr.RegisterRaceName(904, 'misterious_diseased_sword')
chrmgr.RegisterRaceName(905, 'misterious_diseased_spear')
chrmgr.RegisterRaceName(906, 'misterious_diseased_bow')
chrmgr.RegisterRaceName(907, 'misterious_diseased_boss')
chrmgr.RegisterRaceName(931, 'misterious_diseased_kid')
chrmgr.RegisterRaceName(932, 'misterious_diseased_dog')
chrmgr.RegisterRaceName(933, 'misterious_diseased_infector')
chrmgr.RegisterRaceName(934, 'misterious_diseased_sword')
chrmgr.RegisterRaceName(935, 'misterious_diseased_spear')
chrmgr.RegisterRaceName(936, 'misterious_diseased_bow')
chrmgr.RegisterRaceName(937, 'misterious_diseased_boss')
chrmgr.RegisterRaceName(991, 'misterious_diseased_egg')
chrmgr.RegisterRaceName(992, 'misterious_diseased_host')
chrmgr.RegisterRaceName(993, 'misterious_diseased_bosshost')
chrmgr.RegisterRaceName(1001, 'skeleton_soldier_scythe')
chrmgr.RegisterRaceName(1002, 'skeleton_soldier_bow')
chrmgr.RegisterRaceName(1003, 'skeleton_soldier_spear')
chrmgr.RegisterRaceName(1004, 'skeleton_magician')
chrmgr.RegisterRaceName(1031, 'skeleton_soldier_scythe')
chrmgr.RegisterRaceName(1032, 'skeleton_soldier_bow')
chrmgr.RegisterRaceName(1033, 'skeleton_soldier_spear')
chrmgr.RegisterRaceName(1034, 'skeleton_magician')
chrmgr.RegisterRaceName(1035, 'spite_ghost')
chrmgr.RegisterRaceName(1036, 'chaos_ghost')
chrmgr.RegisterRaceName(1037, 'skeleton_general')
chrmgr.RegisterRaceName(1038, 'skeleton_bigboss')
chrmgr.RegisterRaceName(1039, 'skeleton_wizard')
chrmgr.RegisterRaceName(1040, 'immotal_ghost')
chrmgr.RegisterRaceName(1041, 'recycle_monster')
chrmgr.RegisterRaceName(1061, 'skeleton_soldier_scythe')
chrmgr.RegisterRaceName(1062, 'skeleton_soldier_bow')
chrmgr.RegisterRaceName(1063, 'skeleton_soldier_spear')
chrmgr.RegisterRaceName(1064, 'skeleton_magician')
chrmgr.RegisterRaceName(1065, 'spite_ghost')
chrmgr.RegisterRaceName(1066, 'chaos_ghost')
chrmgr.RegisterRaceName(1067, 'skeleton_general')
chrmgr.RegisterRaceName(1068, 'skeleton_bigboss')
chrmgr.RegisterRaceName(1069, 'skeleton_wizard')
chrmgr.RegisterRaceName(1070, 'immotal_ghost')
chrmgr.RegisterRaceName(1071, 'recycle_monster')
chrmgr.RegisterRaceName(1091, 'skeleton_king')
chrmgr.RegisterRaceName(1092, 'skeleton_king')
chrmgr.RegisterRaceName(1093, 'skeleton_god')
chrmgr.RegisterRaceName(1094, '#season1/monster/skeleton_king_e/')
chrmgr.RegisterRaceName(1095, '#season1/monster/skeleton_god_e/')
chrmgr.RegisterRaceName(1101, 'ice_snow_monster')
chrmgr.RegisterRaceName(1102, 'ice_snow_whale')
chrmgr.RegisterRaceName(1103, 'ice_snow_insect')
chrmgr.RegisterRaceName(1104, 'ice_snow_dog')
chrmgr.RegisterRaceName(1105, 'ice_snow_man')
chrmgr.RegisterRaceName(1106, 'ice_snow_giant_man')
chrmgr.RegisterRaceName(1107, 'ice_snow_golem')
chrmgr.RegisterRaceName(1131, 'ice_snow_monster')
chrmgr.RegisterRaceName(1132, 'ice_snow_whale')
chrmgr.RegisterRaceName(1133, 'ice_snow_insect')
chrmgr.RegisterRaceName(1134, 'ice_snow_dog')
chrmgr.RegisterRaceName(1135, 'ice_snow_man')
chrmgr.RegisterRaceName(1136, 'ice_snow_giant_man')
chrmgr.RegisterRaceName(1137, 'ice_snow_golem')
chrmgr.RegisterRaceName(1151, 'ice_snow_monster')
chrmgr.RegisterRaceName(1152, 'ice_snow_whale')
chrmgr.RegisterRaceName(1153, 'ice_snow_insect')
chrmgr.RegisterRaceName(1154, 'ice_snow_dog')
chrmgr.RegisterRaceName(1155, 'ice_snow_man')
chrmgr.RegisterRaceName(1156, 'ice_snow_giant_man')
chrmgr.RegisterRaceName(1157, 'ice_snow_golem')
chrmgr.RegisterRaceName(1171, 'ice_snow_monster')
chrmgr.RegisterRaceName(1172, 'ice_snow_whale')
chrmgr.RegisterRaceName(1173, 'ice_snow_insect')
chrmgr.RegisterRaceName(1174, 'ice_snow_dog')
chrmgr.RegisterRaceName(1175, 'ice_snow_man')
chrmgr.RegisterRaceName(1176, 'ice_snow_giant_man')
chrmgr.RegisterRaceName(1177, 'ice_snow_golem')
chrmgr.RegisterRaceName(1191, 'ice_snow_witch')
chrmgr.RegisterRaceName(1192, 'ice_snow_witch')
chrmgr.RegisterRaceName(1301, 'greenfrog_soldier')
chrmgr.RegisterRaceName(1302, 'greenfrog_general')
chrmgr.RegisterRaceName(1303, 'goblin_leafhead')
chrmgr.RegisterRaceName(1304, 'yellow_tigerman')
chrmgr.RegisterRaceName(1305, 'sugu_general')
chrmgr.RegisterRaceName(1306, 'yellow_tigerman')
chrmgr.RegisterRaceName(1307, '#season1/monster/yellow_tigerman_e/')
chrmgr.RegisterRaceName(1331, 'greenfrog_soldier')
chrmgr.RegisterRaceName(1332, 'greenfrog_general')
chrmgr.RegisterRaceName(1333, 'goblin_leafhead')
chrmgr.RegisterRaceName(1334, 'yellow_tigerman')
chrmgr.RegisterRaceName(1335, 'sugu_general')
chrmgr.RegisterRaceName(1401, 'mutant_1')
chrmgr.RegisterRaceName(1402, 'mutant_2')
chrmgr.RegisterRaceName(1403, 'mutant_3')
chrmgr.RegisterRaceName(1501, 'golem_1')
chrmgr.RegisterRaceName(1502, 'golem_2')
chrmgr.RegisterRaceName(1503, 'golem_3')
chrmgr.RegisterRaceName(1601, 'nersluck_1')
chrmgr.RegisterRaceName(1602, 'nersluck_2')
chrmgr.RegisterRaceName(1603, 'nersluck_3')
chrmgr.RegisterRaceName(1901, 'fox_ninetail')
chrmgr.RegisterRaceName(1902, 'fox_ninetail')
chrmgr.RegisterRaceName(1903, '#season1/monster/fox_ninetail_e/')
chrmgr.RegisterRaceName(2001, 'spider_young')
chrmgr.RegisterRaceName(2002, 'spider_poison')
chrmgr.RegisterRaceName(2003, 'spider_redpoison')
chrmgr.RegisterRaceName(2004, 'spider_nipper')
chrmgr.RegisterRaceName(2005, 'spider_soldier')
chrmgr.RegisterRaceName(2031, 'spider_young')
chrmgr.RegisterRaceName(2032, 'spider_poison')
chrmgr.RegisterRaceName(2033, 'spider_redpoison')
chrmgr.RegisterRaceName(2034, 'spider_nipper')
chrmgr.RegisterRaceName(2035, 'spider_soldier')
chrmgr.RegisterRaceName(2036, 'spider_soldier')
chrmgr.RegisterRaceName(2051, 'spider_young')
chrmgr.RegisterRaceName(2052, 'spider_poison')
chrmgr.RegisterRaceName(2053, 'spider_redpoison')
chrmgr.RegisterRaceName(2054, 'spider_nipper')
chrmgr.RegisterRaceName(2055, 'spider_soldier')
chrmgr.RegisterRaceName(2061, 'spider_young')
chrmgr.RegisterRaceName(2062, 'spider_poison')
chrmgr.RegisterRaceName(2063, 'spider_redpoison')
chrmgr.RegisterRaceName(2064, 'spider_nipper')
chrmgr.RegisterRaceName(2065, 'spider_soldier')
chrmgr.RegisterRaceName(2071, 'spider_young')
chrmgr.RegisterRaceName(2072, 'spider_poison')
chrmgr.RegisterRaceName(2073, 'spider_redpoison')
chrmgr.RegisterRaceName(2074, 'spider_nipper')
chrmgr.RegisterRaceName(2075, 'spider_soldier')
chrmgr.RegisterRaceName(2076, 'spider_soldier')
chrmgr.RegisterRaceName(2091, 'spider_queen')
chrmgr.RegisterRaceName(2092, 'spider_king')
chrmgr.RegisterRaceName(2093, '#season1/monster/spider_queen_e/')
chrmgr.RegisterRaceName(2094, '#season1/monster/spider_queen_e/')
chrmgr.RegisterRaceName(2095, 'spider_spawn')
chrmgr.RegisterRaceName(2101, 'fennec_fox')
chrmgr.RegisterRaceName(2102, 'evil_eye')
chrmgr.RegisterRaceName(2103, 'giant_scorpion')
chrmgr.RegisterRaceName(2104, 'scorpionman_sword')
chrmgr.RegisterRaceName(2105, 'scorpionman_bow')
chrmgr.RegisterRaceName(2106, 'snakeman_sword')
chrmgr.RegisterRaceName(2107, 'snakeman_bow')
chrmgr.RegisterRaceName(2108, 'outlaw')
chrmgr.RegisterRaceName(2131, 'scorpionman_sword')
chrmgr.RegisterRaceName(2132, 'scorpionman_bow')
chrmgr.RegisterRaceName(2133, 'snakeman_sword')
chrmgr.RegisterRaceName(2134, 'snakeman_bow')
chrmgr.RegisterRaceName(2135, 'outlaw')
chrmgr.RegisterRaceName(2151, 'fennec_fox')
chrmgr.RegisterRaceName(2152, 'evil_eye')
chrmgr.RegisterRaceName(2153, 'giant_scorpion')
chrmgr.RegisterRaceName(2154, 'scorpionman_sword')
chrmgr.RegisterRaceName(2155, 'scorpionman_bow')
chrmgr.RegisterRaceName(2156, 'snakeman_sword')
chrmgr.RegisterRaceName(2157, 'snakeman_bow')
chrmgr.RegisterRaceName(2158, 'outlaw')
chrmgr.RegisterRaceName(2191, 'giant_desert_turtle')
chrmgr.RegisterRaceName(2192, '#season1/monster/giant_desert_turtle_e/')
chrmgr.RegisterRaceName(2201, 'fire_tiger')
chrmgr.RegisterRaceName(2202, 'fire_ghost')
chrmgr.RegisterRaceName(2203, 'fire_tiger_boss')
chrmgr.RegisterRaceName(2204, 'fire_man')
chrmgr.RegisterRaceName(2205, 'fire_knight')
chrmgr.RegisterRaceName(2206, 'fire_king')
chrmgr.RegisterRaceName(2207, 'fire_king')
chrmgr.RegisterRaceName(2221, 'fire_tiger')
chrmgr.RegisterRaceName(2222, 'fire_ghost')
chrmgr.RegisterRaceName(2223, 'fire_tiger_boss')
chrmgr.RegisterRaceName(2224, 'fire_man')
chrmgr.RegisterRaceName(2225, 'fire_knight')
chrmgr.RegisterRaceName(2226, 'fire_ghost')
chrmgr.RegisterRaceName(2227, 'fire_ghost')
chrmgr.RegisterRaceName(2231, 'fire_tiger')
chrmgr.RegisterRaceName(2232, 'fire_ghost')
chrmgr.RegisterRaceName(2233, 'fire_tiger_boss')
chrmgr.RegisterRaceName(2234, 'fire_man')
chrmgr.RegisterRaceName(2235, 'fire_knight')
chrmgr.RegisterRaceName(2291, 'fire_dragon')
chrmgr.RegisterRaceName(2292, 'red_dragon')
chrmgr.RegisterRaceName(2293, 'red_dragon2')
chrmgr.RegisterRaceName(2301, 'ent_trent')
chrmgr.RegisterRaceName(2302, 'ent_guru')
chrmgr.RegisterRaceName(2303, 'ent_hu')
chrmgr.RegisterRaceName(2304, 'ent_red')
chrmgr.RegisterRaceName(2305, 'ent_black')
chrmgr.RegisterRaceName(2306, 'ent_huge')
chrmgr.RegisterRaceName(2307, 'ent_elder')
chrmgr.RegisterRaceName(2311, 'ent_trent')
chrmgr.RegisterRaceName(2312, 'ent_guru')
chrmgr.RegisterRaceName(2313, 'ent_hu')
chrmgr.RegisterRaceName(2314, 'ent_red')
chrmgr.RegisterRaceName(2315, 'ent_black')
chrmgr.RegisterRaceName(2401, 'ch_footman')
chrmgr.RegisterRaceName(2402, 'ch_bowman')
chrmgr.RegisterRaceName(2403, 'ch_magician')
chrmgr.RegisterRaceName(2404, 'ch_officer')
chrmgr.RegisterRaceName(2411, 'ch_footman')
chrmgr.RegisterRaceName(2412, 'ch_bowman')
chrmgr.RegisterRaceName(2413, 'ch_magician')
chrmgr.RegisterRaceName(2414, 'ch_officer')
chrmgr.RegisterRaceName(2431, 'ch_footman')
chrmgr.RegisterRaceName(2432, 'ch_bowman')
chrmgr.RegisterRaceName(2433, 'ch_magician')
chrmgr.RegisterRaceName(2434, 'ch_officer')
chrmgr.RegisterRaceName(2451, 'ch_footman')
chrmgr.RegisterRaceName(2452, 'ch_bowman')
chrmgr.RegisterRaceName(2453, 'ch_magician')
chrmgr.RegisterRaceName(2454, 'ch_officer')
chrmgr.RegisterRaceName(2481, 'boar_young')
chrmgr.RegisterRaceName(2482, 'dog_god_young')
chrmgr.RegisterRaceName(2483, 'fire_tiger_young')
chrmgr.RegisterRaceName(2484, 'lion_young')
chrmgr.RegisterRaceName(2491, 'ch_general')
chrmgr.RegisterRaceName(2492, 'ch_general')
chrmgr.RegisterRaceName(2493, 'blue_dragon')
chrmgr.RegisterRaceName(2494, 'ch_general')
chrmgr.RegisterRaceName(2495, 'ch_general')
chrmgr.RegisterRaceName(2501, 'zombie_diseased_kid')
chrmgr.RegisterRaceName(2502, 'zombie_diseased_dog')
chrmgr.RegisterRaceName(2503, 'zombie_diseased_infector')
chrmgr.RegisterRaceName(2504, 'zombie_diseased_sword')
chrmgr.RegisterRaceName(2505, 'zombie_diseased_spear')
chrmgr.RegisterRaceName(2506, 'zombie_diseased_bow')
chrmgr.RegisterRaceName(2507, 'zombie_diseased_boss')
chrmgr.RegisterRaceName(2508, 'zombie_soldier_scythe')
chrmgr.RegisterRaceName(2509, 'zombie_soldier_bow')
chrmgr.RegisterRaceName(2510, 'zombie_soldier_spear')
chrmgr.RegisterRaceName(2511, 'zombie_magician')
chrmgr.RegisterRaceName(2512, 'zombie_bigboss')
chrmgr.RegisterRaceName(2513, 'zombie_ghost')
chrmgr.RegisterRaceName(2514, 'zombie_general')
chrmgr.RegisterRaceName(2541, 'zombie_soldier_scythe')
chrmgr.RegisterRaceName(2542, 'zombie_soldier_bow')
chrmgr.RegisterRaceName(2543, 'zombie_soldier_spear')
chrmgr.RegisterRaceName(2544, 'zombie_magician')
chrmgr.RegisterRaceName(2545, 'zombie_bigboss')
chrmgr.RegisterRaceName(2546, 'zombie_ghost')
chrmgr.RegisterRaceName(2547, 'zombie_general')
chrmgr.RegisterRaceName(2591, 'zombie_king')
chrmgr.RegisterRaceName(2592, 'zombie_king')
chrmgr.RegisterRaceName(2593, 'zombie_king')
chrmgr.RegisterRaceName(2594, 'zombie_king')
chrmgr.RegisterRaceName(2595, 'zombie_king')
chrmgr.RegisterRaceName(2596, 'zombie_king')
chrmgr.RegisterRaceName(2597, 'zombie_god')
chrmgr.RegisterRaceName(2598, 'zombie_bigboss2')
chrmgr.RegisterRaceName(2600, 'gnoll_helhound')
chrmgr.RegisterRaceName(2601, 'gnoll_warrior')
chrmgr.RegisterRaceName(2602, 'gnoll_mage')
chrmgr.RegisterRaceName(2603, 'gnoll_commander')
chrmgr.RegisterRaceName(2620, 'gnoll_minotaur')
chrmgr.RegisterRaceName(2630, 'troll_warrior')
chrmgr.RegisterRaceName(2631, 'troll_archer')
chrmgr.RegisterRaceName(2632, 'troll_mage')
chrmgr.RegisterRaceName(2633, 'troll_commander')
chrmgr.RegisterRaceName(2650, 'troll_argus')
chrmgr.RegisterRaceName(2660, 'naga_soldier')
chrmgr.RegisterRaceName(2661, 'naga_archer')
chrmgr.RegisterRaceName(2662, 'naga_mage')
chrmgr.RegisterRaceName(2663, 'naga_warrior')
chrmgr.RegisterRaceName(2680, 'naga_commander')
chrmgr.RegisterRaceName(5001, 'japanese_pirate')
chrmgr.RegisterRaceName(5002, 'haitai')
chrmgr.RegisterRaceName(5003, 'monkey')
chrmgr.RegisterRaceName(5004, 'japanese_pirate')
chrmgr.RegisterRaceName(5005, 'haitai')
chrmgr.RegisterRaceName(5101, 'monkey')
chrmgr.RegisterRaceName(5102, 'monkey_range')
chrmgr.RegisterRaceName(5103, 'monkey')
chrmgr.RegisterRaceName(5104, 'monkey')
chrmgr.RegisterRaceName(5111, 'monkey')
chrmgr.RegisterRaceName(5112, 'monkey_range')
chrmgr.RegisterRaceName(5113, 'monkey')
chrmgr.RegisterRaceName(5114, 'monkey')
chrmgr.RegisterRaceName(5115, 'stone_monkey')
chrmgr.RegisterRaceName(5116, 'stone_monkey')
chrmgr.RegisterRaceName(5121, 'monkey')
chrmgr.RegisterRaceName(5122, 'monkey_range')
chrmgr.RegisterRaceName(5123, 'monkey')
chrmgr.RegisterRaceName(5124, 'monkey')
chrmgr.RegisterRaceName(5125, 'stone_monkey')
chrmgr.RegisterRaceName(5126, 'gold_monkey')
chrmgr.RegisterRaceName(5127, 'gold_monkey')
chrmgr.RegisterRaceName(5131, 'monkey')
chrmgr.RegisterRaceName(5132, 'monkey_range')
chrmgr.RegisterRaceName(5133, 'monkey')
chrmgr.RegisterRaceName(5134, 'monkey')
chrmgr.RegisterRaceName(5141, 'monkey')
chrmgr.RegisterRaceName(5142, 'monkey_range')
chrmgr.RegisterRaceName(5143, 'monkey')
chrmgr.RegisterRaceName(5144, 'monkey')
chrmgr.RegisterRaceName(5145, 'stone_monkey')
chrmgr.RegisterRaceName(5146, 'stone_monkey')
chrmgr.RegisterRaceName(5151, 'monkey')
chrmgr.RegisterRaceName(5152, 'monkey_range')
chrmgr.RegisterRaceName(5153, 'monkey')
chrmgr.RegisterRaceName(5154, 'monkey')
chrmgr.RegisterRaceName(5155, 'stone_monkey')
chrmgr.RegisterRaceName(5156, 'gold_monkey')
chrmgr.RegisterRaceName(5157, 'gold_monkey')
chrmgr.RegisterRaceName(5161, 'stone_monkey')
chrmgr.RegisterRaceName(5162, 'gold_monkey')
chrmgr.RegisterRaceName(5163, 'god_monkey')
chrmgr.RegisterRaceName(7001, 'monkey')
chrmgr.RegisterRaceName(7002, 'monkey_range')
chrmgr.RegisterRaceName(7003, 'monkey')
chrmgr.RegisterRaceName(7004, 'monkey')
chrmgr.RegisterRaceName(7005, 'stone_monkey')
chrmgr.RegisterRaceName(7006, 'gold_monkey')
chrmgr.RegisterRaceName(7007, 'gold_monkey')
chrmgr.RegisterRaceName(7008, 'nersluck_1')
chrmgr.RegisterRaceName(7009, 'nersluck_2')
chrmgr.RegisterRaceName(7010, 'nersluck_3')
chrmgr.RegisterRaceName(7012, 'evil_eye')
chrmgr.RegisterRaceName(7013, 'giant_scorpion')
chrmgr.RegisterRaceName(7014, 'scorpionman_sword')
chrmgr.RegisterRaceName(7015, 'scorpionman_bow')
chrmgr.RegisterRaceName(7016, 'snakeman_sword')
chrmgr.RegisterRaceName(7017, 'snakeman_bow')
chrmgr.RegisterRaceName(7018, 'outlaw')
chrmgr.RegisterRaceName(7019, 'fire_tiger')
chrmgr.RegisterRaceName(7020, 'fire_ghost')
chrmgr.RegisterRaceName(7021, 'fire_tiger_boss')
chrmgr.RegisterRaceName(7022, 'fire_man')
chrmgr.RegisterRaceName(7023, 'fire_knight')
chrmgr.RegisterRaceName(7024, 'ent_trent')
chrmgr.RegisterRaceName(7025, 'ent_guru')
chrmgr.RegisterRaceName(7026, 'ent_hu')
chrmgr.RegisterRaceName(7027, 'ent_red')
chrmgr.RegisterRaceName(7028, 'ent_black')
chrmgr.RegisterRaceName(8001, 'metinstone_01')
chrmgr.RegisterRaceName(8002, 'metinstone_02')
chrmgr.RegisterRaceName(8003, 'metinstone_03')
chrmgr.RegisterRaceName(8004, 'metinstone_04')
chrmgr.RegisterRaceName(8005, 'metinstone_05')
chrmgr.RegisterRaceName(8006, 'metinstone_06')
chrmgr.RegisterRaceName(8007, 'metinstone_07')
chrmgr.RegisterRaceName(8008, 'metinstone_08')
chrmgr.RegisterRaceName(8009, 'metinstone_09')
chrmgr.RegisterRaceName(8010, 'metinstone_04')
chrmgr.RegisterRaceName(8011, 'metinstone_05')
chrmgr.RegisterRaceName(8012, 'metinstone_06')
chrmgr.RegisterRaceName(8013, 'metinstone_07')
chrmgr.RegisterRaceName(8014, 'metinstone_08')
chrmgr.RegisterRaceName(8015, 'metinstone_04')
chrmgr.RegisterRaceName(8016, 'metinstone_05')
chrmgr.RegisterRaceName(8017, 'metinstone_06')
chrmgr.RegisterRaceName(8018, 'metinstone_07')
chrmgr.RegisterRaceName(8019, 'metinstone_08')
chrmgr.RegisterRaceName(8020, 'metinstone_06')
chrmgr.RegisterRaceName(8021, 'metinstone_07')
chrmgr.RegisterRaceName(8022, 'metinstone_08')
chrmgr.RegisterRaceName(8023, 'metinstone_09')
chrmgr.RegisterRaceName(8024, 'metinstone_03')
chrmgr.RegisterRaceName(8025, 'metinstone_04')
chrmgr.RegisterRaceName(8026, 'metinstone_05')
chrmgr.RegisterRaceName(8027, 'metinstone_06')
chrmgr.RegisterRaceName(8028, 'metinstone_06')
chrmgr.RegisterRaceName(8029, 'metinstone_06')
chrmgr.RegisterRaceName(8030, 'metinstone_06')
chrmgr.RegisterRaceName(8031, 'metinstone_09')
chrmgr.RegisterRaceName(8032, 'metinstone_01')
chrmgr.RegisterRaceName(8033, 'metinstone_06')
chrmgr.RegisterRaceName(8034, 'metinstone_02')
chrmgr.RegisterRaceName(8035, 'metinstone_10')
chrmgr.RegisterRaceName(8036, 'metinstone_11')
chrmgr.RegisterRaceName(8037, 'metinstone_12')
chrmgr.RegisterRaceName(8038, 'metinstone_13')
chrmgr.RegisterRaceName(8039, 'metinstone_14')
chrmgr.RegisterRaceName(8040, 'metinstone_15')
chrmgr.RegisterRaceName(8041, 'metinstone_14')
chrmgr.RegisterRaceName(8042, 'metinstone_egg')
chrmgr.RegisterRaceName(8043, 'metinstone_egg')
chrmgr.RegisterRaceName(8044, 'metinstone_egg')
chrmgr.RegisterRaceName(8045, 'metinstone_egg')
chrmgr.RegisterRaceName(8046, 'metinstone_egg')
chrmgr.RegisterRaceName(8047, 'metinstone_egg')
chrmgr.RegisterRaceName(8051, 'metinstone_10')
chrmgr.RegisterRaceName(8052, 'metinstone_11')
chrmgr.RegisterRaceName(8053, 'metinstone_12')
chrmgr.RegisterRaceName(8054, 'metinstone_13')
chrmgr.RegisterRaceName(8055, 'metinstone_14')
chrmgr.RegisterRaceName(8056, 'metinstone_15')
chrmgr.RegisterRaceName(8101, 'metinstone_01')
chrmgr.RegisterRaceName(8102, 'metinstone_02')
chrmgr.RegisterRaceName(8103, 'metinstone_03')
chrmgr.RegisterRaceName(8104, 'metinstone_04')
chrmgr.RegisterRaceName(8105, 'metinstone_05')
chrmgr.RegisterRaceName(8106, 'metinstone_06')
chrmgr.RegisterRaceName(8107, 'metinstone_07')
chrmgr.RegisterRaceName(8108, 'metinstone_08')
chrmgr.RegisterRaceName(8109, 'metinstone_09')
chrmgr.RegisterRaceName(8110, 'metinstone_09')
chrmgr.RegisterRaceName(8111, 'metinstone_09')
chrmgr.RegisterRaceName(8112, 'metinstone_09')
chrmgr.RegisterRaceName(8501, 'stray_dog')
chrmgr.RegisterRaceName(8502, 'wild_boar')
chrmgr.RegisterRaceName(8503, 'bear')
chrmgr.RegisterRaceName(8504, 'tiger_big')
chrmgr.RegisterRaceName(8505, 'orc_bigblack')
chrmgr.RegisterRaceName(8506, 'greenfrog_general')
chrmgr.RegisterRaceName(8507, 'outlaw')
chrmgr.RegisterRaceName(8508, 'milgyo_monster1')
chrmgr.RegisterRaceName(8509, 'milgyo_monster2')
chrmgr.RegisterRaceName(8510, 'fire_knight')
chrmgr.RegisterRaceName(8511, 'ice_snow_golem')
chrmgr.RegisterRaceName(8600, '#season1/monster/orc_lord_e/')
chrmgr.RegisterRaceName(8601, '#season1/monster/orc_lord_e/')
chrmgr.RegisterRaceName(8602, '#season1/monster/milgyo_founder_e/')
chrmgr.RegisterRaceName(8603, '#season1/monster/milgyo_founder_e/')
chrmgr.RegisterRaceName(8604, '#season1/monster/skeleton_king_e/')
chrmgr.RegisterRaceName(8605, '#season1/monster/skeleton_king_e/')
chrmgr.RegisterRaceName(8606, '#season1/monster/skeleton_god_e/')
chrmgr.RegisterRaceName(8607, '#season1/monster/skeleton_god_e/')
chrmgr.RegisterRaceName(8608, '#season1/monster/fox_ninetail_e/')
chrmgr.RegisterRaceName(8609, '#season1/monster/fox_ninetail_e/')
chrmgr.RegisterRaceName(8610, '#season1/monster/yellow_tigerman_e/')
chrmgr.RegisterRaceName(8611, '#season1/monster/yellow_tigerman_e/')
chrmgr.RegisterRaceName(8612, '#season1/monster/spider_queen_e/')
chrmgr.RegisterRaceName(8613, '#season1/monster/spider_queen_e/')
chrmgr.RegisterRaceName(8614, '#season1/monster/giant_desert_turtle_e/')
chrmgr.RegisterRaceName(8615, '#season1/monster/giant_desert_turtle_e/')
chrmgr.RegisterRaceName(8616, '#season2/npc/ent_elder/')
chrmgr.RegisterRaceName(9001, 'arms')
chrmgr.RegisterRaceName(9002, 'defence')
chrmgr.RegisterRaceName(9003, 'goods')
chrmgr.RegisterRaceName(9004, 'bank')
chrmgr.RegisterRaceName(9005, 'hotel_grandfa')
chrmgr.RegisterRaceName(9006, 'hotel_grandma')
chrmgr.RegisterRaceName(9007, 'arms')
chrmgr.RegisterRaceName(9008, 'defence')
chrmgr.RegisterRaceName(9009, 'sailor')
chrmgr.RegisterRaceName(9010, 'goods_02')
chrmgr.RegisterRaceName(9011, 'bank_02')
chrmgr.RegisterRaceName(9012, 'oldster')
chrmgr.RegisterRaceName(10001, 'warp')
chrmgr.RegisterRaceName(10002, 'warp')
chrmgr.RegisterRaceName(10003, 'warp')
chrmgr.RegisterRaceName(10004, 'warp')
chrmgr.RegisterRaceName(10005, 'warp')
chrmgr.RegisterRaceName(10006, 'warp')
chrmgr.RegisterRaceName(10007, 'warp')
chrmgr.RegisterRaceName(10008, 'warp')
chrmgr.RegisterRaceName(10009, 'warp')
chrmgr.RegisterRaceName(10010, 'warp')
chrmgr.RegisterRaceName(10011, 'warp')
chrmgr.RegisterRaceName(10012, 'warp')
chrmgr.RegisterRaceName(10013, 'warp')
chrmgr.RegisterRaceName(10014, 'warp')
chrmgr.RegisterRaceName(10015, 'warp')
chrmgr.RegisterRaceName(10016, 'warp')
chrmgr.RegisterRaceName(10017, 'warp')
chrmgr.RegisterRaceName(10018, 'warp')
chrmgr.RegisterRaceName(10019, 'warp')
chrmgr.RegisterRaceName(10020, 'warp')
chrmgr.RegisterRaceName(10021, 'warp')
chrmgr.RegisterRaceName(10022, 'warp')
chrmgr.RegisterRaceName(10023, 'warp')
chrmgr.RegisterRaceName(10024, 'warp')
chrmgr.RegisterRaceName(10025, 'warp')
chrmgr.RegisterRaceName(10026, 'warp')
chrmgr.RegisterRaceName(10027, 'warp')
chrmgr.RegisterRaceName(10028, 'warp')
chrmgr.RegisterRaceName(10029, 'warp')
chrmgr.RegisterRaceName(10030, 'warp')
chrmgr.RegisterRaceName(10031, 'warp')
chrmgr.RegisterRaceName(10032, 'warp')
chrmgr.RegisterRaceName(10033, 'warp')
chrmgr.RegisterRaceName(10034, 'warp')
chrmgr.RegisterRaceName(10035, 'warp')
chrmgr.RegisterRaceName(10036, 'warp')
chrmgr.RegisterRaceName(10037, 'warp')
chrmgr.RegisterRaceName(10038, 'warp')
chrmgr.RegisterRaceName(10039, 'warp')
chrmgr.RegisterRaceName(10040, 'warp')
chrmgr.RegisterRaceName(10041, 'warp')
chrmgr.RegisterRaceName(10042, 'warp')
chrmgr.RegisterRaceName(10043, 'warp')
chrmgr.RegisterRaceName(10044, 'warp')
chrmgr.RegisterRaceName(10045, 'warp')
chrmgr.RegisterRaceName(10046, 'warp')
chrmgr.RegisterRaceName(10047, 'warp')
chrmgr.RegisterRaceName(10048, 'warp')
chrmgr.RegisterRaceName(10049, 'warp')
chrmgr.RegisterRaceName(10050, 'warp')
chrmgr.RegisterRaceName(10051, 'warp')
chrmgr.RegisterRaceName(10052, 'warp')
chrmgr.RegisterRaceName(10053, 'warp')
chrmgr.RegisterRaceName(10054, 'warp')
chrmgr.RegisterRaceName(10055, 'warp')
chrmgr.RegisterRaceName(10056, 'warp')
chrmgr.RegisterRaceName(10057, 'warp')
chrmgr.RegisterRaceName(10058, 'warp')
chrmgr.RegisterRaceName(10059, 'warp')
chrmgr.RegisterRaceName(10060, 'warp')
chrmgr.RegisterRaceName(10061, 'warp')
chrmgr.RegisterRaceName(10062, 'warp')
chrmgr.RegisterRaceName(10063, 'warp')
chrmgr.RegisterRaceName(10064, 'warp')
chrmgr.RegisterRaceName(10065, 'warp')
chrmgr.RegisterRaceName(10066, 'warp')
chrmgr.RegisterRaceName(10067, 'warp')
chrmgr.RegisterRaceName(10068, 'warp')
chrmgr.RegisterRaceName(10069, 'warp')
chrmgr.RegisterRaceName(10070, 'warp')
chrmgr.RegisterRaceName(10071, 'warp')
chrmgr.RegisterRaceName(10072, 'warp')
chrmgr.RegisterRaceName(10073, 'warp')
chrmgr.RegisterRaceName(10074, 'warp')
chrmgr.RegisterRaceName(10075, 'warp')
chrmgr.RegisterRaceName(10076, 'warp')
chrmgr.RegisterRaceName(10077, 'warp')
chrmgr.RegisterRaceName(10078, 'warp')
chrmgr.RegisterRaceName(10079, 'warp')
chrmgr.RegisterRaceName(10080, 'warp')
chrmgr.RegisterRaceName(10081, 'warp')
chrmgr.RegisterRaceName(10082, 'warp')
chrmgr.RegisterRaceName(10083, 'warp')
chrmgr.RegisterRaceName(10084, 'warp')
chrmgr.RegisterRaceName(10085, 'warp')
chrmgr.RegisterRaceName(10086, 'warp')
chrmgr.RegisterRaceName(10087, 'warp')
chrmgr.RegisterRaceName(10088, 'warp')
chrmgr.RegisterRaceName(10089, 'warp')
chrmgr.RegisterRaceName(10090, 'warp')
chrmgr.RegisterRaceName(10091, 'warp')
chrmgr.RegisterRaceName(10092, 'warp')
chrmgr.RegisterRaceName(10501, 'warp')
chrmgr.RegisterRaceName(10502, 'warp')
chrmgr.RegisterRaceName(10503, 'warp')
chrmgr.RegisterRaceName(10504, 'warp')
chrmgr.RegisterRaceName(10505, 'warp')
chrmgr.RegisterRaceName(10506, 'warp')
chrmgr.RegisterRaceName(10507, 'warp')
chrmgr.RegisterRaceName(10508, 'warp')
chrmgr.RegisterRaceName(10509, 'warp')
chrmgr.RegisterRaceName(10510, 'warp')
chrmgr.RegisterRaceName(10511, 'warp')
chrmgr.RegisterRaceName(10512, 'warp')
chrmgr.RegisterRaceName(10513, 'warp')
chrmgr.RegisterRaceName(10514, 'warp')
chrmgr.RegisterRaceName(10515, 'warp')
chrmgr.RegisterRaceName(10516, 'warp')
chrmgr.RegisterRaceName(10517, 'warp')
chrmgr.RegisterRaceName(10518, 'warp')
chrmgr.RegisterRaceName(10519, 'warp')
chrmgr.RegisterRaceName(10520, 'warp')
chrmgr.RegisterRaceName(10521, 'warp')
chrmgr.RegisterRaceName(10522, 'warp')
chrmgr.RegisterRaceName(10523, 'warp')
chrmgr.RegisterRaceName(10524, 'warp')
chrmgr.RegisterRaceName(10601, 'warp')
chrmgr.RegisterRaceName(10602, 'warp')
chrmgr.RegisterRaceName(10603, 'warp')
chrmgr.RegisterRaceName(10604, 'warp')
chrmgr.RegisterRaceName(10605, 'warp')
chrmgr.RegisterRaceName(10606, 'warp')
chrmgr.RegisterRaceName(10607, 'warp')
chrmgr.RegisterRaceName(10608, 'warp')
chrmgr.RegisterRaceName(10609, 'warp')
chrmgr.RegisterRaceName(10610, 'warp')
chrmgr.RegisterRaceName(10611, 'warp')
chrmgr.RegisterRaceName(10612, 'warp')
chrmgr.RegisterRaceName(10613, 'warp')
chrmgr.RegisterRaceName(10614, 'warp')
chrmgr.RegisterRaceName(10615, 'warp')
chrmgr.RegisterRaceName(10616, 'warp')
chrmgr.RegisterRaceName(10617, 'warp')
chrmgr.RegisterRaceName(10618, 'warp')
chrmgr.RegisterRaceName(10619, 'warp')
chrmgr.RegisterRaceName(10620, 'warp')
chrmgr.RegisterRaceName(10621, 'warp')
chrmgr.RegisterRaceName(10622, 'warp')
chrmgr.RegisterRaceName(10623, 'warp')
chrmgr.RegisterRaceName(10624, 'warp')
chrmgr.RegisterRaceName(10625, 'warp')
chrmgr.RegisterRaceName(10626, 'warp')
chrmgr.RegisterRaceName(10701, 'warp')
chrmgr.RegisterRaceName(10702, 'warp')
chrmgr.RegisterRaceName(10703, 'warp')
chrmgr.RegisterRaceName(10704, 'warp')
chrmgr.RegisterRaceName(10705, 'warp')
chrmgr.RegisterRaceName(10706, 'warp')
chrmgr.RegisterRaceName(10707, 'warp')
chrmgr.RegisterRaceName(10708, 'warp')
chrmgr.RegisterRaceName(10709, 'warp')
chrmgr.RegisterRaceName(10710, 'warp')
chrmgr.RegisterRaceName(10711, 'warp')
chrmgr.RegisterRaceName(10712, 'warp')
chrmgr.RegisterRaceName(10713, 'warp')
chrmgr.RegisterRaceName(10714, 'warp')
chrmgr.RegisterRaceName(10715, 'warp')
chrmgr.RegisterRaceName(10716, 'warp')
chrmgr.RegisterRaceName(10717, 'warp')
chrmgr.RegisterRaceName(10718, 'warp')
chrmgr.RegisterRaceName(10719, 'warp')
chrmgr.RegisterRaceName(10720, 'warp')
chrmgr.RegisterRaceName(10721, 'warp')
chrmgr.RegisterRaceName(10722, 'warp')
chrmgr.RegisterRaceName(10723, 'warp')
chrmgr.RegisterRaceName(10724, 'warp')
chrmgr.RegisterRaceName(10725, 'warp')
chrmgr.RegisterRaceName(10726, 'warp')
chrmgr.RegisterRaceName(11000, '#season1/npc/cheonjo_guard_spear/')
chrmgr.RegisterRaceName(11001, '#season1/npc/cheonjo_guard_bow/')
chrmgr.RegisterRaceName(11002, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(11003, 'gangyo_patrol_bow')
chrmgr.RegisterRaceName(11004, '#season1/npc/sinsu_guard_spear/')
chrmgr.RegisterRaceName(11005, '#season1/npc/sinsu_guard_bow/')
chrmgr.RegisterRaceName(11100, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(11101, 'sinsu_patrol_bow')
chrmgr.RegisterRaceName(11102, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(11103, 'jinno_patrol_bow')
chrmgr.RegisterRaceName(11104, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(11105, 'gangyo_patrol_bow')
chrmgr.RegisterRaceName(11106, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(11107, 'sinsu_patrol_bow')
chrmgr.RegisterRaceName(11108, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(11109, 'jinno_patrol_bow')
chrmgr.RegisterRaceName(11110, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(11111, 'gangyo_patrol_bow')
chrmgr.RegisterRaceName(11112, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(11113, 'sinsu_patrol_bow')
chrmgr.RegisterRaceName(11114, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(11115, 'jinno_patrol_bow')
chrmgr.RegisterRaceName(11116, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(11117, 'gangyo_patrol_bow')
chrmgr.RegisterRaceName(11505, '#season1/npc/goldenfrog/')
chrmgr.RegisterRaceName(11506, '#season2/npc/signal_fire/')
chrmgr.RegisterRaceName(11507, '#season2/npc/signal_fire/')
chrmgr.RegisterRaceName(11508, '#season2/npc/signal_fire/')
chrmgr.RegisterRaceName(11509, '#season2/npc/signal_fire/')
chrmgr.RegisterRaceName(11510, '#season2/npc/signal_fire/')
chrmgr.RegisterRaceName(12000, 'campfire')
chrmgr.RegisterRaceName(12121, 'horse_gay')
chrmgr.RegisterRaceName(13000, 'wooden_door')
chrmgr.RegisterRaceName(13001, 'stone_door')
chrmgr.RegisterRaceName(20001, 'alchemist')
chrmgr.RegisterRaceName(20002, 'auntie')
chrmgr.RegisterRaceName(20003, 'baby_and_mom')
chrmgr.RegisterRaceName(20004, 'beggar')
chrmgr.RegisterRaceName(20005, 'ceramist')
chrmgr.RegisterRaceName(20006, 'girl_lost_elder_brother')
chrmgr.RegisterRaceName(20007, 'hotel_grandfa')
chrmgr.RegisterRaceName(20008, 'mr_restaurant')
chrmgr.RegisterRaceName(20009, 'oldster')
chrmgr.RegisterRaceName(20010, 'peddler')
chrmgr.RegisterRaceName(20011, 'plant_researcher')
chrmgr.RegisterRaceName(20012, 'rice_cake_seller')
chrmgr.RegisterRaceName(20013, 'sailor')
chrmgr.RegisterRaceName(20014, 'timid_boy')
chrmgr.RegisterRaceName(20015, 'woodcutter')
chrmgr.RegisterRaceName(20016, 'blacksmith')
chrmgr.RegisterRaceName(20017, 'musician')
chrmgr.RegisterRaceName(20018, 'doctor')
chrmgr.RegisterRaceName(20019, 'hunter')
chrmgr.RegisterRaceName(20020, 'old_pirate')
chrmgr.RegisterRaceName(20021, 'widow')
chrmgr.RegisterRaceName(20022, 'young_merchant')
chrmgr.RegisterRaceName(20023, 'bookworm')
chrmgr.RegisterRaceName(20024, 'yu_hwa_rang')
chrmgr.RegisterRaceName(20029, 'pony_normal')
chrmgr.RegisterRaceName(20030, 'pony_normal')
chrmgr.RegisterRaceName(20031, 'santa')
chrmgr.RegisterRaceName(20032, 'christmas_tree_01')
chrmgr.RegisterRaceName(20033, 'christmas_tree_02')
chrmgr.RegisterRaceName(20034, 'christmas_tree_03')
chrmgr.RegisterRaceName(20035, 'flag_red')
chrmgr.RegisterRaceName(20036, 'flag_blue')
chrmgr.RegisterRaceName(20037, 'flag_yellow')
chrmgr.RegisterRaceName(20040, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20041, 'beggar')
chrmgr.RegisterRaceName(20042, 'peddler')
chrmgr.RegisterRaceName(20044, 'blacksmith')
chrmgr.RegisterRaceName(20045, 'blacksmith')
chrmgr.RegisterRaceName(20046, 'blacksmith')
chrmgr.RegisterRaceName(20047, 'diamond')
chrmgr.RegisterRaceName(20048, 'amber')
chrmgr.RegisterRaceName(20049, 'fossil_tree')
chrmgr.RegisterRaceName(20050, 'copper')
chrmgr.RegisterRaceName(20051, 'silver')
chrmgr.RegisterRaceName(20052, 'gold')
chrmgr.RegisterRaceName(20053, 'jade')
chrmgr.RegisterRaceName(20054, 'ebony')
chrmgr.RegisterRaceName(20055, 'pearl')
chrmgr.RegisterRaceName(20056, 'white_gold')
chrmgr.RegisterRaceName(20057, 'quartz')
chrmgr.RegisterRaceName(20058, 'amethyst')
chrmgr.RegisterRaceName(20059, 'chunru')
chrmgr.RegisterRaceName(20060, 'alchemist')
chrmgr.RegisterRaceName(20061, 'alchemist')
chrmgr.RegisterRaceName(20062, 'alchemist')
chrmgr.RegisterRaceName(20063, 'alchemist')
chrmgr.RegisterRaceName(20064, 'alchemist')
chrmgr.RegisterRaceName(20065, 'alchemist')
chrmgr.RegisterRaceName(20066, 'alchemist')
chrmgr.RegisterRaceName(20067, 'alchemist')
chrmgr.RegisterRaceName(20068, 'alchemist')
chrmgr.RegisterRaceName(20069, 'alchemist')
chrmgr.RegisterRaceName(20070, 'alchemist')
chrmgr.RegisterRaceName(20071, 'alchemist')
chrmgr.RegisterRaceName(20072, 'alchemist')
chrmgr.RegisterRaceName(20073, 'seal_stone')
chrmgr.RegisterRaceName(20074, 'blacksmith')
chrmgr.RegisterRaceName(20075, 'blacksmith')
chrmgr.RegisterRaceName(20076, 'blacksmith')
chrmgr.RegisterRaceName(20077, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20078, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20079, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20080, 'plant_researcher')
chrmgr.RegisterRaceName(20081, 'seal_stone')
chrmgr.RegisterRaceName(20082, 'GM')
chrmgr.RegisterRaceName(20083, 'oldster')
chrmgr.RegisterRaceName(20084, '#season1/npc/chagirap/')
chrmgr.RegisterRaceName(20086, '#season1/npc/wondaim/')
chrmgr.RegisterRaceName(20087, '#season1/npc/handaup/')
chrmgr.RegisterRaceName(20088, '#season1/npc/visamun/')
chrmgr.RegisterRaceName(20089, '#season1/npc/jinmoo/')
chrmgr.RegisterRaceName(20090, '#season1/npc/samahi/')
chrmgr.RegisterRaceName(20091, '#season1/npc/backchon/')
chrmgr.RegisterRaceName(20092, '#season1/npc/ayuka/')
chrmgr.RegisterRaceName(20093, '#season1/npc/visal/')
chrmgr.RegisterRaceName(20094, '#season1/npc/yejin/')
chrmgr.RegisterRaceName(20095, '#season1/npc/sinseon/')
chrmgr.RegisterRaceName(20096, 'seal_stone')
chrmgr.RegisterRaceName(20097, '#season2/npc/sinsu_warpgate/')
chrmgr.RegisterRaceName(20098, '#season2/npc/chenjo_warpgate/')
chrmgr.RegisterRaceName(20099, '#season2/npc/jinno_warpgate/')
chrmgr.RegisterRaceName(20101, 'pony_normal')
chrmgr.RegisterRaceName(20102, 'pony_member')
chrmgr.RegisterRaceName(20103, 'pony_master')
chrmgr.RegisterRaceName(20104, 'horse_normal')
chrmgr.RegisterRaceName(20105, 'horse_member')
chrmgr.RegisterRaceName(20106, 'horse_master')
chrmgr.RegisterRaceName(20107, 'horse2_normal')
chrmgr.RegisterRaceName(20108, 'horse2_member')
chrmgr.RegisterRaceName(20109, 'horse2_master')
chrmgr.RegisterRaceName(20110, 'boar')
chrmgr.RegisterRaceName(20111, 'dog_god')
chrmgr.RegisterRaceName(20112, 'fire_tiger')
chrmgr.RegisterRaceName(20113, 'lion')
chrmgr.RegisterRaceName(20114, 'lion_white')
chrmgr.RegisterRaceName(20115, 'boar_2')
chrmgr.RegisterRaceName(20116, 'dog_god_2')
chrmgr.RegisterRaceName(20117, 'fire_tiger_2')
chrmgr.RegisterRaceName(20118, 'lion_2')
chrmgr.RegisterRaceName(20119, 'horse_event1')
chrmgr.RegisterRaceName(20120, 'fire_tiger_blue')
chrmgr.RegisterRaceName(20121, 'fire_tiger_darkred')
chrmgr.RegisterRaceName(20122, 'fire_tiger_gold')
chrmgr.RegisterRaceName(20123, 'fire_tiger_green')
chrmgr.RegisterRaceName(20124, 'fire_tiger_pied')
chrmgr.RegisterRaceName(20125, 'fire_tiger_white')
chrmgr.RegisterRaceName(20126, 'santa')
chrmgr.RegisterRaceName(20200, '#season1/npc/wondaim/')
chrmgr.RegisterRaceName(20201, 'boar')
chrmgr.RegisterRaceName(20202, 'dog_god')
chrmgr.RegisterRaceName(20203, 'fire_tiger')
chrmgr.RegisterRaceName(20204, 'lion')
chrmgr.RegisterRaceName(20205, 'boar_2')
chrmgr.RegisterRaceName(20206, 'dog_god_2')
chrmgr.RegisterRaceName(20207, 'fire_tiger_2')
chrmgr.RegisterRaceName(20208, 'lion_2')
chrmgr.RegisterRaceName(20209, 'boar_3')
chrmgr.RegisterRaceName(20210, 'dog_god_3')
chrmgr.RegisterRaceName(20211, 'fire_tiger_3')
chrmgr.RegisterRaceName(20212, 'lion_3')
chrmgr.RegisterRaceName(20213, 'reindeer_male1')
chrmgr.RegisterRaceName(20214, 'reindeer_male2')
chrmgr.RegisterRaceName(20215, 'reindeer_male3')
chrmgr.RegisterRaceName(20216, 'reindeer_female1')
chrmgr.RegisterRaceName(20217, 'reindeer_female2')
chrmgr.RegisterRaceName(20218, 'reindeer_female3')
chrmgr.RegisterRaceName(20219, 'horse_halloween1')
chrmgr.RegisterRaceName(20220, 'reindeer_male1_christmas1')
chrmgr.RegisterRaceName(20300, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20301, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20302, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20303, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20304, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20305, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20306, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20307, 'sinsu_patrol_spear')
chrmgr.RegisterRaceName(20320, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20321, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20322, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20323, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20324, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20325, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20326, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20327, 'gangyo_patrol_spear')
chrmgr.RegisterRaceName(20340, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20341, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20342, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20343, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20344, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20345, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20346, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20347, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20348, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20349, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20350, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20351, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20352, 'tombstone')
chrmgr.RegisterRaceName(20353, 'tombstone1')
chrmgr.RegisterRaceName(20354, 'guard_leader')
chrmgr.RegisterRaceName(20355, 'guard_leader')
chrmgr.RegisterRaceName(20356, '#season1/npc/mirinae_brother/')
chrmgr.RegisterRaceName(20357, '#season1/npc/moonstone/')
chrmgr.RegisterRaceName(20358, '#season1/npc/nnflower/')
chrmgr.RegisterRaceName(20359, '#season1/npc/mailbox/')
chrmgr.RegisterRaceName(20360, '#season1/npc/firestone/')
chrmgr.RegisterRaceName(20361, '#season1/npc/waterstone/')
chrmgr.RegisterRaceName(20362, '#season1/npc/treestone/')
chrmgr.RegisterRaceName(20363, '#season1/npc/steelstone/')
chrmgr.RegisterRaceName(20364, '#season1/npc/naoki/')
chrmgr.RegisterRaceName(20365, '#season1/npc/steelstone/')
chrmgr.RegisterRaceName(20366, '#season1/npc/keyholestone/')
chrmgr.RegisterRaceName(20367, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20368, 'seal_stone')
chrmgr.RegisterRaceName(20369, 'leechung')
chrmgr.RegisterRaceName(20370, 'seal_stone')
chrmgr.RegisterRaceName(20371, 'spy1')
chrmgr.RegisterRaceName(20384, 'christmas_tree')
chrmgr.RegisterRaceName(20400, 'jinno_patrol_spear')
chrmgr.RegisterRaceName(20500, '#d:/m2sg/football/')
chrmgr.RegisterRaceName(20501, '#d:/ymir work/npc2/halloween1/')
chrmgr.RegisterRaceName(30000, 'privateshop')
chrmgr.RegisterRaceName(30001, 'privateshop2')
chrmgr.RegisterRaceName(30101, 'zombie_key_stone')
chrmgr.RegisterRaceName(30102, 'zombie_god_stone')
chrmgr.RegisterRaceName(30103, 'zombie_security_stone')
chrmgr.RegisterRaceName(30104, 'zombie_security_stone')
chrmgr.RegisterRaceName(30111, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30112, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30113, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30114, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30115, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30116, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30117, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30118, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30119, 'zombie_ghost_door')
chrmgr.RegisterRaceName(30120, 'obj_bag003')
chrmgr.RegisterRaceName(30121, 'suraghost')
chrmgr.RegisterRaceName(30122, 'warriorghost')
chrmgr.RegisterRaceName(30123, 'worship_dragon')
chrmgr.RegisterRaceName(30124, 'sura_skeleton1')
chrmgr.RegisterRaceName(30125, 'sura_skeleton2')
chrmgr.RegisterRaceName(30126, 'sura_skeleton3')
chrmgr.RegisterRaceName(30127, 'sura_skeleton4')
chrmgr.RegisterRaceName(30128, 'sura_skeleton5')
chrmgr.RegisterRaceName(30129, 'rabbit')
chrmgr.RegisterRaceName(30130, '#season1/npc/waterstone/')
chrmgr.RegisterRaceName(33002, 'historian')
chrmgr.RegisterRaceName(33003, 'starveling')
chrmgr.RegisterRaceName(33004, 'starveling2')
chrmgr.RegisterRaceName(33005, 'starveling3')
chrmgr.RegisterRaceName(33006, 'starveling4')
chrmgr.RegisterRaceName(33007, 'starveling5')
chrmgr.RegisterRaceName(33008, 'halloween1')
chrmgr.RegisterRaceName(34001, 'phoenix1')
chrmgr.RegisterRaceName(34002, 'reindeer_young1')
chrmgr.RegisterRaceName(34003, 'phoenix2')
chrmgr.RegisterRaceName(34004, 'pwahuang1')
chrmgr.RegisterRaceName(34005, 'pig_young1')
chrmgr.RegisterRaceName(34006, 'dog_young1')
chrmgr.RegisterRaceName(34007, 'tiger_young1')
chrmgr.RegisterRaceName(34008, 'lion_young1')
chrmgr.RegisterRaceName(34009, 'pwahuang1_2')
chrmgr.RegisterRaceName(34010, 'reindeer_young1_christmas1')
chrmgr.RegisterRaceName(34011, 'bear_young1')
chrmgr.RegisterRaceName(34012, 'panda_young1')
You are my personal king... next time you report the whole internet, becaue EVERYTHING you can find in this thread you can also find as open source with google. And... you WERE a developer? there must be a reason why you aren't a developer anymore...Quote:
This is to break into the protected game files of Metin2 Singapore and World of Metin2. That violates the game terms and conditions, files should neither be accessed, modified nor distributed by any means.
I was employed at TEC-Interactive and have been a developer for Metin2 PH for a long time.
This release grants people access to these copyrighted files, and hence, I'm requesting a deletion for this thread immediately.
TEC-Interactive is debating on writing a DMCA Notice against such releases and the unlawful rules of Metin2 section of Elitepvpers.com that lets people do whatever they want with protected and copyrighted materials.
Thread reported.
Are you aware that DMCA is an United States law?Quote:
This is to break into the protected game files of Metin2 Singapore and World of Metin2. That violates the game terms and conditions, files should neither be accessed, modified nor distributed by any means.
I was employed at TEC-Interactive and have been a developer for Metin2 PH for a long time.
This release grants people access to these copyrighted files, and hence, I'm requesting a deletion for this thread immediately.
TEC-Interactive is debating on writing a DMCA Notice against such releases and the unlawful rules of Metin2 section of Elitepvpers.com that lets people do whatever they want with protected and copyrighted materials.
Thread reported.
We're trying to stand against such commits and put restricts to our work that would take a whole life of someone of you if you'd try to do it.Quote:
You are my personal king... next time you report the whole internet, becaue EVERYTHING you can find in this thread you can also find as open source with google. And... you WERE a developer? there must be a reason why you aren't a developer anymore...
:facepalm: get a life, kid...
DMCA is not the only way to protect ourselves from copyright infringement, there should be an action taken as soon as possible against these illegal works.Quote:
Are you aware that DMCA is an United States law?
You complain about Law & Copyrighted Material but your Usertitel is the name of ( 2 ) pServer(s) ?Quote:
We're trying to stand against such commits and put restricts to our work that would take a whole life of someone of you if you'd try to do it.
I was a developer for 3 fine months, after, I quit for being sick of the corruption I've always witnessed, GM's get paid for making items privately, Christopher plays with a full geared character, a LOT of undetected hacks that I tried them myself.
And no, I haven't seen such a breaker to our compiled files on google.
I know there's a whole bunch of C++ programs that would do this job, but it takes a smart ass to use them.
DMCA is not the only way to protect ourselves from copyright infringement, there should be an action taken as soon as possible against these illegal works.
TEC-Interactive also has the right to sue you while you're at home watching The Simpsons.
Just be nice and original, there's no need to use or steal copyrighted stuff.
def _GameWindow__BuildKeyDict(self):
onPressKeyDict = { }
def onPressKeyDict[app.DIK_1]():
return self._GameWindow__PressNumKey(1)
def _GameWindow__BuildKeyDict(self):
onPressKeyDict = {}
onPressKeyDict[app.DIK_1] = lambda : self._GameWindow__PressNumKey(1)
Geht sehr wohl hier haste die ganzeQuote:
Also game.pyc geht nicht zum decompielen und dann wieder zu packen !
[Only registered and activated users can see links. Click Here To Register...]
das das Problem was ich auch hatte mit dem decompilen:
sollte:Code:def _GameWindow__BuildKeyDict(self): onPressKeyDict = { } def onPressKeyDict[app.DIK_1](): return self._GameWindow__PressNumKey(1)
sein also geht der Compiler nicht für alles !Code:def _GameWindow__BuildKeyDict(self): onPressKeyDict = {} onPressKeyDict[app.DIK_1] = lambda : self._GameWindow__PressNumKey(1)
# Source Generated by .MaisKolben™-Decompyler
# File: game.pyc
import os
import app
import dbg
import grp
import item
import background
import chr
import chrmgr
import player
import snd
import chat
import textTail
import snd
import net
import effect
import wndMgr
import fly
import systemSetting
import quest
import guild
import skill
import messenger
import locale
import constInfo
import exchange
import ime
import ui
import uiCommon
import uiPhaseCurtain
import uiMapNameShower
import uiAffectShower
import uiPlayerGauge
import uiCharacter
import uiTarget
import uiPrivateShopBuilder
import mouseModule
import consoleModule
import locale
import playerSettingModule
import interfaceModule
import musicInfo
import stringCommander
from _weakref import proxy
kScreenshotDirectory = 'screenshot'
cameraDistance = 1550.0
cameraPitch = 27.0
cameraRotation = 0.0
cameraHeight = 100.0
testAlignment = 0
class GameWindow(ui.ScriptWindow):
def __init__(self, stream):
ui.ScriptWindow.__init__(self, 'GAME')
self.SetWindowName('game')
net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self)
player.SetGameWindow(self)
self.quickSlotPageIndex = 0
self.lastPKModeSendedTime = 0
self.pressNumber = None
self.guildWarQuestionDialog = None
self.stream = stream
self.interface = interfaceModule.Interface()
self.interface.MakeInterface()
self.interface.ShowDefaultWindows()
self.curtain = uiPhaseCurtain.PhaseCurtain()
self.curtain.speed = 0.029999999999999999
self.curtain.Hide()
self.targetBoard = uiTarget.TargetBoard()
self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog))
self.targetBoard.Hide()
self.console = consoleModule.ConsoleWindow()
self.console.BindGameClass(self)
self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200)
self.console.Hide()
self.mapNameShower = uiMapNameShower.MapNameShower()
self.affectShower = uiAffectShower.AffectShower()
self.playerGauge = uiPlayerGauge.PlayerGauge(self)
self.playerGauge.Hide()
self._GameWindow__SetQuickSlotMode()
self._GameWindow__ServerCommand_Build()
self._GameWindow__ProcessPreservedServerCommand()
def __del__(self):
player.SetGameWindow(0)
net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self)
ui.ScriptWindow.__del__(self)
def Open(self):
app.SetFrameSkip(1)
self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
self.quickSlotPageIndex = 0
self.PickingCharacterIndex = -1
self.PickingItemIndex = -1
self.consoleEnable = 0
self.isShowDebugInfo = 0
self.ShowNameFlag = 0
self.enableXMasBoom = 0
self.startTimeXMasBoom = 0.0
self.indexXMasBoom = 0
app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight)
constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE()
constInfo.SET_DEFAULT_CHRNAME_COLOR()
constInfo.SET_DEFAULT_FOG_LEVEL()
constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE()
constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS()
constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE()
constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE()
import event
event.SetLeftTimeString('Remaining Time: %d Sec.')
textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE)
if constInfo.PVPMODE_TEST_ENABLE:
self.testPKMode = ui.TextLine()
self.testPKMode.SetFontName('Tahoma:14')
self.testPKMode.SetPosition(0, 15)
self.testPKMode.SetWindowHorizontalAlignCenter()
self.testPKMode.SetHorizontalAlignCenter()
self.testPKMode.SetFeather()
self.testPKMode.SetOutline()
self.testPKMode.Show()
self.testAlignment = ui.TextLine()
self.testAlignment.SetFontName('Tahoma:14')
self.testAlignment.SetPosition(0, 35)
self.testAlignment.SetWindowHorizontalAlignCenter()
self.testAlignment.SetHorizontalAlignCenter()
self.testAlignment.SetFeather()
self.testAlignment.SetOutline()
self.testAlignment.Show()
self._GameWindow__BuildKeyDict()
self._GameWindow__BuildDebugInfo()
uiPrivateShopBuilder.Clear()
exchange.InitTrading()
snd.SetMusicVolume(systemSetting.GetMusicVolume() * net.GetFieldMusicVolume())
snd.SetSoundVolume(systemSetting.GetSoundVolume())
netFieldMusicFileName = net.GetFieldMusicFileName()
if netFieldMusicFileName:
snd.FadeInMusic('BGM/' + netFieldMusicFileName)
elif musicInfo.fieldMusic != '':
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
self._GameWindow__SetQuickSlotMode()
self._GameWindow__SelectQuickPage(self.quickSlotPageIndex)
self.SetFocus()
self.Show()
app.ShowCursor()
net.SendEnterGamePacket()
try:
self.StartGame()
except:
import exception
exception.Abort('GameWindow.Open')
def Close(self):
global cameraDistance, cameraPitch, cameraRotation, cameraHeight
self.Hide()
(cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera()
if musicInfo.fieldMusic != '':
snd.FadeOutMusic('BGM/' + musicInfo.fieldMusic)
self.onPressKeyDict = None
self.onClickKeyDict = None
chat.Close()
snd.StopAllSound()
grp.InitScreenEffect()
chr.Destroy()
textTail.Clear()
quest.Clear()
background.Destroy()
guild.Destroy()
messenger.Destroy()
skill.ClearSkillData()
wndMgr.Unlock()
mouseModule.mouseController.DeattachObject()
if self.guildWarQuestionDialog:
self.guildWarQuestionDialog.Close()
self.guildNameBoard = None
self.partyRequestQuestionDialog = None
self.partyInviteQuestionDialog = None
self.guildInviteQuestionDialog = None
self.guildWarQuestionDialog = None
self.messengerAddFriendQuestion = None
self.itemDropQuestionDialog = None
self.confirmDialog = None
self.PrintCoord = None
self.FrameRate = None
self.Pitch = None
self.Splat = None
self.TextureNum = None
self.ObjectNum = None
self.ViewDistance = None
self.ClearDictionary()
self.playerGauge = None
self.mapNameShower = None
self.affectShower = None
if self.console:
self.console.BindGameClass(0)
self.console.Close()
self.console = None
if self.targetBoard:
self.targetBoard.Destroy()
self.targetBoard = None
if self.interface:
self.interface.HideAllWindows()
self.interface.Close()
self.interface = None
player.ClearSkillDict()
player.ResetCameraRotation()
self.KillFocus()
app.HideCursor()
log('GameWindow::Close()')
def _GameWindow__BuildKeyDict(self):
onPressKeyDict = { }
def onPressKeyDict[app.DIK_1]():
return self._GameWindow__PressNumKey(1)
def onPressKeyDict[app.DIK_2]():
return self._GameWindow__PressNumKey(2)
def onPressKeyDict[app.DIK_3]():
return self._GameWindow__PressNumKey(3)
def onPressKeyDict[app.DIK_4]():
return self._GameWindow__PressNumKey(4)
def onPressKeyDict[app.DIK_5]():
return self._GameWindow__PressNumKey(5)
def onPressKeyDict[app.DIK_6]():
return self._GameWindow__PressNumKey(6)
def onPressKeyDict[app.DIK_7]():
return self._GameWindow__PressNumKey(7)
def onPressKeyDict[app.DIK_8]():
return self._GameWindow__PressNumKey(8)
def onPressKeyDict[app.DIK_9]():
return self._GameWindow__PressNumKey(9)
def onPressKeyDict[app.DIK_F1]():
return self._GameWindow__PressQuickSlot(4)
def onPressKeyDict[app.DIK_F2]():
return self._GameWindow__PressQuickSlot(5)
def onPressKeyDict[app.DIK_F3]():
return self._GameWindow__PressQuickSlot(6)
def onPressKeyDict[app.DIK_F4]():
return self._GameWindow__PressQuickSlot(7)
def onPressKeyDict[app.DIK_F12]():
return self.interface.OpenHelpWindow()
def onPressKeyDict[app.DIK_LALT]():
return self.ShowName()
def onPressKeyDict[app.DIK_LCONTROL]():
return self.ShowMouseImage()
def onPressKeyDict[app.DIK_SYSRQ]():
return self.SaveScreen()
def onPressKeyDict[app.DIK_SPACE]():
return self.StartAttack()
def onPressKeyDict[app.DIK_UP]():
return self.MoveUp()
def onPressKeyDict[app.DIK_DOWN]():
return self.MoveDown()
def onPressKeyDict[app.DIK_LEFT]():
return self.MoveLeft()
def onPressKeyDict[app.DIK_RIGHT]():
return self.MoveRight()
def onPressKeyDict[app.DIK_W]():
return self.MoveUp()
def onPressKeyDict[app.DIK_S]():
return self.MoveDown()
def onPressKeyDict[app.DIK_A]():
return self.MoveLeft()
def onPressKeyDict[app.DIK_D]():
return self.MoveRight()
def onPressKeyDict[app.DIK_E]():
return app.RotateCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_R]():
return app.ZoomCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_T]():
return app.PitchCamera(app.CAMERA_TO_NEGATIVE)
onPressKeyDict[app.DIK_G] = self._GameWindow__PressGKey
onPressKeyDict[app.DIK_Q] = self._GameWindow__PressQKey
def onPressKeyDict[app.DIK_NUMPAD9]():
return app.MovieResetCamera()
def onPressKeyDict[app.DIK_NUMPAD4]():
return app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_NUMPAD6]():
return app.MovieRotateCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_PGUP]():
return app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_PGDN]():
return app.MovieZoomCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_NUMPAD8]():
return app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_NUMPAD2]():
return app.MoviePitchCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_GRAVE]():
return self.PickUpItem()
def onPressKeyDict[app.DIK_Z]():
return self.PickUpItem()
def onPressKeyDict[app.DIK_C](state = 'STATUS'):
return self.interface.ToggleCharacterWindow(state)
def onPressKeyDict[app.DIK_V](state = 'SKILL'):
return self.interface.ToggleCharacterWindow(state)
def onPressKeyDict[app.DIK_N](state = 'QUEST'):
return self.interface.ToggleCharacterWindow(state)
def onPressKeyDict[app.DIK_I]():
return self.interface.ToggleInventoryWindow()
def onPressKeyDict[app.DIK_M]():
return self.interface.PressMKey()
def onPressKeyDict[app.DIK_ADD]():
return self.interface.MiniMapScaleUp()
def onPressKeyDict[app.DIK_SUBTRACT]():
return self.interface.MiniMapScaleDown()
def onPressKeyDict[app.DIK_L]():
return self.interface.ToggleChatLogWindow()
def onPressKeyDict[app.DIK_COMMA]():
return self.ShowConsole()
def onPressKeyDict[app.DIK_LSHIFT]():
return self._GameWindow__SetQuickPageMode()
def onPressKeyDict[app.DIK_J]():
return self._GameWindow__PressJKey()
def onPressKeyDict[app.DIK_H]():
return self._GameWindow__PressHKey()
def onPressKeyDict[app.DIK_B]():
return self._GameWindow__PressBKey()
def onPressKeyDict[app.DIK_F]():
return self._GameWindow__PressFKey()
self.onPressKeyDict = onPressKeyDict
onClickKeyDict = { }
def onClickKeyDict[app.DIK_UP]():
return self.StopUp()
def onClickKeyDict[app.DIK_DOWN]():
return self.StopDown()
def onClickKeyDict[app.DIK_LEFT]():
return self.StopLeft()
def onClickKeyDict[app.DIK_RIGHT]():
return self.StopRight()
def onClickKeyDict[app.DIK_SPACE]():
return self.EndAttack()
def onClickKeyDict[app.DIK_W]():
return self.StopUp()
def onClickKeyDict[app.DIK_S]():
return self.StopDown()
def onClickKeyDict[app.DIK_A]():
return self.StopLeft()
def onClickKeyDict[app.DIK_D]():
return self.StopRight()
def onClickKeyDict[app.DIK_Q]():
return app.RotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_E]():
return app.RotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_R]():
return app.ZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_F]():
return app.ZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_T]():
return app.PitchCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_G]():
return self._GameWindow__ReleaseGKey()
def onClickKeyDict[app.DIK_NUMPAD4]():
return app.MovieRotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_NUMPAD6]():
return app.MovieRotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_PGUP]():
return app.MovieZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_PGDN]():
return app.MovieZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_NUMPAD8]():
return app.MoviePitchCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_NUMPAD2]():
return app.MoviePitchCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_LALT]():
return self.HideName()
def onClickKeyDict[app.DIK_LCONTROL]():
return self.HideMouseImage()
def onClickKeyDict[app.DIK_LSHIFT]():
return self._GameWindow__SetQuickSlotMode()
self.onClickKeyDict = onClickKeyDict
def _GameWindow__PressNumKey(self, num):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if num >= 1 and num <= 9:
if chrmgr.IsPossibleEmoticon(-1):
chrmgr.SetEmoticon(-1, int(num) - 1)
net.SendEmoticon(int(num) - 1)
elif num >= 1 and num <= 4:
self.pressNumber(num - 1)
def _GameWindow__ClickBKey(self):
if constInfo.PVPMODE_ACCELKEY_ENABLE and not app.IsPressed(app.DIK_LCONTROL) and not app.IsPressed(app.DIK_RCONTROL):
self.ChangePKMode()
def _GameWindow__PressJKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if player.IsMountingHorse():
net.SendChatPacket('/unmount')
elif not uiPrivateShopBuilder.IsBuildingPrivateShop():
for i in xrange(player.INVENTORY_PAGE_SIZE):
if player.GetItemIndex(i) in (71114, 71116, 71118, 71120, 71164):
net.SendItemUsePacket(i)
break
def _GameWindow__PressHKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/user_horse_ride')
def _GameWindow__PressBKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/user_horse_back')
else:
state = 'EMOTICON'
self.interface.ToggleCharacterWindow(state)
def _GameWindow__PressFKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/user_horse_feed')
else:
app.ZoomCamera(app.CAMERA_TO_POSITIVE)
def _GameWindow__PressGKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/ride')
elif self.ShowNameFlag:
self.interface.ToggleGuildWindow()
else:
app.PitchCamera(app.CAMERA_TO_POSITIVE)
def _GameWindow__ReleaseGKey(self):
app.PitchCamera(app.CAMERA_STOP)
def _GameWindow__PressQKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
self.interface.ToggleQuestButtons()
else:
app.RotateCamera(app.CAMERA_TO_NEGATIVE)
def _GameWindow__SetQuickSlotMode(self):
self.pressNumber = ui.__mem_func__(self._GameWindow__PressQuickSlot)
def _GameWindow__SetQuickPageMode(self):
self.pressNumber = ui.__mem_func__(self._GameWindow__SelectQuickPage)
def _GameWindow__PressQuickSlot(self, localSlotIndex):
player.RequestUseLocalQuickSlot(localSlotIndex)
def _GameWindow__SelectQuickPage(self, pageIndex):
self.quickSlotPageIndex = pageIndex
player.SetQuickPage(pageIndex)
def ToggleDebugInfo(self):
self.isShowDebugInfo = not (self.isShowDebugInfo)
if self.isShowDebugInfo:
self.PrintCoord.Show()
self.FrameRate.Show()
self.Pitch.Show()
self.Splat.Show()
self.TextureNum.Show()
self.ObjectNum.Show()
self.ViewDistance.Show()
else:
self.PrintCoord.Hide()
self.FrameRate.Hide()
self.Pitch.Hide()
self.Splat.Hide()
self.TextureNum.Hide()
self.ObjectNum.Hide()
self.ViewDistance.Hide()
def _GameWindow__BuildDebugInfo(self):
self.PrintCoord = ui.TextLine()
self.PrintCoord.SetFontName('Tahoma:14')
self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0)
self.FrameRate = ui.TextLine()
self.FrameRate.SetFontName('Tahoma:14')
self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20)
self.Pitch = ui.TextLine()
self.Pitch.SetFontName('Tahoma:14')
self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40)
self.Splat = ui.TextLine()
self.Splat.SetFontName('Tahoma:14')
self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60)
self.TextureNum = ui.TextLine()
self.TextureNum.SetFontName('Tahoma:14')
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 80)
self.ObjectNum = ui.TextLine()
self.ObjectNum.SetFontName('Tahoma:14')
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)
self.ViewDistance = ui.TextLine()
self.ViewDistance.SetFontName('Tahoma:14')
self.ViewDistance.SetPosition(0, 0)
def _GameWindow__NotifyError(self, msg):
chat.AppendChat(chat.CHAT_TYPE_INFO, msg)
def ChangePKMode(self):
if not app.IsPressed(app.DIK_LCONTROL):
return None
if player.GetStatus(player.LEVEL) < constInfo.PVPMODE_PROTECTED_LEVEL:
self._GameWindow__NotifyError('You need to have at least Level %d to be able to use the PvP Mode.' % constInfo.PVPMODE_PROTECTED_LEVEL)
return None
curTime = app.GetTime()
if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY:
return None
self.lastPKModeSendedTime = curTime
curPKMode = player.GetPKMode()
nextPKMode = curPKMode + 1
if nextPKMode == player.PK_MODE_PROTECT:
if 0 == player.GetGuildID():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot activate Guild Mode when you do not belong to a Guild.')
nextPKMode = 0
else:
nextPKMode = player.PK_MODE_GUILD
elif nextPKMode == player.PK_MODE_MAX_NUM:
nextPKMode = 0
net.SendChatPacket('/PKMode ' + str(nextPKMode))
log('/PKMode ' + str(nextPKMode))
def OnChangePKMode(self):
self.interface.OnChangePKMode()
try:
self._GameWindow__NotifyError(locale.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()])
except KeyError:
log('UNKNOWN PVPMode[%d]' % player.GetPKMode())
if constInfo.PVPMODE_TEST_ENABLE:
curPKMode = player.GetPKMode()
(alignment, grade) = chr.testGetPKData()
self.pkModeNameDict = {
0: 'PEACE',
1: 'REVENGE',
2: 'FREE',
3: 'PROTECT' }
self.testPKMode.SetText('Current PK Mode : ' + self.pkModeNameDict.get(curPKMode, 'UNKNOWN'))
self.testAlignment.SetText('Current Alignment : ' + str(alignment) + ' (' + locale.TITLE_NAME_LIST[grade] + ')')
def StartGame(self):
self.RefreshInventory()
self.RefreshEquipment()
self.RefreshCharacter()
self.RefreshSkill()
def CheckGameButton(self):
if self.interface:
self.interface.CheckGameButton()
def RefreshAlignment(self):
self.interface.RefreshAlignment()
def RefreshStatus(self):
self.CheckGameButton()
if self.interface:
self.interface.RefreshStatus()
if self.playerGauge:
self.playerGauge.RefreshGauge()
def RefreshStamina(self):
self.interface.RefreshStamina()
def RefreshSkill(self):
self.CheckGameButton()
if self.interface:
self.interface.RefreshSkill()
def RefreshQuest(self):
self.interface.RefreshQuest()
def RefreshMessenger(self):
self.interface.RefreshMessenger()
def RefreshGuildInfoPage(self):
self.interface.RefreshGuildInfoPage()
def RefreshGuildBoardPage(self):
self.interface.RefreshGuildBoardPage()
def RefreshGuildMemberPage(self):
self.interface.RefreshGuildMemberPage()
def RefreshGuildMemberPageGradeComboBox(self):
self.interface.RefreshGuildMemberPageGradeComboBox()
def RefreshGuildSkillPage(self):
self.interface.RefreshGuildSkillPage()
def RefreshGuildGradePage(self):
self.interface.RefreshGuildGradePage()
def RefreshMobile(self):
if self.interface:
self.interface.RefreshMobile()
def OnMobileAuthority(self):
self.interface.OnMobileAuthority()
def OnBlockMode(self, mode):
self.interface.OnBlockMode(mode)
def OpenQuestWindow(self, skin, idx):
self.interface.OpenQuestWindow(skin, idx)
def AskGuildName(self):
guildNameBoard = uiCommon.InputDialog()
guildNameBoard.SetTitle('Guild name')
guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName))
guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName))
guildNameBoard.Open()
self.guildNameBoard = guildNameBoard
def ConfirmGuildName(self):
guildName = self.guildNameBoard.GetText()
if not guildName:
return None
if net.IsInsultIn(guildName):
self.PopupMessage('Guild name is not valid.')
return None
net.SendAnswerMakeGuildPacket(guildName)
self.guildNameBoard.Close()
self.guildNameBoard = None
return 1
def CancelGuildName(self):
self.guildNameBoard.Close()
self.guildNameBoard = None
return 1
def PopupMessage(self, msg):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(msg, 0, 'OK')
def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type = 0):
self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type)
def AppendMaterialToRefineDialog(self, vnum, count):
self.interface.AppendMaterialToRefineDialog(vnum, count)
def RunUseSkillEvent(self, slotIndex, coolTime):
self.interface.OnUseSkill(slotIndex, coolTime)
def ClearAffects(self):
self.affectShower.ClearAffects()
def SetAffect(self, affect):
self.affectShower.SetAffect(affect)
def ResetAffect(self, affect):
self.affectShower.ResetAffect(affect)
def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration)
def BINARY_NEW_RemoveAffect(self, type, pointIdx):
self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx)
def ActivateSkillSlot(self, slotIndex):
if self.interface:
self.interface.OnActivateSkill(slotIndex)
def DeactivateSkillSlot(self, slotIndex):
if self.interface:
self.interface.OnDeactivateSkill(slotIndex)
def RefreshEquipment(self):
if self.interface:
self.interface.RefreshInventory()
def RefreshInventory(self):
if self.interface:
self.interface.RefreshInventory()
def RefreshCharacter(self):
if self.interface:
self.interface.RefreshCharacter()
def OnGameOver(self):
self.CloseTargetBoard()
self.OpenRestartDialog()
def OpenRestartDialog(self):
self.interface.OpenRestartDialog()
def ChangeCurrentSkill(self, skillSlotNumber):
self.interface.OnChangeCurrentSkill(skillSlotNumber)
def SetPCTargetBoard(self, vid, name):
self.targetBoard.Open(vid, name)
if app.IsPressed(app.DIK_LCONTROL):
if not player.IsSameEmpire(vid):
return None
if player.IsMainCharacterIndex(vid):
return None
elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid):
return None
self.interface.OpenWhisperDialog(name)
def RefreshTargetBoardByVID(self, vid):
self.targetBoard.RefreshByVID(vid)
def RefreshTargetBoardByName(self, name):
self.targetBoard.RefreshByName(name)
def _GameWindow__RefreshTargetBoard(self):
self.targetBoard.Refresh()
def SetHPTargetBoard(self, vid, hpPercentage):
if vid != self.targetBoard.GetTargetVID():
self.targetBoard.ResetTargetBoard()
self.targetBoard.SetEnemyVID(vid)
self.targetBoard.SetHP(hpPercentage)
self.targetBoard.Show()
def CloseTargetBoardIfDifferent(self, vid):
if vid != self.targetBoard.GetTargetVID():
self.targetBoard.Close()
def CloseTargetBoard(self):
self.targetBoard.Close()
def OpenEquipmentDialog(self, vid):
self.interface.OpenEquipmentDialog(vid)
def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count):
self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count)
def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value):
self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value)
def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value):
self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value)
def ShowMapName(self, mapName, x, y):
if self.mapNameShower:
self.mapNameShower.ShowMapName(mapName, x, y)
if self.interface:
self.interface.SetMapName(mapName)
def BINARY_OpenAtlasWindow(self):
self.interface.BINARY_OpenAtlasWindow()
def OnRecvWhisper(self, mode, name, line):
if mode == chat.WHISPER_TYPE_GM:
self.interface.RegisterGameMasterName(name)
chat.AppendWhisper(mode, name, line)
self.interface.RecvWhisper(name)
def OnRecvWhisperSystemMessage(self, mode, name, line):
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line)
self.interface.RecvWhisper(name)
def OnRecvWhisperError(self, mode, name, line):
if locale.WHISPER_ERROR.has_key(mode):
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, locale.WHISPER_ERROR[mode](name))
else:
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, 'Whisper Unknown Error(mode=%d, name=%s)' % (mode, name))
self.interface.RecvWhisper(name)
def RecvWhisper(self, name):
self.interface.RecvWhisper(name)
def OnPickMoney(self, money):
chat.AppendChat(chat.CHAT_TYPE_INFO, ' You received %d Gold.' % money)
def OnShopError(self, type):
try:
self.PopupMessage(locale.SHOP_ERROR_DICT[type])
except KeyError:
self.PopupMessage('Unknown Loading Error: %s' % type)
def OnSafeBoxError(self):
self.PopupMessage('You entered the wrong password.')
def OnFishingSuccess(self, isFish, fishName):
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, locale.FISHING_SUCCESS(isFish, fishName), 2000)
def OnFishingNotifyUnknown(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, ' I do not know what I caught.')
def OnFishingWrongPlace(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'I cannot go fishing here.')
def OnFishingNotify(self, isFish, fishName):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.FISHING_NOTIFY(isFish, fishName))
def OnFishingFailure(self):
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, 'You lost the Bait.', 2000)
def OnCannotPickItem(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot collect this Item as you did not win it.')
def OnCannotMining(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot look mine while riding.')
def OnCannotUseSkill(self, vid, type):
if locale.USE_SKILL_ERROR_TAIL_DICT.has_key(type):
textTail.RegisterInfoTail(vid, locale.USE_SKILL_ERROR_TAIL_DICT[type])
if locale.USE_SKILL_ERROR_CHAT_DICT.has_key(type):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_SKILL_ERROR_CHAT_DICT[type])
def OnCannotShotError(self, vid, type):
textTail.RegisterInfoTail(vid, locale.SHOT_ERROR_TAIL_DICT.get(type, 'Unknown Long Distance Attack Error: %s' % type))
def StartPointReset(self):
self.interface.OpenPointResetDialog()
def StartShop(self, vid):
self.interface.OpenShopDialog(vid)
def EndShop(self):
self.interface.CloseShopDialog()
def RefreshShop(self):
self.interface.RefreshShopDialog()
def SetShopSellingPrice(self, Price):
pass
def StartExchange(self):
self.interface.StartExchange()
def EndExchange(self):
self.interface.EndExchange()
def RefreshExchange(self):
self.interface.RefreshExchange()
def RecvPartyInviteQuestion(self, leaderVID, leaderName):
partyInviteQuestionDialog = uiCommon.QuestionDialog()
partyInviteQuestionDialog.SetText('Do you want to join' + ' ' + leaderName + "'s party?")
partyInviteQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.AnswerPartyInvite(arg))
partyInviteQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.AnswerPartyInvite(arg))
partyInviteQuestionDialog.Open()
partyInviteQuestionDialog.partyLeaderVID = leaderVID
self.partyInviteQuestionDialog = partyInviteQuestionDialog
def AnswerPartyInvite(self, answer):
if not (self.partyInviteQuestionDialog):
return None
partyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID
distance = player.GetCharacterDistance(partyLeaderVID)
if distance < 0.0 or distance > 5000:
answer = 0
net.SendPartyInviteAnswerPacket(partyLeaderVID, answer)
self.partyInviteQuestionDialog.Close()
self.partyInviteQuestionDialog = None
def AddPartyMember(self, pid, name):
self.interface.AddPartyMember(pid, name)
def UpdatePartyMemberInfo(self, pid):
self.interface.UpdatePartyMemberInfo(pid)
def RemovePartyMember(self, pid):
self.interface.RemovePartyMember(pid)
self._GameWindow__RefreshTargetBoard()
def LinkPartyMember(self, pid, vid):
self.interface.LinkPartyMember(pid, vid)
def UnlinkPartyMember(self, pid):
self.interface.UnlinkPartyMember(pid)
def UnlinkAllPartyMember(self):
self.interface.UnlinkAllPartyMember()
def ExitParty(self):
self.interface.ExitParty()
self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID())
def ChangePartyParameter(self, distributionMode):
self.interface.ChangePartyParameter(distributionMode)
def OnMessengerAddFriendQuestion(self, name):
messengerAddFriendQuestion = uiCommon.QuestionDialog2()
messengerAddFriendQuestion.SetText1('%s added you as a friend.' % name)
messengerAddFriendQuestion.SetText2('Accept?')
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
messengerAddFriendQuestion.Open()
messengerAddFriendQuestion.name = name
self.messengerAddFriendQuestion = messengerAddFriendQuestion
def OnAcceptAddFriend(self):
name = self.messengerAddFriendQuestion.name
net.SendChatPacket('/messenger_auth y ' + name)
self.OnCloseAddFriendQuestionDialog()
return 1
def OnDenyAddFriend(self):
name = self.messengerAddFriendQuestion.name
net.SendChatPacket('/messenger_auth n ' + name)
self.OnCloseAddFriendQuestionDialog()
return 1
def OnCloseAddFriendQuestionDialog(self):
self.messengerAddFriendQuestion.Close()
self.messengerAddFriendQuestion = None
return 1
def OpenSafeboxWindow(self, size):
self.interface.OpenSafeboxWindow(size)
def RefreshSafebox(self):
self.interface.RefreshSafebox()
def RefreshSafeboxMoney(self):
self.interface.RefreshSafeboxMoney()
def OpenMallWindow(self, size):
self.interface.OpenMallWindow(size)
def RefreshMall(self):
self.interface.RefreshMall()
def RecvGuildInviteQuestion(self, guildID, guildName):
guildInviteQuestionDialog = uiCommon.QuestionDialog()
guildInviteQuestionDialog.SetText(guildName + 'Do you want to join the Guild?')
guildInviteQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.AnswerGuildInvite(arg))
guildInviteQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.AnswerGuildInvite(arg))
guildInviteQuestionDialog.Open()
guildInviteQuestionDialog.guildID = guildID
self.guildInviteQuestionDialog = guildInviteQuestionDialog
def AnswerGuildInvite(self, answer):
if not (self.guildInviteQuestionDialog):
return None
guildLeaderVID = self.guildInviteQuestionDialog.guildID
net.SendGuildInviteAnswerPacket(guildLeaderVID, answer)
self.guildInviteQuestionDialog.Close()
self.guildInviteQuestionDialog = None
def DeleteGuild(self):
self.interface.DeleteGuild()
def ShowClock(self, second):
self.interface.ShowClock(second)
def HideClock(self):
self.interface.HideClock()
def BINARY_ActEmotion(self, emotionIndex):
if self.interface.wndCharacter:
self.interface.wndCharacter.ActEmotion(emotionIndex)
def CheckFocus(self):
if 0 == self.IsFocus():
if 1 == self.interface.IsOpenChat():
self.interface.ToggleChat()
self.SetFocus()
def SaveScreen(self):
(succeeded, name) = grp.SaveScreenShotToPath(kScreenshotDirectory + '/')
if succeeded:
chat.AppendChat(chat.CHAT_TYPE_INFO, 'Your screenshot has been saved to %s.' % name)
else:
chat.AppendChat(chat.CHAT_TYPE_INFO, 'Saving of Screenshot failed.')
def ShowConsole(self):
if self.consoleEnable:
self.console.OpenWindow()
def ShowName(self):
self.ShowNameFlag = 1
self.playerGauge.EnableShowAlways()
player.SetQuickPage(self.quickSlotPageIndex + 1)
def _GameWindow__IsShowName(self):
if systemSetting.IsAlwaysShowName():
return 1
if self.ShowNameFlag:
return 1
return 0
def HideName(self):
self.ShowNameFlag = 0
self.playerGauge.DisableShowAlways()
player.SetQuickPage(self.quickSlotPageIndex)
def ShowMouseImage(self):
self.interface.ShowMouseImage()
def HideMouseImage(self):
self.interface.HideMouseImage()
def StartAttack(self):
player.SetAttackKeyState(1)
def EndAttack(self):
player.SetAttackKeyState(0)
def MoveUp(self):
player.SetSingleDIKKeyState(app.DIK_UP, 1)
def MoveDown(self):
player.SetSingleDIKKeyState(app.DIK_DOWN, 1)
def MoveLeft(self):
player.SetSingleDIKKeyState(app.DIK_LEFT, 1)
def MoveRight(self):
player.SetSingleDIKKeyState(app.DIK_RIGHT, 1)
def StopUp(self):
player.SetSingleDIKKeyState(app.DIK_UP, 0)
def StopDown(self):
player.SetSingleDIKKeyState(app.DIK_DOWN, 0)
def StopLeft(self):
player.SetSingleDIKKeyState(app.DIK_LEFT, 0)
def StopRight(self):
player.SetSingleDIKKeyState(app.DIK_RIGHT, 0)
def PickUpItem(self):
player.PickCloseItem()
def OnKeyDown(self, key):
if self.interface.wndWeb and self.interface.wndWeb.IsShow():
return None
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)
try:
self.onPressKeyDict[key]()
except KeyError:
pass
except:
raise
return 1
def OnKeyUp(self, key):
try:
self.onClickKeyDict[key]()
except KeyError:
pass
except:
raise
return 1
def OnMouseLeftButtonDown(self):
if self.interface.BUILD_OnMouseLeftButtonDown():
return None
if mouseModule.mouseController.isAttached():
self.CheckFocus()
else:
hyperlink = ui.GetHyperlink()
if hyperlink:
return None
else:
self.CheckFocus()
player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS)
return 1
def OnMouseLeftButtonUp(self):
if self.interface.BUILD_OnMouseLeftButtonUp():
return None
if mouseModule.mouseController.isAttached():
attachedType = mouseModule.mouseController.GetAttachedType()
attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
if player.SLOT_TYPE_QUICK_SLOT == attachedType:
player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos)
elif player.SLOT_TYPE_INVENTORY == attachedType:
if player.ITEM_MONEY == attachedItemIndex:
self._GameWindow__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex)
else:
self._GameWindow__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)
mouseModule.mouseController.DeattachObject()
else:
hyperlink = ui.GetHyperlink()
if hyperlink:
if app.IsPressed(app.DIK_LALT):
link = chat.GetLinkFromHyperlink(hyperlink)
ime.PasteString(link)
else:
self.interface.MakeHyperlinkTooltip(hyperlink)
return None
else:
player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK)
return 1
def _GameWindow__PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID):
if chr.HasInstance(self.PickingCharacterIndex):
if player.GetMainCharacterIndex() == dstChrID:
return None
elif player.IsEquipmentSlot(attachedItemSlotPos):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open('You cannot exchange equipped Items.', 0, 'OK')
elif chr.IsNPC(dstChrID):
net.SendGiveItemPacket(dstChrID, attachedItemSlotPos, attachedItemCount)
else:
item.SelectItem(player.GetItemIndex(attachedItemSlotPos))
if constInfo.IsItemUnsafeToTrade(attachedItemSlotPos) or item.IsAntiFlag(item.ANTIFLAG_GIVE):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot trade this Item.')
else:
net.SendExchangeStartPacket(dstChrID)
net.SendExchangeItemAddPacket(attachedItemSlotPos, 0)
else:
self._GameWindow__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount)
def _GameWindow__PutMoney(self, attachedType, attachedMoney, dstChrID):
if 1 == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID:
net.SendExchangeStartPacket(dstChrID)
net.SendExchangeElkAddPacket(attachedMoney)
else:
self._GameWindow__DropMoney(attachedType, attachedMoney)
def _GameWindow__DropMoney(self, attachedType, attachedMoney):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot drop an equipped Item if you open a private shop.')
return None
if attachedMoney >= 1000:
self.stream.popupWindow.Close()
self.stream.popupWindow.Open('You can drop a maximum of 1000 Gold.', 0, 'OK')
return None
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText('Do you want to drop %d Gold?' % attachedMoney)
itemDropQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropCount = attachedMoney
itemDropQuestionDialog.dropNumber = player.ITEM_MONEY
self.itemDropQuestionDialog = itemDropQuestionDialog
def _GameWindow__DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot drop an equipped Item if you open a private shop.')
return None
if player.IsEquipmentSlot(attachedItemSlotPos):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open('You cannot drop an equipped Item.', 0, 'OK')
elif not constInfo.IsItemUnsafeToTrade(attachedItemSlotPos):
dropItemIndex = player.GetItemIndex(attachedItemSlotPos)
item.SelectItem(dropItemIndex)
dropItemName = item.GetItemName()
questionText = locale.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(questionText)
itemDropQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
self.itemDropQuestionDialog = itemDropQuestionDialog
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1)
def RequestDropItem(self, answer):
if not (self.itemDropQuestionDialog):
return None
if answer:
dropType = self.itemDropQuestionDialog.dropType
dropCount = self.itemDropQuestionDialog.dropCount
dropNumber = self.itemDropQuestionDialog.dropNumber
if player.SLOT_TYPE_INVENTORY == dropType:
if dropNumber == player.ITEM_MONEY:
net.SendGoldDropPacketNew(dropCount)
snd.PlaySound('sound/ui/money.wav')
else:
self._GameWindow__SendDropItemPacket(dropNumber, dropCount)
self.itemDropQuestionDialog.Close()
self.itemDropQuestionDialog = None
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)
def _GameWindow__SendDropItemPacket(self, itemVNum, itemCount):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot drop an equipped Item if you open a private shop.')
return None
net.SendItemDropPacketNew(itemVNum, itemCount)
def OnMouseRightButtonDown(self):
self.CheckFocus()
if 1 == mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()
else:
player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS)
return 1
def OnMouseRightButtonUp(self):
if 1 == mouseModule.mouseController.isAttached():
return 1
player.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK)
return 1
def OnMouseMiddleButtonDown(self):
player.SetMouseMiddleButtonState(player.MBS_PRESS)
def OnMouseMiddleButtonUp(self):
player.SetMouseMiddleButtonState(player.MBS_CLICK)
def OnUpdate(self):
app.UpdateGame()
if self.mapNameShower.IsShow():
self.mapNameShower.Update()
if self.isShowDebugInfo:
self.UpdateDebugInfo()
if self.enableXMasBoom:
self._GameWindow__XMasBoom_Update()
self.interface.BUILD_OnUpdate()
def UpdateDebugInfo(self):
(x, y, z) = player.GetMainCharacterPosition()
nUpdateTime = app.GetUpdateTime()
nUpdateFPS = app.GetUpdateFPS()
nRenderFPS = app.GetRenderFPS()
nFaceCount = app.GetFaceCount()
fFaceSpeed = app.GetFaceSpeed()
nST = background.GetRenderShadowTime()
(fAveRT, nCurRT) = app.GetRenderTime()
(iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo()
(iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum()
if iPatch == 0:
iPatch = 1
self.PrintCoord.SetText('Coordinate: %.2f %.2f %.2f ATM: %d' % (x, y, z, app.GetAvailableTextureMemory() / 1048576))
self.FrameRate.SetText('UFPS: %3d UT: %3d FS %.2f' % (nUpdateFPS, nUpdateTime, fFaceSpeed))
if fAveRT > 1.0:
self.Pitch.SetText('RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) ' % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount / fAveRT))
self.Splat.SetText('PATCH: %d SPLAT: %d BAD(%.2f)' % (iPatch, iSplat, fSplatRatio))
self.ViewDistance.SetText('Num : %d, FS : %f, FE : %f, FC : %f' % (iNum, fFogStart, fFogEnd, fFarCilp))
def OnRender(self):
app.RenderGame()
if self.console.Console.collision:
background.RenderCollision()
chr.RenderCollision()
(x, y) = app.GetCursorPosition()
textTail.UpdateAllTextTail()
if 1 == wndMgr.IsPickedWindow(self.hWnd):
self.PickingCharacterIndex = chr.Pick()
if -1 != self.PickingCharacterIndex:
textTail.ShowCharacterTextTail(self.PickingCharacterIndex)
if 0 != self.targetBoard.GetTargetVID():
textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID())
if not self._GameWindow__IsShowName():
self.PickingItemIndex = item.Pick()
if -1 != self.PickingItemIndex:
textTail.ShowItemTextTail(self.PickingItemIndex)
if self._GameWindow__IsShowName():
textTail.ShowAllTextTail()
self.PickingItemIndex = textTail.Pick(x, y)
textTail.UpdateShowingTextTail()
textTail.ArrangeTextTail()
if -1 != self.PickingItemIndex:
textTail.SelectItemName(self.PickingItemIndex)
grp.PopState()
grp.SetInterfaceRenderState()
textTail.Render()
textTail.HideAllTextTail()
def OnPressEscapeKey(self):
if app.TARGET == app.GetCursor():
app.SetCursor(app.NORMAL)
elif 1 == mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()
else:
self.interface.OpenSystemDialog()
return 1
def OnIMEReturn(self):
if app.IsPressed(app.DIK_LSHIFT):
self.interface.OpenWhisperDialogWithoutTarget()
else:
self.interface.ToggleChat()
return 1
def OnPressExitKey(self):
self.interface.ToggleSystemDialog()
return 1
def BINARY_LoverInfo(self, name, lovePoint):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnAddLover(name, lovePoint)
if self.affectShower:
self.affectShower.SetLoverInfo(name, lovePoint)
def BINARY_UpdateLovePoint(self, lovePoint):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnUpdateLovePoint(lovePoint)
if self.affectShower:
self.affectShower.OnUpdateLovePoint(lovePoint)
def BINARY_OnQuestConfirm(self, msg, timeout, pid):
confirmDialog = uiCommon.QuestionDialogWithTimeLimit()
confirmDialog.Open(msg, timeout)
confirmDialog.SetAcceptEvent(lambda answer = TRUE, pid = pid: if not net.SendQuestConfirmPacket(answer, pid):
passself.confirmDialog.Hide())
confirmDialog.SetCancelEvent(lambda answer = FALSE, pid = pid: if not net.SendQuestConfirmPacket(answer, pid):
passself.confirmDialog.Hide())
self.confirmDialog = confirmDialog
def BINARY_Cube_Open(self):
self.interface.OpenCubeWindow()
def BINARY_Cube_Close(self):
self.interface.CloseCubeWindow()
def BINARY_Cube_Succeed(self, itemVnum, count):
log('CUBE_SUCCESS')
self.interface.SucceedCubeWork(itemVnum, count)
def BINARY_Cube_Failed(self):
log('CUBE_FAIL')
def BINARY_SetBigMessage(self, message):
self.interface.bigBoard.SetTip(message)
def BINARY_SetTipMessage(self, message):
self.interface.tipBoard.SetTip(message)
def BINARY_AppendNotifyMessage(self, type):
if type not in locale.NOTIFY_MESSAGE:
return None
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.NOTIFY_MESSAGE[type])
def BINARY_Guild_EnterGuildArea(self, areaID):
self.interface.BULID_EnterGuildArea(areaID)
def BINARY_Guild_ExitGuildArea(self, areaID):
self.interface.BULID_ExitGuildArea(areaID)
def BINARY_GuildWar_OnSendDeclare(self, guildID):
pass
def BINARY_GuildWar_OnRecvDeclare(self, guildID, warType):
mainCharacterName = player.GetMainCharacterName()
masterName = guild.GetGuildMasterName()
if mainCharacterName == masterName:
self._GameWindow__GuildWar_OpenAskDialog(guildID, warType)
def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point):
self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point)
def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp):
self.interface.OnStartGuildWar(guildSelf, guildOpp)
def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp):
self.interface.OnEndGuildWar(guildSelf, guildOpp)
def BINARY_BettingGuildWar_SetObserverMode(self, isEnable):
self.interface.BINARY_SetObserverMode(isEnable)
def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount):
self.interface.wndMiniMap.UpdateObserverCount(observerCount)
def _GameWindow__GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount):
guildID1 = int(guildID1)
guildID2 = int(guildID2)
memberCount1 = int(memberCount1)
memberCount2 = int(memberCount2)
observerCount = int(observerCount)
self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2)
self.interface.wndMiniMap.UpdateObserverCount(observerCount)
def _GameWindow__GuildWar_OpenAskDialog(self, guildID, warType):
guildName = guild.GetGuildName(guildID)
if 'Noname' == guildName:
return None
import uiGuild
questionDialog = uiGuild.AcceptGuildWarDialog()
questionDialog.SAFE_SetAcceptEvent(self._GameWindow__GuildWar_OnAccept)
questionDialog.SAFE_SetCancelEvent(self._GameWindow__GuildWar_OnDecline)
questionDialog.Open(guildName, warType)
self.guildWarQuestionDialog = questionDialog
def _GameWindow__GuildWar_CloseAskDialog(self):
self.guildWarQuestionDialog.Close()
self.guildWarQuestionDialog = None
def _GameWindow__GuildWar_OnAccept(self):
guildName = self.guildWarQuestionDialog.GetGuildName()
net.SendChatPacket('/war ' + guildName)
self._GameWindow__GuildWar_CloseAskDialog()
return 1
def _GameWindow__GuildWar_OnDecline(self):
guildName = self.guildWarQuestionDialog.GetGuildName()
net.SendChatPacket('/nowar ' + guildName)
self._GameWindow__GuildWar_CloseAskDialog()
return 1
def _GameWindow__ServerCommand_Build(self):
serverCommandList = {
'ConsoleEnable': self._GameWindow__Console_Enable,
'DayMode': self._GameWindow__DayMode_Update,
'PRESERVE_DayMode': self._GameWindow__PRESERVE_DayMode_Update,
'CloseRestartWindow': self._GameWindow__RestartDialog_Close,
'OpenPrivateShop': self._GameWindow__PrivateShop_Open,
'PartyHealReady': self.PartyHealReady,
'ShowMeSafeboxPassword': self.AskSafeboxPassword,
'CloseSafebox': self.CommandCloseSafebox,
'CloseMall': self.CommandCloseMall,
'ShowMeMallPassword': self.AskMallPassword,
'item_mall': self._GameWindow__ItemMall_Open,
'RefineSuceeded': self.RefineSuceededMessage,
'RefineFailed': self.RefineFailedMessage,
'xmas_snow': self._GameWindow__XMasSnow_Enable,
'xmas_boom': self._GameWindow__XMasBoom_Enable,
'xmas_song': self._GameWindow__XMasSong_Enable,
'xmas_tree': self._GameWindow__XMasTree_Enable,
'newyear_boom': self._GameWindow__XMasBoom_Enable,
'PartyRequest': self._GameWindow__PartyRequestQuestion,
'PartyRequestDenied': self._GameWindow__PartyRequestDenied,
'horse_state': self._GameWindow__Horse_UpdateState,
'hide_horse_state': self._GameWindow__Horse_HideState,
'WarUC': self._GameWindow__GuildWar_UpdateMemberCount,
'test_server': self._GameWindow__EnableTestServerFlag,
'mall': self._GameWindow__InGameShop_Show,
'lover_login': self._GameWindow__LoginLover,
'lover_logout': self._GameWindow__LogoutLover,
'lover_near': self._GameWindow__LoverNear,
'lover_far': self._GameWindow__LoverFar,
'lover_divorce': self._GameWindow__LoverDivorce,
'PlayMusic': self._GameWindow__PlayMusic,
'MyShopPriceList': self._GameWindow__PrivateShop_PriceList }
self.serverCommander = stringCommander.Analyzer()
for serverCommandItem in serverCommandList.items():
self.serverCommander.SAFE_RegisterCallBack(serverCommandItem[0], serverCommandItem[1])
def BINARY_ServerCommand_Run(self, line):
try:
log('BINARY_ServerCommand_Run ' + line)
return self.serverCommander.Run(line)
except RuntimeError:
msg = None
dbg.TraceError(msg)
return 0
def _GameWindow__ProcessPreservedServerCommand(self):
try:
command = net.GetPreservedServerCommand()
while command:
log(' __ProcessPreservedServerCommand ' + command)
self.serverCommander.Run(command)
command = net.GetPreservedServerCommand()
except RuntimeError:
msg = None
dbg.TraceError(msg)
return 0
def PartyHealReady(self):
self.interface.PartyHealReady()
def AskSafeboxPassword(self):
self.interface.AskSafeboxPassword()
def AskMallPassword(self):
self.interface.AskMallPassword()
def _GameWindow__ItemMall_Open(self):
self.interface.OpenItemMall()
def CommandCloseMall(self):
self.interface.CommandCloseMall()
def RefineSuceededMessage(self):
snd.PlaySound('sound/ui/make_soket.wav')
self.PopupMessage('The advancement of the Item was successful.')
def RefineFailedMessage(self):
snd.PlaySound('sound/ui/jaeryun_fail.wav')
self.PopupMessage('You failed.')
def CommandCloseSafebox(self):
self.interface.CommandCloseSafebox()
def _GameWindow__PrivateShop_PriceList(self, itemVNum, itemPrice):
uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice)
def _GameWindow__Horse_HideState(self):
self.affectShower.SetHorseState(0, 0, 0)
def _GameWindow__Horse_UpdateState(self, level, health, battery):
self.affectShower.SetHorseState(int(level), int(health), int(battery))
def _GameWindow__IsXMasMap(self):
mapDict = ('metin2_map_n_flame_01', 'metin2_map_n_desert_01', 'metin2_map_spiderdungeon', 'metin2_map_deviltower1', 'season1/metin2_map_spiderdungeon_02', 'metin2_map_spiderdungeon_03', 'metin2_map_monkeydungeon', 'metin2_map_monkeydungeon_02', 'metin2_map_devilsCatacomb', 'metin2_map_skipia_dungeon_boss', 'metin2_map_skipia_dungeon_01', 'metin2_map_skipia_dungeon_02', 'metin2_map_monkeydungeon_03')
if background.GetCurrentMapName() in mapDict:
return 0
return 1
def _GameWindow__XMasSnow_Enable(self, mode):
self._GameWindow__XMasSong_Enable(mode)
if '1' == mode:
if not self._GameWindow__IsXMasMap():
return None
log('XMAS_SNOW ON')
background.EnableSnow(1)
else:
log('XMAS_SNOW OFF')
background.EnableSnow(0)
def _GameWindow__XMasBoom_Enable(self, mode):
if '1' == mode:
if not self._GameWindow__IsXMasMap():
return None
log('XMAS_BOOM ON')
self._GameWindow__DayMode_Update('dark')
self.enableXMasBoom = 1
self.startTimeXMasBoom = app.GetTime()
else:
log('XMAS_BOOM OFF')
self._GameWindow__DayMode_Update('light')
self.enableXMasBoom = 0
def _GameWindow__XMasTree_Enable(self, grade):
log('XMAS_TREE ' + grade)
background.SetXMasTree(int(grade))
def _GameWindow__XMasSong_Enable(self, mode):
if '1' == mode:
log('XMAS_SONG ON')
XMAS_BGM = 'xmas.mp3'
if app.IsExistFile('BGM/' + XMAS_BGM) == 1:
if musicInfo.fieldMusic != '':
snd.FadeOutMusic('BGM/' + musicInfo.fieldMusic)
musicInfo.fieldMusic = XMAS_BGM
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
else:
log('XMAS_SONG OFF')
if musicInfo.fieldMusic != '':
snd.FadeOutMusic('BGM/' + musicInfo.fieldMusic)
musicInfo.fieldMusic = musicInfo.METIN2THEMA
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
def _GameWindow__RestartDialog_Close(self):
self.interface.CloseRestartDialog()
def _GameWindow__Console_Enable(self):
constInfo.CONSOLE_ENABLE = 1
self.consoleEnable = 1
app.EnableSpecialCameraMode()
ui.EnablePaste(1)
def _GameWindow__PrivateShop_Open(self):
self.interface.OpenPrivateShopInputNameDialog()
def BINARY_PrivateShop_Appear(self, vid, text):
self.interface.AppearPrivateShop(vid, text)
def BINARY_PrivateShop_Disappear(self, vid):
self.interface.DisappearPrivateShop(vid)
def _GameWindow__PRESERVE_DayMode_Update(self, mode):
if 'light' == mode:
background.SetEnvironmentData(0)
elif 'dark' == mode:
if not self._GameWindow__IsXMasMap():
return None
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
background.SetEnvironmentData(1)
def _GameWindow__DayMode_Update(self, mode):
if 'light' == mode:
self.curtain.SAFE_FadeOut(self._GameWindow__DayMode_OnCompleteChangeToLight)
elif 'dark' == mode:
if not self._GameWindow__IsXMasMap():
return None
self.curtain.SAFE_FadeOut(self._GameWindow__DayMode_OnCompleteChangeToDark)
def _GameWindow__DayMode_OnCompleteChangeToLight(self):
background.SetEnvironmentData(0)
self.curtain.FadeIn()
def _GameWindow__DayMode_OnCompleteChangeToDark(self):
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
background.SetEnvironmentData(1)
self.curtain.FadeIn()
def _GameWindow__XMasBoom_Update(self):
self.BOOM_DATA_LIST = ((2, 5), (5, 2), (7, 3), (10, 3), (20, 5))
if self.indexXMasBoom >= len(self.BOOM_DATA_LIST):
return None
boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0]
boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1]
if app.GetTime() - self.startTimeXMasBoom > boomTime:
self.indexXMasBoom += 1
for i in xrange(boomCount):
self._GameWindow__XMasBoom_Boom()
def _GameWindow__XMasBoom_Boom(self):
(x, y, z) = player.GetMainCharacterPosition()
randX = app.GetRandom(-150, 150)
randY = app.GetRandom(-150, 150)
snd.PlaySound3D(x + randX, -y + randY, z, 'sound/common/etc/salute.mp3')
def _GameWindow__PartyRequestQuestion(self, vid):
vid = int(vid)
partyRequestQuestionDialog = uiCommon.QuestionDialog()
partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + '%s invited you to the party.')
partyRequestQuestionDialog.SetAcceptText('Accept')
partyRequestQuestionDialog.SetCancelText('Decline')
partyRequestQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self._GameWindow__AnswerPartyRequest(arg))
partyRequestQuestionDialog.SetCancelEvent(lambda arg = FALSE: self._GameWindow__AnswerPartyRequest(arg))
partyRequestQuestionDialog.Open()
partyRequestQuestionDialog.vid = vid
self.partyRequestQuestionDialog = partyRequestQuestionDialog
def _GameWindow__AnswerPartyRequest(self, answer):
if not (self.partyRequestQuestionDialog):
return None
vid = self.partyRequestQuestionDialog.vid
if answer:
net.SendChatPacket('/party_request_accept ' + str(vid))
else:
net.SendChatPacket('/party_request_deny ' + str(vid))
self.partyRequestQuestionDialog.Close()
self.partyRequestQuestionDialog = None
def _GameWindow__PartyRequestDenied(self):
self.PopupMessage('You discarded the invitation into the group..')
def _GameWindow__EnableTestServerFlag(self):
app.EnableTestServerFlag()
def _GameWindow__InGameShop_Show(self, url):
if constInfo.IN_GAME_SHOP_ENABLE:
self.interface.OpenWebWindow(url)
def _GameWindow__LoginLover(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLoginLover()
def _GameWindow__LogoutLover(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLogoutLover()
if self.affectShower:
self.affectShower.HideLoverState()
def _GameWindow__LoverNear(self):
if self.affectShower:
self.affectShower.ShowLoverState()
def _GameWindow__LoverFar(self):
if self.affectShower:
self.affectShower.HideLoverState()
def _GameWindow__LoverDivorce(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.ClearLoverInfo()
if self.affectShower:
self.affectShower.ClearLoverState()
def _GameWindow__PlayMusic(self, flag, filename):
flag = int(flag)
if flag:
snd.FadeOutAllMusic()
musicInfo.SaveLastPlayFieldMusic()
snd.FadeInMusic('BGM/' + filename)
else:
snd.FadeOutAllMusic()
musicInfo.LoadLastPlayFieldMusic()
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
Quote:
Geht sehr wohl hier haste die ganze
PHP Code:# Source Generated by .MaisKolben™-Decompyler
# File: game.pyc
import os
import app
import dbg
import grp
import item
import background
import chr
import chrmgr
import player
import snd
import chat
import textTail
import snd
import net
import effect
import wndMgr
import fly
import systemSetting
import quest
import guild
import skill
import messenger
import locale
import constInfo
import exchange
import ime
import ui
import uiCommon
import uiPhaseCurtain
import uiMapNameShower
import uiAffectShower
import uiPlayerGauge
import uiCharacter
import uiTarget
import uiPrivateShopBuilder
import mouseModule
import consoleModule
import locale
import playerSettingModule
import interfaceModule
import musicInfo
import stringCommander
from _weakref import proxy
kScreenshotDirectory = 'screenshot'
cameraDistance = 1550.0
cameraPitch = 27.0
cameraRotation = 0.0
cameraHeight = 100.0
testAlignment = 0
class GameWindow(ui.ScriptWindow):
def __init__(self, stream):
ui.ScriptWindow.__init__(self, 'GAME')
self.SetWindowName('game')
net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self)
player.SetGameWindow(self)
self.quickSlotPageIndex = 0
self.lastPKModeSendedTime = 0
self.pressNumber = None
self.guildWarQuestionDialog = None
self.stream = stream
self.interface = interfaceModule.Interface()
self.interface.MakeInterface()
self.interface.ShowDefaultWindows()
self.curtain = uiPhaseCurtain.PhaseCurtain()
self.curtain.speed = 0.029999999999999999
self.curtain.Hide()
self.targetBoard = uiTarget.TargetBoard()
self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog))
self.targetBoard.Hide()
self.console = consoleModule.ConsoleWindow()
self.console.BindGameClass(self)
self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200)
self.console.Hide()
self.mapNameShower = uiMapNameShower.MapNameShower()
self.affectShower = uiAffectShower.AffectShower()
self.playerGauge = uiPlayerGauge.PlayerGauge(self)
self.playerGauge.Hide()
self._GameWindow__SetQuickSlotMode()
self._GameWindow__ServerCommand_Build()
self._GameWindow__ProcessPreservedServerCommand()
def __del__(self):
player.SetGameWindow(0)
net.ClearPhaseWindow(net.PHASE_WINDOW_GAME, self)
ui.ScriptWindow.__del__(self)
def Open(self):
app.SetFrameSkip(1)
self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
self.quickSlotPageIndex = 0
self.PickingCharacterIndex = -1
self.PickingItemIndex = -1
self.consoleEnable = 0
self.isShowDebugInfo = 0
self.ShowNameFlag = 0
self.enableXMasBoom = 0
self.startTimeXMasBoom = 0.0
self.indexXMasBoom = 0
app.SetCamera(cameraDistance, cameraPitch, cameraRotation, cameraHeight)
constInfo.SET_DEFAULT_CAMERA_MAX_DISTANCE()
constInfo.SET_DEFAULT_CHRNAME_COLOR()
constInfo.SET_DEFAULT_FOG_LEVEL()
constInfo.SET_DEFAULT_CONVERT_EMPIRE_LANGUAGE_ENABLE()
constInfo.SET_DEFAULT_USE_ITEM_WEAPON_TABLE_ATTACK_BONUS()
constInfo.SET_DEFAULT_USE_SKILL_EFFECT_ENABLE()
constInfo.SET_TWO_HANDED_WEAPON_ATT_SPEED_DECREASE_VALUE()
import event
event.SetLeftTimeString('Remaining Time: %d Sec.')
textTail.EnablePKTitle(constInfo.PVPMODE_ENABLE)
if constInfo.PVPMODE_TEST_ENABLE:
self.testPKMode = ui.TextLine()
self.testPKMode.SetFontName('Tahoma:14')
self.testPKMode.SetPosition(0, 15)
self.testPKMode.SetWindowHorizontalAlignCenter()
self.testPKMode.SetHorizontalAlignCenter()
self.testPKMode.SetFeather()
self.testPKMode.SetOutline()
self.testPKMode.Show()
self.testAlignment = ui.TextLine()
self.testAlignment.SetFontName('Tahoma:14')
self.testAlignment.SetPosition(0, 35)
self.testAlignment.SetWindowHorizontalAlignCenter()
self.testAlignment.SetHorizontalAlignCenter()
self.testAlignment.SetFeather()
self.testAlignment.SetOutline()
self.testAlignment.Show()
self._GameWindow__BuildKeyDict()
self._GameWindow__BuildDebugInfo()
uiPrivateShopBuilder.Clear()
exchange.InitTrading()
snd.SetMusicVolume(systemSetting.GetMusicVolume() * net.GetFieldMusicVolume())
snd.SetSoundVolume(systemSetting.GetSoundVolume())
netFieldMusicFileName = net.GetFieldMusicFileName()
if netFieldMusicFileName:
snd.FadeInMusic('BGM/' + netFieldMusicFileName)
elif musicInfo.fieldMusic != '':
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
self._GameWindow__SetQuickSlotMode()
self._GameWindow__SelectQuickPage(self.quickSlotPageIndex)
self.SetFocus()
self.Show()
app.ShowCursor()
net.SendEnterGamePacket()
try:
self.StartGame()
except:
import exception
exception.Abort('GameWindow.Open')
def Close(self):
global cameraDistance, cameraPitch, cameraRotation, cameraHeight
self.Hide()
(cameraDistance, cameraPitch, cameraRotation, cameraHeight) = app.GetCamera()
if musicInfo.fieldMusic != '':
snd.FadeOutMusic('BGM/' + musicInfo.fieldMusic)
self.onPressKeyDict = None
self.onClickKeyDict = None
chat.Close()
snd.StopAllSound()
grp.InitScreenEffect()
chr.Destroy()
textTail.Clear()
quest.Clear()
background.Destroy()
guild.Destroy()
messenger.Destroy()
skill.ClearSkillData()
wndMgr.Unlock()
mouseModule.mouseController.DeattachObject()
if self.guildWarQuestionDialog:
self.guildWarQuestionDialog.Close()
self.guildNameBoard = None
self.partyRequestQuestionDialog = None
self.partyInviteQuestionDialog = None
self.guildInviteQuestionDialog = None
self.guildWarQuestionDialog = None
self.messengerAddFriendQuestion = None
self.itemDropQuestionDialog = None
self.confirmDialog = None
self.PrintCoord = None
self.FrameRate = None
self.Pitch = None
self.Splat = None
self.TextureNum = None
self.ObjectNum = None
self.ViewDistance = None
self.ClearDictionary()
self.playerGauge = None
self.mapNameShower = None
self.affectShower = None
if self.console:
self.console.BindGameClass(0)
self.console.Close()
self.console = None
if self.targetBoard:
self.targetBoard.Destroy()
self.targetBoard = None
if self.interface:
self.interface.HideAllWindows()
self.interface.Close()
self.interface = None
player.ClearSkillDict()
player.ResetCameraRotation()
self.KillFocus()
app.HideCursor()
log('GameWindow::Close()')
def _GameWindow__BuildKeyDict(self):
onPressKeyDict = { }
def onPressKeyDict[app.DIK_1]():
return self._GameWindow__PressNumKey(1)
def onPressKeyDict[app.DIK_2]():
return self._GameWindow__PressNumKey(2)
def onPressKeyDict[app.DIK_3]():
return self._GameWindow__PressNumKey(3)
def onPressKeyDict[app.DIK_4]():
return self._GameWindow__PressNumKey(4)
def onPressKeyDict[app.DIK_5]():
return self._GameWindow__PressNumKey(5)
def onPressKeyDict[app.DIK_6]():
return self._GameWindow__PressNumKey(6)
def onPressKeyDict[app.DIK_7]():
return self._GameWindow__PressNumKey(7)
def onPressKeyDict[app.DIK_8]():
return self._GameWindow__PressNumKey(8)
def onPressKeyDict[app.DIK_9]():
return self._GameWindow__PressNumKey(9)
def onPressKeyDict[app.DIK_F1]():
return self._GameWindow__PressQuickSlot(4)
def onPressKeyDict[app.DIK_F2]():
return self._GameWindow__PressQuickSlot(5)
def onPressKeyDict[app.DIK_F3]():
return self._GameWindow__PressQuickSlot(6)
def onPressKeyDict[app.DIK_F4]():
return self._GameWindow__PressQuickSlot(7)
def onPressKeyDict[app.DIK_F12]():
return self.interface.OpenHelpWindow()
def onPressKeyDict[app.DIK_LALT]():
return self.ShowName()
def onPressKeyDict[app.DIK_LCONTROL]():
return self.ShowMouseImage()
def onPressKeyDict[app.DIK_SYSRQ]():
return self.SaveScreen()
def onPressKeyDict[app.DIK_SPACE]():
return self.StartAttack()
def onPressKeyDict[app.DIK_UP]():
return self.MoveUp()
def onPressKeyDict[app.DIK_DOWN]():
return self.MoveDown()
def onPressKeyDict[app.DIK_LEFT]():
return self.MoveLeft()
def onPressKeyDict[app.DIK_RIGHT]():
return self.MoveRight()
def onPressKeyDict[app.DIK_W]():
return self.MoveUp()
def onPressKeyDict[app.DIK_S]():
return self.MoveDown()
def onPressKeyDict[app.DIK_A]():
return self.MoveLeft()
def onPressKeyDict[app.DIK_D]():
return self.MoveRight()
def onPressKeyDict[app.DIK_E]():
return app.RotateCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_R]():
return app.ZoomCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_T]():
return app.PitchCamera(app.CAMERA_TO_NEGATIVE)
onPressKeyDict[app.DIK_G] = self._GameWindow__PressGKey
onPressKeyDict[app.DIK_Q] = self._GameWindow__PressQKey
def onPressKeyDict[app.DIK_NUMPAD9]():
return app.MovieResetCamera()
def onPressKeyDict[app.DIK_NUMPAD4]():
return app.MovieRotateCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_NUMPAD6]():
return app.MovieRotateCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_PGUP]():
return app.MovieZoomCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_PGDN]():
return app.MovieZoomCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_NUMPAD8]():
return app.MoviePitchCamera(app.CAMERA_TO_NEGATIVE)
def onPressKeyDict[app.DIK_NUMPAD2]():
return app.MoviePitchCamera(app.CAMERA_TO_POSITIVE)
def onPressKeyDict[app.DIK_GRAVE]():
return self.PickUpItem()
def onPressKeyDict[app.DIK_Z]():
return self.PickUpItem()
def onPressKeyDict[app.DIK_C](state = 'STATUS'):
return self.interface.ToggleCharacterWindow(state)
def onPressKeyDict[app.DIK_V](state = 'SKILL'):
return self.interface.ToggleCharacterWindow(state)
def onPressKeyDict[app.DIK_N](state = 'QUEST'):
return self.interface.ToggleCharacterWindow(state)
def onPressKeyDict[app.DIK_I]():
return self.interface.ToggleInventoryWindow()
def onPressKeyDict[app.DIK_M]():
return self.interface.PressMKey()
def onPressKeyDict[app.DIK_ADD]():
return self.interface.MiniMapScaleUp()
def onPressKeyDict[app.DIK_SUBTRACT]():
return self.interface.MiniMapScaleDown()
def onPressKeyDict[app.DIK_L]():
return self.interface.ToggleChatLogWindow()
def onPressKeyDict[app.DIK_COMMA]():
return self.ShowConsole()
def onPressKeyDict[app.DIK_LSHIFT]():
return self._GameWindow__SetQuickPageMode()
def onPressKeyDict[app.DIK_J]():
return self._GameWindow__PressJKey()
def onPressKeyDict[app.DIK_H]():
return self._GameWindow__PressHKey()
def onPressKeyDict[app.DIK_B]():
return self._GameWindow__PressBKey()
def onPressKeyDict[app.DIK_F]():
return self._GameWindow__PressFKey()
self.onPressKeyDict = onPressKeyDict
onClickKeyDict = { }
def onClickKeyDict[app.DIK_UP]():
return self.StopUp()
def onClickKeyDict[app.DIK_DOWN]():
return self.StopDown()
def onClickKeyDict[app.DIK_LEFT]():
return self.StopLeft()
def onClickKeyDict[app.DIK_RIGHT]():
return self.StopRight()
def onClickKeyDict[app.DIK_SPACE]():
return self.EndAttack()
def onClickKeyDict[app.DIK_W]():
return self.StopUp()
def onClickKeyDict[app.DIK_S]():
return self.StopDown()
def onClickKeyDict[app.DIK_A]():
return self.StopLeft()
def onClickKeyDict[app.DIK_D]():
return self.StopRight()
def onClickKeyDict[app.DIK_Q]():
return app.RotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_E]():
return app.RotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_R]():
return app.ZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_F]():
return app.ZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_T]():
return app.PitchCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_G]():
return self._GameWindow__ReleaseGKey()
def onClickKeyDict[app.DIK_NUMPAD4]():
return app.MovieRotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_NUMPAD6]():
return app.MovieRotateCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_PGUP]():
return app.MovieZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_PGDN]():
return app.MovieZoomCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_NUMPAD8]():
return app.MoviePitchCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_NUMPAD2]():
return app.MoviePitchCamera(app.CAMERA_STOP)
def onClickKeyDict[app.DIK_LALT]():
return self.HideName()
def onClickKeyDict[app.DIK_LCONTROL]():
return self.HideMouseImage()
def onClickKeyDict[app.DIK_LSHIFT]():
return self._GameWindow__SetQuickSlotMode()
self.onClickKeyDict = onClickKeyDict
def _GameWindow__PressNumKey(self, num):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if num >= 1 and num <= 9:
if chrmgr.IsPossibleEmoticon(-1):
chrmgr.SetEmoticon(-1, int(num) - 1)
net.SendEmoticon(int(num) - 1)
elif num >= 1 and num <= 4:
self.pressNumber(num - 1)
def _GameWindow__ClickBKey(self):
if constInfo.PVPMODE_ACCELKEY_ENABLE and not app.IsPressed(app.DIK_LCONTROL) and not app.IsPressed(app.DIK_RCONTROL):
self.ChangePKMode()
def _GameWindow__PressJKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
if player.IsMountingHorse():
net.SendChatPacket('/unmount')
elif not uiPrivateShopBuilder.IsBuildingPrivateShop():
for i in xrange(player.INVENTORY_PAGE_SIZE):
if player.GetItemIndex(i) in (71114, 71116, 71118, 71120, 71164):
net.SendItemUsePacket(i)
break
def _GameWindow__PressHKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/user_horse_ride')
def _GameWindow__PressBKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/user_horse_back')
else:
state = 'EMOTICON'
self.interface.ToggleCharacterWindow(state)
def _GameWindow__PressFKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/user_horse_feed')
else:
app.ZoomCamera(app.CAMERA_TO_POSITIVE)
def _GameWindow__PressGKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
net.SendChatPacket('/ride')
elif self.ShowNameFlag:
self.interface.ToggleGuildWindow()
else:
app.PitchCamera(app.CAMERA_TO_POSITIVE)
def _GameWindow__ReleaseGKey(self):
app.PitchCamera(app.CAMERA_STOP)
def _GameWindow__PressQKey(self):
if app.IsPressed(app.DIK_LCONTROL) or app.IsPressed(app.DIK_RCONTROL):
self.interface.ToggleQuestButtons()
else:
app.RotateCamera(app.CAMERA_TO_NEGATIVE)
def _GameWindow__SetQuickSlotMode(self):
self.pressNumber = ui.__mem_func__(self._GameWindow__PressQuickSlot)
def _GameWindow__SetQuickPageMode(self):
self.pressNumber = ui.__mem_func__(self._GameWindow__SelectQuickPage)
def _GameWindow__PressQuickSlot(self, localSlotIndex):
player.RequestUseLocalQuickSlot(localSlotIndex)
def _GameWindow__SelectQuickPage(self, pageIndex):
self.quickSlotPageIndex = pageIndex
player.SetQuickPage(pageIndex)
def ToggleDebugInfo(self):
self.isShowDebugInfo = not (self.isShowDebugInfo)
if self.isShowDebugInfo:
self.PrintCoord.Show()
self.FrameRate.Show()
self.Pitch.Show()
self.Splat.Show()
self.TextureNum.Show()
self.ObjectNum.Show()
self.ViewDistance.Show()
else:
self.PrintCoord.Hide()
self.FrameRate.Hide()
self.Pitch.Hide()
self.Splat.Hide()
self.TextureNum.Hide()
self.ObjectNum.Hide()
self.ViewDistance.Hide()
def _GameWindow__BuildDebugInfo(self):
self.PrintCoord = ui.TextLine()
self.PrintCoord.SetFontName('Tahoma:14')
self.PrintCoord.SetPosition(wndMgr.GetScreenWidth() - 270, 0)
self.FrameRate = ui.TextLine()
self.FrameRate.SetFontName('Tahoma:14')
self.FrameRate.SetPosition(wndMgr.GetScreenWidth() - 270, 20)
self.Pitch = ui.TextLine()
self.Pitch.SetFontName('Tahoma:14')
self.Pitch.SetPosition(wndMgr.GetScreenWidth() - 270, 40)
self.Splat = ui.TextLine()
self.Splat.SetFontName('Tahoma:14')
self.Splat.SetPosition(wndMgr.GetScreenWidth() - 270, 60)
self.TextureNum = ui.TextLine()
self.TextureNum.SetFontName('Tahoma:14')
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 80)
self.ObjectNum = ui.TextLine()
self.ObjectNum.SetFontName('Tahoma:14')
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)
self.ViewDistance = ui.TextLine()
self.ViewDistance.SetFontName('Tahoma:14')
self.ViewDistance.SetPosition(0, 0)
def _GameWindow__NotifyError(self, msg):
chat.AppendChat(chat.CHAT_TYPE_INFO, msg)
def ChangePKMode(self):
if not app.IsPressed(app.DIK_LCONTROL):
return None
if player.GetStatus(player.LEVEL) < constInfo.PVPMODE_PROTECTED_LEVEL:
self._GameWindow__NotifyError('You need to have at least Level %d to be able to use the PvP Mode.' % constInfo.PVPMODE_PROTECTED_LEVEL)
return None
curTime = app.GetTime()
if curTime - self.lastPKModeSendedTime < constInfo.PVPMODE_ACCELKEY_DELAY:
return None
self.lastPKModeSendedTime = curTime
curPKMode = player.GetPKMode()
nextPKMode = curPKMode + 1
if nextPKMode == player.PK_MODE_PROTECT:
if 0 == player.GetGuildID():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot activate Guild Mode when you do not belong to a Guild.')
nextPKMode = 0
else:
nextPKMode = player.PK_MODE_GUILD
elif nextPKMode == player.PK_MODE_MAX_NUM:
nextPKMode = 0
net.SendChatPacket('/PKMode ' + str(nextPKMode))
log('/PKMode ' + str(nextPKMode))
def OnChangePKMode(self):
self.interface.OnChangePKMode()
try:
self._GameWindow__NotifyError(locale.OPTION_PVPMODE_MESSAGE_DICT[player.GetPKMode()])
except KeyError:
log('UNKNOWN PVPMode[%d]' % player.GetPKMode())
if constInfo.PVPMODE_TEST_ENABLE:
curPKMode = player.GetPKMode()
(alignment, grade) = chr.testGetPKData()
self.pkModeNameDict = {
0: 'PEACE',
1: 'REVENGE',
2: 'FREE',
3: 'PROTECT' }
self.testPKMode.SetText('Current PK Mode : ' + self.pkModeNameDict.get(curPKMode, 'UNKNOWN'))
self.testAlignment.SetText('Current Alignment : ' + str(alignment) + ' (' + locale.TITLE_NAME_LIST[grade] + ')')
def StartGame(self):
self.RefreshInventory()
self.RefreshEquipment()
self.RefreshCharacter()
self.RefreshSkill()
def CheckGameButton(self):
if self.interface:
self.interface.CheckGameButton()
def RefreshAlignment(self):
self.interface.RefreshAlignment()
def RefreshStatus(self):
self.CheckGameButton()
if self.interface:
self.interface.RefreshStatus()
if self.playerGauge:
self.playerGauge.RefreshGauge()
def RefreshStamina(self):
self.interface.RefreshStamina()
def RefreshSkill(self):
self.CheckGameButton()
if self.interface:
self.interface.RefreshSkill()
def RefreshQuest(self):
self.interface.RefreshQuest()
def RefreshMessenger(self):
self.interface.RefreshMessenger()
def RefreshGuildInfoPage(self):
self.interface.RefreshGuildInfoPage()
def RefreshGuildBoardPage(self):
self.interface.RefreshGuildBoardPage()
def RefreshGuildMemberPage(self):
self.interface.RefreshGuildMemberPage()
def RefreshGuildMemberPageGradeComboBox(self):
self.interface.RefreshGuildMemberPageGradeComboBox()
def RefreshGuildSkillPage(self):
self.interface.RefreshGuildSkillPage()
def RefreshGuildGradePage(self):
self.interface.RefreshGuildGradePage()
def RefreshMobile(self):
if self.interface:
self.interface.RefreshMobile()
def OnMobileAuthority(self):
self.interface.OnMobileAuthority()
def OnBlockMode(self, mode):
self.interface.OnBlockMode(mode)
def OpenQuestWindow(self, skin, idx):
self.interface.OpenQuestWindow(skin, idx)
def AskGuildName(self):
guildNameBoard = uiCommon.InputDialog()
guildNameBoard.SetTitle('Guild name')
guildNameBoard.SetAcceptEvent(ui.__mem_func__(self.ConfirmGuildName))
guildNameBoard.SetCancelEvent(ui.__mem_func__(self.CancelGuildName))
guildNameBoard.Open()
self.guildNameBoard = guildNameBoard
def ConfirmGuildName(self):
guildName = self.guildNameBoard.GetText()
if not guildName:
return None
if net.IsInsultIn(guildName):
self.PopupMessage('Guild name is not valid.')
return None
net.SendAnswerMakeGuildPacket(guildName)
self.guildNameBoard.Close()
self.guildNameBoard = None
return 1
def CancelGuildName(self):
self.guildNameBoard.Close()
self.guildNameBoard = None
return 1
def PopupMessage(self, msg):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open(msg, 0, 'OK')
def OpenRefineDialog(self, targetItemPos, nextGradeItemVnum, cost, prob, type = 0):
self.interface.OpenRefineDialog(targetItemPos, nextGradeItemVnum, cost, prob, type)
def AppendMaterialToRefineDialog(self, vnum, count):
self.interface.AppendMaterialToRefineDialog(vnum, count)
def RunUseSkillEvent(self, slotIndex, coolTime):
self.interface.OnUseSkill(slotIndex, coolTime)
def ClearAffects(self):
self.affectShower.ClearAffects()
def SetAffect(self, affect):
self.affectShower.SetAffect(affect)
def ResetAffect(self, affect):
self.affectShower.ResetAffect(affect)
def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration)
def BINARY_NEW_RemoveAffect(self, type, pointIdx):
self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx)
def ActivateSkillSlot(self, slotIndex):
if self.interface:
self.interface.OnActivateSkill(slotIndex)
def DeactivateSkillSlot(self, slotIndex):
if self.interface:
self.interface.OnDeactivateSkill(slotIndex)
def RefreshEquipment(self):
if self.interface:
self.interface.RefreshInventory()
def RefreshInventory(self):
if self.interface:
self.interface.RefreshInventory()
def RefreshCharacter(self):
if self.interface:
self.interface.RefreshCharacter()
def OnGameOver(self):
self.CloseTargetBoard()
self.OpenRestartDialog()
def OpenRestartDialog(self):
self.interface.OpenRestartDialog()
def ChangeCurrentSkill(self, skillSlotNumber):
self.interface.OnChangeCurrentSkill(skillSlotNumber)
def SetPCTargetBoard(self, vid, name):
self.targetBoard.Open(vid, name)
if app.IsPressed(app.DIK_LCONTROL):
if not player.IsSameEmpire(vid):
return None
if player.IsMainCharacterIndex(vid):
return None
elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(vid):
return None
self.interface.OpenWhisperDialog(name)
def RefreshTargetBoardByVID(self, vid):
self.targetBoard.RefreshByVID(vid)
def RefreshTargetBoardByName(self, name):
self.targetBoard.RefreshByName(name)
def _GameWindow__RefreshTargetBoard(self):
self.targetBoard.Refresh()
def SetHPTargetBoard(self, vid, hpPercentage):
if vid != self.targetBoard.GetTargetVID():
self.targetBoard.ResetTargetBoard()
self.targetBoard.SetEnemyVID(vid)
self.targetBoard.SetHP(hpPercentage)
self.targetBoard.Show()
def CloseTargetBoardIfDifferent(self, vid):
if vid != self.targetBoard.GetTargetVID():
self.targetBoard.Close()
def CloseTargetBoard(self):
self.targetBoard.Close()
def OpenEquipmentDialog(self, vid):
self.interface.OpenEquipmentDialog(vid)
def SetEquipmentDialogItem(self, vid, slotIndex, vnum, count):
self.interface.SetEquipmentDialogItem(vid, slotIndex, vnum, count)
def SetEquipmentDialogSocket(self, vid, slotIndex, socketIndex, value):
self.interface.SetEquipmentDialogSocket(vid, slotIndex, socketIndex, value)
def SetEquipmentDialogAttr(self, vid, slotIndex, attrIndex, type, value):
self.interface.SetEquipmentDialogAttr(vid, slotIndex, attrIndex, type, value)
def ShowMapName(self, mapName, x, y):
if self.mapNameShower:
self.mapNameShower.ShowMapName(mapName, x, y)
if self.interface:
self.interface.SetMapName(mapName)
def BINARY_OpenAtlasWindow(self):
self.interface.BINARY_OpenAtlasWindow()
def OnRecvWhisper(self, mode, name, line):
if mode == chat.WHISPER_TYPE_GM:
self.interface.RegisterGameMasterName(name)
chat.AppendWhisper(mode, name, line)
self.interface.RecvWhisper(name)
def OnRecvWhisperSystemMessage(self, mode, name, line):
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line)
self.interface.RecvWhisper(name)
def OnRecvWhisperError(self, mode, name, line):
if locale.WHISPER_ERROR.has_key(mode):
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, locale.WHISPER_ERROR[mode](name))
else:
chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, 'Whisper Unknown Error(mode=%d, name=%s)' % (mode, name))
self.interface.RecvWhisper(name)
def RecvWhisper(self, name):
self.interface.RecvWhisper(name)
def OnPickMoney(self, money):
chat.AppendChat(chat.CHAT_TYPE_INFO, ' You received %d Gold.' % money)
def OnShopError(self, type):
try:
self.PopupMessage(locale.SHOP_ERROR_DICT[type])
except KeyError:
self.PopupMessage('Unknown Loading Error: %s' % type)
def OnSafeBoxError(self):
self.PopupMessage('You entered the wrong password.')
def OnFishingSuccess(self, isFish, fishName):
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, locale.FISHING_SUCCESS(isFish, fishName), 2000)
def OnFishingNotifyUnknown(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, ' I do not know what I caught.')
def OnFishingWrongPlace(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'I cannot go fishing here.')
def OnFishingNotify(self, isFish, fishName):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.FISHING_NOTIFY(isFish, fishName))
def OnFishingFailure(self):
chat.AppendChatWithDelay(chat.CHAT_TYPE_INFO, 'You lost the Bait.', 2000)
def OnCannotPickItem(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot collect this Item as you did not win it.')
def OnCannotMining(self):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot look mine while riding.')
def OnCannotUseSkill(self, vid, type):
if locale.USE_SKILL_ERROR_TAIL_DICT.has_key(type):
textTail.RegisterInfoTail(vid, locale.USE_SKILL_ERROR_TAIL_DICT[type])
if locale.USE_SKILL_ERROR_CHAT_DICT.has_key(type):
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.USE_SKILL_ERROR_CHAT_DICT[type])
def OnCannotShotError(self, vid, type):
textTail.RegisterInfoTail(vid, locale.SHOT_ERROR_TAIL_DICT.get(type, 'Unknown Long Distance Attack Error: %s' % type))
def StartPointReset(self):
self.interface.OpenPointResetDialog()
def StartShop(self, vid):
self.interface.OpenShopDialog(vid)
def EndShop(self):
self.interface.CloseShopDialog()
def RefreshShop(self):
self.interface.RefreshShopDialog()
def SetShopSellingPrice(self, Price):
pass
def StartExchange(self):
self.interface.StartExchange()
def EndExchange(self):
self.interface.EndExchange()
def RefreshExchange(self):
self.interface.RefreshExchange()
def RecvPartyInviteQuestion(self, leaderVID, leaderName):
partyInviteQuestionDialog = uiCommon.QuestionDialog()
partyInviteQuestionDialog.SetText('Do you want to join' + ' ' + leaderName + "'s party?")
partyInviteQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.AnswerPartyInvite(arg))
partyInviteQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.AnswerPartyInvite(arg))
partyInviteQuestionDialog.Open()
partyInviteQuestionDialog.partyLeaderVID = leaderVID
self.partyInviteQuestionDialog = partyInviteQuestionDialog
def AnswerPartyInvite(self, answer):
if not (self.partyInviteQuestionDialog):
return None
partyLeaderVID = self.partyInviteQuestionDialog.partyLeaderVID
distance = player.GetCharacterDistance(partyLeaderVID)
if distance < 0.0 or distance > 5000:
answer = 0
net.SendPartyInviteAnswerPacket(partyLeaderVID, answer)
self.partyInviteQuestionDialog.Close()
self.partyInviteQuestionDialog = None
def AddPartyMember(self, pid, name):
self.interface.AddPartyMember(pid, name)
def UpdatePartyMemberInfo(self, pid):
self.interface.UpdatePartyMemberInfo(pid)
def RemovePartyMember(self, pid):
self.interface.RemovePartyMember(pid)
self._GameWindow__RefreshTargetBoard()
def LinkPartyMember(self, pid, vid):
self.interface.LinkPartyMember(pid, vid)
def UnlinkPartyMember(self, pid):
self.interface.UnlinkPartyMember(pid)
def UnlinkAllPartyMember(self):
self.interface.UnlinkAllPartyMember()
def ExitParty(self):
self.interface.ExitParty()
self.RefreshTargetBoardByVID(self.targetBoard.GetTargetVID())
def ChangePartyParameter(self, distributionMode):
self.interface.ChangePartyParameter(distributionMode)
def OnMessengerAddFriendQuestion(self, name):
messengerAddFriendQuestion = uiCommon.QuestionDialog2()
messengerAddFriendQuestion.SetText1('%s added you as a friend.' % name)
messengerAddFriendQuestion.SetText2('Accept?')
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
messengerAddFriendQuestion.Open()
messengerAddFriendQuestion.name = name
self.messengerAddFriendQuestion = messengerAddFriendQuestion
def OnAcceptAddFriend(self):
name = self.messengerAddFriendQuestion.name
net.SendChatPacket('/messenger_auth y ' + name)
self.OnCloseAddFriendQuestionDialog()
return 1
def OnDenyAddFriend(self):
name = self.messengerAddFriendQuestion.name
net.SendChatPacket('/messenger_auth n ' + name)
self.OnCloseAddFriendQuestionDialog()
return 1
def OnCloseAddFriendQuestionDialog(self):
self.messengerAddFriendQuestion.Close()
self.messengerAddFriendQuestion = None
return 1
def OpenSafeboxWindow(self, size):
self.interface.OpenSafeboxWindow(size)
def RefreshSafebox(self):
self.interface.RefreshSafebox()
def RefreshSafeboxMoney(self):
self.interface.RefreshSafeboxMoney()
def OpenMallWindow(self, size):
self.interface.OpenMallWindow(size)
def RefreshMall(self):
self.interface.RefreshMall()
def RecvGuildInviteQuestion(self, guildID, guildName):
guildInviteQuestionDialog = uiCommon.QuestionDialog()
guildInviteQuestionDialog.SetText(guildName + 'Do you want to join the Guild?')
guildInviteQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.AnswerGuildInvite(arg))
guildInviteQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.AnswerGuildInvite(arg))
guildInviteQuestionDialog.Open()
guildInviteQuestionDialog.guildID = guildID
self.guildInviteQuestionDialog = guildInviteQuestionDialog
def AnswerGuildInvite(self, answer):
if not (self.guildInviteQuestionDialog):
return None
guildLeaderVID = self.guildInviteQuestionDialog.guildID
net.SendGuildInviteAnswerPacket(guildLeaderVID, answer)
self.guildInviteQuestionDialog.Close()
self.guildInviteQuestionDialog = None
def DeleteGuild(self):
self.interface.DeleteGuild()
def ShowClock(self, second):
self.interface.ShowClock(second)
def HideClock(self):
self.interface.HideClock()
def BINARY_ActEmotion(self, emotionIndex):
if self.interface.wndCharacter:
self.interface.wndCharacter.ActEmotion(emotionIndex)
def CheckFocus(self):
if 0 == self.IsFocus():
if 1 == self.interface.IsOpenChat():
self.interface.ToggleChat()
self.SetFocus()
def SaveScreen(self):
(succeeded, name) = grp.SaveScreenShotToPath(kScreenshotDirectory + '/')
if succeeded:
chat.AppendChat(chat.CHAT_TYPE_INFO, 'Your screenshot has been saved to %s.' % name)
else:
chat.AppendChat(chat.CHAT_TYPE_INFO, 'Saving of Screenshot failed.')
def ShowConsole(self):
if self.consoleEnable:
self.console.OpenWindow()
def ShowName(self):
self.ShowNameFlag = 1
self.playerGauge.EnableShowAlways()
player.SetQuickPage(self.quickSlotPageIndex + 1)
def _GameWindow__IsShowName(self):
if systemSetting.IsAlwaysShowName():
return 1
if self.ShowNameFlag:
return 1
return 0
def HideName(self):
self.ShowNameFlag = 0
self.playerGauge.DisableShowAlways()
player.SetQuickPage(self.quickSlotPageIndex)
def ShowMouseImage(self):
self.interface.ShowMouseImage()
def HideMouseImage(self):
self.interface.HideMouseImage()
def StartAttack(self):
player.SetAttackKeyState(1)
def EndAttack(self):
player.SetAttackKeyState(0)
def MoveUp(self):
player.SetSingleDIKKeyState(app.DIK_UP, 1)
def MoveDown(self):
player.SetSingleDIKKeyState(app.DIK_DOWN, 1)
def MoveLeft(self):
player.SetSingleDIKKeyState(app.DIK_LEFT, 1)
def MoveRight(self):
player.SetSingleDIKKeyState(app.DIK_RIGHT, 1)
def StopUp(self):
player.SetSingleDIKKeyState(app.DIK_UP, 0)
def StopDown(self):
player.SetSingleDIKKeyState(app.DIK_DOWN, 0)
def StopLeft(self):
player.SetSingleDIKKeyState(app.DIK_LEFT, 0)
def StopRight(self):
player.SetSingleDIKKeyState(app.DIK_RIGHT, 0)
def PickUpItem(self):
player.PickCloseItem()
def OnKeyDown(self, key):
if self.interface.wndWeb and self.interface.wndWeb.IsShow():
return None
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)
try:
self.onPressKeyDict[key]()
except KeyError:
pass
except:
raise
return 1
def OnKeyUp(self, key):
try:
self.onClickKeyDict[key]()
except KeyError:
pass
except:
raise
return 1
def OnMouseLeftButtonDown(self):
if self.interface.BUILD_OnMouseLeftButtonDown():
return None
if mouseModule.mouseController.isAttached():
self.CheckFocus()
else:
hyperlink = ui.GetHyperlink()
if hyperlink:
return None
else:
self.CheckFocus()
player.SetMouseState(player.MBT_LEFT, player.MBS_PRESS)
return 1
def OnMouseLeftButtonUp(self):
if self.interface.BUILD_OnMouseLeftButtonUp():
return None
if mouseModule.mouseController.isAttached():
attachedType = mouseModule.mouseController.GetAttachedType()
attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
attachedItemSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
attachedItemCount = mouseModule.mouseController.GetAttachedItemCount()
if player.SLOT_TYPE_QUICK_SLOT == attachedType:
player.RequestDeleteGlobalQuickSlot(attachedItemSlotPos)
elif player.SLOT_TYPE_INVENTORY == attachedType:
if player.ITEM_MONEY == attachedItemIndex:
self._GameWindow__PutMoney(attachedType, attachedItemCount, self.PickingCharacterIndex)
else:
self._GameWindow__PutItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, self.PickingCharacterIndex)
mouseModule.mouseController.DeattachObject()
else:
hyperlink = ui.GetHyperlink()
if hyperlink:
if app.IsPressed(app.DIK_LALT):
link = chat.GetLinkFromHyperlink(hyperlink)
ime.PasteString(link)
else:
self.interface.MakeHyperlinkTooltip(hyperlink)
return None
else:
player.SetMouseState(player.MBT_LEFT, player.MBS_CLICK)
return 1
def _GameWindow__PutItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount, dstChrID):
if chr.HasInstance(self.PickingCharacterIndex):
if player.GetMainCharacterIndex() == dstChrID:
return None
elif player.IsEquipmentSlot(attachedItemSlotPos):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open('You cannot exchange equipped Items.', 0, 'OK')
elif chr.IsNPC(dstChrID):
net.SendGiveItemPacket(dstChrID, attachedItemSlotPos, attachedItemCount)
else:
item.SelectItem(player.GetItemIndex(attachedItemSlotPos))
if constInfo.IsItemUnsafeToTrade(attachedItemSlotPos) or item.IsAntiFlag(item.ANTIFLAG_GIVE):
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot trade this Item.')
else:
net.SendExchangeStartPacket(dstChrID)
net.SendExchangeItemAddPacket(attachedItemSlotPos, 0)
else:
self._GameWindow__DropItem(attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount)
def _GameWindow__PutMoney(self, attachedType, attachedMoney, dstChrID):
if 1 == chr.HasInstance(dstChrID) and player.GetMainCharacterIndex() != dstChrID:
net.SendExchangeStartPacket(dstChrID)
net.SendExchangeElkAddPacket(attachedMoney)
else:
self._GameWindow__DropMoney(attachedType, attachedMoney)
def _GameWindow__DropMoney(self, attachedType, attachedMoney):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot drop an equipped Item if you open a private shop.')
return None
if attachedMoney >= 1000:
self.stream.popupWindow.Close()
self.stream.popupWindow.Open('You can drop a maximum of 1000 Gold.', 0, 'OK')
return None
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText('Do you want to drop %d Gold?' % attachedMoney)
itemDropQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropCount = attachedMoney
itemDropQuestionDialog.dropNumber = player.ITEM_MONEY
self.itemDropQuestionDialog = itemDropQuestionDialog
def _GameWindow__DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot drop an equipped Item if you open a private shop.')
return None
if player.IsEquipmentSlot(attachedItemSlotPos):
self.stream.popupWindow.Close()
self.stream.popupWindow.Open('You cannot drop an equipped Item.', 0, 'OK')
elif not constInfo.IsItemUnsafeToTrade(attachedItemSlotPos):
dropItemIndex = player.GetItemIndex(attachedItemSlotPos)
item.SelectItem(dropItemIndex)
dropItemName = item.GetItemName()
questionText = locale.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount)
itemDropQuestionDialog = uiCommon.QuestionDialog()
itemDropQuestionDialog.SetText(questionText)
itemDropQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.RequestDropItem(arg))
itemDropQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.RequestDropItem(arg))
itemDropQuestionDialog.Open()
itemDropQuestionDialog.dropType = attachedType
itemDropQuestionDialog.dropNumber = attachedItemSlotPos
itemDropQuestionDialog.dropCount = attachedItemCount
self.itemDropQuestionDialog = itemDropQuestionDialog
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1)
def RequestDropItem(self, answer):
if not (self.itemDropQuestionDialog):
return None
if answer:
dropType = self.itemDropQuestionDialog.dropType
dropCount = self.itemDropQuestionDialog.dropCount
dropNumber = self.itemDropQuestionDialog.dropNumber
if player.SLOT_TYPE_INVENTORY == dropType:
if dropNumber == player.ITEM_MONEY:
net.SendGoldDropPacketNew(dropCount)
snd.PlaySound('sound/ui/money.wav')
else:
self._GameWindow__SendDropItemPacket(dropNumber, dropCount)
self.itemDropQuestionDialog.Close()
self.itemDropQuestionDialog = None
constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)
def _GameWindow__SendDropItemPacket(self, itemVNum, itemCount):
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, 'You cannot drop an equipped Item if you open a private shop.')
return None
net.SendItemDropPacketNew(itemVNum, itemCount)
def OnMouseRightButtonDown(self):
self.CheckFocus()
if 1 == mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()
else:
player.SetMouseState(player.MBT_RIGHT, player.MBS_PRESS)
return 1
def OnMouseRightButtonUp(self):
if 1 == mouseModule.mouseController.isAttached():
return 1
player.SetMouseState(player.MBT_RIGHT, player.MBS_CLICK)
return 1
def OnMouseMiddleButtonDown(self):
player.SetMouseMiddleButtonState(player.MBS_PRESS)
def OnMouseMiddleButtonUp(self):
player.SetMouseMiddleButtonState(player.MBS_CLICK)
def OnUpdate(self):
app.UpdateGame()
if self.mapNameShower.IsShow():
self.mapNameShower.Update()
if self.isShowDebugInfo:
self.UpdateDebugInfo()
if self.enableXMasBoom:
self._GameWindow__XMasBoom_Update()
self.interface.BUILD_OnUpdate()
def UpdateDebugInfo(self):
(x, y, z) = player.GetMainCharacterPosition()
nUpdateTime = app.GetUpdateTime()
nUpdateFPS = app.GetUpdateFPS()
nRenderFPS = app.GetRenderFPS()
nFaceCount = app.GetFaceCount()
fFaceSpeed = app.GetFaceSpeed()
nST = background.GetRenderShadowTime()
(fAveRT, nCurRT) = app.GetRenderTime()
(iNum, fFogStart, fFogEnd, fFarCilp) = background.GetDistanceSetInfo()
(iPatch, iSplat, fSplatRatio, sTextureNum) = background.GetRenderedSplatNum()
if iPatch == 0:
iPatch = 1
self.PrintCoord.SetText('Coordinate: %.2f %.2f %.2f ATM: %d' % (x, y, z, app.GetAvailableTextureMemory() / 1048576))
self.FrameRate.SetText('UFPS: %3d UT: %3d FS %.2f' % (nUpdateFPS, nUpdateTime, fFaceSpeed))
if fAveRT > 1.0:
self.Pitch.SetText('RFPS: %3d RT:%.2f(%3d) FC: %d(%.2f) ' % (nRenderFPS, fAveRT, nCurRT, nFaceCount, nFaceCount / fAveRT))
self.Splat.SetText('PATCH: %d SPLAT: %d BAD(%.2f)' % (iPatch, iSplat, fSplatRatio))
self.ViewDistance.SetText('Num : %d, FS : %f, FE : %f, FC : %f' % (iNum, fFogStart, fFogEnd, fFarCilp))
def OnRender(self):
app.RenderGame()
if self.console.Console.collision:
background.RenderCollision()
chr.RenderCollision()
(x, y) = app.GetCursorPosition()
textTail.UpdateAllTextTail()
if 1 == wndMgr.IsPickedWindow(self.hWnd):
self.PickingCharacterIndex = chr.Pick()
if -1 != self.PickingCharacterIndex:
textTail.ShowCharacterTextTail(self.PickingCharacterIndex)
if 0 != self.targetBoard.GetTargetVID():
textTail.ShowCharacterTextTail(self.targetBoard.GetTargetVID())
if not self._GameWindow__IsShowName():
self.PickingItemIndex = item.Pick()
if -1 != self.PickingItemIndex:
textTail.ShowItemTextTail(self.PickingItemIndex)
if self._GameWindow__IsShowName():
textTail.ShowAllTextTail()
self.PickingItemIndex = textTail.Pick(x, y)
textTail.UpdateShowingTextTail()
textTail.ArrangeTextTail()
if -1 != self.PickingItemIndex:
textTail.SelectItemName(self.PickingItemIndex)
grp.PopState()
grp.SetInterfaceRenderState()
textTail.Render()
textTail.HideAllTextTail()
def OnPressEscapeKey(self):
if app.TARGET == app.GetCursor():
app.SetCursor(app.NORMAL)
elif 1 == mouseModule.mouseController.isAttached():
mouseModule.mouseController.DeattachObject()
else:
self.interface.OpenSystemDialog()
return 1
def OnIMEReturn(self):
if app.IsPressed(app.DIK_LSHIFT):
self.interface.OpenWhisperDialogWithoutTarget()
else:
self.interface.ToggleChat()
return 1
def OnPressExitKey(self):
self.interface.ToggleSystemDialog()
return 1
def BINARY_LoverInfo(self, name, lovePoint):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnAddLover(name, lovePoint)
if self.affectShower:
self.affectShower.SetLoverInfo(name, lovePoint)
def BINARY_UpdateLovePoint(self, lovePoint):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnUpdateLovePoint(lovePoint)
if self.affectShower:
self.affectShower.OnUpdateLovePoint(lovePoint)
def BINARY_OnQuestConfirm(self, msg, timeout, pid):
confirmDialog = uiCommon.QuestionDialogWithTimeLimit()
confirmDialog.Open(msg, timeout)
confirmDialog.SetAcceptEvent(lambda answer = TRUE, pid = pid: if not net.SendQuestConfirmPacket(answer, pid):
passself.confirmDialog.Hide())
confirmDialog.SetCancelEvent(lambda answer = FALSE, pid = pid: if not net.SendQuestConfirmPacket(answer, pid):
passself.confirmDialog.Hide())
self.confirmDialog = confirmDialog
def BINARY_Cube_Open(self):
self.interface.OpenCubeWindow()
def BINARY_Cube_Close(self):
self.interface.CloseCubeWindow()
def BINARY_Cube_Succeed(self, itemVnum, count):
log('CUBE_SUCCESS')
self.interface.SucceedCubeWork(itemVnum, count)
def BINARY_Cube_Failed(self):
log('CUBE_FAIL')
def BINARY_SetBigMessage(self, message):
self.interface.bigBoard.SetTip(message)
def BINARY_SetTipMessage(self, message):
self.interface.tipBoard.SetTip(message)
def BINARY_AppendNotifyMessage(self, type):
if type not in locale.NOTIFY_MESSAGE:
return None
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.NOTIFY_MESSAGE[type])
def BINARY_Guild_EnterGuildArea(self, areaID):
self.interface.BULID_EnterGuildArea(areaID)
def BINARY_Guild_ExitGuildArea(self, areaID):
self.interface.BULID_ExitGuildArea(areaID)
def BINARY_GuildWar_OnSendDeclare(self, guildID):
pass
def BINARY_GuildWar_OnRecvDeclare(self, guildID, warType):
mainCharacterName = player.GetMainCharacterName()
masterName = guild.GetGuildMasterName()
if mainCharacterName == masterName:
self._GameWindow__GuildWar_OpenAskDialog(guildID, warType)
def BINARY_GuildWar_OnRecvPoint(self, gainGuildID, opponentGuildID, point):
self.interface.OnRecvGuildWarPoint(gainGuildID, opponentGuildID, point)
def BINARY_GuildWar_OnStart(self, guildSelf, guildOpp):
self.interface.OnStartGuildWar(guildSelf, guildOpp)
def BINARY_GuildWar_OnEnd(self, guildSelf, guildOpp):
self.interface.OnEndGuildWar(guildSelf, guildOpp)
def BINARY_BettingGuildWar_SetObserverMode(self, isEnable):
self.interface.BINARY_SetObserverMode(isEnable)
def BINARY_BettingGuildWar_UpdateObserverCount(self, observerCount):
self.interface.wndMiniMap.UpdateObserverCount(observerCount)
def _GameWindow__GuildWar_UpdateMemberCount(self, guildID1, memberCount1, guildID2, memberCount2, observerCount):
guildID1 = int(guildID1)
guildID2 = int(guildID2)
memberCount1 = int(memberCount1)
memberCount2 = int(memberCount2)
observerCount = int(observerCount)
self.interface.UpdateMemberCount(guildID1, memberCount1, guildID2, memberCount2)
self.interface.wndMiniMap.UpdateObserverCount(observerCount)
def _GameWindow__GuildWar_OpenAskDialog(self, guildID, warType):
guildName = guild.GetGuildName(guildID)
if 'Noname' == guildName:
return None
import uiGuild
questionDialog = uiGuild.AcceptGuildWarDialog()
questionDialog.SAFE_SetAcceptEvent(self._GameWindow__GuildWar_OnAccept)
questionDialog.SAFE_SetCancelEvent(self._GameWindow__GuildWar_OnDecline)
questionDialog.Open(guildName, warType)
self.guildWarQuestionDialog = questionDialog
def _GameWindow__GuildWar_CloseAskDialog(self):
self.guildWarQuestionDialog.Close()
self.guildWarQuestionDialog = None
def _GameWindow__GuildWar_OnAccept(self):
guildName = self.guildWarQuestionDialog.GetGuildName()
net.SendChatPacket('/war ' + guildName)
self._GameWindow__GuildWar_CloseAskDialog()
return 1
def _GameWindow__GuildWar_OnDecline(self):
guildName = self.guildWarQuestionDialog.GetGuildName()
net.SendChatPacket('/nowar ' + guildName)
self._GameWindow__GuildWar_CloseAskDialog()
return 1
def _GameWindow__ServerCommand_Build(self):
serverCommandList = {
'ConsoleEnable': self._GameWindow__Console_Enable,
'DayMode': self._GameWindow__DayMode_Update,
'PRESERVE_DayMode': self._GameWindow__PRESERVE_DayMode_Update,
'CloseRestartWindow': self._GameWindow__RestartDialog_Close,
'OpenPrivateShop': self._GameWindow__PrivateShop_Open,
'PartyHealReady': self.PartyHealReady,
'ShowMeSafeboxPassword': self.AskSafeboxPassword,
'CloseSafebox': self.CommandCloseSafebox,
'CloseMall': self.CommandCloseMall,
'ShowMeMallPassword': self.AskMallPassword,
'item_mall': self._GameWindow__ItemMall_Open,
'RefineSuceeded': self.RefineSuceededMessage,
'RefineFailed': self.RefineFailedMessage,
'xmas_snow': self._GameWindow__XMasSnow_Enable,
'xmas_boom': self._GameWindow__XMasBoom_Enable,
'xmas_song': self._GameWindow__XMasSong_Enable,
'xmas_tree': self._GameWindow__XMasTree_Enable,
'newyear_boom': self._GameWindow__XMasBoom_Enable,
'PartyRequest': self._GameWindow__PartyRequestQuestion,
'PartyRequestDenied': self._GameWindow__PartyRequestDenied,
'horse_state': self._GameWindow__Horse_UpdateState,
'hide_horse_state': self._GameWindow__Horse_HideState,
'WarUC': self._GameWindow__GuildWar_UpdateMemberCount,
'test_server': self._GameWindow__EnableTestServerFlag,
'mall': self._GameWindow__InGameShop_Show,
'lover_login': self._GameWindow__LoginLover,
'lover_logout': self._GameWindow__LogoutLover,
'lover_near': self._GameWindow__LoverNear,
'lover_far': self._GameWindow__LoverFar,
'lover_divorce': self._GameWindow__LoverDivorce,
'PlayMusic': self._GameWindow__PlayMusic,
'MyShopPriceList': self._GameWindow__PrivateShop_PriceList }
self.serverCommander = stringCommander.Analyzer()
for serverCommandItem in serverCommandList.items():
self.serverCommander.SAFE_RegisterCallBack(serverCommandItem[0], serverCommandItem[1])
def BINARY_ServerCommand_Run(self, line):
try:
log('BINARY_ServerCommand_Run ' + line)
return self.serverCommander.Run(line)
except RuntimeError:
msg = None
dbg.TraceError(msg)
return 0
def _GameWindow__ProcessPreservedServerCommand(self):
try:
command = net.GetPreservedServerCommand()
while command:
log(' __ProcessPreservedServerCommand ' + command)
self.serverCommander.Run(command)
command = net.GetPreservedServerCommand()
except RuntimeError:
msg = None
dbg.TraceError(msg)
return 0
def PartyHealReady(self):
self.interface.PartyHealReady()
def AskSafeboxPassword(self):
self.interface.AskSafeboxPassword()
def AskMallPassword(self):
self.interface.AskMallPassword()
def _GameWindow__ItemMall_Open(self):
self.interface.OpenItemMall()
def CommandCloseMall(self):
self.interface.CommandCloseMall()
def RefineSuceededMessage(self):
snd.PlaySound('sound/ui/make_soket.wav')
self.PopupMessage('The advancement of the Item was successful.')
def RefineFailedMessage(self):
snd.PlaySound('sound/ui/jaeryun_fail.wav')
self.PopupMessage('You failed.')
def CommandCloseSafebox(self):
self.interface.CommandCloseSafebox()
def _GameWindow__PrivateShop_PriceList(self, itemVNum, itemPrice):
uiPrivateShopBuilder.SetPrivateShopItemPrice(itemVNum, itemPrice)
def _GameWindow__Horse_HideState(self):
self.affectShower.SetHorseState(0, 0, 0)
def _GameWindow__Horse_UpdateState(self, level, health, battery):
self.affectShower.SetHorseState(int(level), int(health), int(battery))
def _GameWindow__IsXMasMap(self):
mapDict = ('metin2_map_n_flame_01', 'metin2_map_n_desert_01', 'metin2_map_spiderdungeon', 'metin2_map_deviltower1', 'season1/metin2_map_spiderdungeon_02', 'metin2_map_spiderdungeon_03', 'metin2_map_monkeydungeon', 'metin2_map_monkeydungeon_02', 'metin2_map_devilsCatacomb', 'metin2_map_skipia_dungeon_boss', 'metin2_map_skipia_dungeon_01', 'metin2_map_skipia_dungeon_02', 'metin2_map_monkeydungeon_03')
if background.GetCurrentMapName() in mapDict:
return 0
return 1
def _GameWindow__XMasSnow_Enable(self, mode):
self._GameWindow__XMasSong_Enable(mode)
if '1' == mode:
if not self._GameWindow__IsXMasMap():
return None
log('XMAS_SNOW ON')
background.EnableSnow(1)
else:
log('XMAS_SNOW OFF')
background.EnableSnow(0)
def _GameWindow__XMasBoom_Enable(self, mode):
if '1' == mode:
if not self._GameWindow__IsXMasMap():
return None
log('XMAS_BOOM ON')
self._GameWindow__DayMode_Update('dark')
self.enableXMasBoom = 1
self.startTimeXMasBoom = app.GetTime()
else:
log('XMAS_BOOM OFF')
self._GameWindow__DayMode_Update('light')
self.enableXMasBoom = 0
def _GameWindow__XMasTree_Enable(self, grade):
log('XMAS_TREE ' + grade)
background.SetXMasTree(int(grade))
def _GameWindow__XMasSong_Enable(self, mode):
if '1' == mode:
log('XMAS_SONG ON')
XMAS_BGM = 'xmas.mp3'
if app.IsExistFile('BGM/' + XMAS_BGM) == 1:
if musicInfo.fieldMusic != '':
snd.FadeOutMusic('BGM/' + musicInfo.fieldMusic)
musicInfo.fieldMusic = XMAS_BGM
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
else:
log('XMAS_SONG OFF')
if musicInfo.fieldMusic != '':
snd.FadeOutMusic('BGM/' + musicInfo.fieldMusic)
musicInfo.fieldMusic = musicInfo.METIN2THEMA
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)
def _GameWindow__RestartDialog_Close(self):
self.interface.CloseRestartDialog()
def _GameWindow__Console_Enable(self):
constInfo.CONSOLE_ENABLE = 1
self.consoleEnable = 1
app.EnableSpecialCameraMode()
ui.EnablePaste(1)
def _GameWindow__PrivateShop_Open(self):
self.interface.OpenPrivateShopInputNameDialog()
def BINARY_PrivateShop_Appear(self, vid, text):
self.interface.AppearPrivateShop(vid, text)
def BINARY_PrivateShop_Disappear(self, vid):
self.interface.DisappearPrivateShop(vid)
def _GameWindow__PRESERVE_DayMode_Update(self, mode):
if 'light' == mode:
background.SetEnvironmentData(0)
elif 'dark' == mode:
if not self._GameWindow__IsXMasMap():
return None
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
background.SetEnvironmentData(1)
def _GameWindow__DayMode_Update(self, mode):
if 'light' == mode:
self.curtain.SAFE_FadeOut(self._GameWindow__DayMode_OnCompleteChangeToLight)
elif 'dark' == mode:
if not self._GameWindow__IsXMasMap():
return None
self.curtain.SAFE_FadeOut(self._GameWindow__DayMode_OnCompleteChangeToDark)
def _GameWindow__DayMode_OnCompleteChangeToLight(self):
background.SetEnvironmentData(0)
self.curtain.FadeIn()
def _GameWindow__DayMode_OnCompleteChangeToDark(self):
background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT)
background.SetEnvironmentData(1)
self.curtain.FadeIn()
def _GameWindow__XMasBoom_Update(self):
self.BOOM_DATA_LIST = ((2, 5), (5, 2), (7, 3), (10, 3), (20, 5))
if self.indexXMasBoom >= len(self.BOOM_DATA_LIST):
return None
boomTime = self.BOOM_DATA_LIST[self.indexXMasBoom][0]
boomCount = self.BOOM_DATA_LIST[self.indexXMasBoom][1]
if app.GetTime() - self.startTimeXMasBoom > boomTime:
self.indexXMasBoom += 1
for i in xrange(boomCount):
self._GameWindow__XMasBoom_Boom()
def _GameWindow__XMasBoom_Boom(self):
(x, y, z) = player.GetMainCharacterPosition()
randX = app.GetRandom(-150, 150)
randY = app.GetRandom(-150, 150)
snd.PlaySound3D(x + randX, -y + randY, z, 'sound/common/etc/salute.mp3')
def _GameWindow__PartyRequestQuestion(self, vid):
vid = int(vid)
partyRequestQuestionDialog = uiCommon.QuestionDialog()
partyRequestQuestionDialog.SetText(chr.GetNameByVID(vid) + '%s invited you to the party.')
partyRequestQuestionDialog.SetAcceptText('Accept')
partyRequestQuestionDialog.SetCancelText('Decline')
partyRequestQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self._GameWindow__AnswerPartyRequest(arg))
partyRequestQuestionDialog.SetCancelEvent(lambda arg = FALSE: self._GameWindow__AnswerPartyRequest(arg))
partyRequestQuestionDialog.Open()
partyRequestQuestionDialog.vid = vid
self.partyRequestQuestionDialog = partyRequestQuestionDialog
def _GameWindow__AnswerPartyRequest(self, answer):
if not (self.partyRequestQuestionDialog):
return None
vid = self.partyRequestQuestionDialog.vid
if answer:
net.SendChatPacket('/party_request_accept ' + str(vid))
else:
net.SendChatPacket('/party_request_deny ' + str(vid))
self.partyRequestQuestionDialog.Close()
self.partyRequestQuestionDialog = None
def _GameWindow__PartyRequestDenied(self):
self.PopupMessage('You discarded the invitation into the group..')
def _GameWindow__EnableTestServerFlag(self):
app.EnableTestServerFlag()
def _GameWindow__InGameShop_Show(self, url):
if constInfo.IN_GAME_SHOP_ENABLE:
self.interface.OpenWebWindow(url)
def _GameWindow__LoginLover(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLoginLover()
def _GameWindow__LogoutLover(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLogoutLover()
if self.affectShower:
self.affectShower.HideLoverState()
def _GameWindow__LoverNear(self):
if self.affectShower:
self.affectShower.ShowLoverState()
def _GameWindow__LoverFar(self):
if self.affectShower:
self.affectShower.HideLoverState()
def _GameWindow__LoverDivorce(self):
if self.interface.wndMessenger:
self.interface.wndMessenger.ClearLoverInfo()
if self.affectShower:
self.affectShower.ClearLoverState()
def _GameWindow__PlayMusic(self, flag, filename):
flag = int(flag)
if flag:
snd.FadeOutAllMusic()
musicInfo.SaveLastPlayFieldMusic()
snd.FadeInMusic('BGM/' + filename)
else:
snd.FadeOutAllMusic()
musicInfo.LoadLastPlayFieldMusic()
snd.FadeInMusic('BGM/' + musicInfo.fieldMusic)