934 uint32 idInGroup = opcode & 0xFFFF;
935 switch (opcode >> 16)
937 case 0x2A:
return idInGroup < 30 ? idInGroup + 0 : -1;
938 case 0x2C:
return idInGroup < 47 ? idInGroup + 30 : -1;
939 case 0x2D:
return idInGroup < 3 ? idInGroup + 77 : -1;
940 case 0x2E:
return idInGroup < 33 ? idInGroup + 80 : -1;
941 case 0x30:
return idInGroup < 744 ? idInGroup + 113 : -1;
942 case 0x31:
return idInGroup < 298 ? idInGroup + 857 : -1;
943 case 0x32:
return idInGroup < 12 ? idInGroup + 1155 : -1;
944 case 0x33:
return idInGroup < 130 ? idInGroup + 1167 : -1;
945 case 0x35:
return idInGroup < 401 ? idInGroup + 1297 : -1;
946 case 0x36:
return idInGroup < 15 ? idInGroup + 1698 : -1;
2185 uint32 idInGroup = opcode & 0xFFFF;
2186 switch (opcode >> 16)
2188 case 0x37:
return idInGroup < 843 ? idInGroup + 0 : -1;
2189 case 0x38:
return idInGroup < 10 ? idInGroup + 843 : -1;
2190 case 0x3B:
return idInGroup < 18 ? idInGroup + 853 : -1;
2191 case 0x3C:
return idInGroup < 34 ? idInGroup + 871 : -1;
2192 case 0x3D:
return idInGroup < 49 ? idInGroup + 905 : -1;
2193 case 0x3E:
return idInGroup < 11 ? idInGroup + 954 : -1;
2194 case 0x3F:
return idInGroup < 12 ? idInGroup + 965 : -1;
2195 case 0x41:
return idInGroup < 82 ? idInGroup + 977 : -1;
2196 case 0x43:
return idInGroup < 67 ? idInGroup + 1059 : -1;
2197 case 0x45:
return idInGroup < 33 ? idInGroup + 1126 : -1;
2198 case 0x47:
return idInGroup < 1 ? idInGroup + 1159 : -1;
2199 case 0x48:
return idInGroup < 118 ? idInGroup + 1160 : -1;
2200 case 0x4A:
return idInGroup < 47 ? idInGroup + 1278 : -1;
2201 case 0x4B:
return idInGroup < 41 ? idInGroup + 1325 : -1;
2202 case 0x4D:
return idInGroup < 85 ? idInGroup + 1366 : -1;
2203 case 0x4E:
return idInGroup < 8 ? idInGroup + 1451 : -1;
2204 case 0x50:
return idInGroup < 1 ? idInGroup + 1459 : -1;
void ValidateAndSetClientOpcode(OpcodeClient opcode, char const *name, SessionStatus status, ClientOpcodeHandler::HandlerFunction call, PacketProcessing processing)
std::array< std::unique_ptr< ClientOpcodeHandler >, NUM_CMSG_OPCODES > _internalTableClient
bool IsValid(OpcodeClient index) const
ClientOpcodeHandler const * operator[](OpcodeClient index) const
ServerOpcodeHandler const * operator[](OpcodeServer index) const
void InitializeServerOpcodes()
bool IsValid(OpcodeServer index) const
friend std::string GetOpcodeNameForLogging(OpcodeClient opcode)
Lookup opcode name for human understandable logging.
bool ValidateServerOpcode(OpcodeServer opcode, char const *name, ConnectionType conIdx) const
void Initialize()
Correspondence between opcodes and their names.
void InitializeClientOpcodes()
bool ValidateClientOpcode(OpcodeClient opcode, char const *name) const
std::array< std::unique_ptr< ServerOpcodeHandler >, NUM_SMSG_OPCODES > _internalTableServer
void ValidateAndSetServerOpcode(OpcodeServer opcode, char const *name, SessionStatus status, ConnectionType conIdx)
Player session in the World.
constexpr std::size_t NUM_CMSG_OPCODES
constexpr std::size_t NUM_SMSG_OPCODES
constexpr bool IsInstanceOnlyOpcode(uint32 opcode)
std::string GetOpcodeNameForLogging(OpcodeClient opcode)
Lookup opcode name for human understandable logging.
SessionStatus
Player state.
constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode)
constexpr uint16 UNKNOWN_OPCODE
@ CONNECTION_TYPE_INSTANCE
@ CONNECTION_TYPE_DEFAULT
@ SMSG_ACCOUNT_STORE_RESULT
@ SMSG_CHARACTER_UPGRADE_COMPLETE
@ SMSG_VOID_TRANSFER_RESULT
@ SMSG_SEND_SPELL_HISTORY
@ SMSG_SET_FACTION_VISIBLE
@ SMSG_MOVE_SPLINE_SET_PITCH_RATE
@ SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT
@ SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT
@ SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT
@ SMSG_GOSSIP_QUEST_UPDATE
@ SMSG_PLAYER_END_OF_MATCH_DETAILS
@ SMSG_MOVE_UNSET_CANT_SWIM
@ SMSG_PET_BATTLE_FIRST_ROUND
@ SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED
@ SMSG_PLAYER_SHOW_PARTY_POSE_UI
@ SMSG_MYTHIC_PLUS_SEASON_DATA
@ SMSG_GUILD_EVENT_NEW_LEADER
@ SMSG_PLAYER_CONDITION_RESULT
@ SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE
@ SMSG_GAME_OBJECT_CUSTOM_ANIM
@ SMSG_READ_ITEM_RESULT_FAILED
@ SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION
@ SMSG_REATTACH_RESURRECT
@ SMSG_MOVE_SPLINE_SET_SWIM_SPEED
@ SMSG_MOVE_SET_FLIGHT_SPEED
@ SMSG_MOVE_SPLINE_SET_FLYING
@ SMSG_USE_EQUIPMENT_SET_RESULT
@ SMSG_LFG_TELEPORT_DENIED
@ SMSG_READY_CHECK_COMPLETED
@ SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA
@ SMSG_PET_BATTLE_CHAT_RESTRICTED
@ SMSG_MOVE_SET_FLIGHT_BACK_SPEED
@ SMSG_WEEKLY_REWARDS_PROGRESS_RESULT
@ SMSG_VOID_STORAGE_TRANSFER_CHANGES
@ SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION
@ SMSG_PLAYER_SAVE_PERSONAL_EMBLEM
@ SMSG_CLOSE_ARTIFACT_FORGE
@ SMSG_SPELL_EMPOWER_UPDATE
@ SMSG_PAUSE_MIRROR_TIMER
@ SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE
@ SMSG_LOAD_EQUIPMENT_SET
@ SMSG_UPDATE_CHARACTER_FLAGS
@ SMSG_PET_BATTLE_ROUND_RESULT
@ SMSG_QUEST_SESSION_READY_CHECK_RESPONSE
@ SMSG_ITEM_EXPIRE_PURCHASE_REFUND
@ SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE
@ SMSG_LOSS_OF_CONTROL_AURA_UPDATE
@ SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT
@ SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT
@ SMSG_PERKS_PROGRAM_VENDOR_UPDATE
@ SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE
@ SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT
@ SMSG_GUILD_BANK_QUERY_RESULTS
@ SMSG_ACCOUNT_COSMETIC_ADDED
@ SMSG_MOVE_DISABLE_COLLISION
@ SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT
@ SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY
@ SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT
@ SMSG_PARTY_COMMAND_RESULT
@ SMSG_MULTI_FLOOR_NEW_FLOOR
@ SMSG_PLAYER_SHOW_ARROW_CALLOUT
@ SMSG_LFG_ROLE_CHECK_UPDATE
@ SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI
@ SMSG_MOVE_UPDATE_PITCH_RATE
@ SMSG_CANCEL_ORPHAN_SPELL_VISUAL
@ SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT
@ SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE
@ SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT
@ SMSG_CRAFTING_ORDER_CREATE_RESULT
@ SMSG_PET_BATTLE_PVP_CHALLENGE
@ SMSG_MOVE_SPLINE_SET_WALK_SPEED
@ SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE
@ SMSG_SPELL_CHANNEL_UPDATE
@ SMSG_BATTLE_PET_RESTORED
@ SMSG_CALENDAR_SEND_EVENT
@ SMSG_DISPLAY_PLAYER_CHOICE
@ SMSG_BROADCAST_SUMMON_CAST
@ SMSG_MOVE_ENABLE_DOUBLE_JUMP
@ SMSG_QUEST_UPDATE_FAILED
@ SMSG_GUILD_CHANGE_NAME_RESULT
@ SMSG_TIMERUNNING_SEASON_ENDED
@ SMSG_DISPLAY_QUEST_POPUP
@ SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED
@ SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT
@ SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED
@ SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST
@ SMSG_LFG_EXPAND_SEARCH_PROMPT
@ SMSG_SEND_RAID_TARGET_UPDATE_ALL
@ SMSG_BROADCAST_SUMMON_RESPONSE
@ SMSG_GM_TICKET_CASE_STATUS
@ SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED
@ SMSG_CALENDAR_SEND_NUM_PENDING
@ SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE
@ SMSG_ACHIEVEMENT_EARNED
@ SMSG_GUILD_CHALLENGE_COMPLETED
@ SMSG_CONFIRM_PARTY_INVITE
@ SMSG_GUILD_MOVE_STARTING
@ SMSG_RETURNING_PLAYER_PROMPT
@ SMSG_SET_VEHICLE_REC_ID
@ SMSG_ACCOUNT_DATA_TIMES
@ SMSG_TREASURE_PICKER_RESPONSE
@ SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED
@ SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST
@ SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE
@ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT
@ SMSG_BATTLE_PET_TRAP_LEVEL
@ SMSG_MOVE_SPLINE_SET_RUN_MODE
@ SMSG_MOVE_DISABLE_GRAVITY
@ SMSG_AURA_POINTS_DEPLETED
@ SMSG_UPDATE_CAPTURE_POINT
@ SMSG_VOID_STORAGE_CONTENTS
@ SMSG_BATTLEFIELD_STATUS_ACTIVE
@ SMSG_WOW_LABS_AREA_INFO
@ SMSG_AUCTION_LIST_ITEMS_RESULT
@ SMSG_BATTLENET_RESPONSE
@ SMSG_SPELL_CHANNEL_START
@ SMSG_ATTACK_SWING_LANDED_LOG
@ SMSG_GUILD_EVENT_TAB_TEXT_CHANGED
@ SMSG_GUILD_EVENT_TAB_DELETED
@ SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED
@ SMSG_AREA_SPIRIT_HEALER_TIME
@ SMSG_INSTANCE_ENCOUNTER_TIMER_START
@ SMSG_MOVE_SPLINE_DISABLE_COLLISION
@ SMSG_GUILD_KNOWN_RECIPES
@ SMSG_SHIPMENT_FACTION_UPDATE_RESULT
@ SMSG_GARRISON_BUILDING_ACTIVATED
@ SMSG_GARRISON_RESEARCH_TALENT_RESULT
@ SMSG_PLAYER_BONUS_ROLL_FAILED
@ SMSG_LFG_JOIN_LOBBY_MATCHMAKER_QUEUE
@ SMSG_MULTI_FLOOR_LEAVE_FLOOR
@ SMSG_MOVE_SET_VEHICLE_REC_ID
@ SMSG_QUEST_UPDATE_ADD_CREDIT
@ SMSG_QUERY_GUILD_INFO_RESPONSE
@ SMSG_CRAFTING_ORDER_REJECT_RESULT
@ SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY
@ SMSG_ADD_LOSS_OF_CONTROL
@ SMSG_CRAFTING_ORDER_UPDATE_STATE
@ SMSG_REMOVE_ITEM_PASSIVE
@ SMSG_RESTRICTED_ACCOUNT_WARNING
@ SMSG_CHALLENGE_MODE_COMPLETE
@ SMSG_TOTEM_DURATION_CHANGED
@ SMSG_MOVE_SPLINE_UNROOT
@ SMSG_AREA_TRIGGER_RE_PATH
@ SMSG_GUILD_EVENT_PRESENCE_CHANGE
@ SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE
@ SMSG_MOVE_SET_RUN_BACK_SPEED
@ SMSG_GARRISON_MAP_DATA_RESPONSE
@ SMSG_VAS_GET_SERVICE_STATUS_RESPONSE
@ SMSG_RESPEC_WIPE_CONFIRM
@ SMSG_GM_TICKET_SYSTEM_STATUS
@ SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS
@ SMSG_BATTLENET_CHALLENGE_ABORT
@ SMSG_RAID_DIFFICULTY_SET
@ SMSG_CALENDAR_CLEAR_PENDING_ACTION
@ SMSG_WOW_LABS_PARTY_ERROR
@ SMSG_CALENDAR_COMMAND_RESULT
@ SMSG_CURRENCY_TRANSFER_LOG
@ SMSG_RESPONSE_PERK_PENDING_REWARDS
@ SMSG_MOVE_REMOVE_INERTIA
@ SMSG_MOVE_SPLINE_SET_HOVER
@ SMSG_PET_ACTION_FEEDBACK
@ SMSG_SET_FACTION_STANDING
@ SMSG_PET_SPELLS_MESSAGE
@ SMSG_PET_BATTLE_INITIAL_UPDATE
@ SMSG_RAID_INSTANCE_MESSAGE
@ SMSG_GARRISON_PLOT_REMOVED
@ SMSG_QUERY_GAME_OBJECT_RESPONSE
@ SMSG_DUEL_OUT_OF_BOUNDS
@ SMSG_CRAFTING_ORDER_FULFILL_RESULT
@ SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL
@ SMSG_QUEST_GIVER_INVALID_QUEST
@ SMSG_GARRISON_USE_RECALL_PORTAL_RESULT
@ SMSG_SCENARIO_SHOW_CRITERIA
@ SMSG_UPDATE_GAME_TIME_STATE
@ SMSG_PLAYER_CHOICE_DISPLAY_ERROR
@ SMSG_ACCOUNT_HEIRLOOM_UPDATE
@ SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH
@ SMSG_ACCOUNT_MOUNT_REMOVED
@ SMSG_BATTLE_PET_REVOKED
@ SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA
@ SMSG_SPELL_INTERRUPT_LOG
@ SMSG_RETURN_APPLICANT_LIST
@ SMSG_TRAIT_CONFIG_COMMIT_FAILED
@ SMSG_BATTLENET_CHALLENGE_START
@ SMSG_GET_TROPHY_LIST_RESPONSE
@ SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT
@ SMSG_SPELL_EMPOWER_START
@ SMSG_LFG_LIST_UPDATE_EXPIRATION
@ SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT
@ SMSG_COMPLETE_SHIPMENT_RESPONSE
@ SMSG_MOVE_SPLINE_SET_WATER_WALK
@ SMSG_SPELL_FAILURE_MESSAGE
@ SMSG_CHARACTER_CHECK_UPGRADE_RESULT
@ SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION
@ SMSG_LEVEL_LINKING_RESULT
@ SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE
@ SMSG_DELETE_EXPIRED_MISSIONS_RESULT
@ SMSG_LFG_LIST_JOIN_RESULT
@ SMSG_BATTLE_PAY_START_CHECKOUT
@ SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE
@ SMSG_BATTLENET_NOTIFICATION
@ SMSG_GARRISON_RENAME_FOLLOWER_RESULT
@ SMSG_CHAIN_MISSILE_BOUNCE
@ SMSG_QUEST_GIVER_QUEST_COMPLETE
@ SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED
@ SMSG_MOVE_UPDATE_TELEPORT
@ SMSG_INSTANCE_ENCOUNTER_START
@ SMSG_LOBBY_MATCHMAKER_PARTY_INFO
@ SMSG_BATTLE_PET_CAGE_DATE_ERROR
@ SMSG_COVENANT_PREVIEW_OPEN_NPC
@ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT
@ SMSG_REPORT_PVP_PLAYER_AFK_RESULT
@ SMSG_GUILD_EVENT_BANK_MONEY_CHANGED
@ SMSG_CALENDAR_INVITE_REMOVED
@ SMSG_QUEST_COMPLETION_NPC_RESPONSE
@ SMSG_MOVE_UPDATE_ADD_IMPULSE
@ SMSG_INITIALIZE_FACTIONS
@ SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE
@ SMSG_GUILD_ACHIEVEMENT_EARNED
@ SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE
@ SMSG_RAF_DEBUG_FRIEND_MONTHS
@ SMSG_RECEIVE_PING_WORLD_POINT
@ SMSG_INVENTORY_FULL_OVERFLOW
@ SMSG_UI_MAP_QUEST_LINES_RESPONSE
@ SMSG_GUILD_INVITE_EXPIRED
@ SMSG_GUILD_EVENT_TAB_MODIFIED
@ SMSG_PLAY_SPELL_VISUAL_KIT
@ SMSG_INVALID_PROMOTION_CODE
@ SMSG_PET_BATTLE_REPLACEMENTS_MADE
@ SMSG_ACCOUNT_CRITERIA_UPDATE
@ SMSG_MOVE_SPLINE_SET_NORMAL_FALL
@ SMSG_GARRISON_DELETE_RESULT
@ SMSG_GAME_OBJECT_INTERACTION
@ SMSG_MOVE_ENABLE_INERTIA
@ SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT
@ SMSG_BATTLE_NET_CONNECTION_STATUS
@ SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT
@ SMSG_BATTLEFIELD_PORT_DENIED
@ SMSG_SET_CHR_UPGRADE_TIER
@ SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN
@ SMSG_AUCTION_REPLICATE_RESPONSE
@ SMSG_QUERY_QUEST_INFO_RESPONSE
@ SMSG_GUILD_HARDCORE_MEMBER_DEATH
@ SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE
@ SMSG_SET_DUNGEON_DIFFICULTY
@ SMSG_OPEN_SHIPMENT_NPC_RESULT
@ SMSG_GARRISON_REMOVE_EVENT
@ SMSG_PET_BATTLE_FINALIZE_LOCATION
@ SMSG_BACKPACK_DEFAULT_SIZE_CHANGED
@ SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE
@ SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT
@ SMSG_QUERY_BATTLE_PET_NAME_RESPONSE
@ SMSG_BAG_CLEANUP_FINISHED
@ SMSG_CLUB_FINDER_ERROR_MESSAGE
@ SMSG_SOCKET_GEMS_SUCCESS
@ SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT
@ SMSG_TRAINER_BUY_FAILED
@ SMSG_MOVE_UPDATE_APPLY_INERTIA
@ SMSG_QUERY_PAGE_TEXT_RESPONSE