use anyhow::Result;
use paste::paste;
use tokio::io::AsyncReadExt;
use tokio::net::TcpStream;
use tracing::Instrument;

use proto::*;

use super::handlers::*;
use super::PlayerSession;

const HEAD_MAGIC: u32 = 0x9D74C714;
const TAIL_MAGIC: u32 = 0xD7A152C8;

pub struct NetPacket {
    pub cmd_type: u16,
    pub head: Vec<u8>,
    pub body: Vec<u8>,
}

impl From<NetPacket> for Vec<u8> {
    fn from(value: NetPacket) -> Self {
        let mut out = Self::new();

        out.extend(HEAD_MAGIC.to_be_bytes());
        out.extend(value.cmd_type.to_be_bytes());
        out.extend((value.head.len() as u16).to_be_bytes());
        out.extend((value.body.len() as u32).to_be_bytes());
        out.extend(value.head);
        out.extend(value.body);
        out.extend(TAIL_MAGIC.to_be_bytes());
        out
    }
}

impl NetPacket {
    pub async fn read(stream: &mut TcpStream) -> std::io::Result<Self> {
        assert_eq!(stream.read_u32().await?, HEAD_MAGIC);
        let cmd_type = stream.read_u16().await?;

        let head_length = stream.read_u16().await? as usize;
        let body_length = stream.read_u32().await? as usize;

        let mut head = vec![0; head_length];
        stream.read_exact(&mut head).await?;

        let mut body = vec![0; body_length];
        stream.read_exact(&mut body).await?;

        assert_eq!(stream.read_u32().await?, TAIL_MAGIC);

        Ok(Self {
            cmd_type,
            head,
            body,
        })
    }
}

macro_rules! trait_handler {
    ($($name:ident $cmd_type:expr;)*) => {
        pub trait CommandHandler {
            $(
                paste! {
                    async fn [<on_$name:snake>](session: &mut PlayerSession, body: &$name) -> Result<()> {
                        [<on_$name:snake>](session, body).await
                    }
                }
            )*

            async fn on_message(session: &mut PlayerSession, cmd_type: u16, payload: Vec<u8>) -> Result<()> {
                use ::prost::Message;
                if PlayerSession::should_send_dummy_rsp(cmd_type) {
                    session.send_dummy_response(cmd_type).await?;
                    return Ok(());
                }
                match cmd_type {
                    $(
                        $cmd_type => {
                            let body = $name::decode(&mut &payload[..])?;
                            paste! {
                                Self::[<on_$name:snake>](session, &body)
                                    .instrument(tracing::info_span!(stringify!([<on_$name:snake>]), cmd_type = cmd_type))
                                    .await
                            }
                        }
                    )*
                    _ => {
                        tracing::warn!("Unknown command type: {cmd_type}");
                        Ok(())
                    },
                }
            }
        }
    };
}

trait_handler! {
    // TakeTrialActivityRewardCsReq 2698;
    // TakeLoginActivityRewardCsReq 2662;
    // GetLoginActivityCsReq 2634;
    // TakeMonsterResearchActivityRewardCsReq 2616;
    // CurTrialActivityScNotify 2605;
    // StartTrialActivityScRsp 2603;
    // TakeTrialActivityRewardScRsp 2671;
    // GetActivityScheduleConfigScRsp 2609;
    // GetActivityScheduleConfigCsReq 2602;
    // SubmitMonsterResearchActivityMaterialScRsp 2639;
    // GetTrialActivityDataCsReq 2635;
    // GetMonsterResearchActivityDataCsReq 2695;
    // LeaveTrialActivityScRsp 2646;
    // TakeMonsterResearchActivityRewardScRsp 2630;
    // EnterTrialActivityStageCsReq 2675;
    // GetMonsterResearchActivityDataScRsp 2642;
    // TakeLoginActivityRewardScRsp 2688;
    // EnterTrialActivityStageScRsp 2693;
    // GetTrialActivityDataScRsp 2644;
    // GetLoginActivityScRsp 2648;
    // LeaveTrialActivityCsReq 2694;
    // StartTrialActivityCsReq 2649;
    // TrialActivityDataChangeScNotify 2604;
    // SubmitMonsterResearchActivityMaterialCsReq 2637;
    // EnterAdventureCsReq 1334;
    // EnterAdventureScRsp 1348;
    // GetFarmStageGachaInfoScRsp 1388;
    // GetFarmStageGachaInfoCsReq 1362;
    // EnterAetherDivideSceneScRsp 4848;
    // StartAetherDivideSceneBattleCsReq 4802;
    // AetherDivideTakeChallengeRewardCsReq 4808;
    // AetherDivideTainerInfoScNotify 4861;
    // AetherDivideSkillItemScNotify 4818;
    // StartAetherDivideChallengeBattleCsReq 4819;
    // ClearAetherDividePassiveSkillCsReq 4895;
    // SetAetherDivideLineUpScRsp 4806;
    // SwitchAetherDivideLineUpSlotCsReq 4837;
    // EquipAetherDividePassiveSkillCsReq 4833;
    // GetAetherDivideInfoCsReq 4845;
    // EquipAetherDividePassiveSkillScRsp 4859;
    // AetherDivideRefreshEndlessScRsp 4882;
    // GetAetherDivideChallengeInfoCsReq 4801;
    // StartAetherDivideSceneBattleScRsp 4809;
    // AetherDivideTakeChallengeRewardScRsp 4854;
    // SwitchAetherDivideLineUpSlotScRsp 4839;
    // ClearAetherDividePassiveSkillScRsp 4842;
    // StartAetherDivideStageBattleScRsp 4830;
    // AetherDivideRefreshEndlessScNotify 4811;
    // LeaveAetherDivideSceneCsReq 4862;
    // EnterAetherDivideSceneCsReq 4834;
    // AetherDivideSpiritExpUpCsReq 4885;
    // GetAetherDivideInfoScRsp 4868;
    // GetAetherDivideChallengeInfoScRsp 4841;
    // AetherDivideRefreshEndlessCsReq 4824;
    // LeaveAetherDivideSceneScRsp 4888;
    // StartAetherDivideStageBattleCsReq 4816;
    // SetAetherDivideLineUpCsReq 4896;
    // AetherDivideSpiritInfoScNotify 4863;
    // AetherDivideFinishChallengeScNotify 4828;
    // AetherDivideSpiritExpUpScRsp 4856;
    // AetherDivideLineupScNotify 4897;
    // StartAetherDivideChallengeBattleScRsp 4843;
    // LogisticsDetonateStarSkiffScRsp 4779;
    // AlleyEventEffectNotify 4729;
    // GetAlleyInfoCsReq 4734;
    // AlleyTakeEventRewardCsReq 4711;
    // GetSaveLogisticsMapCsReq 4718;
    // LogisticsDetonateStarSkiffCsReq 4754;
    // PrestigeLevelUpCsReq 4716;
    // LogisticsGameScRsp 4788;
    // StartAlleyEventScRsp 4743;
    // AlleyPlacingGameCsReq 4796;
    // AlleyPlacingGameScRsp 4706;
    // StartAlleyEventCsReq 4719;
    // LogisticsInfoScNotify 4728;
    // AlleyOrderChangedScNotify 4737;
    // AlleyShipUnlockScNotify 4763;
    // AlleyEventChangeNotify 4786;
    // AlleyGuaranteedFundsScRsp 4782;
    // AlleyShopLevelScNotify 4756;
    // AlleyShipmentEventEffectsScNotify 4761;
    // SaveLogisticsCsReq 4701;
    // RefreshAlleyOrderScRsp 4742;
    // TakePrestigeRewardCsReq 4745;
    // GetSaveLogisticsMapScRsp 4791;
    // LogisticsScoreRewardSyncInfoScNotify 4725;
    // GetAlleyInfoScRsp 4748;
    // RefreshAlleyOrderCsReq 4795;
    // AlleyShipUsedCountScNotify 4797;
    // AlleyFundsScNotify 4785;
    // SaveLogisticsScRsp 4741;
    // AlleyGuaranteedFundsCsReq 4724;
    // PrestigeLevelUpScRsp 4730;
    // AlleyTakeEventRewardScRsp 4708;
    // LogisticsGameCsReq 4762;
    // TakePrestigeRewardScRsp 4768;
    // GetUpdatedArchiveDataScRsp 2388;
    // GetArchiveDataScRsp 2348;
    // GetArchiveDataCsReq 2334;
    // GetUpdatedArchiveDataCsReq 2362;
    // UnlockSkilltreeScRsp 309;
    // DressRelicAvatarCsReq 359;
    // TakeOffRelicScRsp 337;
    // DressAvatarCsReq 386;
    // MarkAvatarScRsp 328;
    // TakePromotionRewardScRsp 316;
    // RankUpAvatarCsReq 306;
    // DressAvatarSkinCsReq 330;
    // MarkAvatarCsReq 341;
    // AvatarExpUpScRsp 388;
    // TakeOffAvatarSkinCsReq 356;
    // UnlockAvatarSkinScNotify 301;
    // TakePromotionRewardCsReq 339;
    // DressAvatarScRsp 329;
    // TakeOffAvatarSkinScRsp 363;
    // TakeOffRelicCsReq 342;
    // TakeOffEquipmentScRsp 368;
    // AvatarExpUpCsReq 362;
    // DressAvatarSkinScRsp 385;
    GetAvatarDataCsReq 334;
    // PromoteAvatarCsReq 319;
    // RankUpAvatarScRsp 333;
    // GetAvatarDataScRsp 348;
    // TakeOffEquipmentCsReq 345;
    // DressRelicAvatarScRsp 395;
    // PromoteAvatarScRsp 343;
    // AddAvatarScNotify 396;
    // UnlockSkilltreeCsReq 302;
    // GetCurBattleInfoCsReq 102;
    // QuitBattleScNotify 186;
    // ServerSimulateBattleFinishScNotify 168;
    // BattleLogReportScRsp 145;
    // PVEBattleResultScRsp 148;
    // GetCurBattleInfoScRsp 109;
    // QuitBattleCsReq 162;
    // SyncClientResVersionScRsp 143;
    // QuitBattleScRsp 188;
    PveBattleResultCsReq 134;
    // SyncClientResVersionCsReq 119;
    // BattleLogReportCsReq 129;
    // ReBattleAfterBattleLoseCsNotify 196;
    // GetBattleCollegeDataScRsp 5748;
    // StartBattleCollegeCsReq 5788;
    // StartBattleCollegeScRsp 5702;
    // GetBattleCollegeDataCsReq 5734;
    // BattleCollegeDataChangeScNotify 5762;
    // TakeBpRewardScRsp 3002;
    // TakeAllRewardScRsp 3086;
    // TakeBpRewardCsReq 3088;
    // TakeAllRewardCsReq 3043;
    // BattlePassInfoNotify 3034;
    // BuyBpLevelScRsp 3019;
    // BuyBpLevelCsReq 3009;
    // MatchBoxingClubOpponentScRsp 4288;
    // SetBoxingClubResonanceLineupScRsp 4206;
    // MatchBoxingClubOpponentCsReq 4262;
    // GiveUpBoxingClubChallengeScRsp 4243;
    // StartBoxingClubBattleCsReq 4202;
    // GetBoxingClubInfoCsReq 4234;
    // ChooseBoxingClubResonanceCsReq 4245;
    // SetBoxingClubResonanceLineupCsReq 4296;
    // BoxingClubChallengeUpdateScNotify 4229;
    // ChooseBoxingClubStageOptionalBuffScRsp 4259;
    // BoxingClubRewardScNotify 4286;
    // GetBoxingClubInfoScRsp 4248;
    // ChooseBoxingClubResonanceScRsp 4268;
    // GiveUpBoxingClubChallengeCsReq 4219;
    // StartBoxingClubBattleScRsp 4209;
    // ChooseBoxingClubStageOptionalBuffCsReq 4233;
    // GetChallengeGroupStatisticsCsReq 1795;
    // LeaveChallengeCsReq 1702;
    // GetCurChallengeScRsp 1745;
    // TakeChallengeRewardScRsp 1759;
    // GetChallengeGroupStatisticsScRsp 1742;
    // StartChallengeCsReq 1762;
    // LeaveChallengeScRsp 1709;
    // TakeChallengeRewardCsReq 1733;
    // GetCurChallengeCsReq 1729;
    // ChallengeSettleNotify 1719;
    // ChallengeLineupNotify 1768;
    // GetChallengeScRsp 1748;
    // StartChallengeScRsp 1788;
    // GetChallengeCsReq 1734;
    // BatchMarkChatEmojiScRsp 3906;
    // SendMsgCsReq 3934;
    // GetPrivateChatHistoryScRsp 3909;
    // GetPrivateChatHistoryCsReq 3902;
    // GetChatEmojiListScRsp 3929;
    // PrivateMsgOfflineUsersScNotify 3988;
    // MarkChatEmojiCsReq 3945;
    // MarkChatEmojiScRsp 3968;
    // BatchMarkChatEmojiCsReq 3996;
    // GetLoginChatInfoCsReq 3933;
    // GetLoginChatInfoScRsp 3959;
    // GetChatFriendHistoryScRsp 3943;
    // GetChatEmojiListCsReq 3986;
    // GetChatFriendHistoryCsReq 3919;
    // SendMsgScRsp 3948;
    // RevcMsgScNotify 3962;
    // ChessRogueSkipTeachingLevelCsReq 5465;
    // GetChessRogueBuffEnhanceInfoScRsp 5426;
    // EnhanceChessRogueBuffCsReq 5592;
    // ChessRogueQueryAeonDimensionsScRsp 5466;
    // ChessRogueNousGetRogueTalentInfoCsReq 5448;
    // ChessRogueSkipTeachingLevelScRsp 5474;
    // ChessRogueEnterCellCsReq 5518;
    // EnhanceChessRogueBuffScRsp 5468;
    // GetChessRogueStoryInfoScRsp 5527;
    // ChessRogueCheatRollCsReq 5544;
    // ChessRogueRollDiceScRsp 5546;
    // ChessRogueEnterCsReq 5456;
    // FinishChessRogueSubStoryScRsp 5437;
    // ChessRogueEnterNextLayerScRsp 5436;
    // ChessRogueUpdateMoneyInfoScNotify 5480;
    // SelectChessRogueNousSubStoryScRsp 5454;
    // GetChessRogueStoryAeonTalkInfoCsReq 5477;
    // ChessRogueUpdateReviveInfoScNotify 5419;
    // ChessRogueQueryBpScRsp 5598;
    // ChessRogueSelectBpScRsp 5416;
    // ChessRogueMoveCellNotify 5586;
    // ChessRogueUpdateUnlockLevelScNotify 5582;
    // ChessRogueGoAheadCsReq 5458;
    // ChessRogueGiveUpScRsp 5511;
    // ChessRogueRollDiceCsReq 5535;
    // GetChessRogueNousStoryInfoScRsp 5561;
    // ChessRogueReviveAvatarScRsp 5470;
    // ChessRogueNousDiceSurfaceUnlockNotify 5413;
    // ChessRogueUpdateLevelBaseInfoScNotify 5432;
    // GetChessRogueBuffEnhanceInfoCsReq 5522;
    // ChessRogueGiveUpRollScRsp 5576;
    // ChessRogueEnterScRsp 5559;
    // ChessRogueCheatRollScRsp 5599;
    // ChessRogueQuitCsReq 5575;
    // ChessRogueGiveUpRollCsReq 5558;
    // SyncChessRogueNousValueScNotify 5537;
    // SelectChessRogueNousSubStoryCsReq 5484;
    // ChessRogueLayerAccountInfoNotify 5507;
    // ChessRogueNousEnableRogueTalentScRsp 5425;
    // ChessRogueReviveAvatarCsReq 5539;
    // ChessRogueQueryScRsp 5597;
    // ChessRogueQuestFinishNotify 5565;
    // GetChessRogueStoryInfoCsReq 5532;
    // GetChessRogueStoryAeonTalkInfoScRsp 5580;
    // SyncChessRogueNousSubStoryScNotify 5420;
    // EnterChessRogueAeonRoomScRsp 5496;
    // ChessRogueQueryBpCsReq 5495;
    // ChessRogueCellUpdateNotify 5508;
    // SelectChessRogueSubStoryCsReq 5600;
    // ChessRogueSelectBpCsReq 5549;
    // SyncChessRogueNousMainStoryScNotify 5487;
    // ChessRogueQueryCsReq 5459;
    // ChessRogueQuitScRsp 5412;
    // ChessRogueSelectCellCsReq 5434;
    // FinishChessRogueSubStoryCsReq 5405;
    // ChessRogueNousEditDiceCsReq 5550;
    // GetChessRogueNousStoryInfoCsReq 5415;
    // ChessRogueQueryAeonDimensionsCsReq 5529;
    // ChessRogueReRollDiceCsReq 5490;
    // ChessRogueNousEnableRogueTalentCsReq 5570;
    // ChessRogueReRollDiceScRsp 5500;
    // ChessRogueChangeyAeonDimensionNotify 5557;
    // ChessRogueSelectCellScRsp 5450;
    // ChessRogueStartScRsp 5471;
    // ChessRogueUpdateBoardScNotify 5502;
    // ChessRogueEnterCellScRsp 5540;
    // ChessRogueGoAheadScRsp 5431;
    // ChessRogueConfirmRollCsReq 5424;
    // ChessRogueFinishCurRoomNotify 5422;
    // ChessRogueUpdateAllowedSelectCellScNotify 5577;
    // ChessRogueStartCsReq 5596;
    // ChessRogueUpdateDicePassiveAccumulateValueScNotify 5542;
    // ChessRogueGiveUpCsReq 5463;
    // FinishChessRogueNousSubStoryCsReq 5411;
    // ChessRogueUpdateAeonModifierValueScNotify 5498;
    // ChessRogueUpdateDiceInfoScNotify 5526;
    // ChessRogueNousGetRogueTalentInfoScRsp 5429;
    // SelectChessRogueSubStoryScRsp 5536;
    // ChessRogueConfirmRollScRsp 5523;
    // SyncChessRogueMainStoryFinishScNotify 5573;
    // ChessRogueNousDiceUpdateNotify 5452;
    // FinishChessRogueNousSubStoryScRsp 5501;
    // ChessRoguePickAvatarCsReq 5517;
    // ChessRogueLeaveCsReq 5473;
    // ChessRogueNousEditDiceScRsp 5482;
    // ChessRogueEnterNextLayerCsReq 5543;
    // ChessRoguePickAvatarScRsp 5449;
    // ChessRogueUpdateActionPointScNotify 5469;
    // ChessRogueLeaveScRsp 5531;
    // EnterChessRogueAeonRoomCsReq 5589;
    // ClockParkUseBuffCsReq 7237;
    // ClockParkGetInfoCsReq 7234;
    // ClockParkQuitScriptScRsp 7206;
    // ClockParkSyncVirtualItemScNotify 7230;
    // ClockParkHandleWaitOperationCsReq 7245;
    // ClockParkStartScriptScRsp 7243;
    // ClockParkGetOngoingScriptInfoCsReq 7286;
    // ClockParkBattleEndScNotify 7295;
    // ClockParkUnlockTalentScRsp 7209;
    // ClockParkGetOngoingScriptInfoScRsp 7229;
    // ClockParkUnlockScriptScRsp 7288;
    // ClockParkQuitScriptCsReq 7296;
    // ClockParkHandleWaitOperationScRsp 7268;
    // ClockParkUnlockTalentCsReq 7202;
    // ClockParkGetInfoScRsp 7248;
    // ClockParkUnlockScriptCsReq 7262;
    // ClockParkStartScriptCsReq 7219;
    // ClockParkUseBuffScRsp 7239;
    // ClockParkFinishScriptScNotify 7216;
    // GetDailyActiveInfoScRsp 3388;
    // TakeAllApRewardCsReq 3309;
    // DailyActiveInfoNotify 3302;
    // TakeAllApRewardScRsp 3319;
    // TakeApRewardCsReq 3334;
    // GetDailyActiveInfoCsReq 3362;
    // TakeApRewardScRsp 3348;
    // EndDrinkMakerSequenceCsReq 7000;
    // DrinkMakerUpdateTipsNotify 6983;
    // GetDrinkMakerDataCsReq 6981;
    // MakeMissionDrinkCsReq 6982;
    // EndDrinkMakerSequenceScRsp 6999;
    // DrinkMakerDayEndScNotify 6984;
    // MakeDrinkCsReq 6993;
    // MakeDrinkScRsp 6997;
    // DrinkMakerChallengeScRsp 6990;
    // MakeMissionDrinkScRsp 6996;
    // GetDrinkMakerDataScRsp 6998;
    // DrinkMakerChallengeCsReq 6985;
    // EvolveBuildShopAbilityResetScRsp 7120;
    // EvolveBuildFinishScNotify 7107;
    // EvolveBuildShopAbilityUpCsReq 7133;
    // EvolveBuildQueryInfoCsReq 7108;
    // EvolveBuildQueryInfoScRsp 7149;
    // EvolveBuildUnlockInfoNotify 7110;
    // EvolveBuildStartLevelScRsp 7147;
    // EvolveBuildCoinNotify 7104;
    // EvolveBuildTakeExpRewardScRsp 7121;
    // EvolveBuildShopAbilityUpScRsp 7135;
    // EvolveBuildReRandomStageScRsp 7106;
    // EvolveBuildLeaveScRsp 7101;
    // EvolveBuildGiveupScRsp 7150;
    // EvolveBuildReRandomStageCsReq 7131;
    // EvolveBuildTakeExpRewardCsReq 7122;
    // EvolveBuildShopAbilityDownCsReq 7103;
    // EvolveBuildShopAbilityResetCsReq 7144;
    // EvolveBuildStartLevelCsReq 7148;
    // EvolveBuildShopAbilityDownScRsp 7145;
    // EvolveBuildStartStageCsReq 7141;
    // EvolveBuildStartStageScRsp 7136;
    // EvolveBuildGiveupCsReq 7134;
    // EvolveBuildLeaveCsReq 7117;
    // TakeMultipleExpeditionRewardCsReq 2542;
    // GetExpeditionDataScRsp 2548;
    // AcceptActivityExpeditionScRsp 2545;
    // AcceptMultipleExpeditionCsReq 2559;
    // AcceptMultipleExpeditionScRsp 2595;
    // TakeMultipleExpeditionRewardScRsp 2537;
    // CancelActivityExpeditionScRsp 2596;
    // AcceptExpeditionCsReq 2562;
    // AcceptActivityExpeditionCsReq 2529;
    // TakeActivityExpeditionRewardCsReq 2506;
    // AcceptExpeditionScRsp 2588;
    // CancelExpeditionCsReq 2502;
    // ExpeditionDataChangeScNotify 2586;
    // TakeExpeditionRewardScRsp 2543;
    // CancelExpeditionScRsp 2509;
    // TakeActivityExpeditionRewardScRsp 2533;
    // GetExpeditionDataCsReq 2534;
    // TakeExpeditionRewardCsReq 2519;
    // CancelActivityExpeditionCsReq 2568;
    // EnterFantasticStoryActivityStageCsReq 4988;
    // EnterFantasticStoryActivityStageScRsp 4902;
    // FinishChapterScNotify 4962;
    // GetFantasticStoryActivityDataScRsp 4948;
    // FantasticStoryActivityBattleEndScNotify 4909;
    // GetFantasticStoryActivityDataCsReq 4934;
    // GetFeverTimeActivityDataCsReq 7156;
    // FeverTimeActivityBattleEndScNotify 7153;
    // EnterFeverTimeActivityStageScRsp 7159;
    // GetFeverTimeActivityDataScRsp 7154;
    // EnterFeverTimeActivityStageCsReq 7151;
    // EnterFightActivityStageScRsp 3602;
    // GetFightActivityDataScRsp 3648;
    // FightActivityDataChangeScNotify 3662;
    // TakeFightActivityRewardCsReq 3609;
    // GetFightActivityDataCsReq 3634;
    // EnterFightActivityStageCsReq 3688;
    // TakeFightActivityRewardScRsp 3619;
    // GetFriendChallengeLineupScRsp 2904;
    // GetFriendLoginInfoScRsp 2967;
    // SyncHandleFriendScNotify 2968;
    // GetFriendApplyListInfoCsReq 2902;
    // GetFriendRecommendListInfoCsReq 2937;
    // GetPlatformPlayerInfoScRsp 2989;
    // GetPlayerDetailInfoCsReq 2962;
    // GetAssistListCsReq 2961;
    // GetFriendRecommendListInfoScRsp 2939;
    // GetPlatformPlayerInfoCsReq 2965;
    // GetFriendListInfoCsReq 2934;
    // SetAssistScRsp 2997;
    // SetForbidOtherApplyFriendCsReq 2992;
    // GetCurAssistCsReq 2924;
    // AddBlacklistCsReq 2959;
    // ApplyFriendCsReq 2919;
    // AddBlacklistScRsp 2995;
    // ReportPlayerCsReq 2985;
    // GetFriendBattleRecordDetailCsReq 2998;
    // GetFriendBattleRecordDetailScRsp 2971;
    // SetFriendRemarkNameScRsp 2930;
    // GetFriendLoginInfoCsReq 2990;
    // TakeAssistRewardScRsp 2925;
    // CurAssistChangedNotify 3000;
    // GetFriendChallengeDetailScRsp 2993;
    // SearchPlayerScRsp 2928;
    // GetFriendChallengeLineupCsReq 2944;
    // SetAssistCsReq 2991;
    // GetAssistListScRsp 2918;
    // GetPlayerDetailInfoScRsp 2988;
    // SetForbidOtherApplyFriendScRsp 2955;
    // HandleFriendCsReq 2929;
    // SetFriendMarkCsReq 2966;
    // GetFriendDevelopmentInfoScRsp 2903;
    // SearchPlayerCsReq 2941;
    // SetFriendRemarkNameCsReq 2916;
    // GetAssistHistoryScRsp 2908;
    // GetFriendApplyListInfoScRsp 2909;
    // DeleteBlacklistCsReq 2963;
    // GetFriendAssistListCsReq 2951;
    // SyncApplyFriendScNotify 2986;
    // ReportPlayerScRsp 2956;
    // SyncAddBlacklistScNotify 2942;
    // DeleteFriendScRsp 2906;
    // DeleteFriendCsReq 2996;
    // SyncDeleteFriendScNotify 2933;
    // ApplyFriendScRsp 2943;
    // TakeAssistRewardCsReq 2979;
    // HandleFriendScRsp 2945;
    // SetFriendMarkScRsp 2973;
    // GetFriendDevelopmentInfoCsReq 2949;
    // GetCurAssistScRsp 2982;
    // GetFriendChallengeDetailCsReq 2975;
    // DeleteBlacklistScRsp 2901;
    // NewAssistHistoryNotify 2954;
    // GetFriendAssistListScRsp 2935;
    // GetAssistHistoryCsReq 2911;
    // GetFriendListInfoScRsp 2948;
    // ExchangeGachaCeilingScRsp 1943;
    // DoGachaCsReq 1962;
    // DoGachaScRsp 1988;
    // GetGachaInfoScRsp 1948;
    // GetGachaInfoCsReq 1934;
    // ExchangeGachaCeilingCsReq 1919;
    // GetGachaCeilingCsReq 1902;
    // GetGachaCeilingScRsp 1909;
    // GetHeartDialInfoScRsp 6348;
    // FinishEmotionDialoguePerformanceCsReq 6319;
    // FinishEmotionDialoguePerformanceScRsp 6343;
    // HeartDialTraceScriptScRsp 6345;
    // ChangeScriptEmotionCsReq 6362;
    // SubmitEmotionItemScRsp 6309;
    // HeartDialTraceScriptCsReq 6329;
    // ChangeScriptEmotionScRsp 6388;
    // GetHeartDialInfoCsReq 6334;
    // SubmitEmotionItemCsReq 6302;
    // HeartDialScriptChangeScNotify 6386;
    // HeliobusEnterBattleScRsp 5816;
    // HeliobusStartRaidScRsp 5885;
    // HeliobusInfoChangedScNotify 5868;
    // HeliobusUpgradeLevelCsReq 5896;
    // HeliobusActivityDataCsReq 5834;
    // HeliobusSnsReadCsReq 5862;
    // HeliobusLineupUpdateScNotify 5863;
    // HeliobusSnsCommentScRsp 5829;
    // HeliobusStartRaidCsReq 5830;
    // HeliobusSelectSkillCsReq 5859;
    // HeliobusChallengeUpdateScNotify 5856;
    // HeliobusSnsLikeCsReq 5819;
    // HeliobusSnsPostCsReq 5802;
    // HeliobusSelectSkillScRsp 5895;
    // HeliobusSnsReadScRsp 5888;
    // HeliobusEnterBattleCsReq 5839;
    // HeliobusSnsCommentCsReq 5886;
    // HeliobusUpgradeLevelScRsp 5806;
    // HeliobusSnsPostScRsp 5809;
    // HeliobusUnlockSkillScNotify 5833;
    // HeliobusSnsLikeScRsp 5843;
    // HeliobusActivityDataScRsp 5848;
    // HeliobusSnsUpdateScNotify 5845;
    // ComposeItemScRsp 506;
    // ComposeLimitNumUpdateNotify 518;
    // LockEquipmentScRsp 509;
    // SellItemCsReq 537;
    // SellItemScRsp 539;
    // RelicRecommendCsReq 567;
    // LockRelicScRsp 542;
    // RankUpEquipmentScRsp 529;
    // ExpUpRelicCsReq 533;
    // GetBagScRsp 548;
    // ExchangeHcoinCsReq 530;
    // ComposeLimitNumCompleteNotify 561;
    // SetTurnFoodSwitchCsReq 525;
    // UseItemScRsp 543;
    // GetMarkItemListCsReq 524;
    // ComposeItemCsReq 596;
    // DestroyItemCsReq 591;
    // ExchangeHcoinScRsp 585;
    // CancelMarkItemNotify 554;
    // UseItemCsReq 519;
    // LockRelicCsReq 595;
    // SetTurnFoodSwitchScRsp 600;
    // ComposeSelectedRelicCsReq 556;
    // ExpUpRelicScRsp 559;
    // GetRecyleTimeCsReq 541;
    // DiscardRelicScRsp 590;
    // PromoteEquipmentScRsp 588;
    // GetMarkItemListScRsp 582;
    // MarkItemCsReq 511;
    // RechargeSuccNotify 516;
    // ComposeSelectedRelicScRsp 563;
    // MarkItemScRsp 508;
    // SyncTurnFoodNotify 579;
    // PromoteEquipmentCsReq 562;
    // ExpUpEquipmentCsReq 545;
    // LockEquipmentCsReq 502;
    // GetRecyleTimeScRsp 528;
    // AddEquipmentScNotify 501;
    // DestroyItemScRsp 597;
    // GeneralVirtualItemDataNotify 565;
    // ExpUpEquipmentScRsp 568;
    // GetBagCsReq 534;
    // RankUpEquipmentCsReq 586;
    // DiscardRelicCsReq 589;
    // RelicRecommendScRsp 592;
    // TrialBackGroundMusicScRsp 3143;
    // PlayBackGroundMusicCsReq 3162;
    // UnlockBackGroundMusicScRsp 3109;
    // GetJukeboxDataCsReq 3134;
    // GetJukeboxDataScRsp 3148;
    // UnlockBackGroundMusicCsReq 3102;
    // PlayBackGroundMusicScRsp 3188;
    // TrialBackGroundMusicCsReq 3119;
    // GetCurLineupDataScRsp 788;
    GetAllLineupDataCsReq 739;
    // ExtraLineupDestroyNotify 763;
    // GetLineupAvatarDataCsReq 768;
    // SwitchLineupIndexScRsp 795;
    // JoinLineupCsReq 702;
    // GetAllLineupDataScRsp 716;
    // SetLineupNameCsReq 742;
    // ChangeLineupLeaderScRsp 733;
    ChangeLineupLeaderCsReq 706;
    // ReplaceLineupCsReq 785;
    // SwapLineupCsReq 786;
    // QuitLineupScRsp 743;
    // GetLineupAvatarDataScRsp 796;
    // ReplaceLineupScRsp 756;
    // GetStageLineupCsReq 734;
    // QuitLineupCsReq 719;
    // SetLineupNameScRsp 737;
    // SwitchLineupIndexCsReq 759;
    GetCurLineupDataCsReq 762;
    // VirtualLineupDestroyNotify 730;
    // SyncLineupNotify 745;
    // GetStageLineupScRsp 748;
    // SwapLineupScRsp 729;
    // JoinLineupScRsp 709;
    // MarkReadMailScRsp 888;
    // TakeMailAttachmentScRsp 843;
    // DelMailScRsp 809;
    // TakeMailAttachmentCsReq 819;
    // NewMailScNotify 886;
    // MarkReadMailCsReq 862;
    // GetMailCsReq 834;
    // GetMailScRsp 848;
    // DelMailCsReq 802;
    // GetMapRotationDataCsReq 6845;
    // InteractChargerScRsp 6888;
    // ResetMapRotationRegionScRsp 6806;
    // UpdateMapRotationDataScNotify 6895;
    // RemoveRotaterScRsp 6837;
    // GetMapRotationDataScRsp 6868;
    // LeaveMapRotationRegionCsReq 6886;
    // RotateMapScRsp 6843;
    // ResetMapRotationRegionCsReq 6896;
    // RotateMapCsReq 6819;
    // UpdateEnergyScNotify 6859;
    // RemoveRotaterCsReq 6842;
    // EnterMapRotationRegionCsReq 6834;
    // LeaveMapRotationRegionScNotify 6833;
    // UpdateRotaterScNotify 6839;
    // InteractChargerCsReq 6862;
    // LeaveMapRotationRegionScRsp 6829;
    // EnterMapRotationRegionScRsp 6848;
    // DeployRotaterCsReq 6802;
    // DeployRotaterScRsp 6809;
    // FinishSectionIdScRsp 2743;
    // FinishPerformSectionIdCsReq 2786;
    // GetNpcMessageGroupCsReq 2734;
    // FinishPerformSectionIdScRsp 2729;
    // GetNpcStatusCsReq 2762;
    // FinishItemIdCsReq 2702;
    // GetNpcStatusScRsp 2788;
    // FinishSectionIdCsReq 2719;
    // FinishItemIdScRsp 2709;
    // GetNpcMessageGroupScRsp 2748;
    // CancelCacheNotifyCsReq 4186;
    // GetMovieRacingDataScRsp 4130;
    // TakePictureScRsp 4109;
    // TriggerVoiceScRsp 4106;
    // UpdateMovieRacingDataScRsp 4156;
    // TriggerVoiceCsReq 4196;
    // SecurityReportCsReq 4145;
    // SubmitOrigamiItemCsReq 4133;
    // TakePictureCsReq 4102;
    // UpdateMovieRacingDataCsReq 4185;
    // GetMovieRacingDataCsReq 4116;
    // GetGunPlayDataCsReq 4163;
    // GetShareDataScRsp 4188;
    // ShareScRsp 4148;
    // UpdateGunPlayDataCsReq 4141;
    // ShareCsReq 4134;
    // GetShareDataCsReq 4162;
    // CancelCacheNotifyScRsp 4129;
    // UpdateGunPlayDataScRsp 4128;
    // SecurityReportScRsp 4168;
    // GetGunPlayDataScRsp 4101;
    // SubmitOrigamiItemScRsp 4159;
    // InterruptMissionEventScRsp 1285;
    // DailyTaskDataScNotify 1243;
    // AcceptMissionEventScRsp 1237;
    // SyncTaskCsReq 1209;
    // AcceptMainMissionCsReq 1291;
    // MissionRewardScNotify 1202;
    // TeleportToMissionResetPointScRsp 1228;
    // MissionAcceptScNotify 1211;
    // SyncTaskScRsp 1219;
    GetMissionStatusCsReq 1239;
    // FinishCosumeItemMissionScRsp 1206;
    // MissionEventRewardScNotify 1295;
    // StartFinishMainMissionScNotify 1218;
    // GetMissionEventDataScRsp 1259;
    // SubMissionRewardScNotify 1201;
    // FinishTalkMissionCsReq 1262;
    // UpdateTrackMainMissionIdCsReq 1254;
    // TeleportToMissionResetPointCsReq 1241;
    // GetMissionEventDataCsReq 1233;
    // AcceptMissionEventCsReq 1242;
    // MissionGroupWarnScNotify 1268;
    // GetMissionDataCsReq 1234;
    // UpdateTrackMainMissionIdScRsp 1279;
    // StartFinishSubMissionScNotify 1261;
    // SetMissionEventProgressScRsp 1263;
    // GetMissionDataScRsp 1248;
    // SetMissionEventProgressCsReq 1256;
    // GetMainMissionCustomValueScRsp 1282;
    // InterruptMissionEventCsReq 1230;
    // GetMissionStatusScRsp 1216;
    // AcceptMainMissionScRsp 1297;
    // FinishTalkMissionScRsp 1288;
    // FinishCosumeItemMissionCsReq 1296;
    // GetMainMissionCustomValueCsReq 1224;
    // MonopolyGetRegionProgressCsReq 7040;
    // MonopolyGetDailyInitItemCsReq 7031;
    // DailyFirstEnterMonopolyActivityScRsp 7006;
    // DeleteSocialEventServerCacheScRsp 7015;
    // MonopolySelectOptionScRsp 7045;
    // MonopolySelectOptionCsReq 7029;
    // MonopolyAcceptQuizScRsp 7079;
    // MonopolyReRollRandomScRsp 7042;
    // GetMbtiReportCsReq 7071;
    // MonopolyClickMbtiReportScRsp 7074;
    // DailyFirstEnterMonopolyActivityCsReq 7096;
    // MonopolyRollRandomScRsp 7059;
    // MonopolyClickCellCsReq 7047;
    // MonopolyDailySettleScNotify 7035;
    // MonopolyGiveUpCurContentCsReq 7063;
    // MonopolyMoveCsReq 7043;
    // GetMonopolyInfoScRsp 7048;
    // MonopolyRollDiceScRsp 7019;
    // MonopolyTakeRaffleTicketRewardScRsp 7070;
    // MonopolyGuessChooseCsReq 7100;
    // MonopolyScrachRaffleTicketScRsp 7014;
    // MonopolyClickMbtiReportCsReq 7038;
    // MonopolyEventSelectFriendScRsp 7094;
    // MonopolyConfirmRandomScRsp 7039;
    // MonopolyContentUpdateScNotify 7061;
    // MonopolyGameBingoFlipCardScRsp 7008;
    // MonopolyGetRafflePoolInfoScRsp 7020;
    // MonopolyCheatDiceScRsp 7028;
    // MonopolyGameGachaScRsp 7082;
    // MonopolyGuessBuyInformationScRsp 7090;
    // MonopolyGameCreateScNotify 7025;
    // MonopolyTakePhaseRewardCsReq 7058;
    // GetMbtiReportScRsp 7049;
    // GetMonopolyFriendRankingListCsReq 7044;
    // MonopolyMoveScRsp 7086;
    // MonopolyConfirmRandomCsReq 7037;
    // GetSocialEventServerCacheScRsp 7022;
    // MonopolyGiveUpCurContentScRsp 7001;
    // MonopolyRollDiceCsReq 7009;
    // MonopolyBuyGoodsScRsp 7030;
    // MonopolyCheatDiceCsReq 7041;
    // MonopolyEventSelectFriendCsReq 7003;
    // MonopolyGetRafflePoolInfoCsReq 7007;
    // GetMonopolyDailyReportScRsp 7021;
    // MonopolyScrachRaffleTicketCsReq 7099;
    // MonopolyReRollRandomCsReq 7095;
    // MonopolyGuessBuyInformationCsReq 7089;
    // MonopolyGameRaiseRatioScRsp 7091;
    // GetMonopolyInfoCsReq 7034;
    // GetMonopolyMbtiReportRewardCsReq 7052;
    // MonopolyBuyGoodsCsReq 7016;
    // MonopolyLikeScRsp 7093;
    // MonopolyConditionUpdateScNotify 7032;
    // MonopolyLikeCsReq 7075;
    // MonopolyTakePhaseRewardScRsp 7064;
    // MonopolyGetDailyInitItemScRsp 7050;
    // MonopolyLikeScNotify 7098;
    // MonopolyAcceptQuizCsReq 7054;
    // GetSocialEventServerCacheCsReq 7005;
    // MonopolyClickCellScRsp 7027;
    // MonopolyUpgradeAssetScRsp 7056;
    // MonopolyTakeRaffleTicketRewardCsReq 7084;
    // MonopolyCellUpdateNotify 7088;
    // GetMonopolyFriendRankingListScRsp 7004;
    // MonopolySocialEventEffectScNotify 7046;
    // MonopolyUpgradeAssetCsReq 7085;
    // MonopolyGameRaiseRatioCsReq 7018;
    // MonopolyGuessChooseScRsp 7065;
    // MonopolyEventLoadUpdateScNotify 7078;
    // MonopolyRollRandomCsReq 7033;
    // MonopolyGuessDrawScNotify 7067;
    // MonopolyGetRaffleTicketScRsp 7010;
    // MonopolyGetRegionProgressScRsp 7069;
    // MonopolyGetRaffleTicketCsReq 7013;
    // MonopolyGameSettleScNotify 7097;
    // MonopolyActionResultScNotify 7062;
    // MonopolySttUpdateScNotify 7077;
    // MonopolyQuizDurationChangeScNotify 7092;
    // GetMonopolyMbtiReportRewardScRsp 7081;
    // DeleteSocialEventServerCacheCsReq 7012;
    // MonopolyGameBingoFlipCardCsReq 7011;
    // GetMonopolyDailyReportCsReq 7076;
    // MonopolyGameGachaCsReq 7024;
    // GetMultipleDropInfoCsReq 4634;
    // GetPlayerReturnMultiDropInfoScRsp 4602;
    // MultipleDropInfoNotify 4609;
    // GetPlayerReturnMultiDropInfoCsReq 4688;
    // MultipleDropInfoScNotify 4662;
    // GetMultipleDropInfoScRsp 4648;
    // SetStuffToAreaScRsp 4309;
    // MuseumTargetStartNotify 4363;
    // SetStuffToAreaCsReq 4302;
    // FinishCurTurnCsReq 4345;
    // GetStuffScNotify 4386;
    // MuseumInfoChangedScNotify 4395;
    // GetExhibitScNotify 4329;
    // UpgradeAreaStatCsReq 4333;
    // UpgradeAreaScRsp 4306;
    // RemoveStuffFromAreaScRsp 4343;
    // MuseumTakeCollectRewardScRsp 4361;
    // MuseumDispatchFinishedScNotify 4356;
    // MuseumFundsChangedScNotify 4342;
    // MuseumRandomEventQueryCsReq 4339;
    // MuseumTargetMissionFinishNotify 4301;
    // RemoveStuffFromAreaCsReq 4319;
    // MuseumRandomEventQueryScRsp 4316;
    // UpgradeAreaStatScRsp 4359;
    // BuyNpcStuffCsReq 4362;
    // BuyNpcStuffScRsp 4388;
    // GetMuseumInfoScRsp 4348;
    // MuseumTakeCollectRewardCsReq 4328;
    // GetMuseumInfoCsReq 4334;
    // MuseumRandomEventSelectCsReq 4330;
    // UpgradeAreaCsReq 4396;
    // MuseumRandomEventStartScNotify 4337;
    // MuseumTargetRewardNotify 4341;
    // MuseumRandomEventSelectScRsp 4385;
    // FinishCurTurnScRsp 4368;
    // SubmitOfferingItemScRsp 6937;
    // TakeOfferingRewardCsReq 6940;
    // TakeOfferingRewardScRsp 6939;
    // GetOfferingInfoScRsp 6938;
    // GetOfferingInfoCsReq 6921;
    // SubmitOfferingItemCsReq 6933;
    // SyncAcceptedPamMissionNotify 4062;
    // AcceptedPamMissionExpireCsReq 4034;
    // AcceptedPamMissionExpireScRsp 4048;
    // SelectPhoneThemeScRsp 5119;
    // GetPhoneDataScRsp 5148;
    // SelectChatBubbleScRsp 5188;
    // SelectPhoneThemeCsReq 5109;
    // UnlockChatBubbleScNotify 5102;
    // SelectChatBubbleCsReq 5162;
    // GetPhoneDataCsReq 5134;
    // UnlockPhoneThemeScNotify 5143;
    // PlayerLogoutCsReq 62;
    PlayerGetTokenCsReq 2;
    // ClientDownloadDataScNotify 92;
    // SetGameplayBirthdayCsReq 35;
    // AceAntiCheaterCsReq 4;
    // HeroBasicTypeChangedNotify 89;
    // QueryProductInfoScRsp 67;
    // RetcodeNotify 98;
    // PlayerLogoutScRsp 88;
    // AntiAddictScNotify 37;
    // FeatureSwitchClosedScNotify 94;
    // SetNicknameScRsp 16;
    // StaminaInfoScNotify 69;
    // UpdatePlayerSettingScRsp 20;
    // PlayerGetTokenScRsp 9;
    // ReserveStaminaExchangeScRsp 40;
    // ReserveStaminaExchangeCsReq 14;
    // PlayerLoginScRsp 48;
    // GetLevelRewardTakenListCsReq 30;
    // GetSecretKeyInfoScRsp 12;
    PlayerLoginCsReq 34;
    // GmTalkCsReq 29;
    // QueryProductInfoCsReq 90;
    // SetRedPointStatusScNotify 84;
    // GetLevelRewardCsReq 56;
    // GetHeroBasicTypeInfoScRsp 82;
    // GetLevelRewardScRsp 63;
    PlayerHeartBeatCsReq 71;
    // GetSecretKeyInfoCsReq 22;
    // GetBasicInfoScRsp 73;
    // GmTalkScNotify 43;
    // SetPlayerInfoCsReq 100;
    // MonthCardRewardNotify 93;
    // GetVideoVersionKeyCsReq 13;
    // ServerAnnounceNotify 18;
    // UpdateFeatureSwitchScNotify 55;
    // SetHeroBasicTypeScRsp 97;
    // SetLanguageScRsp 61;
    // PlayerLoginFinishCsReq 15;
    // ExchangeStaminaCsReq 6;
    // DailyRefreshNotify 51;
    // PlayerLoginFinishScRsp 72;
    GetHeroBasicTypeInfoCsReq 24;
    // GetVideoVersionKeyScRsp 10;
    // ClientObjDownloadDataScNotify 58;
    // GmTalkScRsp 45;
    // UpdatePlayerSettingCsReq 7;
    // ClientObjUploadCsReq 64;
    // ClientObjUploadScRsp 78;
    // GateServerScNotify 3;
    // SetGenderCsReq 79;
    // ExchangeStaminaScRsp 33;
    // GetAuthkeyCsReq 59;
    // SetGenderScRsp 25;
    // GetLevelRewardTakenListScRsp 85;
    // SetLanguageCsReq 28;
    GetBasicInfoCsReq 66;
    // AceAntiCheaterScRsp 75;
    // PlayerKickOutScNotify 86;
    // SetPlayerInfoScRsp 65;
    // RegionStopScNotify 42;
    // SetHeroBasicTypeCsReq 91;
    // SetGameplayBirthdayScRsp 44;
    // PlayerHeartBeatScRsp 49;
    // GetAuthkeyScRsp 95;
    // SetNicknameCsReq 39;
    // GetPlayerBoardDataCsReq 2834;
    // SetIsDisplayAvatarInfoCsReq 2819;
    // SetDisplayAvatarScRsp 2809;
    // SetSignatureCsReq 2829;
    // SetHeadIconScRsp 2888;
    // SetDisplayAvatarCsReq 2802;
    // SetAssistAvatarScRsp 2896;
    // SetIsDisplayAvatarInfoScRsp 2843;
    // SetHeadIconCsReq 2862;
    // SetAssistAvatarCsReq 2868;
    // UnlockHeadIconScNotify 2886;
    // SetSignatureScRsp 2845;
    // GetPlayerBoardDataScRsp 2848;
    // PlayerReturnInfoQueryCsReq 4586;
    // PlayerReturnTakeRewardCsReq 4519;
    // PlayerReturnSignCsReq 4548;
    // PlayerReturnInfoQueryScRsp 4529;
    // PlayerReturnTakeRewardScRsp 4543;
    // PlayerReturnTakePointRewardCsReq 4502;
    // PlayerReturnTakePointRewardScRsp 4509;
    // PlayerReturnStartScNotify 4534;
    // PlayerReturnPointChangeScNotify 4588;
    // PlayerReturnForceFinishScNotify 4545;
    // PlayerReturnSignScRsp 4562;
    // FinishPlotScRsp 1148;
    // FinishPlotCsReq 1134;
    // GetPunkLordMonsterDataCsReq 3234;
    // StartPunkLordRaidScRsp 3288;
    // SharePunkLordMonsterScRsp 3209;
    // StartPunkLordRaidCsReq 3262;
    // SummonPunkLordMonsterScRsp 3243;
    // PunkLordMonsterInfoScNotify 3233;
    // GetPunkLordBattleRecordCsReq 3297;
    // TakeKilledPunkLordMonsterScoreCsReq 3261;
    // GetKilledPunkLordMonsterDataCsReq 3256;
    // SummonPunkLordMonsterCsReq 3219;
    // PunkLordMonsterKilledNotify 3228;
    // TakePunkLordPointRewardCsReq 3296;
    // PunkLordRaidTimeOutScNotify 3237;
    // GetKilledPunkLordMonsterDataScRsp 3263;
    // PunkLordDataChangeNotify 3291;
    // GetPunkLordDataCsReq 3259;
    // PunkLordBattleResultScNotify 3285;
    // GetPunkLordBattleRecordScRsp 3224;
    // GetPunkLordMonsterDataScRsp 3248;
    // TakeKilledPunkLordMonsterScoreScRsp 3218;
    // TakePunkLordPointRewardScRsp 3206;
    // SharePunkLordMonsterCsReq 3202;
    // GetPunkLordDataScRsp 3295;
    // BatchGetQuestDataCsReq 933;
    // TakeQuestOptionalRewardCsReq 968;
    // QuestRecordScNotify 986;
    // FinishQuestScRsp 945;
    // GetQuestRecordCsReq 919;
    // BatchGetQuestDataScRsp 959;
    // FinishQuestCsReq 929;
    // TakeQuestRewardScRsp 988;
    // GetQuestDataCsReq 934;
    // TakeQuestRewardCsReq 962;
    // TakeQuestOptionalRewardScRsp 996;
    // GetQuestRecordScRsp 943;
    // GetQuestDataScRsp 948;
    // GetSaveRaidScRsp 2259;
    // StartRaidCsReq 2234;
    // SetClientRaidTargetCountCsReq 2296;
    // GetRaidInfoCsReq 2245;
    // StartRaidScRsp 2248;
    // GetChallengeRaidInfoScRsp 2219;
    // RaidInfoNotify 2202;
    // GetRaidInfoScRsp 2268;
    // LeaveRaidScRsp 2288;
    // LeaveRaidCsReq 2262;
    // GetAllSaveRaidScRsp 2242;
    // GetSaveRaidCsReq 2233;
    // TakeChallengeRaidRewardCsReq 2243;
    // TakeChallengeRaidRewardScRsp 2286;
    // ChallengeRaidNotify 2229;
    // DelSaveRaidScNotify 2237;
    // RaidKickByServerScNotify 2239;
    // SetClientRaidTargetCountScRsp 2206;
    // GetChallengeRaidInfoCsReq 2209;
    // GetAllSaveRaidCsReq 2295;
    // RaidCollectionDataCsReq 6941;
    // RaidCollectionDataScNotify 6953;
    // RaidCollectionDataScRsp 6958;
    // GetAllRedDotDataScRsp 5948;
    // UpdateRedDotDataCsReq 5962;
    // UpdateRedDotDataScRsp 5988;
    // GetSingleRedDotParamGroupCsReq 5902;
    // GetSingleRedDotParamGroupScRsp 5909;
    // GetAllRedDotDataCsReq 5934;
    // GetReplayTokenScRsp 3548;
    // GetReplayTokenCsReq 3534;
    // GetPlayerReplayInfoCsReq 3562;
    // GetPlayerReplayInfoScRsp 3588;
    // GetRndOptionCsReq 3434;
    // DailyFirstMeetPamScRsp 3488;
    // DailyFirstMeetPamCsReq 3462;
    // GetRndOptionScRsp 3448;
    // SyncRogueVirtualItemInfoScNotify 1836;
    // GetRogueTalentInfoCsReq 1832;
    // EnterRogueMapRoomCsReq 1825;
    // SyncRogueAeonScNotify 1810;
    // SyncRogueRewardInfoScNotify 1883;
    // QuitRogueCsReq 1897;
    // GetRogueBuffEnhanceInfoScRsp 1856;
    // EnhanceRogueBuffScRsp 1801;
    // ExchangeRogueRewardKeyCsReq 1871;
    // SyncRogueAeonLevelUpRewardScNotify 1820;
    // FinishRogueDialogueGroupCsReq 1804;
    // EnableRogueTalentCsReq 1874;
    // ReviveRogueAvatarCsReq 1837;
    // FinishAeonDialogueGroupCsReq 1831;
    // GetRogueTalentInfoScRsp 1838;
    // EnterRogueMapRoomScRsp 1900;
    // GetRogueInitialScoreCsReq 1865;
    // EnableRogueTalentScRsp 1817;
    // FinishRogueDialogueGroupScRsp 1875;
    // GetRogueDialogueEventDataCsReq 1835;
    // SyncRogueReviveInfoScNotify 1891;
    // PickRogueAvatarScRsp 1895;
    // SyncRogueStatusScNotify 1860;
    // GetRogueScoreRewardInfoScRsp 1864;
    // OpenRogueChestScRsp 1898;
    // GetRogueInfoCsReq 1834;
    // EnterRogueScRsp 1809;
    // GetRogueDialogueEventDataScRsp 1844;
    // EnterRogueCsReq 1802;
    // SelectRogueDialogueEventCsReq 1815;
    // StartRogueScRsp 1888;
    // GetRogueAeonInfoScRsp 1827;
    // GetRogueInitialScoreScRsp 1889;
    // OpenRogueChestCsReq 1893;
    // GetRogueAeonInfoCsReq 1847;
    // SyncRogueDialogueEventDataScNotify 1813;
    // EnhanceRogueBuffCsReq 1863;
    // ReviveRogueAvatarScRsp 1839;
    // StartRogueCsReq 1862;
    // LeaveRogueScRsp 1843;
    // LeaveRogueCsReq 1819;
    // GetRogueInfoScRsp 1848;
    // SelectRogueDialogueEventScRsp 1872;
    // SyncRogueMapRoomScNotify 1890;
    // SyncRogueExploreWinScNotify 1811;
    // TakeRogueAeonLevelRewardScRsp 1814;
    // GetRogueScoreRewardInfoCsReq 1858;
    // TakeRogueAeonLevelRewardCsReq 1899;
    // SyncRogueSeasonFinishScNotify 1808;
    // TakeRogueScoreRewardCsReq 1816;
    // SyncRogueGetItemScNotify 1870;
    // ExchangeRogueRewardKeyScRsp 1849;
    // FinishAeonDialogueGroupScRsp 1850;
    // SyncRoguePickAvatarInfoScNotify 1880;
    // GetRogueBuffEnhanceInfoCsReq 1885;
    // PickRogueAvatarCsReq 1859;
    // SyncRogueFinishScNotify 1833;
    // QuitRogueScRsp 1824;
    // SyncRogueAreaUnlockScNotify 1884;
    // TakeRogueScoreRewardScRsp 1830;
    // SyncRogueCommonActionResultScNotify 5667;
    // GetEnhanceCommonRogueBuffInfoCsReq 5616;
    // GetRogueAdventureRoomInfoCsReq 5606;
    // TakeRogueMiracleHandbookRewardCsReq 5700;
    // GetEnhanceCommonRogueBuffInfoScRsp 5630;
    // TakeRogueEventHandbookRewardScRsp 5690;
    // CommonRogueUpdateScNotify 5671;
    // RogueNpcDisappearScRsp 5696;
    // CommonRogueQueryCsReq 5693;
    // BuyRogueShopBuffScRsp 5645;
    // SyncRogueAdventureRoomInfoScNotify 5634;
    // GetRogueShopMiracleInfoCsReq 5688;
    // PrepareRogueAdventureRoomCsReq 5648;
    // SyncRogueCommonVirtualItemInfoScNotify 5673;
    // UpdateRogueAdventureRoomScoreScRsp 5666;
    // BuyRogueShopBuffCsReq 5629;
    // GetRogueShopBuffInfoCsReq 5609;
    // BuyRogueShopMiracleCsReq 5643;
    // StopRogueAdventureRoomScRsp 5601;
    // TakeRogueMiracleHandbookRewardScRsp 5665;
    // HandleRogueCommonPendingActionCsReq 5604;
    // EnhanceCommonRogueBuffScRsp 5656;
    // RogueNpcDisappearCsReq 5668;
    // TakeRogueEventHandbookRewardCsReq 5689;
    // BuyRogueShopMiracleScRsp 5686;
    // GetRogueAdventureRoomInfoScRsp 5633;
    // GetRogueShopMiracleInfoScRsp 5602;
    // SyncRogueHandbookDataUpdateScNotify 5625;
    // StopRogueAdventureRoomCsReq 5663;
    // ExchangeRogueBuffWithMiracleScRsp 5639;
    // EnhanceCommonRogueBuffCsReq 5685;
    // HandleRogueCommonPendingActionScRsp 5675;
    // GetRogueHandbookDataScRsp 5679;
    // GetRogueShopBuffInfoScRsp 5619;
    // PrepareRogueAdventureRoomScRsp 5662;
    // GetRogueHandbookDataCsReq 5654;
    // SyncRogueCommonPendingActionScNotify 5692;
    // CommonRogueQueryScRsp 5698;
    // ExchangeRogueBuffWithMiracleCsReq 5637;
    // UpdateRogueAdventureRoomScoreCsReq 5655;
    // RogueEndlessActivityBattleEndScNotify 6002;
    // GetRogueEndlessActivityDataCsReq 6034;
    // TakeRogueEndlessActivityPointRewardCsReq 6009;
    // EnterRogueEndlessActivityStageScRsp 6088;
    // TakeRogueEndlessActivityAllBonusRewardScRsp 6086;
    // TakeRogueEndlessActivityPointRewardScRsp 6019;
    // TakeRogueEndlessActivityAllBonusRewardCsReq 6043;
    // GetRogueEndlessActivityDataScRsp 6048;
    // EnterRogueEndlessActivityStageCsReq 6062;
    // RogueModifierStageStartNotify 5329;
    // RogueModifierSelectCellCsReq 5388;
    // RogueModifierSelectCellScRsp 5302;
    // RogueModifierUpdateNotify 5343;
    // RogueModifierAddNotify 5362;
    // RogueModifierDelNotify 5386;
    // DoGachaInRollShopCsReq 6913;
    // TakeRollShopRewardScRsp 6919;
    // DoGachaInRollShopScRsp 6917;
    // GetRollShopInfoCsReq 6901;
    // GetRollShopInfoScRsp 6918;
    // TakeRollShopRewardCsReq 6920;
    // EnteredSceneChangeScNotify 1450;
    // GetSceneMapInfoScRsp 1499;
    // SpringRecoverSingleAvatarScRsp 1498;
    // SetSpringRecoverConfigCsReq 1451;
    // SceneEntityMoveScNotify 1445;
    // SceneUpdatePositionVersionNotify 1468;
    // ReEnterLastElementStageCsReq 1405;
    // GroupStateChangeScNotify 1447;
    // SetClientPausedCsReq 1500;
    // EnterSceneByServerScNotify 1410;
    // SceneCastSkillMpUpdateScNotify 1459;
    // GetSpringRecoverDataScRsp 1473;
    // RecoverAllLineupScRsp 1482;
    // GameplayCounterCountDownCsReq 1458;
    // InteractPropCsReq 1462;
    // DeleteSummonUnitScRsp 1487;
    // ScenePlaneEventScNotify 1484;
    // LastSpringRefreshTimeNotify 1439;
    // UpdateFloorSavedValueNotify 1420;
    // GetEnteredSceneCsReq 1427;
    // StartTimedCocoonStageCsReq 1426;
    // RecoverAllLineupCsReq 1424;
    // StartTimedFarmElementCsReq 1436;
    // SceneGroupRefreshScNotify 1477;
    // SpringRefreshScRsp 1437;
    // UnlockedAreaMapScNotify 1457;
    // StartTimedCocoonStageScRsp 1423;
    // ActivateFarmElementScRsp 1455;
    // GetUnlockTeleportCsReq 1440;
    // DeactivateFarmElementCsReq 1490;
    // RefreshTriggerByClientCsReq 1432;
    // SetGroupCustomSaveDataCsReq 1449;
    // SavePointsInfoNotify 1411;
    // GameplayCounterRecoverScRsp 1481;
    // GetEnteredSceneScRsp 1431;
    // UpdateMechanismBarScNotify 1471;
    // SetSpringRecoverConfigScRsp 1435;
    // DeleteSummonUnitCsReq 1417;
    // SetGroupCustomSaveDataScRsp 1403;
    // SceneCastSkillCostMpCsReq 1406;
    // SyncServerSceneChangeNotify 1414;
    // SceneEnterStageCsReq 1485;
    // ActivateFarmElementCsReq 1492;
    // StartTimedFarmElementScRsp 1460;
    GetCurSceneInfoCsReq 1419;
    // SpringRecoverSingleAvatarCsReq 1493;
    // SceneEntityTeleportCsReq 1412;
    // ReturnLastTownScRsp 1430;
    // EnterSectionCsReq 1441;
    // SceneCastSkillScRsp 1409;
    // InteractPropScRsp 1488;
    // HealPoolInfoNotify 1475;
    // GetCurSceneInfoScRsp 1443;
    // EnterSceneScRsp 1413;
    // ReEnterLastElementStageScRsp 1422;
    // GameplayCounterCountDownScRsp 1464;
    // ReturnLastTownCsReq 1416;
    // RefreshTriggerByClientScNotify 1474;
    // SyncEntityBuffChangeListScNotify 1496;
    // GroupStateChangeScRsp 1421;
    // SpringRecoverCsReq 1444;
    // SetCurInteractEntityScRsp 1497;
    // SceneCastSkillCsReq 1402;
    StartCocoonStageCsReq 1408;
    // GetSceneMapInfoCsReq 1470;
    // SceneEntityMoveScRsp 1448;
    // DeactivateFarmElementScRsp 1467;
    // SetCurInteractEntityCsReq 1491;
    // EntityBindPropScRsp 1425;
    // GameplayCounterRecoverCsReq 1452;
    // SpringRefreshCsReq 1442;
    // SpringRecoverScRsp 1404;
    // EnterSectionScRsp 1428;
    // StartCocoonStageScRsp 1454;
    // SceneCastSkillCostMpScRsp 1433;
    // GroupStateChangeCsReq 1476;
    // SceneEntityMoveCsReq 1434;
    // GetUnlockTeleportScRsp 1469;
    // GameplayCounterUpdateScNotify 1478;
    // SceneEnterStageScRsp 1456;
    // EntityBindPropCsReq 1479;
    // UnlockTeleportNotify 1483;
    // RefreshTriggerByClientScRsp 1438;
    // GetSpringRecoverDataCsReq 1466;
    // SceneEntityTeleportScRsp 1415;
    // SetClientPausedScRsp 1465;
    // EnterSceneCsReq 1472;
    // GetAllServerPrefsDataScRsp 6148;
    // GetServerPrefsDataCsReq 6162;
    // UpdateServerPrefsDataScRsp 6109;
    // GetAllServerPrefsDataCsReq 6134;
    // GetServerPrefsDataScRsp 6188;
    // UpdateServerPrefsDataCsReq 6102;
    // GetShopListScRsp 1548;
    // GetShopListCsReq 1534;
    // TakeCityShopRewardCsReq 1502;
    // BuyGoodsScRsp 1588;
    // BuyGoodsCsReq 1562;
    // TakeCityShopRewardScRsp 1509;
    // CityShopInfoScNotify 1519;
    // SpaceZooOpCatteryCsReq 6719;
    // SpaceZooTakeScRsp 6733;
    // SpaceZooBornCsReq 6762;
    // SpaceZooOpCatteryScRsp 6743;
    // SpaceZooExchangeItemCsReq 6768;
    // SpaceZooDataScRsp 6748;
    // SpaceZooBornScRsp 6788;
    // SpaceZooTakeCsReq 6706;
    // SpaceZooMutateScRsp 6709;
    // SpaceZooCatUpdateNotify 6745;
    // SpaceZooDeleteCatCsReq 6786;
    // SpaceZooDeleteCatScRsp 6729;
    // SpaceZooMutateCsReq 6702;
    // SpaceZooDataCsReq 6734;
    // SpaceZooExchangeItemScRsp 6796;
    // ChangeStoryLineCsReq 6288;
    // GetStoryLineInfoScRsp 6248;
    // StoryLineInfoScNotify 6262;
    // GetStoryLineInfoCsReq 6234;
    // ChangeStoryLineScRsp 6202;
    // ChangeStoryLineFinishScNotify 6209;
    // StoryLineTrialAvatarChangeScNotify 6219;
    // EnterStrongChallengeActivityStageScRsp 6688;
    // EnterStrongChallengeActivityStageCsReq 6662;
    // GetStrongChallengeActivityDataScRsp 6648;
    // GetStrongChallengeActivityDataCsReq 6634;
    // StrongChallengeActivityBattleEndScNotify 6602;
    // PlayerSyncScNotify 634;
    // GetNpcTakenRewardCsReq 2134;
    // GetFirstTalkNpcCsReq 2102;
    // FinishFirstTalkByPerformanceNpcScRsp 2106;
    // SelectInclinationTextScRsp 2129;
    // GetNpcTakenRewardScRsp 2148;
    // TakeTalkRewardScRsp 2188;
    // GetFirstTalkByPerformanceNpcScRsp 2168;
    // SelectInclinationTextCsReq 2186;
    // FinishFirstTalkNpcScRsp 2143;
    // FinishFirstTalkByPerformanceNpcCsReq 2196;
    // GetFirstTalkByPerformanceNpcCsReq 2145;
    // FinishFirstTalkNpcCsReq 2119;
    // TakeTalkRewardCsReq 2162;
    // GetFirstTalkNpcScRsp 2109;
    // EnterTelevisionActivityStageScRsp 6980;
    // EnterTelevisionActivityStageCsReq 6977;
    // TelevisionActivityDataChangeScNotify 6973;
    // GetTelevisionActivityDataCsReq 6961;
    // GetTelevisionActivityDataScRsp 6978;
    // TelevisionActivityBattleEndScNotify 6979;
    // TextJoinSaveCsReq 3834;
    // TextJoinBatchSaveCsReq 3802;
    // TextJoinBatchSaveScRsp 3809;
    // TextJoinQueryScRsp 3888;
    // TextJoinQueryCsReq 3862;
    // TextJoinSaveScRsp 3848;
    // TakeTrainVisitorUntakenBehaviorRewardScRsp 3729;
    // GetTrainVisitorRegisterCsReq 3719;
    // GetTrainVisitorBehaviorCsReq 3762;
    // TrainVisitorBehaviorFinishCsReq 3734;
    // GetTrainVisitorBehaviorScRsp 3788;
    // TakeTrainVisitorUntakenBehaviorRewardCsReq 3786;
    // TrainVisitorRewardSendNotify 3709;
    // ShowNewSupplementVisitorCsReq 3745;
    // GetTrainVisitorRegisterScRsp 3743;
    // TrainVisitorBehaviorFinishScRsp 3748;
    // ShowNewSupplementVisitorScRsp 3768;
    // TrainRefreshTimeNotify 3702;
    // TravelBrochureUpdatePasterPosCsReq 6445;
    // TravelBrochureApplyPasterListCsReq 6416;
    // TravelBrochureGetDataCsReq 6434;
    // TravelBrochureSetPageDescStatusScRsp 6442;
    // TravelBrochureSelectMessageScRsp 6409;
    // TravelBrochurePageResetScRsp 6439;
    // TravelBrochurePageUnlockScNotify 6462;
    // TravelBrochureSetCustomValueScRsp 6459;
    // TravelBrochureApplyPasterScRsp 6443;
    // TravelBrochureSetPageDescStatusCsReq 6495;
    // TravelBrochureGetPasterScNotify 6496;
    // TravelBrochureRemovePasterScRsp 6429;
    // TravelBrochureApplyPasterListScRsp 6430;
    // TravelBrochurePageResetCsReq 6437;
    // TravelBrochureUpdatePasterPosScRsp 6468;
    // TravelBrochureApplyPasterCsReq 6419;
    // TravelBrochureSetCustomValueCsReq 6433;
    // TravelBrochureRemovePasterCsReq 6486;
    // TravelBrochureSelectMessageCsReq 6402;
    // TravelBrochureGetDataScRsp 6448;
    // UseTreasureDungeonItemScRsp 4430;
    // UseTreasureDungeonItemCsReq 4416;
    // OpenTreasureDungeonGridScRsp 4459;
    // QuitTreasureDungeonCsReq 4485;
    // QuitTreasureDungeonScRsp 4456;
    // OpenTreasureDungeonGridCsReq 4433;
    // FightTreasureDungeonMonsterCsReq 4495;
    // TreasureDungeonDataScNotify 4434;
    // FightTreasureDungeonMonsterScRsp 4442;
    // InteractTreasureDungeonGridScRsp 4439;
    // TreasureDungeonFinishScNotify 4448;
    // GetTreasureDungeonActivityDataCsReq 4445;
    // EnterTreasureDungeonCsReq 4496;
    // GetTreasureDungeonActivityDataScRsp 4468;
    // InteractTreasureDungeonGridCsReq 4437;
    // EnterTreasureDungeonScRsp 4406;
    GetTutorialGuideCsReq 1662;
    // UnlockTutorialScRsp 1609;
    // UnlockTutorialCsReq 1602;
    // UnlockTutorialGuideScRsp 1643;
    UnlockTutorialGuideCsReq 1619;
    GetTutorialCsReq 1634;
    // GetTutorialGuideScRsp 1688;
    // FinishTutorialGuideCsReq 1645;
    // FinishTutorialCsReq 1686;
    // GetTutorialScRsp 1648;
    // FinishTutorialScRsp 1629;
    // FinishTutorialGuideScRsp 1668;
    // GetChapterScRsp 409;
    // TakeChapterRewardScRsp 486;
    // GetWaypointScRsp 448;
    // TakeChapterRewardCsReq 443;
    // GetChapterCsReq 402;
    // SetCurWaypointCsReq 462;
    // WaypointShowNewCsNotify 419;
    // GetWaypointCsReq 434;
    // SetCurWaypointScRsp 488;
    // GetWolfBroGameDataScRsp 6529;
    // ArchiveWolfBroGameCsReq 6562;
    // WolfBroGameUseBulletScRsp 6596;
    // WolfBroGameExplodeMonsterCsReq 6542;
    // ArchiveWolfBroGameScRsp 6588;
    // StartWolfBroGameScRsp 6548;
    // WolfBroGameActivateBulletScRsp 6595;
    // WolfBroGameExplodeMonsterScRsp 6537;
    // WolfBroGameDataChangeScNotify 6545;
    // WolfBroGamePickupBulletCsReq 6506;
    // GetWolfBroGameDataCsReq 6586;
    // RestoreWolfBroGameArchiveCsReq 6502;
    // WolfBroGameUseBulletCsReq 6568;
    // WolfBroGameActivateBulletCsReq 6559;
    // WolfBroGamePickupBulletScRsp 6533;
    // StartWolfBroGameCsReq 6534;
    // QuitWolfBroGameCsReq 6519;
    // QuitWolfBroGameScRsp 6543;
    // RestoreWolfBroGameArchiveScRsp 6509;
}
