fix login issue*
This commit is contained in:
@@ -19,24 +19,31 @@ defmodule Odinsea.Net.Opcodes do
|
||||
|
||||
# Login/Account
|
||||
def cp_client_hello(), do: 0x01
|
||||
@spec cp_login_password() :: 2
|
||||
def cp_login_password(), do: 0x02
|
||||
# Note: 0x03 is CP_ViewServerList in MSEA v112.4 (not used in OdinSea but reserved)
|
||||
@spec cp_view_server_list() :: 3
|
||||
def cp_view_server_list(), do: 0x03
|
||||
@spec cp_serverlist_request() :: 4
|
||||
def cp_serverlist_request(), do: 0x04
|
||||
def cp_charlist_request(), do: 0x05
|
||||
def cp_serverstatus_request(), do: 0x06
|
||||
# CP_SelectWorld(5) - Java: ClientPacket.java
|
||||
@spec cp_select_world() :: 5
|
||||
def cp_select_world(), do: 0x05
|
||||
def cp_check_char_name(), do: 0x0E
|
||||
def cp_create_char(), do: 0x12
|
||||
def cp_create_ultimate(), do: 0x14
|
||||
def cp_delete_char(), do: 0x15
|
||||
def cp_exception_log(), do: 0x17
|
||||
def cp_security_packet(), do: 0x18
|
||||
def cp_hardware_info(), do: 0x70
|
||||
def cp_window_focus(), do: 0x71
|
||||
def cp_hardware_info(), do: 0x5001 # Java: CP_HardwareInfo(0x5001) - was 0x70 (collided with cp_cancel_buff)
|
||||
def cp_window_focus(), do: 0x5004 # Java: CP_WindowFocus(0x5004) - was 0x71 (collided with cp_skill_effect)
|
||||
def cp_char_select(), do: 0x19
|
||||
def cp_auth_second_password(), do: 0x1A
|
||||
def cp_rsa_key(), do: 0x20
|
||||
def cp_client_dump_log(), do: 0x1D
|
||||
def cp_create_security_handle(), do: 0x1E
|
||||
def cp_select_world(), do: 0x03
|
||||
# CP_CheckUserLimit(6) - Java: ClientPacket.java
|
||||
@spec cp_check_user_limit() :: 6
|
||||
def cp_check_user_limit(), do: 0x06
|
||||
|
||||
# Migration/Channel
|
||||
@@ -75,7 +82,7 @@ defmodule Odinsea.Net.Opcodes do
|
||||
|
||||
# NPC Interaction
|
||||
def cp_npc_talk(), do: 0x40
|
||||
def cp_npc_move(), do: 0x41 # NPC animation/movement (added for compatibility)
|
||||
def cp_npc_move(), do: 0x106 # Java: CP_NpcMove(262) - alias for cp_npc_action. Was 0x41 (wrong)
|
||||
def cp_npc_talk_more(), do: 0x42
|
||||
def cp_npc_shop(), do: 0x43
|
||||
def cp_storage(), do: 0x44
|
||||
@@ -255,6 +262,12 @@ defmodule Odinsea.Net.Opcodes do
|
||||
|
||||
# Cash Shop
|
||||
def cp_cs_update(), do: 0x135
|
||||
|
||||
# Alias for cp_cs_update (used in some places)
|
||||
def cp_cash_shop_update(), do: cp_cs_update()
|
||||
|
||||
# Public NPC (recv - currently unimplemented in Java, using same value as send)
|
||||
def cp_public_npc(), do: 0xB7
|
||||
def cp_buy_cs_item(), do: 0x136
|
||||
def cp_coupon_code(), do: 0x137
|
||||
|
||||
@@ -263,6 +276,9 @@ defmodule Odinsea.Net.Opcodes do
|
||||
def cp_touching_mts(), do: 0x159
|
||||
def cp_mts_tab(), do: 0x15A
|
||||
|
||||
# MTS operation opcode (client -> server)
|
||||
def cp_mts_operation(), do: 0xB4
|
||||
|
||||
# Custom (server-specific)
|
||||
def cp_inject_packet(), do: 0x5002
|
||||
def cp_set_code_page(), do: 0x5003
|
||||
@@ -279,16 +295,16 @@ defmodule Odinsea.Net.Opcodes do
|
||||
|
||||
# General
|
||||
def lp_alive_req(), do: 0x0D
|
||||
def lp_enable_action(), do: 0x0C
|
||||
def lp_set_field(), do: 0x14
|
||||
def lp_set_cash_shop_opened(), do: 0x15
|
||||
def lp_migrate_command(), do: 0x16
|
||||
def lp_enable_action(), do: 0x1B # Java: enableActions() uses UPDATE_STATS(27) - was 0x0C (collided with lp_change_channel)
|
||||
def lp_set_field(), do: 0x90 # Java: LP_SetField(144) - alias for lp_warp_to_map. Was 0x14 (wrong)
|
||||
def lp_set_cash_shop_opened(), do: 0x92 # Java: LP_SetCashShop(146) - was 0x15 (collided with lp_latest_connected_world)
|
||||
def lp_migrate_command(), do: 0x0C # Java: CHANGE_CHANNEL(12) - was 0x16 (collided with lp_recommend_world_message)
|
||||
|
||||
# Login
|
||||
def lp_login_status(), do: 0x01
|
||||
def lp_serverstatus(), do: 0x03
|
||||
def lp_serverlist(), do: 0x06
|
||||
def lp_charlist(), do: 0x07
|
||||
def lp_check_password_result(), do: 0x01
|
||||
def lp_server_status(), do: 0x03
|
||||
def lp_server_list(), do: 0x06
|
||||
def lp_char_list(), do: 0x07
|
||||
def lp_server_ip(), do: 0x08
|
||||
def lp_char_name_response(), do: 0x09
|
||||
def lp_add_new_char_entry(), do: 0x0A
|
||||
@@ -298,10 +314,10 @@ defmodule Odinsea.Net.Opcodes do
|
||||
def lp_channel_selected(), do: 0x10
|
||||
def lp_relog_response(), do: 0x12
|
||||
def lp_rsa_key(), do: 0x13
|
||||
def lp_enable_recommended(), do: 0x15
|
||||
def lp_send_recommended(), do: 0x16
|
||||
def lp_latest_connected_world(), do: 0x15
|
||||
def lp_recommend_world_message(), do: 0x16
|
||||
def lp_login_auth(), do: 0x17
|
||||
def lp_secondpw_error(), do: 0x18
|
||||
def lp_check_spw_result(), do: 0x18
|
||||
|
||||
# Inventory/Stats
|
||||
def lp_modify_inventory_item(), do: 0x19
|
||||
@@ -390,6 +406,13 @@ defmodule Odinsea.Net.Opcodes do
|
||||
# Warps/Shops
|
||||
def lp_warp_to_map(), do: 0x90
|
||||
def lp_mts_open(), do: 0x91
|
||||
|
||||
# Alias for lp_mts_open (MTS opened packet)
|
||||
def lp_set_mts_opened(), do: lp_mts_open()
|
||||
|
||||
# Cash shop initialization (SET_CASH_SHOP from Java)
|
||||
def lp_set_cash_shop(), do: 0x92
|
||||
|
||||
def lp_cs_open(), do: 0x92
|
||||
def lp_login_welcome(), do: 0x94
|
||||
def lp_server_blocked(), do: 0x97
|
||||
@@ -397,6 +420,9 @@ defmodule Odinsea.Net.Opcodes do
|
||||
|
||||
# Effects
|
||||
def lp_show_equip_effect(), do: 0x99
|
||||
|
||||
# Weather effect (BLOW_WEATHER/MAP_EFFECT)
|
||||
def lp_blow_weather(), do: 0xA1
|
||||
def lp_multichat(), do: 0x9A
|
||||
def lp_whisper(), do: 0x9B
|
||||
def lp_boss_env(), do: 0x9D
|
||||
@@ -614,6 +640,10 @@ defmodule Odinsea.Net.Opcodes do
|
||||
|
||||
# Cash Shop
|
||||
def lp_cs_update(), do: 0x1B8
|
||||
|
||||
# Alias for lp_cs_update (cash shop update)
|
||||
def lp_cash_shop_update(), do: lp_cs_update()
|
||||
|
||||
def lp_cs_operation(), do: 0x1B9
|
||||
def lp_xmas_surprise(), do: 0x1BD
|
||||
|
||||
@@ -657,16 +687,26 @@ defmodule Odinsea.Net.Opcodes do
|
||||
# ==================================================================================================
|
||||
|
||||
@doc """
|
||||
Returns a human-readable name for a given opcode value.
|
||||
Returns a human-readable name for a given client opcode value.
|
||||
Useful for debugging and logging.
|
||||
"""
|
||||
def name_for(opcode) when is_integer(opcode) do
|
||||
def name_for_client(opcode) when is_integer(opcode) do
|
||||
case opcode do
|
||||
# Client opcodes (common ones for debugging)
|
||||
0x01 -> "CP_CLIENT_HELLO"
|
||||
0x02 -> "CP_LOGIN_PASSWORD"
|
||||
0x03 -> "CP_VIEW_SERVER_LIST"
|
||||
0x04 -> "CP_SERVERLIST_REQUEST"
|
||||
0x05 -> "CP_SELECT_WORLD"
|
||||
0x06 -> "CP_CHECK_USER_LIMIT"
|
||||
0x0D -> "CP_PLAYER_LOGGEDIN"
|
||||
0x0E -> "CP_CHECK_CHAR_NAME"
|
||||
0x12 -> "CP_CREATE_CHAR"
|
||||
0x14 -> "CP_CREATE_ULTIMATE"
|
||||
0x15 -> "CP_DELETE_CHAR"
|
||||
0x19 -> "CP_CHAR_SELECT"
|
||||
0x1A -> "CP_AUTH_SECOND_PASSWORD"
|
||||
0x20 -> "CP_RSA_KEY"
|
||||
0x23 -> "CP_CHANGE_MAP"
|
||||
0x24 -> "CP_CHANGE_CHANNEL"
|
||||
0x2A -> "CP_MOVE_PLAYER"
|
||||
@@ -675,11 +715,24 @@ defmodule Odinsea.Net.Opcodes do
|
||||
0xA0 -> "CP_PARTYCHAT"
|
||||
0xA1 -> "CP_WHISPER"
|
||||
|
||||
_ -> "CP_UNKNOWN_0x#{Integer.to_string(opcode, 16) |> String.upcase()}"
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns a human-readable name for a given server opcode value.
|
||||
Useful for debugging and logging.
|
||||
"""
|
||||
def name_for_server(opcode) when is_integer(opcode) do
|
||||
case opcode do
|
||||
# Server opcodes (common ones for debugging)
|
||||
0x01 -> "LP_LOGIN_STATUS"
|
||||
0x06 -> "LP_SERVERLIST"
|
||||
0x07 -> "LP_CHARLIST"
|
||||
0x08 -> "LP_SERVER_IP"
|
||||
0x0D -> "LP_ALIVE_REQ"
|
||||
0x13 -> "LP_RSA_KEY"
|
||||
0x17 -> "LP_LOGIN_AUTH"
|
||||
0xB8 -> "LP_SPAWN_PLAYER"
|
||||
0xB9 -> "LP_REMOVE_PLAYER_FROM_MAP"
|
||||
0xBA -> "LP_CHATTEXT"
|
||||
@@ -688,21 +741,30 @@ defmodule Odinsea.Net.Opcodes do
|
||||
0x9B -> "LP_WHISPER"
|
||||
0x1A3 -> "LP_NPC_TALK"
|
||||
|
||||
_ -> "UNKNOWN_0x#{Integer.to_string(opcode, 16) |> String.upcase()}"
|
||||
_ -> "LP_UNKNOWN_0x#{Integer.to_string(opcode, 16) |> String.upcase()}"
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns a human-readable name for a given opcode value.
|
||||
Deprecated: Use name_for_client/1 or name_for_server/1 instead.
|
||||
"""
|
||||
def name_for(opcode) when is_integer(opcode) do
|
||||
name_for_client(opcode)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Validates if an opcode is a known client packet.
|
||||
"""
|
||||
def valid_client_opcode?(opcode) when is_integer(opcode) do
|
||||
opcode in [
|
||||
# Add all valid client opcodes here for validation
|
||||
0x01,
|
||||
0x02,
|
||||
0x04,
|
||||
0x05,
|
||||
0x06,
|
||||
# Login opcodes
|
||||
0x01, # CP_ClientHello
|
||||
0x02, # CP_LoginPassword
|
||||
0x03, # CP_ViewServerList
|
||||
0x04, # CP_ServerListRequest
|
||||
0x05, # CP_SelectWorld
|
||||
0x06, # CP_CheckUserLimit
|
||||
0x0D,
|
||||
0x0E,
|
||||
0x12,
|
||||
@@ -895,7 +957,11 @@ defmodule Odinsea.Net.Opcodes do
|
||||
0x143,
|
||||
0x144,
|
||||
0x159,
|
||||
0x15A
|
||||
0x15A,
|
||||
0x5001, # CP_HardwareInfo
|
||||
0x5002, # CP_InjectPacket
|
||||
0x5003, # CP_SetCodePage
|
||||
0x5004 # CP_WindowFocus
|
||||
]
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user