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 server.ServerProperties;
import tools.EncodingDetect;
import tools.FileoutputUtil;
public enum SendPacketOpcode implements WritableIntValueHolder {
PING,
LOGIN_STATUS,
AUTO_LOGIN_STATUS,
SERVERLIST,
CHARLIST,
SERVER_IP,
CHAR_NAME_RESPONSE,
ADD_NEW_CHAR_ENTRY,
DELETE_CHAR_RESPONSE,
CHANGE_CHANNEL,
CS_USE,
EVENT_CHECK,
WORK_RESPONSE,
LICENSE_RESULT,
CHOOSE_GENDER,
GENDER_SET,
REGISTER_INFO,
CHECK_ACCOUNT_INFO,
REGISTER_ACCOUNT,
UNK0008,
SHOW_CHAR_CARDS,
SHOW_ACC_CASH,
WZ_CHECK,
SERVERSTATUS,
CHANNEL_SELECTED,
RSA_KEY,
ENABLE_RECOMMENDED,
SEND_RECOMMENDED,
LOGIN_AUTH,
EJECT_WEB,
SECONDPW_ERROR,
LOGIN_SECOND,
PIN_OPERATION,
ALL_CHARLIST,
MODIFY_INVENTORY_ITEM,
UPDATE_INVENTORY_SLOT,
UPDATE_STATS,
GIVE_BUFF,
CANCEL_BUFF,
TEMP_STATS,
TEMP_STATS_RESET,
UPDATE_SKILLS,
UPDATE_SKILL_TICK,
SKILL_MEMORY,
FAME_RESPONSE,
SHOW_STATUS_INFO,
SHOW_NOTES,
TROCK_LOCATIONS,
LIE_DETECTOR,
REPORT_RESPONSE,
ENABLE_REPORT,
UPDATE_MOUNT,
SHOW_QUEST_COMPLETION,
SEND_TITLE_BOX,
USE_SKILL_BOOK,
SP_RESET,
AP_RESET,
POTION_POT_MSG,
POTION_POT_UPDATE,
FINISH_SORT,
FINISH_GATHER,
REPORT_RESULT,
TRADE_LIMIT,
UPDATE_GENDER,
CHAR_INFO,
PARTY_OPERATION,
MEMBER_SEARCH,
PARTY_SEARCH,
BOOK_INFO,
BUDDYLIST,
GUILD_OPERATION,
GUILD_SEARCH,
ALLIANCE_OPERATION,
SPAWN_PORTAL,
MECH_PORTAL,
SERVERMESSAGE,
PIGMI_REWARD,
OPEN_MAP,
OWL_OF_MINERVA,
OWL_RESULT,
ENGAGE_REQUEST,
ENGAGE_RESULT,
YELLOW_CHAT,
SHOP_DISCOUNT,
CATCH_MOB,
PET_PICKUP_MSG,
PET_AUTO_EAT_MSG,
SYNTHESIZING_MSG,
FISHING_BOARD_UPDATE,
BBS_OPERATION,
NPC_HIDE,
PLAYER_NPC,
ENERGY,
GHOST_POINT,
GHOST_STATUS,
FAIRY_PEND_MSG,
SEND_PEDIGREE,
OPEN_FAMILY,
FAMILY_MESSAGE,
FAMILY_INVITE,
FAMILY_JUNIOR,
SENIOR_MESSAGE,
FAMILY,
REP_INCREASE,
FAMILY_LOGGEDIN,
FAMILY_BUFF,
FAMILY_USE_REQUEST,
LEVEL_UPDATE,
MARRIAGE_UPDATE,
JOB_UPDATE,
PENDANT_SLOT,
FOLLOW_REQUEST,
TOP_MSG,
MID_MSG,
CLEAR_MID_MSG,
MAPLE_ADMIN,
GM_POLICE,
UPDATE_JAGUAR,
ULTIMATE_EXPLORER,
PAM_SONG,
PROFESSION_INFO,
UPDATE_IMP_TIME,
ITEM_POT,
UNK0092,
GIVE_CHARACTER_SKILL,
MULUNG_DOJO_RANKING,
EQUIPPED_SKILL,
TV_MESSAGE,
UPDATE_INNER_SKILL,
UPDATE_INNER_STATS,
CONFIRM_CROSS_HUNTER,
LOVE_OPERATION,
CANCEL_TITLE_EFFECT,
UPDATE_CORE_AURA,
OPEN_WEB,
CHAR_CASH,
UNK00A6,
SHOW_PREDICT_CARD,
SYSTEM_PROCESS_LIST,
AVATAR_MEGA_RESULT,
AVATAR_MEGA,
AVATAR_MEGA_REMOVE,
FISHING_STORE,
SHOW_PLAYER_CASH,
PLAYER_CASH_UPDATE,
WARP_TO_MAP,
MTS_OPEN,
CS_CHAR,
CS_OPEN,
LOGIN_WELCOME,
RESET_SCREEN,
MAP_BLOCKED,
SERVER_BLOCKED,
PARTY_BLOCKED,
SHOW_EQUIP_EFFECT,
MULTICHAT,
WHISPER,
BOSS_ENV,
MOVE_ENV,
UPDATE_ENV,
UNK00BC,
MAP_EFFECT,
UNK00BF,
CASH_SONG,
GM_EFFECT,
OX_QUIZ,
GMEVENT_INSTRUCTIONS,
CLOCK,
BOAT_EFF,
BOAT_EFFECT,
LOGIN_SUCC,
STOP_CLOCK,
PYRAMID_UPDATE,
PYRAMID_RESULT,
QUICK_SLOT,
MOVE_PLATFORM,
PVP_INFO,
DIRECTION_STATUS,
GAIN_FORCE,
QUICK_MOVE,
SPAWN_PLAYER,
REMOVE_PLAYER_FROM_MAP,
CHATTEXT,
CHALKBOARD,
UPDATE_CHAR_BOX,
SHOW_CONSUME_EFFECT,
SHOW_SCROLL_EFFECT,
SHOW_MAGNIFYING_EFFECT,
SHOW_POTENTIAL_RESET,
SHOW_ADDITIONAL_EFFECT,
SHOW_ADDITIONAL_RESET,
SHOW_FIREWORKS_EFFECT,
SHOW_FUSION_EFFECT,
PLAYER_DAMAGED,
PVP_ATTACK,
PVP_MIST,
PVP_COOL,
TESLA_TRIANGLE,
FISHING_CAUGHT,
PAMS_SONG,
FOLLOW_EFFECT,
CRAFT_EFFECT,
CRAFT_COMPLETE,
HARVESTED,
SPAWN_PET,
MOVE_PET,
PET_CHAT,
PET_NAMECHANGE,
PET_EXCEPTION_LIST,
SHOW_PET,
PET_COMMAND,
DRAGON_SPAWN,
DRAGON_MOVE,
DRAGON_REMOVE,
ANDROID_SPAWN,
ANDROID_MOVE,
ANDROID_EMOTION,
ANDROID_UPDATE,
ANDROID_DEACTIVATED,
MOVE_PLAYER,
CLOSE_RANGE_ATTACK,
RANGED_ATTACK,
MAGIC_ATTACK,
PASSIVE_ATTACK,
SKILL_EFFECT,
CANCEL_SKILL_EFFECT,
DAMAGE_PLAYER,
FACIAL_EXPRESSION,
SHOW_ITEM_EFFECT,
SHOW_TITLE_EFFECT,
SHOW_UNK_EFFECT,
SHOW_CHAIR,
UPDATE_CHAR_LOOK,
SHOW_FOREIGN_EFFECT,
GIVE_FOREIGN_BUFF,
CANCEL_FOREIGN_BUFF,
UPDATE_PARTYMEMBER_HP,
LOAD_GUILD_NAME,
LOAD_GUILD_ICON,
LOAD_TEAM,
SHOW_HARVEST,
PVP_HP,
SHOW_DRAGON_FLY,
UPDATE_ZERO_LOOK,
REMOVE_ZERO_FROM_MAP,
SHOW_SPECIAL_ATTACK,
CANCEL_CHAIR,
SHOW_SPECIAL_EFFECT,
CURRENT_MAP_WARP,
MESOBAG_SUCCESS,
MESOBAG_FAILURE,
UPDATE_QUEST_INFO,
BUFF_BAR,
PET_FLAG_CHANGE,
PLAYER_HINT,
EVENT_WINDOW,
OPEN_UI_OPTION,
INTRO_LOCK,
INTRO_ENABLE_UI,
INTRO_DISABLE_UI,
SUMMON_HINT,
SUMMON_HINT_MSG,
ARAN_COMBO,
ARAN_COMBO_RECHARGE,
GAME_POLL_REPLY,
CRAFT_MESSAGE,
SPOUSE_MESSAGE,
FOLLOW_MOVE,
FOLLOW_MSG,
GAME_POLL_QUESTION,
CREATE_ULTIMATE,
HARVEST_MESSAGE,
SHOW_MAP_NAME,
OPEN_BAG,
DRAGON_BLINK,
PVP_ICEGAGE,
DIRECTION_INFO,
REISSUE_MEDAL,
PLAY_MOVIE,
SHOW_CARTE,
LUMINOUS_COMBO,
UNKNOWN_1FC,
COOLDOWN,
SPAWN_SUMMON,
REMOVE_SUMMON,
MOVE_SUMMON,
SUMMON_ATTACK,
PVP_SUMMON,
SUMMON_SKILL,
DAMAGE_SUMMON,
SPAWN_MONSTER,
KILL_MONSTER,
SPAWN_MONSTER_CONTROL,
MOVE_MONSTER,
MOVE_MONSTER_RESPONSE,
DAMAGE_MONSTER,
APPLY_MONSTER_STATUS,
CANCEL_MONSTER_STATUS,
UNK0185,
SHOW_MONSTER_HP,
SHOW_MAGNET,
CATCH_MONSTER,
MONSTER_PROPERTIES,
REMOVE_TALK_MONSTER,
TALK_MONSTER,
SPAWN_NPC,
REMOVE_NPC,
SPAWN_NPC_REQUEST_CONTROLLER,
NPC_ACTION,
NPC_SET_SPECIAL_ACTION,
NPC_SCRIPTABLE,
UNK01A2,
SPAWN_HIRED_MERCHANT,
DESTROY_HIRED_MERCHANT,
UPDATE_HIRED_MERCHANT,
CHANGE_HIRED_MERCHANT_NAME,
DROP_ITEM_FROM_MAPOBJECT,
REMOVE_ITEM_FROM_MAP,
SPAWN_LOVE,
REMOVE_LOVE,
SPAWN_DEFENDER,
REMOVE_DEFENDER,
SPAWN_DOOR,
REMOVE_DOOR,
MECH_DOOR_SPAWN,
MECH_DOOR_REMOVE,
REACTOR_HIT,
REACTOR_SPAWN,
REACTOR_DESTROY,
SPAWN_EXTRACTOR,
REMOVE_EXTRACTOR,
ROLL_SNOWBALL,
HIT_SNOWBALL,
SNOWBALL_MESSAGE,
LEFT_KNOCK_BACK,
HIT_COCONUT,
COCONUT_SCORE,
MONSTER_CARNIVAL_START,
MONSTER_CARNIVAL_OBTAINED_CP,
MONSTER_CARNIVAL_PARTY_CP,
MONSTER_CARNIVAL_SUMMON,
MONSTER_CARNIVAL_DIED,
CHAOS_ZAKUM_SHRINE,
CHAOS_HORNTAIL_SHRINE,
HORNTAIL_SHRINE,
ENGLISH_QUIZ,
PVP_TYPE,
PVP_TRANSFORM,
PVP_ENABLED,
PVP_SCORE,
PVP_RESULT,
PVP_TEAM,
PVP_SCOREBOARD,
PVP_POINTS,
PVP_KILLED,
PVP_MODE,
PVP_ICEKNIGHT,
CAPTURE_FLAGS,
CAPTURE_POSITION,
CAPTURE_RESET,
NPC_TALK,
OPEN_NPC_SHOP,
CONFIRM_SHOP_TRANSACTION,
STORAGE_OPEN,
STORAGE_OPERATION,
MERCH_ITEM_MSG,
MERCH_ITEM_STORE,
RPS_GAME,
MESSENGER,
PLAYER_INTERACTION,
DUEY,
CS_UPDATE,
CS_OPERATION,
CS_UPDATE_MESO,
CS_UNK1,
CS_HOT,
CS_DAILY,
CS_UNK2,
CS_GM_GIFI,
CS_MSG,
XMAS_SURPRISE,
KEYMAP,
PET_AUTO_HP,
PET_AUTO_MP,
PET_AUTO_BUFF,
START_TV,
REMOVE_TV,
ENABLE_TV,
SHOW_SCROLL_TIP,
GET_MTS_TOKENS,
MTS_OPERATION,
VICIOUS_HAMMER,
MACROSS_TICKET,
ERRORR_MACROSS_TICKET,
ALIEN_SOCKET_CREATOR,
ECHO_MESSAGE,
SHOW_MESO_GAIN,
ANNOUNCE_PLAYER_SHOP,
EARN_TITLE_MSG,
ARIANT_PQ_START,
ARIANT_SCOREBOARD,
GET_CARD,
CARD_SET,
BOOK_STATS,
R_MESOBAG_SUCCESS,
R_MESOBAG_FAILURE,
SPOUSE_CHAT,
CHANGE_BACKGROUND,
VISITOR,
REGISTER_FAMILIAR,
SPAWN_FAMILIAR,
MOVE_FAMILIAR,
ATTACK_FAMILIAR,
UPDATE_FAMILIAR,
TOUCH_FAMILIAR,
SIDEKICK_OPERATION,
RESET_MINIMAP,
ACHIEVEMENT_RATIO,
BOOSTER_FAMILIAR,
BOOSTER_PACK,
FAMILIAR_INFO,
MONSTER_CARNIVAL_LEAVE,
MONSTER_CARNIVAL_STATS,
MONSTER_CARNIVAL_RESULT,
MONSTER_CARNIVAL_RANKING,
MOB_TO_MOB_DAMAGE,
SKILL_EFFECT_MOB,
ITEM_EFFECT_MOB,
CYGNUS_ATTACK,
SPECIAL_CREATION,
EXIT_GAME,
SPAWN_RUNE,
MAP_SCENE,
ELITE_BOSS_MSG,
BOSS_PARTY_SEARCH_RESPONSE,
BOSS_PARTY_SEARCH,
SPAWN_ARROWS_TURRET,
ARROWS_TURRET_ACTION,
ARROWS_TURRET_ATTACK,
CANCEL_ARROWS_TURRET,
MONSTER_RESIST,
SHOW_VOID_PRESSURE,
SHOW_SUPER_SPECTRA,
NPC_UPDATE_LIMITED_INFO,
DIRECTION_FACIAL_EXPRESSION,
LUCKY_MONEY,
ADVANCED_ATTACK,
ANGEL_REBORN_DONE,
ANGEL_REBORN,
HS_CHECK,//HS检测
UPDATE_MAC_SKILL,
FIRE_STEP,
CONVEY_TO,
REMOVE_RUNE,
RUNE_OPERATION,
RUNE_SKILL,
TOP_MSG_WHITE,
ELAB_OPERATION,
OPEN_UI,
FULLSCREEN_BLESS,
;
private byte code = -2;
public static boolean record = false;
@Override
public void setValue(byte code) {
this.code = code;
}
@Override
public byte getValue() {
if (ServerProperties.ShowPacket()) {
if (isRecordHeader(this)) {
record = true;
FileoutputUtil.log(FileoutputUtil.Packet_Record, "[服务端发送] " + name() + " [0x" + code + "] " + FileoutputUtil.CurrentReadable_Time() + "\r\n");
} else {
record = false;
}
}
return this.code;
}
public short getValue(boolean show) {
return code;
}
public boolean isRecordHeader(SendPacketOpcode opcode) {
switch (opcode) {
case MOVE_MONSTER_RESPONSE:
// case WARP_TO_MAP:
// case GUILD_OPERATION:
// case PARTY_OPERATION:
// case GIVE_BUFF:
// case SPAWN_PLAYER:
// return true;
default:
return false;
}
}
public static boolean isSpamHeader(SendPacketOpcode opcode) {
switch (opcode) {
case MOVE_MONSTER_RESPONSE:
case SPAWN_MONSTER:
case SPAWN_MONSTER_CONTROL:
case NPC_ACTION:
return true;
default:
return false;
}
}
public static Properties getDefaultProperties() throws FileNotFoundException, IOException {
Properties props = new Properties();
try (FileInputStream fileInputStream = new FileInputStream("sendops.properties")) {
props.load(new BufferedReader(new InputStreamReader(fileInputStream, EncodingDetect.getJavaEncode("sendops.properties"))));
}
return props;
}
public static void reloadValues() {
try {
if (ServerConstants.loadop) {
Properties props = new Properties();
props.load(SendPacketOpcode.class.getClassLoader().getResourceAsStream("sendops.ini"));
ExternalCodeTableGetter.populateValues(props, values());
} else {
ExternalCodeTableGetter.populateValues(getDefaultProperties(), values());
}
} catch (IOException e) {
throw new RuntimeException("加载 sendops.properties 文件出现错误", e);
}
}
static {
reloadValues();
}
}