package handling; import constants.ServerConstants; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; import tools.EncodingDetect; public enum RecvPacketOpcode implements WritableIntValueHolder { PONG(false), CLIENT_HELLO(false), LOGIN_PASSWORD(false), CHARLIST_REQUEST, CHAR_SELECT, UPDATE_CHANNEL, PLAYER_LOGGEDIN(false), CHECK_REGISTER_ACCOUNT(false), CHECK_ACCOUNT(false), REGISTER_ACCOUNT(false), CHECK_CHAR_NAME, CREATE_CHAR, DELETE_CHAR, GET_SERVER(false), CREATE_ULTIMATE, CLIENT_ERROR(false), STRANGE_DATA, AUTH_SECOND_PASSWORD, SET_WORK, ENTER, LICENSE_REQUEST, SET_GENDER, CHAR_CARD, SET_ACC_CASH, LOAD_PLAYER_SCCUCESS, QUICK_BUY_CS_ITEM, SERVERSTATUS_REQUEST, SERVERLIST_REQUEST, SEND_ENCRYPTED(false), REDISPLAY_SERVERLIST, VIEW_ALL_CHAR, VIEW_REGISTER_PIC, VIEW_SELECT_PIC, PICK_ALL_CHAR, CHAR_SELECT_NO_PIC, VIEW_SERVERLIST, PACKET_ERROR(false), CLIENT_START(false), CLIENT_FAILED(false), CHANGE_MAP, CHANGE_CHANNEL, ENTER_CASH_SHOP, MOVE_PLAYER, CANCEL_CHAIR, USE_CHAIR, CLOSE_RANGE_ATTACK, RANGED_ATTACK, MAGIC_ATTACK, PASSIVE_ATTACK, TAKE_DAMAGE, GENERAL_CHAT, CLOSE_CHALKBOARD, FACE_EXPRESSION, FACE_ANDROID, USE_ITEM_EFFECT, WHEEL_OF_FORTUNE, USE_TITLE_EFFECT, USE_UNK_EFFECT, NPC_TALK, REMOTE_STORE, NPC_TALK_MORE, NPC_SHOP, STORAGE, USE_HIRED_MERCHANT, MERCH_ITEM_STORE, DUEY_ACTION, MECH_CANCEL, USE_HOLY_FOUNTAIN, OWL, OWL_WARP, ITEM_SORT, ITEM_GATHER, ITEM_MOVE, MOVE_BAG, SWITCH_BAG, USE_ITEM, CANCEL_ITEM_EFFECT, USE_SUMMON_BAG, PET_FOOD, USE_MOUNT_FOOD, USE_SCRIPTED_NPC_ITEM, USE_RECIPE, USE_ALIEN_SOCKET, USE_ALIEN_SOCKET_RESPONSE, USE_CASH_ITEM, USE_ADDITIONAL_ITEM, ALLOW_PET_LOOT, ALLOW_PET_AOTO_EAT, USE_CATCH_ITEM, USE_SKILL_BOOK, USE_SP_RESET, USE_AP_RESET, POTION_POT_USE, POTION_POT_ADD, POTION_POT_MODE, POTION_POT_INCR, USE_OWL_MINERVA, USE_TELE_ROCK, USE_RETURN_SCROLL, USE_UPGRADE_SCROLL, USE_FLAG_SCROLL, USE_EQUIP_SCROLL, USE_POTENTIAL_SCROLL, USE_POTENTIAL_ADD_SCROLL, USE_SOULS_SCROLL, USE_SOUL_MARBLE, USE_BAG, USE_MAGNIFY_GLASS, USE_CARVED_SEAL, DISTRIBUTE_AP, AUTO_ASSIGN_AP, HEAL_OVER_TIME, TEACH_SKILL, DISTRIBUTE_SP, SPECIAL_SKILL, AFTER_SKILL, CANCEL_BUFF, SKILL_EFFECT, MESO_DROP, GIVE_FAME, CHAR_INFO_REQUEST, SPAWN_PET, CANCEL_DEBUFF, CHANGE_MAP_SPECIAL, UNK0A3, USE_INNER_PORTAL, TROCK_ADD_MAP, LIE_DETECTOR, LIE_DETECTOR_SKILL, LIE_DETECTOR_RESPONSE, LIE_DETECTOR_REFRESH, QUEST_ACTION, REISSUE_MEDAL, SPECIAL_ATTACK, REWARD_ITEM, ITEM_MAKER, REPAIR_ALL, REPAIR, SOLOMON, GACH_EXP, FOLLOW_REQUEST, FOLLOW_REPLY, AUTO_FOLLOW_REPLY, REPORT, PROFESSION_INFO, USE_POT, CLEAR_POT, FEED_POT, CURE_POT, REWARD_POT, USE_COSMETIC, USE_REDUCER, CHANGE_ZERO_LOOK, CHANGE_ZERO_LOOK_END, PARTYCHAT, WHISPER, MESSENGER, PLAYER_INTERACTION, PARTY_OPERATION, DENY_PARTY_REQUEST, ALLOW_PARTY_INVITE, GUILD_OPERATION, DENY_GUILD_REQUEST, JOIN_GUILD_REQUEST, JOIN_GUILD_CANCEL, ALLOW_GUILD_JOIN, DENY_GUILD_JOIN, ADMIN_COMMAND, ADMIN_LOG, BUDDYLIST_MODIFY, NOTE_ACTION, USE_DOOR, USE_MECH_DOOR, CHANGE_KEYMAP, RPS_GAME, RING_ACTION, ALLIANCE_OPERATION, DENY_ALLIANCE_REQUEST, REQUEST_FAMILY, OPEN_FAMILY, FAMILY_OPERATION, DELETE_JUNIOR, DELETE_SENIOR, ACCEPT_FAMILY, USE_FAMILY, FAMILY_PRECEPT, FAMILY_SUMMON, CYGNUS_SUMMON, ARAN_COMBO, LOST_ARAN_COMBO, CRAFT_DONE, CRAFT_EFFECT, CRAFT_MAKE, BBS_OPERATION, CHANGE_MARKET_MAP, CHANGE_PLAYER, MEMORY_SKILL_CHOOSE, MEMORY_SKILL_CHANGE, MEMORY_SKILL_OBTAIN, GAME_POLL, BUY_CROSS_ITEM, USE_JIANRENZHIBI, DISTRIBUTE_HYPER_SP, RESET_HYPER_SP, MOVE_PET, PET_CHAT, PET_COMMAND, PET_LOOT, PET_AUTO_POT, PET_EXCEPTION_LIST, PET_AOTO_EAT, MOVE_SUMMON, SUMMON_ATTACK, DAMAGE_SUMMON, SUB_SUMMON, REMOVE_SUMMON, MOVE_DRAGON, DRAGON_FLY, MOVE_ANDROID, QUICK_SLOT, PLAYER_VIEW_RANGE, OPEN_ROOT_NPC, SYSTEM_PROCESS_LIST, SHOW_LOVE_RANK, TRANSFORM_PLAYER, OPEN_AVATAR_RANDOM_BOX, ENTER_MTS, USE_TREASUER_CHEST, MACROSS_TICKET, PAM_SONG, SET_CHAR_CASH, MOVE_LIFE, AUTO_AGGRO, FRIENDLY_DAMAGE, MONSTER_BOMB, HYPNOTIZE_DMG, MOB_BOMB, MOB_NODE, DISPLAY_NODE, NPC_ACTION, ITEM_PICKUP, DAMAGE_REACTOR, TOUCH_REACTOR, MAKE_EXTRACTOR, SNOWBALL, LEFT_KNOCK_BACK, COCONUT, MONSTER_CARNIVAL, SHIP_OBJECT, PLAYER_UPDATE, PARTY_MEMBER_SEARCH, PARTY_SEARCH, START_HARVEST, STOP_HARVEST, QUICK_MOVE_SPECIAL, QUICK_MOVE, CS_UPDATE, BUY_CS_ITEM, COUPON_CODE, SEND_CS_GIFI, SEND_CS_HOT, MAPLETV, UPDATE_QUEST, QUEST_ITEM, USE_ITEM_QUEST, TOUCHING_MTS, MTS_TAB, CHANGE_SET, GET_BOOK_INFO, CLICK_REACTOR, USE_FAMILIAR, SPAWN_FAMILIAR, RENAME_FAMILIAR, MOVE_FAMILIAR, TOUCH_FAMILIAR, ATTACK_FAMILIAR, SIDEKICK_OPERATION, DENY_SIDEKICK_REQUEST, PVP_INFO, ENTER_PVP, ENTER_PVP_PARTY, LEAVE_PVP, PVP_RESPAWN, PVP_ATTACK, PVP_SUMMON, USE_HAMMER, HAMMER_RESPONSE, GUIDE_TRANSFER,//游戏向导 EXIT_GAME, BOSS_PARTY_SEARCH_REQUEST, BOSS_PARTY_SEARCH, USE_CUBE, ARROWS_TURRET_ATTACK, //箭矢炮盘 射箭的包 SPAWN_ARROWS_TURRET, //召唤 箭矢炮盘 REST_INTERNAL_ABILITY, RETURN_CRAFT, POINT_POWER, VOID_PRESSURE,//虚空重压 SUPER_SPECTRA,//光法师超级光谱 GETMONOID, UPDATE_MAC_SKILL, MIST_ATTACK, OPEN_MAP, FlLAMES_TRACK, SPECIAL_MAGIC_ATTACK, RUNE_OPERATION, RUNE_RESPONSE, ES_OPERATION, FREE_TRANFSER,; private byte code = -2; private final boolean CheckState; @Override public void setValue(byte code) { this.code = code; } @Override public byte getValue() { return code; } private RecvPacketOpcode() { CheckState = true; } private RecvPacketOpcode(boolean CheckState) { this.CheckState = CheckState; } public boolean NeedsChecking() { return CheckState; } public static boolean isTempHeader(RecvPacketOpcode header) { switch (header) { // case MOVE_LIFE: // case MOVE_PLAYER: // return false; } return true; } public static boolean isSpamHeader(RecvPacketOpcode header) { switch (header) { case PONG: case MOVE_LIFE: case NPC_ACTION: // case CRASH_INFO: // case AUTH_REQUEST: // case MOVE_PLAYER: // case SPECIAL_SKILL: // case MOVE_FAMILIAR: // case QUEST_ACTION: // case HEAL_OVER_TIME: // case CHANGE_KEYMAP: // case USE_INNER_PORTAL: // case MOVE_HAKU: // case FRIENDLY_DAMAGE: // case CLOSE_RANGE_ATTACK: // case RANGED_ATTACK: // case ARAN_COMBO: // case SPECIAL_STAT: // case UPDATE_HYPER: // case RESET_HYPER: // case ANGELIC_CHANGE: // case DRESSUP_TIME: return true; } return false; } public static Properties getDefaultProperties() throws FileNotFoundException, IOException { Properties props = new Properties(); try (FileInputStream fileInputStream = new FileInputStream("recvops.properties")) { props.load(new BufferedReader(new InputStreamReader(fileInputStream, EncodingDetect.getJavaEncode("recvops.properties")))); } return props; } public static void reloadValues() { try { if (ServerConstants.loadop) { Properties props = new Properties(); props.load(RecvPacketOpcode.class.getClassLoader().getResourceAsStream("recvops.ini")); ExternalCodeTableGetter.populateValues(props, values()); } else { ExternalCodeTableGetter.populateValues(getDefaultProperties(), values()); } } catch (IOException e) { throw new RuntimeException("加载 recvops.properties 文件出现错误", e); } } static { reloadValues(); } }